Index: dart/sdk/lib/_internal/compiler/implementation/compiler.dart |
diff --git a/dart/sdk/lib/_internal/compiler/implementation/compiler.dart b/dart/sdk/lib/_internal/compiler/implementation/compiler.dart |
index 268c218e42ed373e2b2ffece060cf29de7604e20..03a63a9b466da4f0b0b444239fab860113f61ea7 100644 |
--- a/dart/sdk/lib/_internal/compiler/implementation/compiler.dart |
+++ b/dart/sdk/lib/_internal/compiler/implementation/compiler.dart |
@@ -102,6 +102,7 @@ abstract class Compiler implements DiagnosticListener { |
final bool enableTypeAssertions; |
final bool enableUserAssertions; |
final bool enableConcreteTypeInference; |
+ final bool analyzeAll; |
bool disableInlining = false; |
@@ -213,6 +214,7 @@ abstract class Compiler implements DiagnosticListener { |
bool emitJavaScript: true, |
bool generateSourceMap: true, |
bool disallowUnsafeEval: false, |
+ this.analyzeAll: false, |
List<String> strips: const []}) |
: libraries = new Map<String, LibraryElement>(), |
progress = new Stopwatch() { |
@@ -524,6 +526,7 @@ abstract class Compiler implements DiagnosticListener { |
log('Resolving...'); |
phase = PHASE_RESOLVING; |
+ if (analyzeAll) libraries.forEach(fullyEnqueueLibrary); |
backend.enqueueHelpers(enqueuer.resolution); |
processQueue(enqueuer.resolution, main); |
log('Resolved ${enqueuer.resolution.resolvedElements.length} elements.'); |
@@ -549,6 +552,23 @@ abstract class Compiler implements DiagnosticListener { |
checkQueues(); |
} |
+ void fullyEnqueueLibrary(_, LibraryElement library) { |
karlklose
2012/11/13 08:33:47
The ignored first argument looks a bit strange. Yo
ahe
2012/11/13 13:13:43
Done.
|
+ library.forEachLocalMember(fullyEnqueueTopLevelElement); |
+ } |
+ |
+ void fullyEnqueueTopLevelElement(Element element) { |
+ element.computeType(this); |
karlklose
2012/11/13 08:33:47
Move this computation to ensureResolved?
ahe
2012/11/13 13:13:43
Well, that wouldn't work. But making sure that al
|
+ if (element.isClass()) { |
+ resolver.resolve(element); |
karlklose
2012/11/13 08:33:47
Why do you not use ensureResolved here? Is it to m
ahe
2012/11/13 13:13:43
Done.
|
+ ClassElement cls = element; |
+ for (Element member in cls.localMembers) { |
+ enqueuer.resolution.addToWorkList(member); |
+ } |
+ } else { |
+ enqueuer.resolution.addToWorkList(element); |
+ } |
+ } |
+ |
void processQueue(Enqueuer world, Element main) { |
backend.processNativeClasses(world, libraries.values); |
world.addToWorkList(main); |