8c2f088481
Some errors like type checking of fields should be reported directly, so this CL separates these errors from evaluation exception errors. This reverts some changes we have before. Additionally, we move error reporting for the constructors to an outer-most method to avoid reporting multiple times. Change-Id: Ie2fde0ea7d389a633051cb106012a0738354f821 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/319911 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Kallen Tu <kallentu@google.com>
62 lines
1.8 KiB
Dart
62 lines
1.8 KiB
Dart
// Copyright (c) 2012, 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.
|
|
|
|
main() {
|
|
var c0 = const C0();
|
|
// ^^^^^
|
|
// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONST
|
|
// ^
|
|
// [cfe] Cannot invoke a non-'const' constructor where a const expression is expected.
|
|
var i0 = const I0();
|
|
// ^^^^^
|
|
// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONST
|
|
// ^
|
|
// [cfe] Cannot invoke a non-'const' factory where a const expression is expected.
|
|
var c1 = const C1();
|
|
var c2 = const C2();
|
|
// ^^^^^
|
|
// [analyzer] COMPILE_TIME_ERROR.CONST_WITH_NON_CONST
|
|
// ^
|
|
// [cfe] Cannot invoke a non-'const' constructor where a const expression is expected.
|
|
var c3 = const C3();
|
|
// ^^^^^^^^^^
|
|
// [analyzer] COMPILE_TIME_ERROR.INVALID_CONSTANT
|
|
}
|
|
|
|
abstract class I0 {
|
|
factory I0() = C0;
|
|
}
|
|
|
|
class C0 implements I0 {
|
|
C0();
|
|
}
|
|
|
|
class C1 {
|
|
const C1();
|
|
// ^^
|
|
// [analyzer] COMPILE_TIME_ERROR.CONST_CONSTRUCTOR_WITH_NON_FINAL_FIELD
|
|
// [cfe] Constructor is marked 'const' so all fields must be final.
|
|
var modifiable;
|
|
}
|
|
|
|
class C2 {
|
|
C2();
|
|
}
|
|
|
|
class C3 {
|
|
const C3()
|
|
: field = new C0()
|
|
//^^^^^
|
|
// [analyzer] COMPILE_TIME_ERROR.FIELD_INITIALIZED_IN_INITIALIZER_AND_DECLARATION
|
|
// ^
|
|
// [cfe] 'field' is a final instance variable that was initialized at the declaration.
|
|
// [cfe] Cannot invoke a non-'const' constructor where a const expression is expected.
|
|
// [cfe] Not a constant expression.
|
|
// ^^^^^^^^
|
|
// [analyzer] COMPILE_TIME_ERROR.INVALID_CONSTANT
|
|
// [cfe] New expression is not a constant expression.
|
|
;
|
|
final field = null;
|
|
}
|