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

import "package:expect/expect.dart";

class A {
  final a;
  A(this.a); // Not const.
  const A.five() : a = 5;
}

class B extends A {
  final b;
  B(x)
      : b = x + 1,
        super(x);

  // Const constructor cannot call non-const super constructor.
  const B.zerofive()
      : b = 0,
        super(5);
  //    ^^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER
  // [cfe] A constant constructor can't call a non-constant super constructor.
}

class C extends A {
  C() : super(0);
  // Implicit call to non-const constructor A(x).
  const C.named(x);
  //    ^
  // [analyzer] COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_WITH_NON_CONST_SUPER
  //    ^^^^^^^
  // [analyzer] COMPILE_TIME_ERROR.IMPLICIT_SUPER_INITIALIZER_MISSING_ARGUMENTS
  // [cfe] The superclass, 'A', has no unnamed constructor that takes no arguments.
}

main() {
  var b = new B.zerofive();
  var b1 = new B(0);
  var c = new C.named("");
}
