Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Unified Diff: pkg/front_end/lib/src/fasta/kernel/body_builder.dart

Issue 2802693004: Handle const list and map literals. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/analyzer/lib/src/fasta/ast_builder.dart ('k') | pkg/front_end/lib/src/fasta/parser/listener.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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;
« no previous file with comments | « pkg/analyzer/lib/src/fasta/ast_builder.dart ('k') | pkg/front_end/lib/src/fasta/parser/listener.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698