// 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.

// @dart = 2.9

// 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
    }) {
  }
}
