Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(112)

Side by Side Diff: dart/pkg/dart2js_incremental/lib/library_updater.dart

Issue 763083004: Incremental compilation handles indirectly instantiated classes. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Minor issues found during testing. Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | dart/tests/try/web/incremental_compilation_update_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library dart2js_incremental.library_updater; 5 library dart2js_incremental.library_updater;
6 6
7 import 'dart:async' show 7 import 'dart:async' show
8 Future; 8 Future;
9 9
10 import 'dart:convert' show 10 import 'dart:convert' show
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 115
116 final List<FailedUpdate> _failedUpdates = <FailedUpdate>[]; 116 final List<FailedUpdate> _failedUpdates = <FailedUpdate>[];
117 117
118 final Set<ElementX> _elementsToInvalidate = new Set<ElementX>(); 118 final Set<ElementX> _elementsToInvalidate = new Set<ElementX>();
119 119
120 final Set<ElementX> _removedElements = new Set<ElementX>(); 120 final Set<ElementX> _removedElements = new Set<ElementX>();
121 121
122 final Set<ClassElementX> _classesWithSchemaChanges = 122 final Set<ClassElementX> _classesWithSchemaChanges =
123 new Set<ClassElementX>(); 123 new Set<ClassElementX>();
124 124
125 final Set<ClassElementX> _existingClasses = new Set();
126
125 LibraryUpdater( 127 LibraryUpdater(
126 this.compiler, 128 this.compiler,
127 this.inputProvider, 129 this.inputProvider,
128 this.uri, 130 this.uri,
129 this.logTime, 131 this.logTime,
130 this.logVerbose); 132 this.logVerbose) {
133 if (compiler != null) {
134 _existingClasses.addAll(emitter.neededClasses);
135 }
136 }
131 137
132 /// When [true], updates must be applied (using [applyUpdates]) before the 138 /// When [true], updates must be applied (using [applyUpdates]) before the
133 /// [compiler]'s state correctly reflects the updated program. 139 /// [compiler]'s state correctly reflects the updated program.
134 bool get hasPendingUpdates => !updates.isEmpty; 140 bool get hasPendingUpdates => !updates.isEmpty;
135 141
136 bool get failed => !_failedUpdates.isEmpty; 142 bool get failed => !_failedUpdates.isEmpty;
137 143
138 /// Used as tear-off passed to [LibraryLoaderTask.resetAsync]. 144 /// Used as tear-off passed to [LibraryLoaderTask.resetAsync].
139 Future<bool> reuseLibrary(LibraryElement library) { 145 Future<bool> reuseLibrary(LibraryElement library) {
140 assert(compiler != null); 146 assert(compiler != null);
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 removals.add(update); 533 removals.add(update);
528 } 534 }
529 } else { 535 } else {
530 elementsToInvalidate.add(element); 536 elementsToInvalidate.add(element);
531 } 537 }
532 } 538 }
533 return elementsToInvalidate; 539 return elementsToInvalidate;
534 } 540 }
535 541
536 String computeUpdateJs() { 542 String computeUpdateJs() {
537 Set existingClasses =
538 new Set.from(compiler.codegenWorld.directlyInstantiatedClasses);
539
540 List<Update> removals = <Update>[]; 543 List<Update> removals = <Update>[];
541 List<Element> updatedElements = applyUpdates(removals); 544 List<Element> updatedElements = applyUpdates(removals);
542 if (compiler.progress != null) { 545 if (compiler.progress != null) {
543 compiler.progress.reset(); 546 compiler.progress.reset();
544 } 547 }
545 for (Element element in updatedElements) { 548 for (Element element in updatedElements) {
546 if (!element.isClass) { 549 if (!element.isClass) {
547 compiler.enqueuer.resolution.addToWorkList(element); 550 compiler.enqueuer.resolution.addToWorkList(element);
548 } else { 551 } else {
549 NO_WARN(element).ensureResolved(compiler); 552 NO_WARN(element).ensureResolved(compiler);
(...skipping 12 matching lines...) Expand all
562 if (!element.isClass) { 565 if (!element.isClass) {
563 compiler.enqueuer.codegen.addToWorkList(element); 566 compiler.enqueuer.codegen.addToWorkList(element);
564 } else { 567 } else {
565 changedClasses.add(element); 568 changedClasses.add(element);
566 } 569 }
567 } 570 }
568 compiler.processQueue(compiler.enqueuer.codegen, null); 571 compiler.processQueue(compiler.enqueuer.codegen, null);
569 572
570 List<jsAst.Statement> updates = <jsAst.Statement>[]; 573 List<jsAst.Statement> updates = <jsAst.Statement>[];
571 574
572 Set newClasses = 575 Set newClasses = new Set.from(
573 new Set.from(compiler.codegenWorld.directlyInstantiatedClasses); 576 compiler.codegenWorld.allInstantiatedClasses.where(
574 newClasses.removeAll(existingClasses); 577 emitter.computeClassFilter()));
578 newClasses.removeAll(_existingClasses);
575 579
576 List<jsAst.Statement> inherits = <jsAst.Statement>[]; 580 List<jsAst.Statement> inherits = <jsAst.Statement>[];
577 581
578 for (ClassElementX cls in newClasses) { 582 for (ClassElementX cls in newClasses) {
579 jsAst.Node classAccess = emitter.classAccess(cls); 583 jsAst.Node classAccess = emitter.classAccess(cls);
580 String name = namer.getNameOfClass(cls); 584 String name = namer.getNameOfClass(cls);
581 585
582 updates.add( 586 updates.add(
583 js.statement( 587 js.statement(
584 r'# = #', [classAccess, invokeDefineClass(cls)])); 588 r'# = #', [classAccess, invokeDefineClass(cls)]));
(...skipping 560 matching lines...) Expand 10 before | Expand all | Expand 10 after
1145 List<String> computeFields(ClassElement cls) { 1149 List<String> computeFields(ClassElement cls) {
1146 // TODO(ahe): Rewrite for new emitter. 1150 // TODO(ahe): Rewrite for new emitter.
1147 ClassBuilder builder = new ClassBuilder(cls, namer); 1151 ClassBuilder builder = new ClassBuilder(cls, namer);
1148 classEmitter.emitFields(cls, builder, ""); 1152 classEmitter.emitFields(cls, builder, "");
1149 return builder.fields; 1153 return builder.fields;
1150 } 1154 }
1151 } 1155 }
1152 1156
1153 // TODO(ahe): Remove this method. 1157 // TODO(ahe): Remove this method.
1154 NO_WARN(x) => x; 1158 NO_WARN(x) => x;
OLDNEW
« no previous file with comments | « no previous file | dart/tests/try/web/incremental_compilation_update_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698