| Index: pkg/compiler/lib/src/cps_ir/finalize.dart
|
| diff --git a/pkg/compiler/lib/src/cps_ir/finalize.dart b/pkg/compiler/lib/src/cps_ir/finalize.dart
|
| index 7e3b6e15b2658daed66b59f6aa07e64ac74521d4..dad9e51dd3d6f887593b6a8a140b6595c7425163 100644
|
| --- a/pkg/compiler/lib/src/cps_ir/finalize.dart
|
| +++ b/pkg/compiler/lib/src/cps_ir/finalize.dart
|
| @@ -42,9 +42,14 @@ class Finalize extends TrampolineRecursiveVisitor implements Pass {
|
| return cps;
|
| }
|
| Continuation fail = cps.letCont();
|
| - if (node.hasLowerBoundCheck) {
|
| + Primitive index = node.index.definition;
|
| + if (node.hasIntegerCheck) {
|
| + cps.ifTruthy(cps.applyBuiltin(BuiltinOperator.IsNotUnsigned32BitInteger,
|
| + [index, index]))
|
| + .invokeContinuation(fail);
|
| + } else if (node.hasLowerBoundCheck) {
|
| cps.ifTruthy(cps.applyBuiltin(BuiltinOperator.NumLt,
|
| - [node.index.definition, cps.makeZero()]))
|
| + [index, cps.makeZero()]))
|
| .invokeContinuation(fail);
|
| }
|
| if (node.hasUpperBoundCheck) {
|
| @@ -59,7 +64,7 @@ class Finalize extends TrampolineRecursiveVisitor implements Pass {
|
| cps.letPrim(length);
|
| }
|
| cps.ifTruthy(cps.applyBuiltin(BuiltinOperator.NumGe,
|
| - [node.index.definition, length]))
|
| + [index, length]))
|
| .invokeContinuation(fail);
|
| }
|
| if (node.hasEmptinessCheck) {
|
| @@ -69,7 +74,7 @@ class Finalize extends TrampolineRecursiveVisitor implements Pass {
|
| }
|
| cps.insideContinuation(fail).invokeStaticThrower(
|
| helpers.throwIndexOutOfRangeException,
|
| - [node.object.definition, node.index.definition]);
|
| + [node.object.definition, index]);
|
| node..replaceUsesWith(node.object.definition)..destroy();
|
| return cps;
|
| }
|
|
|