Index: pkg/front_end/lib/src/fasta/kernel/body_builder.dart |
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart |
index a597d5ad9215e9c2ee193b4d734acd44530c6a1f..7a5d3ac7c7f8d451aeea2a475a1c7e526cf872f7 100644 |
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart |
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart |
@@ -747,7 +747,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
if (!isQualified && isInstanceContext) { |
assert(builder == null); |
if (constantExpressionRequired) { |
- addCompileTimeError(charOffset, "Not a constant expression."); |
+ return new UnresolvedAccessor(this, n, charOffset); |
} |
return new ThisPropertyAccessor(this, charOffset, n, null, null); |
} else if (isDartLibrary && |
@@ -1136,7 +1136,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
typeArgument = typeArguments.first; |
if (typeArguments.length > 1) { |
typeArgument = const DynamicType(); |
- warning( |
+ warningNotError( |
"Too many type arguments on List literal.", beginToken.charOffset); |
} |
} |
@@ -1178,7 +1178,7 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
if (typeArguments.length != 2) { |
keyType = const DynamicType(); |
valueType = const DynamicType(); |
- warning( |
+ warningNotError( |
"Map literal requires two type arguments.", beginToken.charOffset); |
} else { |
keyType = typeArguments[0]; |
@@ -1246,7 +1246,8 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
ProblemBuilder problem = builder; |
addCompileTimeError(charOffset, problem.message); |
} else { |
- warning("Not a type: '${builder.fullNameForErrors}'.", charOffset); |
+ warningNotError( |
+ "Not a type: '${builder.fullNameForErrors}'.", charOffset); |
} |
// TODO(ahe): Create an error somehow. |
return const DynamicType(); |
@@ -1290,7 +1291,8 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
name = name.name; |
} |
if (name is FastaAccessor) { |
- warning("'${beginToken.lexeme}' isn't a type.", beginToken.charOffset); |
+ warningNotError( |
+ "'${beginToken.lexeme}' isn't a type.", beginToken.charOffset); |
push(const DynamicType()); |
} else if (name is TypeVariableBuilder) { |
if (constantExpressionRequired) { |
@@ -1752,6 +1754,21 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
@override |
+ void beginConstLiteral(Token token) { |
+ debugEvent("beginConstLiteral"); |
+ super.push(constantExpressionRequired); |
+ constantExpressionRequired = true; |
+ } |
+ |
+ @override |
+ void endConstLiteral(Token token) { |
+ debugEvent("endConstLiteral"); |
+ var literal = pop(); |
+ constantExpressionRequired = pop(); |
+ push(literal); |
+ } |
+ |
+ @override |
void endNewExpression(Token token) { |
debugEvent("NewExpression"); |
Token nameToken = token.next; |
@@ -2423,6 +2440,10 @@ class BodyBuilder extends ScopeListener<JumpTarget> implements BuilderHelper { |
} |
} |
+ void warningNotError(String message, [int charOffset = -1]) { |
+ super.warning(message, charOffset); |
+ } |
+ |
Expression evaluateArgumentsBefore( |
Arguments arguments, Expression expression) { |
if (arguments == null) return expression; |