Chromium Code Reviews| 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. |