Convert some uses of Unspecified to NotAConstantExpression
Change-Id: I54df956afc9cdbc8f30d8dd8c3dd0d299907b97d
Reviewed-on: https://dart-review.googlesource.com/64880
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Paul Berry <paulberry@google.com>
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
index 7f3e404..0e50714 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -4957,6 +4957,17 @@
}
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeNotAConstantExpression = messageNotAConstantExpression;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageNotAConstantExpression = const MessageCode(
+ "NotAConstantExpression",
+ analyzerCode: "NOT_CONSTANT_EXPRESSION",
+ dart2jsCode: "*fatal*",
+ severity: Severity.error,
+ message: r"""Not a constant expression.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
const Template<
Message Function(
Token token,
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 74a8d46..f84c0a6 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -1542,16 +1542,16 @@
if (constantContext != ConstantContext.none &&
declaration.isTypeVariable &&
!member.isConstructor) {
- deprecated_addCompileTimeError(
- charOffset, "Not a constant expression.");
+ addCompileTimeError(
+ fasta.messageNotAConstantExpression, charOffset, token.length);
}
return new TypeUseGenerator(this, token, declaration, name);
} else if (declaration.isLocal) {
if (constantContext != ConstantContext.none &&
!declaration.isConst &&
!member.isConstructor) {
- deprecated_addCompileTimeError(
- charOffset, "Not a constant expression.");
+ addCompileTimeError(
+ fasta.messageNotAConstantExpression, charOffset, token.length);
}
// An initializing formal parameter might be final without its
// VariableDeclaration being final. See
@@ -1578,8 +1578,8 @@
// semantics, such parameters introduces a new parameter with that
// name that should be resolved here.
!member.isConstructor) {
- deprecated_addCompileTimeError(
- charOffset, "Not a constant expression.");
+ addCompileTimeError(
+ fasta.messageNotAConstantExpression, charOffset, token.length);
}
Name n = new Name(name, library.library);
Member getter;
@@ -1619,8 +1619,8 @@
if (!(readTarget is Field && readTarget.isConst ||
// Static tear-offs are also compile time constants.
readTarget is Procedure)) {
- deprecated_addCompileTimeError(
- charOffset, "Not a constant expression.");
+ addCompileTimeError(
+ fasta.messageNotAConstantExpression, charOffset, token.length);
}
}
return generator;
@@ -2278,8 +2278,10 @@
DartType type = pop();
Expression expression = popForValue();
if (constantContext != ConstantContext.none) {
- push(deprecated_buildCompileTimeError(
- "Not a constant expression.", operator.charOffset));
+ push(buildCompileTimeError(
+ fasta.templateNotConstantExpression.withArguments('As expression'),
+ operator.charOffset,
+ operator.length));
} else {
push(forest.asExpression(expression, type, operator));
}
@@ -2298,8 +2300,10 @@
type, functionNestingLevel);
}
if (constantContext != ConstantContext.none) {
- push(deprecated_buildCompileTimeError(
- "Not a constant expression.", isOperator.charOffset));
+ push(buildCompileTimeError(
+ fasta.templateNotConstantExpression.withArguments('Is expression'),
+ isOperator.charOffset,
+ isOperator.length));
} else {
push(isExpression);
}
@@ -2890,8 +2894,10 @@
debugEvent("beginNewExpression");
super.push(constantContext);
if (constantContext != ConstantContext.none) {
- deprecated_addCompileTimeError(
- token.charOffset, "Not a constant expression.");
+ addCompileTimeError(
+ fasta.templateNotConstantExpression.withArguments('New expression'),
+ token.charOffset,
+ token.length);
}
constantContext = ConstantContext.none;
}
@@ -3273,7 +3279,7 @@
..fileEndOffset = token.charOffset);
if (constantContext != ConstantContext.none) {
push(deprecated_buildCompileTimeError(
- "Not a constant expression.", formals.charOffset));
+ null, formals.charOffset, fasta.messageNotAConstantExpression));
} else {
push(new FunctionExpressionJudgment(function)
..fileOffset = offsetForToken(beginToken));
@@ -4151,12 +4157,12 @@
}
@override
- void deprecated_addCompileTimeError(int charOffset, String message,
- {bool wasHandled: false}) {
+ void deprecated_addCompileTimeError(int charOffset, String error,
+ {fasta.Message message, bool wasHandled: false}) {
// TODO(ahe): Consider setting [constantContext] to `ConstantContext.none`
// to avoid a long list of errors.
return library.addCompileTimeError(
- fasta.templateUnspecified.withArguments(message),
+ message ?? fasta.templateUnspecified.withArguments(error),
charOffset,
noLength,
uri,
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index 9409dc1..f624f3f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -16,6 +16,7 @@
messageCantUsePrefixAsExpression,
messageCantUsePrefixWithNullAware,
messageInvalidInitializer,
+ messageNotAConstantExpression,
templateCantUseDeferredPrefixAsConstant,
templateDeferredTypeAnnotation,
templateIntegerLiteralIsOutOfRange,
@@ -211,8 +212,8 @@
} else {
if (helper.constantContext != ConstantContext.none &&
send.name != lengthName) {
- helper.deprecated_addCompileTimeError(
- offsetForToken(token), "Not a constant expression.");
+ helper.addCompileTimeError(
+ messageNotAConstantExpression, offsetForToken(token), token.length);
}
return PropertyAccessGenerator.make(helper, send.token, buildSimpleRead(),
send.name, null, null, isNullAware);
@@ -944,7 +945,7 @@
Expression handleAssignment(bool voidContext) {
if (helper.constantContext != ConstantContext.none) {
return helper.deprecated_buildCompileTimeError(
- "Not a constant expression.", offsetForToken(token));
+ null, offsetForToken(token), messageNotAConstantExpression);
}
if (identical("=", assignmentOperator)) {
return generator.buildAssignment(value, voidContext: voidContext);
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
index a7b7d47..a9e37ce 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
@@ -77,7 +77,8 @@
Expression wrapInCompileTimeError(Expression expression, Message message);
- Expression deprecated_buildCompileTimeError(String error, [int offset]);
+ Expression deprecated_buildCompileTimeError(String error,
+ [int offset, Message message]);
Initializer buildInvalidInitializer(Expression expression, [int offset]);
@@ -144,6 +145,9 @@
DartType validatedTypeVariableUse(
TypeParameterType type, int offset, bool nonInstanceAccessIsError);
+ void addCompileTimeError(Message message, int charOffset, int length,
+ {List<LocatedMessage> context});
+
void addProblem(Message message, int charOffset, int length);
void addProblemErrorIfConst(Message message, int charOffset, int length);
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
index 36aaf0f..6f72d90 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
@@ -13,6 +13,7 @@
show
LocatedMessage,
messageLoadLibraryTakesNoArguments,
+ messageNotAConstantExpression,
messageSuperAsExpression,
templateNotConstantExpression;
@@ -643,8 +644,8 @@
@override
Expression doInvocation(int offset, Arguments arguments) {
if (helper.constantContext != ConstantContext.none) {
- helper.deprecated_addCompileTimeError(
- offset, "Not a constant expression.");
+ // TODO(brianwilkerson) Fix the length
+ helper.addCompileTimeError(messageNotAConstantExpression, offset, 1);
}
if (getter == null || isFieldOrGetter(getter)) {
return helper.buildMethodInvocation(
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 5d23994..a9a5a52 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -246,6 +246,7 @@
NonAsciiIdentifier/expression: Fail
NonInstanceTypeVariableUse/example: Fail
NonPartOfDirectiveInPart/script1: Fail
+NotAConstantExpression/example: Fail
NotAPrefixInTypeAnnotation/example: Fail
NotAType/example: Fail
NotAnLvalue/analyzerCode: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index ccacf893..81817dc 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -140,6 +140,12 @@
analyzerCode: NOT_CONSTANT_EXPRESSION
dart2jsCode: "*fatal*"
+NotAConstantExpression:
+ template: "Not a constant expression."
+ severity: ERROR
+ analyzerCode: NOT_CONSTANT_EXPRESSION
+ dart2jsCode: "*fatal*"
+
NonAsciiIdentifier:
template: "The non-ASCII character '#character' (#unicode) can't be used in identifiers, only in strings and comments."
tip: "Try using an US-ASCII letter, a digit, '_' (an underscore), or '$' (a dollar sign)."