| Index: pkg/compiler/lib/src/js_backend/codegen/codegen.dart
|
| diff --git a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart
|
| index 1815ee2a8b7905d76029859c51408e619a36cdf8..eb1e6994d4ea067c3c39c1f53e7eb9232c212d64 100644
|
| --- a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart
|
| +++ b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart
|
| @@ -1031,7 +1031,7 @@ class CodeGenerator extends tree_ir.StatementVisitor
|
| }
|
|
|
| @override
|
| - visitNullCheck(tree_ir.NullCheck node) {
|
| + visitReceiverCheck(tree_ir.ReceiverCheck node) {
|
| js.Expression value = visitExpression(node.value);
|
| // TODO(sra): Try to use the selector even when [useSelector] is false. The
|
| // reason we use 'toString' is that it is always defined so avoids a slow
|
| @@ -1041,9 +1041,12 @@ class CodeGenerator extends tree_ir.StatementVisitor
|
| // hook for that selector. We don't know these things here, but the decision
|
| // could be deferred by creating a deferred property that was resolved after
|
| // codegen.
|
| - js.Expression access = node.selector != null && node.useSelector
|
| + js.Expression access = node.useSelector
|
| ? js.js('#.#', [value, glue.invocationName(node.selector)])
|
| : js.js('#.toString', [value]);
|
| + if (node.useInvoke) {
|
| + access = new js.Call(access, []);
|
| + }
|
| if (node.condition != null) {
|
| js.Expression condition = visitExpression(node.condition);
|
| js.Statement body = isNullReturn(node.next)
|
|
|