Index: pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart |
diff --git a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart |
index 714aaa802f83b036e9eae9859ecd79caeb860012..d1a9fd8a5e6a76e6a210f5e1a6852d94f2c9d294 100644 |
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart |
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart |
@@ -194,6 +194,8 @@ class OldEmitter implements Emitter { |
=> '${namer.isolateName}.${lazyInitializerProperty}'; |
String get initName => 'init'; |
+ String get precompiledName => 'precompiled'; |
+ |
String get makeConstListProperty => namer.internalGlobal('makeConstantList'); |
/// The name of the property that contains all field names. |
@@ -718,15 +720,19 @@ class OldEmitter implements Emitter { |
return ':$names'; |
} |
- jsAst.FunctionDeclaration buildCspPrecompiledFunctionFor( |
+ jsAst.Statement buildCspPrecompiledFunctionFor( |
OutputUnit outputUnit) { |
// TODO(ahe): Compute a hash code. |
+ // TODO(sigurdm): Avoid this precompiled function. Generated |
+ // constructor-functions and getter/setter functions can be stored in the |
+ // library-description table. Setting properties on these can be moved to |
+ // finishClasses. |
return js.statement(''' |
- function dart_precompiled(\$collectedClasses) { |
+ $initName.${precompiledName} = function (\$collectedClasses) { |
floitsch
2015/03/02 14:33:13
Use an "embedded" global instead of "init".
If you
sigurdm
2015/03/03 09:33:50
Done.
|
var \$desc; |
#; |
return #; |
- }''', |
+ };''', |
[cspPrecompiledFunctionFor(outputUnit), |
new jsAst.ArrayInitializer( |
cspPrecompiledConstructorNamesFor(outputUnit))]); |
@@ -1442,8 +1448,19 @@ class OldEmitter implements Emitter { |
// traces and profile entries. |
mainOutput..add('var dart = [$n') |
..addBuffer(libraryBuffer) |
- ..add(']$N') |
- ..add('$parseReflectionDataName(dart)$N'); |
+ ..add(']$N'); |
+ if (compiler.useContentSecurityPolicy) { |
+ jsAst.Statement precompiledFunctionAst = |
+ buildCspPrecompiledFunctionFor(mainOutputUnit); |
+ mainOutput.addBuffer( |
+ jsAst.prettyPrint( |
+ precompiledFunctionAst, |
+ compiler, |
+ monitor: compiler.dumpInfoTask, |
+ allowVariableMinification: false)); |
+ } |
+ |
+ mainOutput.add('$parseReflectionDataName(dart)$N'); |
interceptorEmitter.emitGetInterceptorMethods(mainOutput); |
interceptorEmitter.emitOneShotInterceptors(mainOutput); |
@@ -1528,20 +1545,11 @@ class OldEmitter implements Emitter { |
} |
} |
- jsAst.FunctionDeclaration precompiledFunctionAst = |
- buildCspPrecompiledFunctionFor(mainOutputUnit); |
emitInitFunction(mainOutput); |
emitMain(mainOutput, mainFragment.invokeMain); |
+ |
mainOutput.add('})()\n'); |
- if (compiler.useContentSecurityPolicy) { |
- mainOutput.addBuffer( |
- jsAst.prettyPrint( |
- precompiledFunctionAst, |
- compiler, |
- monitor: compiler.dumpInfoTask, |
- allowVariableMinification: false)); |
- } |
if (generateSourceMap) { |
mainOutput.add( |
@@ -1897,8 +1905,19 @@ function(originalDescriptor, name, holder, isStatic, globalFunctionsAccess) { |
// in stack traces and profile entries. |
..add('var dart = [$n ') |
..addBuffer(libraryDescriptorBuffer) |
- ..add(']$N') |
- ..add('$parseReflectionDataName(dart)$N'); |
+ ..add(']$N'); |
+ |
+ if (compiler.useContentSecurityPolicy) { |
+ jsAst.Statement precompiledFunctionAst = |
+ buildCspPrecompiledFunctionFor(outputUnit); |
+ |
+ output.addBuffer( |
+ jsAst.prettyPrint( |
+ precompiledFunctionAst, compiler, |
+ monitor: compiler.dumpInfoTask, |
+ allowVariableMinification: false)); |
+ } |
+ output.add('$parseReflectionDataName(dart)$N'); |
} |
// Set the currentIsolate variable to the current isolate (which is |
@@ -1915,19 +1934,8 @@ function(originalDescriptor, name, holder, isStatic, globalFunctionsAccess) { |
emitCompileTimeConstants( |
output, fragment.constants, isMainFragment: false); |
emitStaticNonFinalFieldInitializations(output, outputUnit); |
- output.add('}$N'); |
- |
- if (compiler.useContentSecurityPolicy) { |
- jsAst.FunctionDeclaration precompiledFunctionAst = |
- buildCspPrecompiledFunctionFor(outputUnit); |
- |
- output.addBuffer( |
- jsAst.prettyPrint( |
- precompiledFunctionAst, compiler, |
- monitor: compiler.dumpInfoTask, |
- allowVariableMinification: false)); |
- } |
+ output.add('}$N'); |
// Make a unique hash of the code (before the sourcemaps are added) |
// This will be used to retrieve the initializing function from the global |
// variable. |