Store resolution for out of range integer literals.
R=brianwilkerson@google.com
Change-Id: Ice783c3fc279bfd34a5aeebf4e9e9f5f014c000b
Reviewed-on: https://dart-review.googlesource.com/68423
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart b/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
index f87713a..9113894 100644
--- a/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
+++ b/pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart
@@ -562,18 +562,6 @@
@override
@failingTest
- test_integerLiteralOutOfRange_negative() async {
- await super.test_integerLiteralOutOfRange_negative();
- }
-
- @override
- @failingTest
- test_integerLiteralOutOfRange_positive() async {
- await super.test_integerLiteralOutOfRange_positive();
- }
-
- @override
- @failingTest
test_invalidAnnotation_importWithPrefix_notVariableOrConstructorInvocation() {
return super
.test_invalidAnnotation_importWithPrefix_notVariableOrConstructorInvocation();
diff --git a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
index 6e147a8..9e5ec5e 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
@@ -181,9 +181,10 @@
}
@override
- IntJudgment literalInt(int value, Token token) {
+ IntJudgment literalInt(int value, Token token, {Expression desugaredError}) {
return new IntJudgment(
- typeInferenceTokensSaver?.intLiteralTokens(token), value)
+ typeInferenceTokensSaver?.intLiteralTokens(token), value,
+ desugaredError: desugaredError)
..fileOffset = offsetForToken(token);
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index b66c371..5b4ee73 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -73,7 +73,7 @@
/// Return a representation of an integer literal at the given [location]. The
/// literal has the given [value].
- Expression literalInt(int value, Token location);
+ Expression literalInt(int value, Token location, {Expression desugaredError});
/// Return a representation of a list literal. The [constKeyword] is the
/// location of the `const` keyword, or `null` if there is no keyword. The
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 7f5ea50..0cd8f04 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
@@ -1427,23 +1427,30 @@
: super(helper, token);
@override
- Expression _makeSimpleRead() => new SyntheticExpressionJudgment(buildError());
+ Expression _makeSimpleRead() {
+ return _buildErrorIntLiteral();
+ }
@override
Expression _makeSimpleWrite(Expression value, bool voidContext,
ComplexAssignmentJudgment complexAssignment) {
- return new SyntheticExpressionJudgment(buildError());
+ return _buildErrorIntLiteral();
}
@override
Expression _makeRead(ComplexAssignmentJudgment complexAssignment) {
- return new SyntheticExpressionJudgment(buildError());
+ return _buildErrorIntLiteral();
}
@override
Expression _makeWrite(Expression value, bool voidContext,
ComplexAssignmentJudgment complexAssignment) {
- return new SyntheticExpressionJudgment(buildError());
+ return _buildErrorIntLiteral();
+ }
+
+ Expression _buildErrorIntLiteral() {
+ var error = buildError();
+ return forest.literalInt(0, token, desugaredError: error);
}
}
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index 43062df..bcbb99f 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -1597,16 +1597,21 @@
/// Concrete shadow object representing an integer literal in kernel form.
class IntJudgment extends IntLiteral implements ExpressionJudgment {
IntLiteralTokens tokens;
+ final kernel.Expression desugaredError;
DartType inferredType;
- IntJudgment(this.tokens, int value) : super(value);
+ IntJudgment(this.tokens, int value, {this.desugaredError}) : super(value);
@override
Expression infer<Expression, Statement, Initializer, Type>(
ShadowTypeInferrer inferrer, DartType typeContext) {
inferredType = inferrer.coreTypes.intClass.rawType;
inferrer.listener.intLiteral(this, fileOffset, tokens, value, inferredType);
+ if (desugaredError != null) {
+ parent.replaceChild(this, desugaredError);
+ parent = null;
+ }
return null;
}
}