Version 1.5.0-dev.4.17

svn merge -c 37480 https://dart.googlecode.com/svn/branches/bleeding_edge trunk

git-svn-id: http://dart.googlecode.com/svn/trunk@37532 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/sdk/lib/_internal/compiler/implementation/inferrer/node_tracer.dart b/sdk/lib/_internal/compiler/implementation/inferrer/node_tracer.dart
index 79106ff..1786805 100644
--- a/sdk/lib/_internal/compiler/implementation/inferrer/node_tracer.dart
+++ b/sdk/lib/_internal/compiler/implementation/inferrer/node_tracer.dart
@@ -110,10 +110,15 @@
     addNewEscapeInformation(tracedType);
     while (!workList.isEmpty) {
       currentUser = workList.removeLast();
-      currentUser.users.forEach((TypeInformation info) {
+      int expectedWork = analyzedElements.length + currentUser.users.length;
+      if (expectedWork > MAX_ANALYSIS_COUNT) {
+        bailout('Too many users');
+        break;
+      }
+      for (TypeInformation info in currentUser.users) {
         analyzedElements.add(info.owner);
         info.accept(this);
-      });
+      }
       while (!listsToAnalyze.isEmpty) {
         analyzeStoredIntoList(listsToAnalyze.removeLast());
       }
@@ -121,10 +126,6 @@
         analyzeStoredIntoMap(mapsToAnalyze.removeLast());
       }
       if (!continueAnalyzing) break;
-      if (analyzedElements.length > MAX_ANALYSIS_COUNT) {
-        bailout('Too many users');
-        break;
-      }
     }
   }
 
diff --git a/tools/VERSION b/tools/VERSION
index ac57cf9..2e55310 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -28,4 +28,4 @@
 MINOR 5
 PATCH 0
 PRERELEASE 4
-PRERELEASE_PATCH 16
+PRERELEASE_PATCH 17