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 5375526aa16376709e6be2da8ac194647e7ddf97..df8c3070d134f706adc39df77b54fb878edec704 100644 |
--- a/pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
+++ b/pkg/compiler/lib/src/js_backend/codegen/codegen.dart |
@@ -16,7 +16,7 @@ import '../../elements/elements.dart'; |
import '../../io/source_information.dart' show SourceInformation; |
import '../../js/js.dart' as js; |
import '../../tree_ir/tree_ir_nodes.dart' as tree_ir; |
-import '../../tree_ir/tree_ir_nodes.dart' show BuiltinOperator; |
+import '../../tree_ir/tree_ir_nodes.dart' show BuiltinOperator, BuiltinMethod; |
import '../../types/types.dart' show TypeMask; |
import '../../universe/universe.dart' show |
Selector, |
@@ -833,6 +833,21 @@ class CodeGenerator extends tree_ir.StatementVisitor |
} |
} |
+ /// The JS name of a built-in method. |
+ static final Map<BuiltinMethod, String> builtinMethodName = |
+ const <BuiltinMethod, String>{ |
+ BuiltinMethod.Push: 'push', |
+ BuiltinMethod.Pop: 'pop', |
+ }; |
+ |
+ @override |
+ js.Expression visitApplyBuiltinMethod(tree_ir.ApplyBuiltinMethod node) { |
+ String name = builtinMethodName[node.method]; |
+ js.Expression receiver = visitExpression(node.receiver); |
+ List<js.Expression> args = visitExpressionList(node.arguments); |
+ return js.js('#.#(#)', [receiver, name, args]); |
+ } |
+ |
@override |
js.Expression visitAwait(tree_ir.Await node) { |
return new js.Await(visitExpression(node.input)); |