| Index: pkg/compiler/lib/src/ssa/builder.dart
|
| diff --git a/pkg/compiler/lib/src/ssa/builder.dart b/pkg/compiler/lib/src/ssa/builder.dart
|
| index d630c950d8bbf6555b75e10dbd0c2ec2aac75078..cda5d75e4afaec25d38e721e1951793bd2a6f5b6 100644
|
| --- a/pkg/compiler/lib/src/ssa/builder.dart
|
| +++ b/pkg/compiler/lib/src/ssa/builder.dart
|
| @@ -2135,7 +2135,8 @@ class SsaBuilder extends ast.Visitor
|
| // The inferrer may have found a better type than the constant
|
| // handler in the case of lists, because the constant handler
|
| // does not look at elements in the list.
|
| - TypeMask type = TypeMaskFactory.inferredTypeForElement(field, compiler);
|
| + TypeMask type =
|
| + TypeMaskFactory.inferredTypeForElement(field, globalInferenceResults);
|
| if (!type.containsAll(closedWorld) && !instruction.isConstantNull()) {
|
| // TODO(13429): The inferrer should know that an element
|
| // cannot be null.
|
| @@ -2162,13 +2163,15 @@ class SsaBuilder extends ast.Visitor
|
| // TODO(5346): Try to avoid the need for calling [declaration] before
|
| // creating an [HStatic].
|
| HInstruction instruction = new HStatic(
|
| - field, TypeMaskFactory.inferredTypeForElement(field, compiler))
|
| + field,
|
| + TypeMaskFactory.inferredTypeForElement(
|
| + field, globalInferenceResults))
|
| ..sourceInformation = sourceInformation;
|
| push(instruction);
|
| }
|
| } else {
|
| - HInstruction instruction = new HLazyStatic(
|
| - field, TypeMaskFactory.inferredTypeForElement(field, compiler))
|
| + HInstruction instruction = new HLazyStatic(field,
|
| + TypeMaskFactory.inferredTypeForElement(field, globalInferenceResults))
|
| ..sourceInformation = sourceInformation;
|
| push(instruction);
|
| }
|
| @@ -2673,7 +2676,7 @@ class SsaBuilder extends ast.Visitor
|
| }
|
|
|
| TypeMask ssaType =
|
| - TypeMaskFactory.fromNativeBehavior(nativeBehavior, compiler);
|
| + TypeMaskFactory.fromNativeBehavior(nativeBehavior, closedWorld);
|
|
|
| SourceInformation sourceInformation =
|
| sourceInformationBuilder.buildCall(node, node.argumentsNode);
|
| @@ -2826,7 +2829,7 @@ class SsaBuilder extends ast.Visitor
|
| message: "No NativeBehavior for $node"));
|
|
|
| TypeMask ssaType =
|
| - TypeMaskFactory.fromNativeBehavior(nativeBehavior, compiler);
|
| + TypeMaskFactory.fromNativeBehavior(nativeBehavior, closedWorld);
|
|
|
| push(new HForeignCode(template, ssaType, compiledArguments,
|
| nativeBehavior: nativeBehavior));
|
| @@ -2871,7 +2874,7 @@ class SsaBuilder extends ast.Visitor
|
| assert(invariant(node, nativeBehavior != null,
|
| message: "No NativeBehavior for $node"));
|
| TypeMask ssaType =
|
| - TypeMaskFactory.fromNativeBehavior(nativeBehavior, compiler);
|
| + TypeMaskFactory.fromNativeBehavior(nativeBehavior, closedWorld);
|
| push(new HForeignCode(expr, ssaType, const [],
|
| nativeBehavior: nativeBehavior));
|
| }
|
| @@ -3310,16 +3313,16 @@ class SsaBuilder extends ast.Visitor
|
| generateIsDeferredLoadedCheckOfSend(send);
|
|
|
| bool isFixedList = false;
|
| - bool isFixedListConstructorCall =
|
| - Elements.isFixedListConstructorCall(elements[send], send, compiler);
|
| - bool isGrowableListConstructorCall =
|
| - Elements.isGrowableListConstructorCall(elements[send], send, compiler);
|
| + bool isFixedListConstructorCall = Elements.isFixedListConstructorCall(
|
| + elements[send], send, closedWorld.commonElements);
|
| + bool isGrowableListConstructorCall = Elements.isGrowableListConstructorCall(
|
| + elements[send], send, closedWorld.commonElements);
|
|
|
| TypeMask computeType(element) {
|
| Element originalElement = elements[send];
|
| if (isFixedListConstructorCall ||
|
| Elements.isFilledListConstructorCall(
|
| - originalElement, send, compiler)) {
|
| + originalElement, send, closedWorld.commonElements)) {
|
| isFixedList = true;
|
| TypeMask inferred = _inferredTypeOfNewList(send);
|
| return inferred.containsAll(closedWorld)
|
| @@ -3331,7 +3334,7 @@ class SsaBuilder extends ast.Visitor
|
| ? commonMasks.extendableArrayType
|
| : inferred;
|
| } else if (Elements.isConstructorOfTypedArraySubclass(
|
| - originalElement, compiler)) {
|
| + originalElement, closedWorld)) {
|
| isFixedList = true;
|
| TypeMask inferred = _inferredTypeOfNewList(send);
|
| ClassElement cls = element.enclosingClass;
|
| @@ -3349,7 +3352,7 @@ class SsaBuilder extends ast.Visitor
|
| }
|
| } else {
|
| return TypeMaskFactory.inferredReturnTypeForElement(
|
| - originalElement, compiler);
|
| + originalElement, globalInferenceResults);
|
| }
|
| }
|
|
|
| @@ -3360,7 +3363,7 @@ class SsaBuilder extends ast.Visitor
|
| constructor = constructorImplementation.effectiveTarget;
|
|
|
| final bool isSymbolConstructor =
|
| - compiler.commonElements.isSymbolConstructor(constructorDeclaration);
|
| + closedWorld.commonElements.isSymbolConstructor(constructorDeclaration);
|
| final bool isJSArrayTypedConstructor =
|
| constructorDeclaration == helpers.jsArrayTypedConstructor;
|
|
|
| @@ -4014,8 +4017,8 @@ class SsaBuilder extends ast.Visitor
|
| inputs.add(invokeInterceptor(receiver));
|
| }
|
| inputs.addAll(arguments);
|
| - TypeMask type =
|
| - TypeMaskFactory.inferredTypeForSelector(selector, mask, compiler);
|
| + TypeMask type = TypeMaskFactory.inferredTypeForSelector(
|
| + selector, mask, globalInferenceResults);
|
| if (selector.isGetter) {
|
| push(new HInvokeDynamicGetter(selector, mask, null, inputs, type)
|
| ..sourceInformation = sourceInformation);
|
| @@ -4141,8 +4144,8 @@ class SsaBuilder extends ast.Visitor
|
| }
|
|
|
| if (typeMask == null) {
|
| - typeMask =
|
| - TypeMaskFactory.inferredReturnTypeForElement(element, compiler);
|
| + typeMask = TypeMaskFactory.inferredReturnTypeForElement(
|
| + element, globalInferenceResults);
|
| }
|
| bool targetCanThrow = !closedWorld.getCannotThrow(element);
|
| // TODO(5346): Try to avoid the need for calling [declaration] before
|
| @@ -4185,9 +4188,11 @@ class SsaBuilder extends ast.Visitor
|
| inputs.addAll(arguments);
|
| TypeMask type;
|
| if (!element.isGetter && selector.isGetter) {
|
| - type = TypeMaskFactory.inferredTypeForElement(element, compiler);
|
| + type = TypeMaskFactory.inferredTypeForElement(
|
| + element, globalInferenceResults);
|
| } else {
|
| - type = TypeMaskFactory.inferredReturnTypeForElement(element, compiler);
|
| + type = TypeMaskFactory.inferredReturnTypeForElement(
|
| + element, globalInferenceResults);
|
| }
|
| HInstruction instruction = new HInvokeSuper(element, currentNonClosureClass,
|
| selector, inputs, type, sourceInformation,
|
| @@ -5555,7 +5560,7 @@ class SsaBuilder extends ast.Visitor
|
| // TODO(sra): The element type of a container type mask might be better.
|
| Selector selector = new Selector.index();
|
| TypeMask type = TypeMaskFactory.inferredTypeForSelector(
|
| - selector, arrayType, compiler);
|
| + selector, arrayType, globalInferenceResults);
|
|
|
| HInstruction index = localsHandler.readLocal(indexVariable);
|
| HInstruction value = new HIndex(array, index, null, type);
|
| @@ -5699,8 +5704,8 @@ class SsaBuilder extends ast.Visitor
|
| // dart2js unit tests).
|
| TypeMask mapType =
|
| new TypeMask.nonNullSubtype(helpers.mapLiteralClass, closedWorld);
|
| - TypeMask returnTypeMask =
|
| - TypeMaskFactory.inferredReturnTypeForElement(constructor, compiler);
|
| + TypeMask returnTypeMask = TypeMaskFactory.inferredReturnTypeForElement(
|
| + constructor, globalInferenceResults);
|
| TypeMask instructionType =
|
| mapType.intersection(returnTypeMask, closedWorld);
|
|
|
| @@ -6539,7 +6544,7 @@ class StringBuilderVisitor extends ast.Visitor {
|
| // directly.
|
| Selector selector = Selectors.toString_;
|
| TypeMask type = TypeMaskFactory.inferredTypeForSelector(
|
| - selector, expression.instructionType, compiler);
|
| + selector, expression.instructionType, builder.globalInferenceResults);
|
| if (type.containsOnlyString(builder.closedWorld)) {
|
| builder.pushInvokeDynamic(node, selector, expression.instructionType,
|
| <HInstruction>[expression]);
|
|
|