| // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| // @dart = 2.9 |
| |
| // Test handling of malformed types in constant expressions. |
| |
| use(x) {} |
| |
| class Class<T> implements Supertype, GenericSupertype<T> { |
| const Class(); |
| const Class.named(); |
| |
| void test() { |
| use(const []); |
| use(const <Class>[]); |
| use(const <Class<int>>[]); |
| use(const <Class<Unresolved>>[]); //# 01: compile-time error |
| use(const <Unresolved>[]); //# 02: compile-time error |
| |
| use(const {}); |
| use(const <Class>{}); |
| use(const <String, Class>{}); |
| use(const <String, Class<int>>{}); |
| use(const <String, Class<Unresolved>>{}); //# 04: compile-time error |
| use(const <String, Unresolved>{}); //# 05: compile-time error |
| |
| use(const Class()); |
| use(const Class<int>()); |
| use(const Class<Unresolved>()); //# 06: compile-time error |
| use(const Class<T>()); //# 07: compile-time error |
| use(const Class<Class<T>>()); //# 08: compile-time error |
| |
| use(const Unresolved()); //# 09: compile-time error |
| use(const Unresolved<int>()); //# 10: compile-time error |
| use(const prefix.Unresolved()); //# 11: compile-time error |
| use(const prefix.Unresolved<int>()); //# 12: compile-time error |
| |
| use(const Class.named()); |
| use(const Class<int>.named()); |
| use(const Class<Unresolved>.named()); //# 13: compile-time error |
| use(const Class<T>.named()); //# 14: compile-time error |
| use(const Class<Class<T>>.named()); //# 15: compile-time error |
| |
| use(const Class.nonamed()); //# 16: compile-time error |
| use(const Class<int>.nonamed()); //# 17: compile-time error |
| use(const Class<Unresolved>.nonamed()); //# 18: compile-time error |
| use(const Class<T>.nonamed()); //# 19: compile-time error |
| use(const Class<Class<T>>.nonamed()); //# 20: compile-time error |
| |
| use(const Unresolved.named()); //# 21: compile-time error |
| use(const Unresolved<int>.named()); //# 22: compile-time error |
| } |
| } |
| |
| class Supertype { |
| const factory Supertype() = Unresolved; //# 23: compile-time error |
| const factory Supertype() = Unresolved<int>; //# 24: compile-time error |
| const factory Supertype() = Unresolved.named; //# 25: compile-time error |
| const factory Supertype() = Unresolved<int>.named; //# 26: compile-time error |
| |
| const factory Supertype() = prefix.Unresolved; //# 27: compile-time error |
| const factory Supertype() = prefix.Unresolved<int>; //# 28: compile-time error |
| const factory Supertype() = prefix.Unresolved.named; //# 29: compile-time error |
| const factory Supertype() = prefix.Unresolved<int>.named; //# 30: compile-time error |
| |
| const factory Supertype() = Class; //# 31: ok |
| const factory Supertype() = Class<int>; //# 32: ok |
| const factory Supertype() = Class<Unresolved>; //# 35: compile-time error |
| |
| const factory Supertype() = Class.named; //# 36: ok |
| const factory Supertype() = Class<int>.named; //# 37: ok |
| const factory Supertype() = Class<Unresolved>.named; //# 40: compile-time error |
| } |
| |
| class GenericSupertype<T> { |
| const factory GenericSupertype() = Class<T>; //# 33: ok |
| const factory GenericSupertype() = Class<Class<T>>; //# 34: compile-time error |
| |
| const factory GenericSupertype() = Class<T>.named; //# 38: ok |
| const factory GenericSupertype() = Class<Class<T>>.named; //# 39: compile-time error |
| |
| const factory GenericSupertype() = T; //# 41: compile-time error |
| } |
| |
| void main() { |
| new Class().test(); |
| new Supertype(); |
| new GenericSupertype(); |
| } |