| Index: pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
|
| diff --git a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
|
| index 79731e783359e9743f581d5bdabe3286c9cfa4c6..2f90ddf8f9358c3c006bdf82d36e69a981ccf0d5 100644
|
| --- a/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
|
| +++ b/pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart
|
| @@ -405,13 +405,16 @@ abstract class IrBuilderVisitor extends ast.Visitor<ir.Primitive>
|
| // where (C', x) = Build(e, C)
|
| //
|
| // Return without a subexpression is translated as if it were return null.
|
| - ir.Primitive visitReturn(ast.Return node) {
|
| + visitReturn(ast.Return node) {
|
| assert(irBuilder.isOpen);
|
| - assert(invariant(node, node.beginToken.value != 'native'));
|
| - irBuilder.buildReturn(
|
| - value: build(node.expression),
|
| - sourceInformation: sourceInformationBuilder.buildReturn(node));
|
| - return null;
|
| + SourceInformation source = sourceInformationBuilder.buildReturn(node);
|
| + if (node.beginToken.value == 'native') {
|
| + irBuilder.buildNativeFunctionBody(node.expression, source);
|
| + } else {
|
| + irBuilder.buildReturn(
|
| + value: build(node.expression),
|
| + sourceInformation: source);
|
| + }
|
| }
|
|
|
| visitSwitchStatement(ast.SwitchStatement node) {
|
| @@ -2281,12 +2284,23 @@ class GlobalProgramInformation {
|
| DartType unaliasType(DartType type) => type.unalias(_compiler);
|
|
|
| TypeMask getTypeMaskForForeign(NativeBehavior behavior) {
|
| + if (behavior == null) {
|
| + return _backend.dynamicType;
|
| + }
|
| return TypeMaskFactory.fromNativeBehavior(behavior, _compiler);
|
| }
|
|
|
| FieldElement locateSingleField(Selector selector, TypeMask type) {
|
| return _compiler.world.locateSingleField(selector, type);
|
| }
|
| +
|
| + Element get closureConverter {
|
| + return _backend.getClosureConverter();
|
| + }
|
| +
|
| + void addNativeMethod(FunctionElement function) {
|
| + _backend.emitter.nativeEmitter.nativeMethods.add(function);
|
| + }
|
| }
|
|
|
| /// IR builder specific to the JavaScript backend, coupled to the [JsIrBuilder].
|
|
|