Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(848)

Unified Diff: pkg/compiler/lib/src/cps_ir/cps_ir_builder_task.dart

Issue 1288013002: dart2js cps: Handle native functions, getters, and setters. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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].

Powered by Google App Engine
This is Rietveld 408576698