| Index: sdk/lib/_internal/compiler/implementation/types/container_tracer.dart
|
| ===================================================================
|
| --- sdk/lib/_internal/compiler/implementation/types/container_tracer.dart (revision 25104)
|
| +++ sdk/lib/_internal/compiler/implementation/types/container_tracer.dart (working copy)
|
| @@ -94,13 +94,17 @@
|
| measure(() {
|
| SimpleTypesInferrer inferrer = compiler.typesTask.typesInferrer;
|
| var internal = inferrer.internal;
|
| + int maxAnalysis = internal.numberOfElementsToAnalyze;
|
| + int analysisCount = 0;
|
| // Walk over all created [ContainerTypeMask].
|
| - internal.concreteTypes.values.forEach((ContainerTypeMask mask) {
|
| + for (ContainerTypeMask mask in internal.concreteTypes.values) {
|
| // The element type has already been set for const containers.
|
| - if (mask.elementType != null) return;
|
| - mask.elementType = new TracerForConcreteContainer(
|
| - mask, this, compiler, inferrer).run();
|
| - });
|
| + if (mask.elementType != null) continue;
|
| + TracerForConcreteContainer tracer = new TracerForConcreteContainer(
|
| + mask, this, compiler, inferrer);
|
| + mask.elementType = tracer.run();
|
| + if ((analysisCount += tracer.analysisCount) > maxAnalysis) break;
|
| + }
|
| });
|
| }
|
| }
|
| @@ -139,6 +143,7 @@
|
|
|
| TypeMask potentialType;
|
| bool continueAnalyzing = true;
|
| + int analysisCount = 0;
|
|
|
| TracerForConcreteContainer(ContainerTypeMask mask,
|
| this.tracer,
|
| @@ -148,7 +153,6 @@
|
| startElement = mask.allocationElement;
|
|
|
| TypeMask run() {
|
| - int analysisCount = 0;
|
| workList.add(startElement);
|
| while (!workList.isEmpty) {
|
| if (workList.length + analysisCount > MAX_ANALYSIS_COUNT) {
|
|
|