Chromium Code Reviews| Index: pkg/compiler/lib/src/js_emitter/native_generator.dart |
| diff --git a/pkg/compiler/lib/src/js_emitter/native_generator.dart b/pkg/compiler/lib/src/js_emitter/native_generator.dart |
| index 4ade4eac1380dfad03bdaf5208882778fa30415b..19e4458cd50b860c0ef81b27f8bc2c106e1d8724 100644 |
| --- a/pkg/compiler/lib/src/js_emitter/native_generator.dart |
| +++ b/pkg/compiler/lib/src/js_emitter/native_generator.dart |
| @@ -5,20 +5,24 @@ |
| part of dart2js.js_emitter; |
| class NativeGenerator { |
| - final Function generateEmbeddedGlobalAccess; |
| + /// Generates the boilerplate code necessary for native functions. |
| + static jsAst.Statement generateBoilerPlate( |
|
sra1
2015/01/05 18:55:47
Can we come up with a better term than boilerplate
floitsch
2015/01/06 12:33:56
Done.
|
| + jsAst.Expression generateEmbeddedGlobalAccess(String global), |
| + {bool initializeIsolateAffinityTag, |
| + bool initializeDispatchProperty}) { |
| + assert(initializeIsolateAffinityTag != null); |
| + assert(initializeDispatchProperty != null); |
| + assert(!initializeDispatchProperty || initializeIsolateAffinityTag); |
| - NativeGenerator(this.generateEmbeddedGlobalAccess); |
| - |
| - /** |
| - * Emits code that sets the `isolateTag embedded global to a unique string. |
| - */ |
| - jsAst.Expression generateIsolateAffinityTagInitialization() { |
| jsAst.Expression getIsolateTagAccess = |
| generateEmbeddedGlobalAccess(embeddedNames.GET_ISOLATE_TAG); |
| jsAst.Expression isolateTagAccess = |
| generateEmbeddedGlobalAccess(embeddedNames.ISOLATE_TAG); |
| + jsAst.Expression dispatchPropertyNameAccess = |
| + generateEmbeddedGlobalAccess(embeddedNames.DISPATCH_PROPERTY_NAME); |
| - return js(''' |
| + return js.statement(''' |
| + if (#initializeIsolateAffinityTag) |
| !function() { |
| // On V8, the 'intern' function converts a string to a symbol, which |
| // makes property access much faster. |
| @@ -48,22 +52,19 @@ class NativeGenerator { |
| break; |
| } |
| } |
| - }() |
| + if (#initializeDispatchProperty) { |
| + #dispatchPropertyName = #getIsolateTag("dispatch_record"); |
| + } |
| + }(); |
| ''', |
| - {'getIsolateTag': getIsolateTagAccess, 'isolateTag': isolateTagAccess}); |
| - } |
| - |
| - jsAst.Expression generateDispatchPropertyNameInitialization() { |
| - jsAst.Expression dispatchPropertyNameAccess = |
| - generateEmbeddedGlobalAccess(embeddedNames.DISPATCH_PROPERTY_NAME); |
| - jsAst.Expression getIsolateTagAccess = |
| - generateEmbeddedGlobalAccess(embeddedNames.GET_ISOLATE_TAG); |
| - return js('# = #("dispatch_record")', |
| - [dispatchPropertyNameAccess, |
| - getIsolateTagAccess]); |
| + {'initializeIsolateAffinityTag': initializeIsolateAffinityTag, |
| + 'initializeDispatchProperty': initializeDispatchProperty, |
| + 'getIsolateTag': getIsolateTagAccess, |
| + 'isolateTag': isolateTagAccess, |
| + 'dispatchPropertyName': dispatchPropertyNameAccess}); |
| } |
| - String generateIsolateTagRoot() { |
| + static String generateIsolateTagRoot() { |
| // TODO(sra): MD5 of contributing source code or URIs? |
| return 'ZxYxX'; |
| } |