| // 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 |
| // [cfe] The superclass, 'A', has no unnamed constructor that takes no arguments. |
| // ^^^^^^^ |
| // [analyzer] COMPILE_TIME_ERROR.NO_DEFAULT_SUPER_CONSTRUCTOR |
| } |
| |
| main() { |
| var b = new B.zerofive(); |
| var b1 = new B(0); |
| var c = new C.named(""); |
| } |