Add constantExpressionRequired to BodyBuilder.

R=karlklose@google.com

Review-Url: https://codereview.chromium.org/2769613002 .
This commit is contained in:
Peter von der Ahé 2017-03-22 12:14:24 +01:00
parent 819b226598
commit 84f1547975
2 changed files with 20 additions and 2 deletions

View file

@ -124,6 +124,8 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
CloneVisitor cloner;
bool constantExpressionRequired = false;
BodyBuilder(
KernelLibraryBuilder library,
this.member,
@ -1665,6 +1667,23 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
return true;
}
@override
void beginNewExpression(Token token) {
debugEvent("beginNewExpression");
super.push(constantExpressionRequired);
if (constantExpressionRequired) {
addCompileTimeError(token.charOffset, "Not a constant expression.");
}
constantExpressionRequired = false;
}
@override
void beginConstExpression(Token token) {
debugEvent("beginConstExpression");
super.push(constantExpressionRequired);
constantExpressionRequired = true;
}
@override
void endNewExpression(Token token) {
debugEvent("NewExpression");
@ -1673,6 +1692,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper {
String name = pop();
List<DartType> typeArguments = pop();
var type = pop();
constantExpressionRequired = pop();
if (arguments == null) {
push(buildCompileTimeError("No arguments.", nameToken.charOffset));

View file

@ -6,7 +6,6 @@
[ $compiler == dartk || $compiler == dartkp ]
Language/Classes/Constructors/Constant_Constructors/initializer_not_a_constant_t03: MissingCompileTimeError
Language/Classes/Constructors/Constant_Constructors/invalid_constant_initializer_t01: Crash
Language/Classes/Constructors/Constant_Constructors/invalid_constant_initializer_t03: Crash
Language/Classes/Constructors/Constant_Constructors/non_final_instance_variable_t01: MissingCompileTimeError
Language/Classes/Constructors/Constant_Constructors/non_final_instance_variable_t02: MissingCompileTimeError
Language/Classes/Constructors/Constant_Constructors/potentially_constant_expression_t02: MissingCompileTimeError
@ -215,7 +214,6 @@ Language/Expressions/Instance_Creation/Const/accessibility_t04: MissingCompileTi
Language/Expressions/Instance_Creation/Const/accessibility_t05: MissingCompileTimeError
Language/Expressions/Instance_Creation/Const/accessibility_t06: MissingCompileTimeError
Language/Expressions/Instance_Creation/Const/accessibility_t07: MissingCompileTimeError
Language/Expressions/Instance_Creation/Const/arguments_t01: MissingCompileTimeError
Language/Expressions/Instance_Creation/Const/arguments_t02: MissingCompileTimeError
Language/Expressions/Instance_Creation/Const/arguments_t03: MissingCompileTimeError
Language/Expressions/Instance_Creation/Const/constant_constructor_name_t01: MissingCompileTimeError