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

Unified Diff: dart/pkg/dart2js_incremental/lib/library_updater.dart

Issue 760383003: Incremental compilation of constants. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Merged with r42279 and CL 760383003. 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 side-by-side diff with in-line comments
Download patch
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 f6a19dc5afb7bc26f7efdc90937e8dffb8124a4b..18321507666bf52c6506c0e88653ff0b6fdda21a 100644
--- a/dart/pkg/dart2js_incremental/lib/library_updater.dart
+++ b/dart/pkg/dart2js_incremental/lib/library_updater.dart
@@ -76,6 +76,9 @@ import 'package:compiler/src/elements/modelx.dart' show
import 'package:compiler/src/universe/universe.dart' show
Selector;
+import 'package:compiler/src/constants/values.dart' show
+ ConstantValue;
+
import 'diff.dart' show
Difference,
computeDifference;
@@ -130,6 +133,10 @@ class LibraryUpdater extends JsFeatures {
final Set<ClassElementX> _directlyInstantiatedClasses;
+ final Set<ConstantValue> _compiledConstants;
+
+ bool _hasComputedNeeds = false;
+
LibraryUpdater(
Compiler compiler,
this.inputProvider,
@@ -142,7 +149,10 @@ class LibraryUpdater extends JsFeatures {
? [] : compiler.backend.emitter.neededClasses),
_directlyInstantiatedClasses = new Set.from(
compiler == null
- ? [] : compiler.codegenWorld.directlyInstantiatedClasses);
+ ? [] : compiler.codegenWorld.directlyInstantiatedClasses),
+ _compiledConstants = new Set<ConstantValue>.identity()..addAll(
+ compiler == null
+ ? [] : compiler.backend.constants.compiledConstants);
ahe 2014/12/11 10:09:00 Conflict resolution.
/// When [true], updates must be applied (using [applyUpdates]) before the
/// [compiler]'s state correctly reflects the updated program.
@@ -608,7 +618,7 @@ class LibraryUpdater extends JsFeatures {
if (!newClasses.isEmpty) {
// Ask the emitter to compute "needs" (only) if new classes were
// instantiated.
- emitter.computeAllNeededEntities();
+ _ensureNeedsComputed();
ahe 2014/12/11 10:09:00 Conflict resolution.
newClasses = new Set.from(emitter.neededClasses);
newClasses.removeAll(_emittedClasses);
} else {
@@ -668,6 +678,25 @@ class LibraryUpdater extends JsFeatures {
}
}
+ Set<ConstantValue> newConstants = new Set<ConstantValue>.identity()..addAll(
+ compiler.backend.constants.compiledConstants);
+ newConstants.removeAll(_compiledConstants);
+
+ if (!newConstants.isEmpty) {
+ _ensureNeedsComputed();
ahe 2014/12/11 10:09:00 Conflict resolution.
+ List<ConstantValue> constants =
+ emitter.outputConstantLists[compiler.deferredLoadTask.mainOutputUnit];
+ if (constants != null) {
+ for (ConstantValue constant in constants) {
+ if (newConstants.contains(constant)) {
+ jsAst.Statement constantInitializer = emitter.oldEmitter
+ .buildConstantInitializer(constant).toStatement();
+ updates.add(constantInitializer);
+ }
+ }
+ }
+ }
+
updates.add(js.statement(r'''
if (self.$dart_unsafe_eval.pendingStubs) {
self.$dart_unsafe_eval.pendingStubs.map(function(e) { return e(); });
@@ -771,6 +800,12 @@ if (self.$dart_unsafe_eval.pendingStubs) {
List<String> computeFields(ClassElement cls) {
return new EmitterHelper(compiler).computeFields(cls);
}
+
+ void _ensureNeedsComputed() {
+ if (_hasComputedNeeds) return;
+ emitter.computeAllNeededEntities();
ahe 2014/12/11 10:09:00 Conflict resolution (computeAllNeededEntities was
+ _hasComputedNeeds = true;
+ }
}
/// Represents an update (aka patch) of [before] to [after]. We use the word

Powered by Google App Engine
This is Rietveld 408576698