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..89272d97bb15202c14bcba8ba869c54f752a9f4e 100644 |
--- a/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart |
+++ b/pkg/compiler/lib/src/js_emitter/old_emitter/emitter.dart |
@@ -718,16 +718,21 @@ 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) { |
+ # = function (\$collectedClasses) { |
var \$desc; |
#; |
return #; |
- }''', |
- [cspPrecompiledFunctionFor(outputUnit), |
+ };''', |
+ [generateEmbeddedGlobalAccess(embeddedNames.PRECOMPILED), |
+ cspPrecompiledFunctionFor(outputUnit), |
new jsAst.ArrayInitializer( |
cspPrecompiledConstructorNamesFor(outputUnit))]); |
} |
@@ -1442,8 +1447,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 +1544,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 +1904,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 +1933,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. |