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

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

Issue 10534109: Use simple loop tracking instead of size to determine if (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Add comment. Created 8 years, 6 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 855c539fa1d4a28b9b0a875062deca3965ceb5cf..55d15c40361972404aaff42a46bc7b1fc7f507d1 100644
--- a/lib/compiler/implementation/enqueue.dart
+++ b/lib/compiler/implementation/enqueue.dart
@@ -148,18 +148,21 @@ class Enqueuer {
void registerNewSelector(SourceString name,
Selector selector,
- Map<SourceString, Set<Selector>> selectorsMap) {
+ Map<SourceString, Set<Selector>> selectorsMap,
+ [bool inLoop]) {
ngeoffray 2012/06/12 09:17:40 I wouldn't let the enqueuer be aware of such consi
Mads Ager (google) 2012/06/12 11:01:56 Good point. Removed.
Set<Selector> selectors =
selectorsMap.putIfAbsent(name, () => new Set<Selector>());
if (!selectors.contains(selector)) {
selectors.add(selector);
- handleUnseenSelector(name, selector);
+ handleUnseenSelector(name, selector, inLoop);
}
}
- void registerInvocation(SourceString methodName, Selector selector) {
+ void registerInvocation(SourceString methodName,
+ Selector selector,
+ [bool inLoop]) {
task.measure(() {
- registerNewSelector(methodName, selector, universe.invokedNames);
+ registerNewSelector(methodName, selector, universe.invokedNames, inLoop);
});
}
@@ -187,9 +190,12 @@ class Enqueuer {
}
}
- void handleUnseenSelector(SourceString methodName, Selector selector) {
+ void handleUnseenSelector(SourceString methodName,
+ Selector selector,
+ [bool inLoop]) {
processInstanceMembers(methodName, (Element member) {
if (selector.applies(member, compiler)) {
+ if (inLoop && member is FunctionElement) member.calledInLoop = true;
addToWorkList(member);
return true;
}
@@ -206,9 +212,11 @@ class Enqueuer {
universe.staticFunctionsNeedingGetter.add(element);
}
- void registerDynamicInvocation(SourceString methodName, Selector selector) {
+ void registerDynamicInvocation(SourceString methodName,
+ Selector selector,
+ [bool inLoop]) {
assert(selector !== null);
- registerInvocation(methodName, selector);
+ registerInvocation(methodName, selector, inLoop);
}
void registerDynamicInvocationOf(Element element) {

Powered by Google App Engine
This is Rietveld 408576698