| Index: dart/pkg/dart2js_incremental/lib/library_updater.dart
|
| diff --git a/dart/pkg/dart2js_incremental/lib/library_updater.dart b/dart/pkg/dart2js_incremental/lib/library_updater.dart
|
| index 18321507666bf52c6506c0e88653ff0b6fdda21a..9bb2c30930755325fab9ec75dc1d42c9b25bff6d 100644
|
| --- a/dart/pkg/dart2js_incremental/lib/library_updater.dart
|
| +++ b/dart/pkg/dart2js_incremental/lib/library_updater.dart
|
| @@ -618,7 +618,7 @@ class LibraryUpdater extends JsFeatures {
|
| if (!newClasses.isEmpty) {
|
| // Ask the emitter to compute "needs" (only) if new classes were
|
| // instantiated.
|
| - _ensureNeedsComputed();
|
| + _ensureAllNeededEntitiesComputed();
|
| newClasses = new Set.from(emitter.neededClasses);
|
| newClasses.removeAll(_emittedClasses);
|
| } else {
|
| @@ -645,8 +645,7 @@ class LibraryUpdater extends JsFeatures {
|
| jsAst.Node superAccess = emitter.classAccess(superclass);
|
| inherits.add(
|
| js.statement(
|
| - r'self.$dart_unsafe_eval.inheritFrom(#, #)',
|
| - [classAccess, superAccess]));
|
| + r'#.inheritFrom(#, #)', [helper, classAccess, superAccess]));
|
| }
|
| }
|
|
|
| @@ -663,8 +662,9 @@ class LibraryUpdater extends JsFeatures {
|
| jsAst.Node classAccess = emitter.classAccess(cls);
|
| updates.add(
|
| js.statement(
|
| - r'# = self.$dart_unsafe_eval.schemaChange(#, #, #)',
|
| - [classAccess, invokeDefineClass(cls), classAccess, superAccess]));
|
| + r'# = #.schemaChange(#, #, #)',
|
| + [classAccess, helper,
|
| + invokeDefineClass(cls), classAccess, superAccess]));
|
| }
|
|
|
| for (RemovalUpdate update in removals) {
|
| @@ -683,7 +683,7 @@ class LibraryUpdater extends JsFeatures {
|
| newConstants.removeAll(_compiledConstants);
|
|
|
| if (!newConstants.isEmpty) {
|
| - _ensureNeedsComputed();
|
| + _ensureAllNeededEntitiesComputed();
|
| List<ConstantValue> constants =
|
| emitter.outputConstantLists[compiler.deferredLoadTask.mainOutputUnit];
|
| if (constants != null) {
|
| @@ -698,11 +698,11 @@ class LibraryUpdater extends JsFeatures {
|
| }
|
|
|
| updates.add(js.statement(r'''
|
| -if (self.$dart_unsafe_eval.pendingStubs) {
|
| - self.$dart_unsafe_eval.pendingStubs.map(function(e) { return e(); });
|
| - self.$dart_unsafe_eval.pendingStubs = void 0;
|
| +if (#helper.pendingStubs) {
|
| + #helper.pendingStubs.map(function(e) { return e(); });
|
| + #helper.pendingStubs = void 0;
|
| }
|
| -'''));
|
| +''', {'helper': helper}));
|
|
|
| if (updates.length == 1) {
|
| return prettyPrintJs(updates.single);
|
| @@ -718,10 +718,12 @@ if (self.$dart_unsafe_eval.pendingStubs) {
|
| r'''
|
| (new Function(
|
| "$collectedClasses", "$desc",
|
| - self.$dart_unsafe_eval.defineClass(#, #) +"\n;return " + #))({#: #})''',
|
| - [js.string(name), js.stringArray(computeFields(cls)),
|
| - js.string(name),
|
| - js.string(name), descriptor]);
|
| + #helper.defineClass(#name, #computeFields) +"\n;return " + #name))(
|
| + {#name: #descriptor})''',
|
| + {'helper': helper,
|
| + 'name': js.string(name),
|
| + 'computeFields': js.stringArray(computeFields(cls)),
|
| + 'descriptor': descriptor});
|
| }
|
|
|
| jsAst.Node computeMethodUpdateJs(Element element) {
|
| @@ -732,7 +734,7 @@ if (self.$dart_unsafe_eval.pendingStubs) {
|
| ClassBuilder builder = new ClassBuilder(element, namer);
|
| containerBuilder.addMemberMethodFromInfo(info, builder);
|
| jsAst.Node partialDescriptor =
|
| - builder.toObjectInitializer(omitClassDescriptor: true);
|
| + builder.toObjectInitializer(emitClassDescriptor: false);
|
|
|
| String name = info.name;
|
| jsAst.Node function = info.code;
|
| @@ -752,8 +754,8 @@ if (self.$dart_unsafe_eval.pendingStubs) {
|
| emitter.generateEmbeddedGlobalAccess(embeddedNames.GLOBAL_FUNCTIONS);
|
|
|
| return js.statement(
|
| - r'self.$dart_unsafe_eval.addMethod(#, #, #, #, #)',
|
| - [partialDescriptor, js.string(name), holder,
|
| + r'#.addMethod(#, #, #, #, #)',
|
| + [helper, partialDescriptor, js.string(name), holder,
|
| new jsAst.LiteralBool(isStatic), globalFunctionsAccess]);
|
| }
|
|
|
| @@ -801,7 +803,7 @@ if (self.$dart_unsafe_eval.pendingStubs) {
|
| return new EmitterHelper(compiler).computeFields(cls);
|
| }
|
|
|
| - void _ensureNeedsComputed() {
|
| + void _ensureAllNeededEntitiesComputed() {
|
| if (_hasComputedNeeds) return;
|
| emitter.computeAllNeededEntities();
|
| _hasComputedNeeds = true;
|
| @@ -1258,6 +1260,8 @@ abstract class JsFeatures {
|
| ContainerBuilder get containerBuilder => emitter.oldEmitter.containerBuilder;
|
|
|
| EnqueueTask get enqueuer => compiler.enqueuer;
|
| +
|
| + jsAst.Expression get helper => namer.accessIncrementalHelper;
|
| }
|
|
|
| class EmitterHelper extends JsFeatures {
|
|
|