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 042ac75d1b569b5cdba7d3af37d1698eca6ad3dd..0269ab2ce67abee3aef9a2799da043cffaf9c87c 100644 |
--- a/pkg/compiler/lib/src/ssa/builder.dart |
+++ b/pkg/compiler/lib/src/ssa/builder.dart |
@@ -554,7 +554,7 @@ class SsaBuilder extends ast.Visitor |
*/ |
List<HInstruction> completeDynamicSendArgumentsList(Selector selector, |
FunctionElement function, List<HInstruction> providedArguments) { |
- assert(selector.applies(function, compiler.world)); |
+ assert(selector.applies(function, compiler.closedWorld)); |
FunctionSignature signature = function.functionSignature; |
List<HInstruction> compiledArguments = new List<HInstruction>( |
signature.parameterCount + 1); // Plus one for receiver. |
@@ -648,8 +648,9 @@ class SsaBuilder extends ast.Visitor |
element.isGenerativeConstructorBody, |
message: "Missing selector for inlining of $element.")); |
if (selector != null) { |
- if (!selector.applies(function, compiler.world)) return false; |
- if (mask != null && !mask.canHit(function, selector, compiler.world)) { |
+ if (!selector.applies(function, compiler.closedWorld)) return false; |
+ if (mask != null && |
+ !mask.canHit(function, selector, compiler.closedWorld)) { |
return false; |
} |
} |
@@ -894,7 +895,7 @@ class SsaBuilder extends ast.Visitor |
*/ |
HGraph buildMethod(FunctionElement functionElement) { |
assert(invariant(functionElement, functionElement.isImplementation)); |
- graph.calledInLoop = compiler.world.isCalledInLoop(functionElement); |
+ graph.calledInLoop = compiler.closedWorld.isCalledInLoop(functionElement); |
ast.FunctionExpression function = resolvedAst.node; |
assert(function != null); |
assert(elements.getFunctionDefinition(function) != null); |
@@ -1482,8 +1483,8 @@ class SsaBuilder extends ast.Visitor |
}, includeSuperAndInjectedMembers: true); |
InterfaceType type = classElement.thisType; |
- TypeMask ssaType = |
- new TypeMask.nonNullExact(classElement.declaration, compiler.world); |
+ TypeMask ssaType = new TypeMask.nonNullExact( |
+ classElement.declaration, compiler.closedWorld); |
List<DartType> instantiatedTypes; |
addInlinedInstantiation(type); |
if (!currentInlinedInstantiations.isEmpty) { |
@@ -1596,7 +1597,7 @@ class SsaBuilder extends ast.Visitor |
HInvokeConstructorBody invoke = new HInvokeConstructorBody( |
body.declaration, bodyCallInputs, backend.nonNullType); |
invoke.sideEffects = |
- compiler.world.getSideEffectsOfElement(constructor); |
+ compiler.closedWorld.getSideEffectsOfElement(constructor); |
add(invoke); |
} |
} |
@@ -1738,7 +1739,8 @@ class SsaBuilder extends ast.Visitor |
type = type.unaliased; |
assert(assertTypeInContext(type, original)); |
if (type.isInterfaceType && !type.treatAsRaw) { |
- TypeMask subtype = new TypeMask.subtype(type.element, compiler.world); |
+ TypeMask subtype = |
+ new TypeMask.subtype(type.element, compiler.closedWorld); |
HInstruction representations = buildTypeArgumentRepresentations(type); |
add(representations); |
return new HTypeConversion.withTypeRepresentation( |
@@ -1779,7 +1781,7 @@ class SsaBuilder extends ast.Visitor |
if (type.isObject) return original; |
// The type element is either a class or the void element. |
Element element = type.element; |
- TypeMask mask = new TypeMask.subtype(element, compiler.world); |
+ TypeMask mask = new TypeMask.subtype(element, compiler.closedWorld); |
return new HTypeKnown.pinned(mask, original); |
} |
@@ -2424,7 +2426,7 @@ class SsaBuilder extends ast.Visitor |
}); |
TypeMask type = |
- new TypeMask.nonNullExact(closureClassElement, compiler.world); |
+ new TypeMask.nonNullExact(closureClassElement, compiler.closedWorld); |
push(new HCreate(closureClassElement, capturedVariables, type) |
..sourceInformation = sourceInformationBuilder.buildCreate(node)); |
@@ -2696,7 +2698,8 @@ class SsaBuilder extends ast.Visitor |
// handler in the case of lists, because the constant handler |
// does not look at elements in the list. |
TypeMask type = TypeMaskFactory.inferredTypeForElement(field, compiler); |
- if (!type.containsAll(compiler.world) && !instruction.isConstantNull()) { |
+ if (!type.containsAll(compiler.closedWorld) && |
+ !instruction.isConstantNull()) { |
// TODO(13429): The inferrer should know that an element |
// cannot be null. |
instruction.instructionType = type.nonNullable(); |
@@ -3042,7 +3045,8 @@ class SsaBuilder extends ast.Visitor |
add(representations); |
js.Name operator = backend.namer.operatorIs(element); |
HInstruction isFieldName = addConstantStringFromName(operator); |
- HInstruction asFieldName = compiler.world.hasAnyStrictSubtype(element) |
+ HInstruction asFieldName = compiler.closedWorld |
+ .hasAnyStrictSubtype(element) |
? addConstantStringFromName(backend.namer.substitutionName(element)) |
: graph.addConstantNull(compiler); |
List<HInstruction> inputs = <HInstruction>[ |
@@ -3066,7 +3070,7 @@ class SsaBuilder extends ast.Visitor |
} |
HInstruction buildFunctionType(FunctionType type) { |
- type.accept(new TypeBuilder(compiler.world), this); |
+ type.accept(new TypeBuilder(compiler.closedWorld), this); |
return pop(); |
} |
@@ -3683,7 +3687,7 @@ class SsaBuilder extends ast.Visitor |
// calling [makeStaticArgumentList]. |
Selector selector = elements.getSelector(node); |
assert(invariant( |
- node, selector.applies(function.implementation, compiler.world), |
+ node, selector.applies(function.implementation, compiler.closedWorld), |
message: "$selector does not apply to ${function.implementation}")); |
List<HInstruction> inputs = makeStaticArgumentList( |
selector.callStructure, node.arguments, function.implementation); |
@@ -3848,10 +3852,11 @@ class SsaBuilder extends ast.Visitor |
} |
bool needsSubstitutionForTypeVariableAccess(ClassElement cls) { |
- ClassWorld classWorld = compiler.world; |
+ ClassWorld classWorld = compiler.closedWorld; |
if (classWorld.isUsedAsMixin(cls)) return true; |
- return compiler.world.anyStrictSubclassOf(cls, (ClassElement subclass) { |
+ return compiler.closedWorld.anyStrictSubclassOf(cls, |
+ (ClassElement subclass) { |
return !rti.isTrivialSubstitution(subclass, cls); |
}); |
} |
@@ -4033,13 +4038,13 @@ class SsaBuilder extends ast.Visitor |
isFixedList = true; |
TypeMask inferred = |
TypeMaskFactory.inferredForNode(sourceElement, send, compiler); |
- return inferred.containsAll(compiler.world) |
+ return inferred.containsAll(compiler.closedWorld) |
? backend.fixedArrayType |
: inferred; |
} else if (isGrowableListConstructorCall) { |
TypeMask inferred = |
TypeMaskFactory.inferredForNode(sourceElement, send, compiler); |
- return inferred.containsAll(compiler.world) |
+ return inferred.containsAll(compiler.closedWorld) |
? backend.extendableArrayType |
: inferred; |
} else if (Elements.isConstructorOfTypedArraySubclass( |
@@ -4049,8 +4054,9 @@ class SsaBuilder extends ast.Visitor |
TypeMaskFactory.inferredForNode(sourceElement, send, compiler); |
ClassElement cls = element.enclosingClass; |
assert(backend.isNative(cls.thisType.element)); |
- return inferred.containsAll(compiler.world) |
- ? new TypeMask.nonNullExact(cls.thisType.element, compiler.world) |
+ return inferred.containsAll(compiler.closedWorld) |
+ ? new TypeMask.nonNullExact( |
+ cls.thisType.element, compiler.closedWorld) |
: inferred; |
} else if (element.isGenerativeConstructor) { |
ClassElement cls = element.enclosingClass; |
@@ -4059,7 +4065,7 @@ class SsaBuilder extends ast.Visitor |
return new TypeMask.nonNullEmpty(); |
} else { |
return new TypeMask.nonNullExact( |
- cls.thisType.element, compiler.world); |
+ cls.thisType.element, compiler.closedWorld); |
} |
} else { |
return TypeMaskFactory.inferredReturnTypeForElement( |
@@ -4683,10 +4689,11 @@ class SsaBuilder extends ast.Visitor |
bool isOptimizableOperationOnIndexable(Selector selector, Element element) { |
bool isLength = selector.isGetter && selector.name == "length"; |
if (isLength || selector.isIndex) { |
- return compiler.world.isSubtypeOf( |
+ return compiler.closedWorld.isSubtypeOf( |
element.enclosingClass.declaration, helpers.jsIndexableClass); |
} else if (selector.isIndexSet) { |
- return compiler.world.isSubtypeOf(element.enclosingClass.declaration, |
+ return compiler.closedWorld.isSubtypeOf( |
+ element.enclosingClass.declaration, |
helpers.jsMutableIndexableClass); |
} else { |
return false; |
@@ -4709,7 +4716,7 @@ class SsaBuilder extends ast.Visitor |
return false; |
} |
- Element element = compiler.world.locateSingleElement(selector, mask); |
+ Element element = compiler.closedWorld.locateSingleElement(selector, mask); |
if (element != null && |
!element.isField && |
!(element.isGetter && selector.isCall) && |
@@ -4856,7 +4863,7 @@ class SsaBuilder extends ast.Visitor |
typeMask = |
TypeMaskFactory.inferredReturnTypeForElement(element, compiler); |
} |
- bool targetCanThrow = !compiler.world.getCannotThrow(element); |
+ bool targetCanThrow = !compiler.closedWorld.getCannotThrow(element); |
// TODO(5346): Try to avoid the need for calling [declaration] before |
var instruction; |
if (backend.isJsInterop(element)) { |
@@ -4871,7 +4878,8 @@ class SsaBuilder extends ast.Visitor |
instruction.instantiatedTypes = |
new List<DartType>.from(currentInlinedInstantiations); |
} |
- instruction.sideEffects = compiler.world.getSideEffectsOfElement(element); |
+ instruction.sideEffects = |
+ compiler.closedWorld.getSideEffectsOfElement(element); |
} |
if (location == null) { |
push(instruction); |
@@ -4905,7 +4913,7 @@ class SsaBuilder extends ast.Visitor |
selector, inputs, type, sourceInformation, |
isSetter: selector.isSetter || selector.isIndexSet); |
instruction.sideEffects = |
- compiler.world.getSideEffectsOfSelector(selector, null); |
+ compiler.closedWorld.getSideEffectsOfSelector(selector, null); |
return instruction; |
} |
@@ -4935,7 +4943,7 @@ class SsaBuilder extends ast.Visitor |
void generateSuperSendSet() { |
Selector setterSelector = elements.getSelector(node); |
if (Elements.isUnresolved(element) || |
- !setterSelector.applies(element, compiler.world)) { |
+ !setterSelector.applies(element, compiler.closedWorld)) { |
generateSuperNoSuchMethodSend(node, setterSelector, setterInputs); |
pop(); |
} else { |
@@ -5908,7 +5916,7 @@ class SsaBuilder extends ast.Visitor |
HInstruction awaited = pop(); |
// TODO(herhut): Improve this type. |
push(new HAwait(awaited, |
- new TypeMask.subclass(coreClasses.objectClass, compiler.world))); |
+ new TypeMask.subclass(coreClasses.objectClass, compiler.closedWorld))); |
} |
visitTypeAnnotation(ast.TypeAnnotation node) { |
@@ -5969,7 +5977,8 @@ class SsaBuilder extends ast.Visitor |
TypeMask type = |
TypeMaskFactory.inferredForNode(sourceElement, node, compiler); |
- if (!type.containsAll(compiler.world)) instruction.instructionType = type; |
+ if (!type.containsAll(compiler.closedWorld)) |
+ instruction.instructionType = type; |
stack.add(instruction); |
} |
@@ -6069,8 +6078,10 @@ class SsaBuilder extends ast.Visitor |
TypeMask mask = elements.getMoveNextTypeMask(node); |
pushInvokeDynamic(node, selector, mask, [streamIterator]); |
HInstruction future = pop(); |
- push(new HAwait(future, |
- new TypeMask.subclass(coreClasses.objectClass, compiler.world))); |
+ push(new HAwait( |
+ future, |
+ new TypeMask.subclass( |
+ coreClasses.objectClass, compiler.closedWorld))); |
return popBoolified(); |
} |
@@ -6107,8 +6118,10 @@ class SsaBuilder extends ast.Visitor |
node, buildInitializer, buildCondition, buildUpdate, buildBody); |
}, () { |
pushInvokeDynamic(node, Selectors.cancel, null, [streamIterator]); |
- push(new HAwait(pop(), |
- new TypeMask.subclass(coreClasses.objectClass, compiler.world))); |
+ push(new HAwait( |
+ pop(), |
+ new TypeMask.subclass( |
+ coreClasses.objectClass, compiler.closedWorld))); |
pop(); |
}); |
} |
@@ -6126,7 +6139,7 @@ class SsaBuilder extends ast.Visitor |
TypeMask mask = elements.getIteratorTypeMask(node); |
- ClassWorld classWorld = compiler.world; |
+ ClassWorld classWorld = compiler.closedWorld; |
if (mask != null && |
mask.satisfies(helpers.jsIndexableClass, classWorld) && |
// String is indexable but not iterable. |
@@ -6404,12 +6417,12 @@ class SsaBuilder extends ast.Visitor |
// The instruction type will always be a subtype of the mapLiteralClass, but |
// type inference might discover a more specific type, or find nothing (in |
// dart2js unit tests). |
- TypeMask mapType = |
- new TypeMask.nonNullSubtype(helpers.mapLiteralClass, compiler.world); |
+ TypeMask mapType = new TypeMask.nonNullSubtype( |
+ helpers.mapLiteralClass, compiler.closedWorld); |
TypeMask returnTypeMask = |
TypeMaskFactory.inferredReturnTypeForElement(constructor, compiler); |
TypeMask instructionType = |
- mapType.intersection(returnTypeMask, compiler.world); |
+ mapType.intersection(returnTypeMask, compiler.closedWorld); |
addInlinedInstantiation(expectedType); |
pushInvokeStatic(node, constructor, inputs, |
@@ -7237,7 +7250,7 @@ class StringBuilderVisitor extends ast.Visitor { |
Selector selector = Selectors.toString_; |
TypeMask type = TypeMaskFactory.inferredTypeForSelector( |
selector, expression.instructionType, compiler); |
- if (type.containsOnlyString(compiler.world)) { |
+ if (type.containsOnlyString(compiler.closedWorld)) { |
builder.pushInvokeDynamic(node, selector, expression.instructionType, |
<HInstruction>[expression]); |
append(builder.pop()); |