| // Copyright (c) 2018, 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. |
| |
| // Tests that const/new-insertion does the right thing for default values. |
| // A default-value expression does not introduce a const context. |
| |
| main() { |
| foo(); |
| bar(); |
| baz(); |
| qux(); |
| C.foo(); |
| C.bar(); |
| new C().baz(); |
| new C().qux(); |
| new C.pos(); |
| new C.nam(); |
| const C.pos(); |
| const C.nam(); |
| } |
| |
| // Default arguments must be const to be accepted |
| foo([x // |
| = const [C()] // //# o1: ok |
| = const {42: C()} // //# o2: ok |
| = const C(C()) // //# o3: ok |
| = [42] // //# e1: compile-time error |
| = {42: 42} // //# e2: compile-time error |
| = C([]) // //# e3: compile-time error |
| ]) { |
| } |
| |
| bar({x // |
| = const [C()] // //# o4: ok |
| = const {42: C()} // //# o5: ok |
| = const C(C()) // //# o6: ok |
| = [42] // //# e4: compile-time error |
| = {42: 42} // //# e5: compile-time error |
| = C([]) // //# e6: compile-time error |
| }) { |
| } |
| |
| var baz = ([x |
| = const [C()] // //# o7: ok |
| = const {42: C()} // //# o8: ok |
| = const C(C()) // //# o9: ok |
| = [42] // //# e7: compile-time error |
| = {42: 42} // //# e8: compile-time error |
| = C([]) // //# e9: compile-time error |
| ]) => 42; |
| |
| var qux = ({x |
| = const [C()] // //# o10: ok |
| = const {42: C()} // //# o11: ok |
| = const C(C()) // //# o12: ok |
| = [42] // //# e10: compile-time error |
| = {42: 42} // //# e11: compile-time error |
| = C([]) // //# e12: compile-time error |
| }) => 42; |
| |
| class C { |
| final x; |
| const C([this.x]); |
| |
| const C.pos([this.x // |
| = const [C()] // //# o13: ok |
| = const {42: C()} // //# o14: ok |
| = const C(C()) // //# o15: ok |
| = [42] // //# e13: compile-time error |
| = {42: 42} // //# e14: compile-time error |
| = C([]) // //# e15: compile-time error |
| ]); |
| |
| const C.nam({this.x // |
| = const [C()] // //# o16: ok |
| = const {42: C()} // //# o17: ok |
| = const C(C()) // //# o18: ok |
| = [42] // //# e16: compile-time error |
| = {42: 42} // //# e17: compile-time error |
| = C([]) // //# e18: compile-time error |
| }); |
| |
| static foo([x // |
| = const [C()] // //# o19: ok |
| = const {42: C()} // //# o20: ok |
| = const C(C()) // //# o21: ok |
| = [42] // //# e19: compile-time error |
| = {42: 42} // //# e20: compile-time error |
| = C([]) // //# e21: compile-time error |
| ]) { |
| } |
| |
| static bar({x // |
| = const [C()] // //# o22: ok |
| = const {42: C()} // //# o23: ok |
| = const C(C()) // //# o24: ok |
| = [42] // //# e22: compile-time error |
| = {42: 42} // //# e23: compile-time error |
| = C([]) // //# e24: compile-time error |
| }) { |
| } |
| |
| baz([x // |
| = const [C()] // //# o25: ok |
| = const {42: C()} // //# o26: ok |
| = const C(C()) // //# o27: ok |
| = [42] // //# e25: compile-time error |
| = {42: 42} // //# e26: compile-time error |
| = C([]) // //# e27: compile-time error |
| ]) { |
| } |
| |
| qux({x // |
| = const [C()] // //# o28: ok |
| = const {42: C()} // //# o29: ok |
| = const C(C()) // //# o30: ok |
| = [42] // //# e28: compile-time error |
| = {42: 42} // //# e29: compile-time error |
| = C([]) // //# e30: compile-time error |
| }) { |
| } |
| } |