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

Unified Diff: lib/compiler/implementation/enqueue.dart

Issue 10917285: Stub implementation of patch invariants for the patch refactoring. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Leftovers from rebase. Created 8 years, 3 months 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: lib/compiler/implementation/enqueue.dart
diff --git a/lib/compiler/implementation/enqueue.dart b/lib/compiler/implementation/enqueue.dart
index 6d6f40c6400de2472407741849db1a1d7fbd78ca..b1167db82b972fbfcbded65e1d5f70d962a59e21 100644
--- a/lib/compiler/implementation/enqueue.dart
+++ b/lib/compiler/implementation/enqueue.dart
@@ -9,9 +9,9 @@ class EnqueueTask extends CompilerTask {
String get name => 'Enqueue';
EnqueueTask(Compiler compiler)
- : codegen = new Enqueuer(compiler,
+ : codegen = new Enqueuer('codegen enqueuer', compiler,
ahe 2012/09/18 11:25:54 Nice.
compiler.backend.createItemCompilationContext),
- resolution = new Enqueuer(compiler,
+ resolution = new Enqueuer('resolution enqueuer', compiler,
compiler.backend.createItemCompilationContext),
super(compiler) {
codegen.task = this;
@@ -49,19 +49,21 @@ class RecompilationQueue {
}
class Enqueuer {
+ final String name;
final Compiler compiler; // TODO(ahe): Remove this dependency.
final Function itemCompilationContextCreator;
final Map<String, Link<Element>> instanceMembersByName;
final Set<ClassElement> seenClasses;
final Universe universe;
final Queue<WorkItem> queue;
+ // Invariant: Key elements are declarations.
final Map<Element, TreeElements> resolvedElements;
final RecompilationQueue recompilationCandidates;
bool queueIsClosed = false;
EnqueueTask task;
- Enqueuer(this.compiler,
+ Enqueuer(this.name, this.compiler,
ItemCompilationContext itemCompilationContextCreator())
: this.itemCompilationContextCreator = itemCompilationContextCreator,
instanceMembersByName = new Map<String, Link<Element>>(),
@@ -81,17 +83,27 @@ class Enqueuer {
element = cls.methodElement;
}
Element owner = element.getOutermostEnclosingMemberOrTopLevel();
- return compiler.enqueuer.resolution.resolvedElements[owner];
+ return compiler.enqueuer.resolution.resolvedElements[owner.declaration];
}
- String lookupCode(Element element) =>
- universe.generatedCode[element].toString();
+ /**
+ * Invariant: [element] must be the declaration element.
ahe 2012/09/18 11:25:54 Not documentation.
Johnni Winther 2012/09/20 08:12:23 Done.
+ */
+ String lookupCode(Element element) {
+ assert(element.isDeclaration);
+ return universe.generatedCode[element].toString();
ahe 2012/09/18 11:25:54 Why are you calling toString here?
Johnni Winther 2012/09/20 08:12:23 I have no idea. It was there before this CL.
+ }
+ /**
+ * Invariant: [element] must be the declaration element.
ahe 2012/09/18 11:25:54 Not documentation.
Johnni Winther 2012/09/20 08:12:23 Done.
+ */
void addToWorkList(Element element, [TreeElements elements]) {
+ assert(element.isDeclaration);
if (element.isForeign()) return;
if (compiler.phase == Compiler.PHASE_RECOMPILING) return;
if (queueIsClosed) {
if (isResolutionQueue && getCachedElements(element) !== null) return;
+ print('$element: isMember=${element.isMember()} isInstanceMember=${element.isInstanceMember()}');
ngeoffray 2012/09/17 12:46:24 Remove debugging code.
Johnni Winther 2012/09/20 08:12:23 Done.
compiler.internalErrorOnElement(element, "Work list is closed.");
}
if (!isResolutionQueue &&
@@ -116,7 +128,11 @@ class Enqueuer {
}
}
+ /**
+ * Invariant: [element] must be the declaration element.
+ */
void eagerRecompile(Element element) {
+ assert(element.isDeclaration);
universe.generatedCode.remove(element);
universe.generatedBailoutCode.remove(element);
addToWorkList(element);
@@ -125,7 +141,7 @@ class Enqueuer {
void registerRecompilationCandidate(Element element,
[TreeElements elements]) {
if (queueIsClosed) {
- compiler.internalErrorOnElement(element, "Work list is closed.");
+ compiler.internalErrorOnElement(element, "$name work list is closed.");
}
recompilationCandidates.add(element, elements);
}
@@ -160,6 +176,7 @@ class Enqueuer {
}
void processInstantiatedClassMember(Element member) {
+ assert(member.isDeclaration);
if (universe.generatedCode.containsKey(member)) return;
if (resolvedElements[member] !== null) return;
if (!member.isInstanceMember()) return;
@@ -295,8 +312,13 @@ class Enqueuer {
});
}
+ /**
+ * Invariant: [element] must be the declaration element.
ahe 2012/09/18 11:25:54 Not documentation.
Johnni Winther 2012/09/20 08:12:23 Done.
+ */
void registerStaticUse(Element element) {
- if (element !== null) addToWorkList(element);
+ if (element == null) return;
+ assert(element.isDeclaration);
+ addToWorkList(element);
}
void registerGetOfStaticFunction(FunctionElement element) {
@@ -352,4 +374,6 @@ class Enqueuer {
f(queue.removeLast()); // TODO(kasperl): Why isn't this removeFirst?
}
}
+
+ String toString() => name;
ahe 2012/09/18 11:25:54 I prefer this: 'Enqueuer($name)' This makes debug
Johnni Winther 2012/09/20 08:12:23 Done.
}

Powered by Google App Engine
This is Rietveld 408576698