| Index: pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
|
| diff --git a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
|
| index 2eabee093631d2fcf74a6d1e7a3a4329a1800287..3d3270c4de2fd8c4b765c7c24507fffd5015d213 100644
|
| --- a/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
|
| +++ b/pkg/compiler/lib/src/js_emitter/interceptor_stub_generator.dart
|
| @@ -217,17 +217,22 @@ class InterceptorStubGenerator {
|
| } else if (selector.isIndex || selector.isIndexSet) {
|
| // For an index operation, this code generates:
|
| //
|
| - // if (receiver.constructor == Array || typeof receiver == "string") {
|
| - // if (a0 >>> 0 === a0 && a0 < receiver.length) {
|
| - // return receiver[a0];
|
| + // if (typeof a0 === "number") {
|
| + // if (receiver.constructor == Array ||
|
| + // typeof receiver == "string") {
|
| + // if (a0 >>> 0 === a0 && a0 < receiver.length) {
|
| + // return receiver[a0];
|
| + // }
|
| // }
|
| // }
|
| //
|
| // For an index set operation, this code generates:
|
| //
|
| - // if (receiver.constructor == Array && !receiver.immutable$list) {
|
| - // if (a0 >>> 0 === a0 && a0 < receiver.length) {
|
| - // return receiver[a0] = a1;
|
| + // if (typeof a0 === "number") {
|
| + // if (receiver.constructor == Array && !receiver.immutable$list) {
|
| + // if (a0 >>> 0 === a0 && a0 < receiver.length) {
|
| + // return receiver[a0] = a1;
|
| + // }
|
| // }
|
| // }
|
| bool containsArray = classes.contains(helpers.jsArrayClass);
|
| @@ -270,9 +275,10 @@ class InterceptorStubGenerator {
|
| }
|
|
|
| return js.statement('''
|
| - if (#)
|
| - if ((a0 >>> 0) === a0 && a0 < receiver.length)
|
| - return receiver[a0];
|
| + if (typeof a0 === "number")
|
| + if (#)
|
| + if ((a0 >>> 0) === a0 && a0 < receiver.length)
|
| + return receiver[a0];
|
| ''', typeCheck);
|
| } else {
|
| jsAst.Expression typeCheck;
|
| @@ -285,9 +291,10 @@ class InterceptorStubGenerator {
|
| }
|
|
|
| return js.statement(r'''
|
| - if (# && !receiver.immutable$list &&
|
| - (a0 >>> 0) === a0 && a0 < receiver.length)
|
| - return receiver[a0] = a1;
|
| + if (typeof a0 === "number")
|
| + if (# && !receiver.immutable$list &&
|
| + (a0 >>> 0) === a0 && a0 < receiver.length)
|
| + return receiver[a0] = a1;
|
| ''', typeCheck);
|
| }
|
| }
|
|
|