| Index: sdk/lib/_internal/compiler/implementation/ssa/builder.dart
|
| ===================================================================
|
| --- sdk/lib/_internal/compiler/implementation/ssa/builder.dart (revision 16903)
|
| +++ sdk/lib/_internal/compiler/implementation/ssa/builder.dart (working copy)
|
| @@ -3111,6 +3111,29 @@
|
| inputs));
|
| }
|
|
|
| + void handleForeignSetCurrentIsolate(Send node) {
|
| + if (node.arguments.isEmpty || !node.arguments.tail.isEmpty) {
|
| + compiler.cancel('Exactly one argument required',
|
| + node: node.argumentsNode);
|
| + }
|
| + visit(node.arguments.head);
|
| + String isolateName = backend.namer.CURRENT_ISOLATE;
|
| + push(new HForeign(new DartString.literal("$isolateName = #"),
|
| + const LiteralDartString('void'),
|
| + <HInstruction>[pop()]));
|
| + }
|
| +
|
| + void handleForeignCreateIsolate(Send node) {
|
| + if (!node.arguments.isEmpty) {
|
| + compiler.cancel('Too many arguments',
|
| + node: node.argumentsNode);
|
| + }
|
| + String constructorName = backend.namer.isolateName;
|
| + push(new HForeign(new DartString.literal("new $constructorName"),
|
| + const LiteralDartString('var'),
|
| + <HInstruction>[]));
|
| + }
|
| +
|
| visitForeignSend(Send node) {
|
| Selector selector = elements.getSelector(node);
|
| SourceString name = selector.name;
|
| @@ -3126,6 +3149,10 @@
|
| handleForeignJsCallInIsolate(node);
|
| } else if (name == const SourceString('DART_CLOSURE_TO_JS')) {
|
| handleForeignDartClosureToJs(node);
|
| + } else if (name == const SourceString('JS_SET_CURRENT_ISOLATE')) {
|
| + handleForeignSetCurrentIsolate(node);
|
| + } else if (name == const SourceString('JS_CREATE_ISOLATE')) {
|
| + handleForeignCreateIsolate(node);
|
| } else {
|
| throw "Unknown foreign: ${selector}";
|
| }
|
|
|