Skip to content

Commit 8df84c0

Browse files
scheglovcommit-bot@chromium.org
authored andcommitted
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>
1 parent bfa890d commit 8df84c0

File tree

5 files changed

+21
-20
lines changed

5 files changed

+21
-20
lines changed

pkg/analyzer/test/generated/compile_time_error_code_kernel_test.dart

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -560,18 +560,6 @@ class CompileTimeErrorCodeTest_Kernel extends CompileTimeErrorCodeTest_Driver {
560560
await super.test_instantiateEnum_new();
561561
}
562562

563-
@override
564-
@failingTest
565-
test_integerLiteralOutOfRange_negative() async {
566-
await super.test_integerLiteralOutOfRange_negative();
567-
}
568-
569-
@override
570-
@failingTest
571-
test_integerLiteralOutOfRange_positive() async {
572-
await super.test_integerLiteralOutOfRange_positive();
573-
}
574-
575563
@override
576564
@failingTest
577565
test_invalidAnnotation_importWithPrefix_notVariableOrConstructorInvocation() {

pkg/front_end/lib/src/fasta/kernel/fangorn.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,10 @@ class Fangorn extends Forest {
181181
}
182182

183183
@override
184-
IntJudgment literalInt(int value, Token token) {
184+
IntJudgment literalInt(int value, Token token, {Expression desugaredError}) {
185185
return new IntJudgment(
186-
typeInferenceTokensSaver?.intLiteralTokens(token), value)
186+
typeInferenceTokensSaver?.intLiteralTokens(token), value,
187+
desugaredError: desugaredError)
187188
..fileOffset = offsetForToken(token);
188189
}
189190

pkg/front_end/lib/src/fasta/kernel/forest.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ abstract class Forest {
7373

7474
/// Return a representation of an integer literal at the given [location]. The
7575
/// literal has the given [value].
76-
Expression literalInt(int value, Token location);
76+
Expression literalInt(int value, Token location, {Expression desugaredError});
7777

7878
/// Return a representation of a list literal. The [constKeyword] is the
7979
/// location of the `const` keyword, or `null` if there is no keyword. The

pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1427,23 +1427,30 @@ class KernelLargeIntAccessGenerator extends KernelGenerator
14271427
: super(helper, token);
14281428

14291429
@override
1430-
Expression _makeSimpleRead() => new SyntheticExpressionJudgment(buildError());
1430+
Expression _makeSimpleRead() {
1431+
return _buildErrorIntLiteral();
1432+
}
14311433

14321434
@override
14331435
Expression _makeSimpleWrite(Expression value, bool voidContext,
14341436
ComplexAssignmentJudgment complexAssignment) {
1435-
return new SyntheticExpressionJudgment(buildError());
1437+
return _buildErrorIntLiteral();
14361438
}
14371439

14381440
@override
14391441
Expression _makeRead(ComplexAssignmentJudgment complexAssignment) {
1440-
return new SyntheticExpressionJudgment(buildError());
1442+
return _buildErrorIntLiteral();
14411443
}
14421444

14431445
@override
14441446
Expression _makeWrite(Expression value, bool voidContext,
14451447
ComplexAssignmentJudgment complexAssignment) {
1446-
return new SyntheticExpressionJudgment(buildError());
1448+
return _buildErrorIntLiteral();
1449+
}
1450+
1451+
Expression _buildErrorIntLiteral() {
1452+
var error = buildError();
1453+
return forest.literalInt(0, token, desugaredError: error);
14471454
}
14481455
}
14491456

pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1597,16 +1597,21 @@ abstract class InitializerJudgment implements Initializer {
15971597
/// Concrete shadow object representing an integer literal in kernel form.
15981598
class IntJudgment extends IntLiteral implements ExpressionJudgment {
15991599
IntLiteralTokens tokens;
1600+
final kernel.Expression desugaredError;
16001601

16011602
DartType inferredType;
16021603

1603-
IntJudgment(this.tokens, int value) : super(value);
1604+
IntJudgment(this.tokens, int value, {this.desugaredError}) : super(value);
16041605

16051606
@override
16061607
Expression infer<Expression, Statement, Initializer, Type>(
16071608
ShadowTypeInferrer inferrer, DartType typeContext) {
16081609
inferredType = inferrer.coreTypes.intClass.rawType;
16091610
inferrer.listener.intLiteral(this, fileOffset, tokens, value, inferredType);
1611+
if (desugaredError != null) {
1612+
parent.replaceChild(this, desugaredError);
1613+
parent = null;
1614+
}
16101615
return null;
16111616
}
16121617
}

0 commit comments

Comments
 (0)