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 aebf9b8ad7bb34d13b71a089ff78c5935a967a1f..d630c950d8bbf6555b75e10dbd0c2ec2aac75078 100644 |
--- a/pkg/compiler/lib/src/ssa/builder.dart |
+++ b/pkg/compiler/lib/src/ssa/builder.dart |
@@ -441,8 +441,7 @@ class SsaBuilder extends ast.Visitor |
message: "Missing selector for inlining of $element.")); |
if (selector != null) { |
if (!selector.applies(function)) return false; |
- if (mask != null && |
- !mask.canHit(function, selector, compiler.closedWorld)) { |
+ if (mask != null && !mask.canHit(function, selector, closedWorld)) { |
return false; |
} |
} |
@@ -567,7 +566,7 @@ class SsaBuilder extends ast.Visitor |
!element.isGenerativeConstructorBody && |
(mask == null || mask.isNullable)) { |
addWithPosition( |
- new HFieldGet(null, providedArguments[0], backend.dynamicType, |
+ new HFieldGet(null, providedArguments[0], commonMasks.dynamicType, |
isAssignable: false), |
currentNode); |
} |
@@ -685,7 +684,7 @@ class SsaBuilder extends ast.Visitor |
*/ |
HGraph buildMethod(FunctionElement functionElement) { |
assert(invariant(functionElement, functionElement.isImplementation)); |
- graph.calledInLoop = compiler.closedWorld.isCalledInLoop(functionElement); |
+ graph.calledInLoop = closedWorld.isCalledInLoop(functionElement); |
ast.FunctionExpression function = resolvedAst.node; |
assert(function != null); |
assert(elements.getFunctionDefinition(function) != null); |
@@ -711,7 +710,7 @@ class SsaBuilder extends ast.Visitor |
visitCondition: () { |
HParameterValue parameter = parameters.values.first; |
push(new HIdentity(parameter, graph.addConstantNull(compiler), |
- null, backend.boolType)); |
+ null, commonMasks.boolType)); |
}, |
visitThen: () { |
closeAndGotoExit(new HReturn( |
@@ -744,7 +743,7 @@ class SsaBuilder extends ast.Visitor |
// TODO(sra): Figure out how to keep comment anchored without effects. |
void addComment(String text) { |
add(new HForeignCode(js.js.statementTemplateYielding(new js.Comment(text)), |
- backend.dynamicType, <HInstruction>[], |
+ commonMasks.dynamicType, <HInstruction>[], |
isStatement: true)); |
} |
@@ -754,7 +753,8 @@ class SsaBuilder extends ast.Visitor |
HInstruction thisInstruction = localsHandler.readThis(); |
// Use dynamic type because the type computed by the inferrer is |
// narrowed to the type annotation. |
- HInstruction parameter = new HParameterValue(field, backend.dynamicType); |
+ HInstruction parameter = |
+ new HParameterValue(field, commonMasks.dynamicType); |
// Add the parameter as the last instruction of the entry block. |
// If the method is intercepted, we want the actual receiver |
// to be the first parameter. |
@@ -1284,8 +1284,8 @@ class SsaBuilder extends ast.Visitor |
}, includeSuperAndInjectedMembers: true); |
InterfaceType type = classElement.thisType; |
- TypeMask ssaType = new TypeMask.nonNullExact( |
- classElement.declaration, compiler.closedWorld); |
+ TypeMask ssaType = |
+ new TypeMask.nonNullExact(classElement.declaration, closedWorld); |
List<DartType> instantiatedTypes; |
addInlinedInstantiation(type); |
if (!currentInlinedInstantiations.isEmpty) { |
@@ -1311,7 +1311,7 @@ class SsaBuilder extends ast.Visitor |
TypeInfoExpressionKind.INSTANCE, |
classElement.thisType, |
typeArguments, |
- backend.dynamicType); |
+ commonMasks.dynamicType); |
add(typeInfo); |
constructorArguments.add(typeInfo); |
} |
@@ -1331,7 +1331,7 @@ class SsaBuilder extends ast.Visitor |
// Null guard ensures an error if we are being called from an explicit |
// 'new' of the constructor instead of via an upgrade. It is optimized out |
// if there are field initializers. |
- add(new HFieldGet(null, newObject, backend.dynamicType, |
+ add(new HFieldGet(null, newObject, commonMasks.dynamicType, |
isAssignable: false)); |
for (int i = 0; i < fields.length; i++) { |
add(new HFieldSet(fields[i], newObject, constructorArguments[i])); |
@@ -1398,9 +1398,8 @@ class SsaBuilder extends ast.Visitor |
pop(); |
} else { |
HInvokeConstructorBody invoke = new HInvokeConstructorBody( |
- body.declaration, bodyCallInputs, backend.nonNullType); |
- invoke.sideEffects = |
- compiler.closedWorld.getSideEffectsOfElement(constructor); |
+ body.declaration, bodyCallInputs, commonMasks.nonNullType); |
+ invoke.sideEffects = closedWorld.getSideEffectsOfElement(constructor); |
add(invoke); |
} |
} |
@@ -1437,7 +1436,7 @@ class SsaBuilder extends ast.Visitor |
backend.classNeedsRti(enclosing)) { |
enclosing.typeVariables.forEach((TypeVariableType typeVariable) { |
HParameterValue param = |
- addParameter(typeVariable.element, backend.nonNullType); |
+ addParameter(typeVariable.element, commonMasks.nonNullType); |
localsHandler.directLocals[ |
localsHandler.getTypeVariableAsLocal(typeVariable)] = param; |
}); |
@@ -1501,7 +1500,7 @@ class SsaBuilder extends ast.Visitor |
"${n(element)}"; |
HConstant nameConstant = addConstantString(name); |
add(new HInvokeStatic(backend.helpers.traceHelper, |
- <HInstruction>[nameConstant], backend.dynamicType)); |
+ <HInstruction>[nameConstant], commonMasks.dynamicType)); |
} |
} |
@@ -1512,7 +1511,7 @@ class SsaBuilder extends ast.Visitor |
HConstant idConstant = graph.addConstantInt(element.hashCode, compiler); |
HConstant nameConstant = addConstantString(element.name); |
add(new HInvokeStatic(backend.helpers.traceHelper, |
- <HInstruction>[idConstant, nameConstant], backend.dynamicType)); |
+ <HInstruction>[idConstant, nameConstant], commonMasks.dynamicType)); |
} |
} |
@@ -1558,7 +1557,7 @@ class SsaBuilder extends ast.Visitor |
value, compiler.coreTypes.boolType, |
kind: HTypeConversion.BOOLEAN_CONVERSION_CHECK); |
} |
- HInstruction result = new HBoolify(value, backend.boolType); |
+ HInstruction result = new HBoolify(value, commonMasks.boolType); |
add(result); |
return result; |
} |
@@ -1871,8 +1870,7 @@ class SsaBuilder extends ast.Visitor |
capturedVariables.add(localsHandler.readLocal(capturedLocal)); |
}); |
- TypeMask type = |
- new TypeMask.nonNullExact(closureClassElement, compiler.closedWorld); |
+ TypeMask type = new TypeMask.nonNullExact(closureClassElement, closedWorld); |
push(new HCreate(closureClassElement, capturedVariables, type) |
..sourceInformation = sourceInformationBuilder.buildCreate(node)); |
@@ -1976,7 +1974,7 @@ class SsaBuilder extends ast.Visitor |
visit(expression); |
SourceInformation sourceInformation = |
sourceInformationBuilder.buildGeneric(node); |
- push(new HNot(popBoolified(), backend.boolType) |
+ push(new HNot(popBoolified(), commonMasks.boolType) |
..sourceInformation = sourceInformation); |
} |
@@ -2021,7 +2019,8 @@ class SsaBuilder extends ast.Visitor |
@override |
void visitNotEquals(ast.Send node, ast.Node left, ast.Node right, _) { |
handleBinary(node, left, right); |
- pushWithPosition(new HNot(popBoolified(), backend.boolType), node.selector); |
+ pushWithPosition( |
+ new HNot(popBoolified(), commonMasks.boolType), node.selector); |
} |
void handleBinary(ast.Send node, ast.Node left, ast.Node right) { |
@@ -2137,8 +2136,7 @@ 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.closedWorld) && |
- !instruction.isConstantNull()) { |
+ if (!type.containsAll(closedWorld) && !instruction.isConstantNull()) { |
// TODO(13429): The inferrer should know that an element |
// cannot be null. |
instruction.instructionType = type.nonNullable(); |
@@ -2202,7 +2200,7 @@ class SsaBuilder extends ast.Visitor |
// creating an [HStatic]. |
SourceInformation sourceInformation = |
sourceInformationBuilder.buildGet(node); |
- push(new HStatic(method, backend.nonNullType) |
+ push(new HStatic(method, commonMasks.nonNullType) |
..sourceInformation = sourceInformation); |
} |
@@ -2376,13 +2374,14 @@ class SsaBuilder extends ast.Visitor |
} |
HInstruction invokeInterceptor(HInstruction receiver) { |
- HInterceptor interceptor = new HInterceptor(receiver, backend.nonNullType); |
+ HInterceptor interceptor = |
+ new HInterceptor(receiver, commonMasks.nonNullType); |
add(interceptor); |
return interceptor; |
} |
HLiteralList buildLiteralList(List<HInstruction> inputs) { |
- return new HLiteralList(inputs, backend.extendableArrayType); |
+ return new HLiteralList(inputs, commonMasks.extendableArrayType); |
} |
@override |
@@ -2417,7 +2416,7 @@ class SsaBuilder extends ast.Visitor |
HInstruction expressionInstruction = visitAndPop(expression); |
HInstruction instruction = buildIsNode(node, type, expressionInstruction); |
add(instruction); |
- push(new HNot(instruction, backend.boolType)); |
+ push(new HNot(instruction, commonMasks.boolType)); |
} |
HInstruction buildIsNode( |
@@ -2435,7 +2434,7 @@ class SsaBuilder extends ast.Visitor |
} |
generateTypeError(node, message); |
HInstruction call = pop(); |
- return new HIs.compound(type, expression, call, backend.boolType); |
+ return new HIs.compound(type, expression, call, commonMasks.boolType); |
} else if (type.isFunctionType) { |
List arguments = [buildFunctionType(type), expression]; |
pushInvokeDynamic( |
@@ -2444,15 +2443,15 @@ class SsaBuilder extends ast.Visitor |
CallStructure.ONE_ARG), |
null, |
arguments); |
- return new HIs.compound(type, expression, pop(), backend.boolType); |
+ return new HIs.compound(type, expression, pop(), commonMasks.boolType); |
} else if (type.isTypeVariable) { |
HInstruction runtimeType = |
typeBuilder.addTypeVariableReference(type, sourceElement); |
Element helper = helpers.checkSubtypeOfRuntimeType; |
List<HInstruction> inputs = <HInstruction>[expression, runtimeType]; |
- pushInvokeStatic(null, helper, inputs, typeMask: backend.boolType); |
+ pushInvokeStatic(null, helper, inputs, typeMask: commonMasks.boolType); |
HInstruction call = pop(); |
- return new HIs.variable(type, expression, call, backend.boolType); |
+ return new HIs.variable(type, expression, call, commonMasks.boolType); |
} else if (RuntimeTypes.hasTypeArguments(type)) { |
ClassElement element = type.element; |
Element helper = helpers.checkSubtype; |
@@ -2461,8 +2460,7 @@ class SsaBuilder extends ast.Visitor |
add(representations); |
js.Name operator = backend.namer.operatorIs(element); |
HInstruction isFieldName = addConstantStringFromName(operator); |
- HInstruction asFieldName = compiler.closedWorld |
- .hasAnyStrictSubtype(element) |
+ HInstruction asFieldName = closedWorld.hasAnyStrictSubtype(element) |
? addConstantStringFromName(backend.namer.substitutionName(element)) |
: graph.addConstantNull(compiler); |
List<HInstruction> inputs = <HInstruction>[ |
@@ -2471,17 +2469,17 @@ class SsaBuilder extends ast.Visitor |
representations, |
asFieldName |
]; |
- pushInvokeStatic(node, helper, inputs, typeMask: backend.boolType); |
+ pushInvokeStatic(node, helper, inputs, typeMask: commonMasks.boolType); |
HInstruction call = pop(); |
- return new HIs.compound(type, expression, call, backend.boolType); |
+ return new HIs.compound(type, expression, call, commonMasks.boolType); |
} else { |
if (backend.hasDirectCheckFor(type)) { |
- return new HIs.direct(type, expression, backend.boolType); |
+ return new HIs.direct(type, expression, commonMasks.boolType); |
} |
// The interceptor is not always needed. It is removed by optimization |
// when the receiver type or tested type permit. |
- return new HIs.raw( |
- type, expression, invokeInterceptor(expression), backend.boolType); |
+ return new HIs.raw(type, expression, invokeInterceptor(expression), |
+ commonMasks.boolType); |
} |
} |
@@ -2698,7 +2696,7 @@ class SsaBuilder extends ast.Visitor |
if (inputs.length != 2) { |
reporter.internalError(node.argumentsNode, 'Two arguments expected.'); |
} |
- push(new HStringConcat(inputs[0], inputs[1], backend.stringType)); |
+ push(new HStringConcat(inputs[0], inputs[1], commonMasks.stringType)); |
} |
void handleForeignJsCurrentIsolateContext(ast.Send node) { |
@@ -2712,7 +2710,7 @@ class SsaBuilder extends ast.Visitor |
// to fetch the static state. |
String name = backend.namer.staticStateHolder; |
push(new HForeignCode( |
- js.js.parseForeignJS(name), backend.dynamicType, <HInstruction>[], |
+ js.js.parseForeignJS(name), commonMasks.dynamicType, <HInstruction>[], |
nativeBehavior: native.NativeBehavior.DEPENDS_OTHER)); |
} else { |
// Call a helper method from the isolate library. The isolate |
@@ -2722,7 +2720,7 @@ class SsaBuilder extends ast.Visitor |
if (element == null) { |
reporter.internalError(node, 'Isolate library and compiler mismatch.'); |
} |
- pushInvokeStatic(null, element, [], typeMask: backend.dynamicType); |
+ pushInvokeStatic(null, element, [], typeMask: commonMasks.dynamicType); |
} |
} |
@@ -2908,7 +2906,7 @@ class SsaBuilder extends ast.Visitor |
// closure. |
visit(link.tail.head); |
push(new HInvokeClosure(new Selector.callClosure(0), |
- <HInstruction>[pop()], backend.dynamicType)); |
+ <HInstruction>[pop()], commonMasks.dynamicType)); |
} else { |
// Call a helper method from the isolate library. |
Element element = helpers.callInIsolate; |
@@ -2917,7 +2915,8 @@ class SsaBuilder extends ast.Visitor |
} |
List<HInstruction> inputs = <HInstruction>[]; |
addGenericSendArgumentsToList(link, inputs); |
- pushInvokeStatic(node, element, inputs, typeMask: backend.dynamicType); |
+ pushInvokeStatic(node, element, inputs, |
+ typeMask: commonMasks.dynamicType); |
} |
} |
@@ -2947,7 +2946,7 @@ class SsaBuilder extends ast.Visitor |
push(new HForeignCode( |
js.js.expressionTemplateYielding( |
backend.emitter.staticFunctionAccess(function)), |
- backend.dynamicType, |
+ commonMasks.dynamicType, |
<HInstruction>[], |
nativeBehavior: native.NativeBehavior.PURE)); |
return params; |
@@ -2970,7 +2969,7 @@ class SsaBuilder extends ast.Visitor |
SideEffects sideEffects = new SideEffects.empty(); |
sideEffects.setAllSideEffects(); |
push(new HForeignCode(js.js.parseForeignJS("$isolateName = #"), |
- backend.dynamicType, <HInstruction>[pop()], |
+ commonMasks.dynamicType, <HInstruction>[pop()], |
nativeBehavior: native.NativeBehavior.CHANGES_OTHER, |
effects: sideEffects)); |
} |
@@ -2980,7 +2979,7 @@ class SsaBuilder extends ast.Visitor |
reporter.internalError(node.argumentsNode, 'Too many arguments.'); |
} |
push(new HForeignCode(js.js.parseForeignJS(backend.namer.staticStateHolder), |
- backend.dynamicType, <HInstruction>[], |
+ commonMasks.dynamicType, <HInstruction>[], |
nativeBehavior: native.NativeBehavior.DEPENDS_OTHER)); |
} |
@@ -3030,7 +3029,7 @@ class SsaBuilder extends ast.Visitor |
var inputs = [ |
graph.addConstantString(new ast.DartString.literal(loadId), compiler) |
]; |
- push(new HInvokeStatic(loadFunction, inputs, backend.nonNullType, |
+ push(new HInvokeStatic(loadFunction, inputs, commonMasks.nonNullType, |
targetCanThrow: false)..sourceInformation = sourceInformation); |
} |
@@ -3085,7 +3084,7 @@ class SsaBuilder extends ast.Visitor |
argumentsInstruction, |
argumentNamesInstruction |
], |
- typeMask: backend.dynamicType); |
+ typeMask: commonMasks.dynamicType); |
var inputs = <HInstruction>[pop()]; |
push(buildInvokeSuper(Selectors.noSuchMethod_, element, inputs)); |
@@ -3233,7 +3232,8 @@ class SsaBuilder extends ast.Visitor |
void visitSuperNotEquals( |
ast.Send node, MethodElement method, ast.Node argument, _) { |
handleSuperMethodInvoke(node, method); |
- pushWithPosition(new HNot(popBoolified(), backend.boolType), node.selector); |
+ pushWithPosition( |
+ new HNot(popBoolified(), commonMasks.boolType), node.selector); |
} |
@override |
@@ -3262,11 +3262,9 @@ class SsaBuilder extends ast.Visitor |
} |
bool needsSubstitutionForTypeVariableAccess(ClassElement cls) { |
- ClosedWorld closedWorld = compiler.closedWorld; |
if (closedWorld.isUsedAsMixin(cls)) return true; |
- return compiler.closedWorld.anyStrictSubclassOf(cls, |
- (ClassElement subclass) { |
+ return closedWorld.anyStrictSubclassOf(cls, (ClassElement subclass) { |
return !rti.isTrivialSubstitution(subclass, cls); |
}); |
} |
@@ -3292,7 +3290,7 @@ class SsaBuilder extends ast.Visitor |
Element typeInfoSetterElement = helpers.setRuntimeTypeInfo; |
pushInvokeStatic( |
null, typeInfoSetterElement, <HInstruction>[newObject, typeInfo], |
- typeMask: backend.dynamicType, |
+ typeMask: commonMasks.dynamicType, |
sourceInformation: newObject.sourceInformation); |
// The new object will now be referenced through the |
@@ -3324,13 +3322,13 @@ class SsaBuilder extends ast.Visitor |
originalElement, send, compiler)) { |
isFixedList = true; |
TypeMask inferred = _inferredTypeOfNewList(send); |
- return inferred.containsAll(compiler.closedWorld) |
- ? backend.fixedArrayType |
+ return inferred.containsAll(closedWorld) |
+ ? commonMasks.fixedArrayType |
: inferred; |
} else if (isGrowableListConstructorCall) { |
TypeMask inferred = _inferredTypeOfNewList(send); |
- return inferred.containsAll(compiler.closedWorld) |
- ? backend.extendableArrayType |
+ return inferred.containsAll(closedWorld) |
+ ? commonMasks.extendableArrayType |
: inferred; |
} else if (Elements.isConstructorOfTypedArraySubclass( |
originalElement, compiler)) { |
@@ -3338,9 +3336,8 @@ class SsaBuilder extends ast.Visitor |
TypeMask inferred = _inferredTypeOfNewList(send); |
ClassElement cls = element.enclosingClass; |
assert(backend.isNative(cls.thisType.element)); |
- return inferred.containsAll(compiler.closedWorld) |
- ? new TypeMask.nonNullExact( |
- cls.thisType.element, compiler.closedWorld) |
+ return inferred.containsAll(closedWorld) |
+ ? new TypeMask.nonNullExact(cls.thisType.element, closedWorld) |
: inferred; |
} else if (element.isGenerativeConstructor) { |
ClassElement cls = element.enclosingClass; |
@@ -3348,8 +3345,7 @@ class SsaBuilder extends ast.Visitor |
// An error will be thrown. |
return new TypeMask.nonNullEmpty(); |
} else { |
- return new TypeMask.nonNullExact( |
- cls.thisType.element, compiler.closedWorld); |
+ return new TypeMask.nonNullExact(cls.thisType.element, closedWorld); |
} |
} else { |
return TypeMaskFactory.inferredReturnTypeForElement( |
@@ -3427,7 +3423,7 @@ class SsaBuilder extends ast.Visitor |
return; |
} |
- var inputs = <HInstruction>[]; |
+ List<HInstruction> inputs = <HInstruction>[]; |
if (constructor.isGenerativeConstructor && |
backend.isNativeOrExtendsNative(constructor.enclosingClass) && |
!backend.isJsInterop(constructor)) { |
@@ -3439,9 +3435,12 @@ class SsaBuilder extends ast.Visitor |
TypeMask elementType = computeType(constructor); |
if (isFixedListConstructorCall) { |
- if (!inputs[0].isNumber(compiler)) { |
- HTypeConversion conversion = new HTypeConversion(null, |
- HTypeConversion.ARGUMENT_TYPE_CHECK, backend.numType, inputs[0]); |
+ if (!inputs[0].isNumber(closedWorld)) { |
+ HTypeConversion conversion = new HTypeConversion( |
+ null, |
+ HTypeConversion.ARGUMENT_TYPE_CHECK, |
+ commonMasks.numType, |
+ inputs[0]); |
add(conversion); |
inputs[0] = conversion; |
} |
@@ -3453,7 +3452,7 @@ class SsaBuilder extends ast.Visitor |
// TODO(sra): Array allocation should be an instruction so that canThrow |
// can depend on a length type discovered in optimization. |
bool canThrow = true; |
- if (inputs[0].isInteger(compiler) && inputs[0] is HConstant) { |
+ if (inputs[0].isInteger(closedWorld) && inputs[0] is HConstant) { |
var constant = inputs[0]; |
int value = constant.constant.primitiveValue; |
if (0 <= value && value < 0x100000000) canThrow = false; |
@@ -3468,7 +3467,7 @@ class SsaBuilder extends ast.Visitor |
js.Template code = js.js.parseForeignJS(r'#.fixed$length = Array'); |
// We set the instruction as [canThrow] to avoid it being dead code. |
// We need a finer grained side effect. |
- add(new HForeignCode(code, backend.nullType, [stack.last], |
+ add(new HForeignCode(code, commonMasks.nullType, [stack.last], |
throwBehavior: native.NativeThrowBehavior.MAY)); |
} |
} else if (isGrowableListConstructorCall) { |
@@ -3593,7 +3592,8 @@ class SsaBuilder extends ast.Visitor |
if (function == compiler.commonElements.identicalFunction) { |
pushWithPosition( |
- new HIdentity(inputs[0], inputs[1], null, backend.boolType), node); |
+ new HIdentity(inputs[0], inputs[1], null, commonMasks.boolType), |
+ node); |
return; |
} else { |
pushInvokeStatic(node, function, inputs, |
@@ -3798,7 +3798,7 @@ class SsaBuilder extends ast.Visitor |
HInstruction value = typeBuilder.analyzeTypeArgument(type, sourceElement, |
sourceInformation: sourceInformationBuilder.buildGet(node)); |
pushInvokeStatic(node, helpers.runtimeTypeToString, [value], |
- typeMask: backend.stringType); |
+ typeMask: commonMasks.stringType); |
pushInvokeStatic(node, helpers.createRuntimeType, [pop()]); |
} |
} |
@@ -3821,7 +3821,7 @@ class SsaBuilder extends ast.Visitor |
List<HInstruction> inputs = <HInstruction>[target]; |
addDynamicSendArgumentsToList(node, inputs); |
push(new HInvokeClosure( |
- new Selector.callClosureFrom(selector), inputs, backend.dynamicType) |
+ new Selector.callClosureFrom(selector), inputs, commonMasks.dynamicType) |
..sourceInformation = sourceInformation); |
} |
@@ -3970,11 +3970,10 @@ class SsaBuilder extends ast.Visitor |
bool isOptimizableOperationOnIndexable(Selector selector, Element element) { |
bool isLength = selector.isGetter && selector.name == "length"; |
if (isLength || selector.isIndex) { |
- return compiler.closedWorld.isSubtypeOf( |
+ return closedWorld.isSubtypeOf( |
element.enclosingClass.declaration, helpers.jsIndexableClass); |
} else if (selector.isIndexSet) { |
- return compiler.closedWorld.isSubtypeOf( |
- element.enclosingClass.declaration, |
+ return closedWorld.isSubtypeOf(element.enclosingClass.declaration, |
helpers.jsMutableIndexableClass); |
} else { |
return false; |
@@ -3997,7 +3996,7 @@ class SsaBuilder extends ast.Visitor |
return false; |
} |
- Element element = compiler.closedWorld.locateSingleElement(selector, mask); |
+ Element element = closedWorld.locateSingleElement(selector, mask); |
if (element != null && |
!element.isField && |
!(element.isGetter && selector.isCall) && |
@@ -4067,14 +4066,14 @@ class SsaBuilder extends ast.Visitor |
nativeBehavior.typesReturned.add(constructor.enclosingClass.thisType); |
} |
return new HForeignCode( |
- codeTemplate, backend.dynamicType, filteredArguments, |
+ codeTemplate, commonMasks.dynamicType, filteredArguments, |
nativeBehavior: nativeBehavior) |
..sourceInformation = sourceInformation; |
} |
var target = new HForeignCode( |
js.js.parseForeignJS("${backend.namer.fixedBackendPath(element)}." |
"${backend.nativeData.getFixedBackendName(element)}"), |
- backend.dynamicType, |
+ commonMasks.dynamicType, |
<HInstruction>[]); |
add(target); |
// Strip off trailing arguments that were not specified. |
@@ -4125,7 +4124,7 @@ class SsaBuilder extends ast.Visitor |
js.Template codeTemplate = js.js.parseForeignJS(code); |
nativeBehavior.codeTemplate = codeTemplate; |
- return new HForeignCode(codeTemplate, backend.dynamicType, inputs, |
+ return new HForeignCode(codeTemplate, commonMasks.dynamicType, inputs, |
nativeBehavior: nativeBehavior)..sourceInformation = sourceInformation; |
} |
@@ -4145,7 +4144,7 @@ class SsaBuilder extends ast.Visitor |
typeMask = |
TypeMaskFactory.inferredReturnTypeForElement(element, compiler); |
} |
- bool targetCanThrow = !compiler.closedWorld.getCannotThrow(element); |
+ bool targetCanThrow = !closedWorld.getCannotThrow(element); |
// TODO(5346): Try to avoid the need for calling [declaration] before |
var instruction; |
if (backend.isJsInterop(element)) { |
@@ -4160,8 +4159,7 @@ class SsaBuilder extends ast.Visitor |
instruction.instantiatedTypes = |
new List<DartType>.from(currentInlinedInstantiations); |
} |
- instruction.sideEffects = |
- compiler.closedWorld.getSideEffectsOfElement(element); |
+ instruction.sideEffects = closedWorld.getSideEffectsOfElement(element); |
} |
if (location == null) { |
push(instruction); |
@@ -4195,7 +4193,7 @@ class SsaBuilder extends ast.Visitor |
selector, inputs, type, sourceInformation, |
isSetter: selector.isSetter || selector.isIndexSet); |
instruction.sideEffects = |
- compiler.closedWorld.getSideEffectsOfSelector(selector, null); |
+ closedWorld.getSideEffectsOfSelector(selector, null); |
return instruction; |
} |
@@ -5199,8 +5197,8 @@ class SsaBuilder extends ast.Visitor |
visit(node.expression); |
HInstruction awaited = pop(); |
// TODO(herhut): Improve this type. |
- push(new HAwait(awaited, |
- new TypeMask.subclass(coreClasses.objectClass, compiler.closedWorld))); |
+ push(new HAwait( |
+ awaited, new TypeMask.subclass(coreClasses.objectClass, closedWorld))); |
} |
visitTypeAnnotation(ast.TypeAnnotation node) { |
@@ -5259,15 +5257,14 @@ class SsaBuilder extends ast.Visitor |
} |
TypeMask type = _inferredTypeOfNewList(node); |
- if (!type.containsAll(compiler.closedWorld)) { |
+ if (!type.containsAll(closedWorld)) { |
instruction.instructionType = type; |
} |
stack.add(instruction); |
} |
_inferredTypeOfNewList(ast.Node node) => |
- _resultOf(sourceElement).typeOfNewList(node) ?? |
- compiler.closedWorld.commonMasks.dynamicType; |
+ _resultOf(sourceElement).typeOfNewList(node) ?? commonMasks.dynamicType; |
visitConditional(ast.Conditional node) { |
SsaBranchBuilder brancher = new SsaBranchBuilder(this, compiler, node); |
@@ -5366,9 +5363,7 @@ class SsaBuilder extends ast.Visitor |
pushInvokeDynamic(node, selector, mask, [streamIterator]); |
HInstruction future = pop(); |
push(new HAwait( |
- future, |
- new TypeMask.subclass( |
- coreClasses.objectClass, compiler.closedWorld))); |
+ future, new TypeMask.subclass(coreClasses.objectClass, closedWorld))); |
return popBoolified(); |
} |
@@ -5404,9 +5399,7 @@ class SsaBuilder extends ast.Visitor |
}, () { |
pushInvokeDynamic(node, Selectors.cancel, null, [streamIterator]); |
push(new HAwait( |
- pop(), |
- new TypeMask.subclass( |
- coreClasses.objectClass, compiler.closedWorld))); |
+ pop(), new TypeMask.subclass(coreClasses.objectClass, closedWorld))); |
pop(); |
}); |
} |
@@ -5424,7 +5417,6 @@ class SsaBuilder extends ast.Visitor |
TypeMask mask = elementInferenceResults.typeOfIterator(node); |
- ClosedWorld closedWorld = compiler.closedWorld; |
if (mask != null && |
mask.satisfies(helpers.jsIndexableClass, closedWorld) && |
// String is indexable but not iterable. |
@@ -5503,7 +5495,7 @@ class SsaBuilder extends ast.Visitor |
// } |
Element loopVariable = elements.getForInVariable(node); |
SyntheticLocal indexVariable = new SyntheticLocal('_i', loopVariable); |
- TypeMask boolType = backend.boolType; |
+ TypeMask boolType = commonMasks.boolType; |
// These variables are shared by initializer, condition, body and update. |
HInstruction array; // Set in buildInitializer. |
@@ -5513,7 +5505,7 @@ class SsaBuilder extends ast.Visitor |
HInstruction buildGetLength() { |
MemberElement lengthElement = helpers.jsIndexableLength; |
HFieldGet result = new HFieldGet( |
- lengthElement, array, backend.positiveIntType, |
+ lengthElement, array, commonMasks.positiveIntType, |
isAssignable: !isFixed); |
add(result); |
return result; |
@@ -5584,7 +5576,7 @@ class SsaBuilder extends ast.Visitor |
HInstruction index = localsHandler.readLocal(indexVariable); |
HInstruction one = graph.addConstantInt(1, compiler); |
HInstruction addInstruction = |
- new HAdd(index, one, null, backend.positiveIntType); |
+ new HAdd(index, one, null, commonMasks.positiveIntType); |
add(addInstruction); |
localsHandler.updateLocal(indexVariable, addInstruction); |
} |
@@ -5705,12 +5697,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.closedWorld); |
+ TypeMask mapType = |
+ new TypeMask.nonNullSubtype(helpers.mapLiteralClass, closedWorld); |
TypeMask returnTypeMask = |
TypeMaskFactory.inferredReturnTypeForElement(constructor, compiler); |
TypeMask instructionType = |
- mapType.intersection(returnTypeMask, compiler.closedWorld); |
+ mapType.intersection(returnTypeMask, closedWorld); |
addInlinedInstantiation(expectedType); |
pushInvokeStatic(node, constructor, inputs, |
@@ -5946,7 +5938,7 @@ class SsaBuilder extends ast.Visitor |
void buildCondition() { |
js.Template code = js.js.parseForeignJS('#'); |
push(new HForeignCode( |
- code, backend.boolType, [localsHandler.readLocal(switchTarget)], |
+ code, commonMasks.boolType, [localsHandler.readLocal(switchTarget)], |
nativeBehavior: native.NativeBehavior.PURE)); |
} |
@@ -6228,7 +6220,7 @@ class SsaBuilder extends ast.Visitor |
// Note that the name of this local is irrelevant. |
SyntheticLocal local = |
new SyntheticLocal('exception', localsHandler.executableContext); |
- exception = new HLocalValue(local, backend.nonNullType); |
+ exception = new HLocalValue(local, commonMasks.nonNullType); |
add(exception); |
HInstruction oldRethrowableException = rethrowableException; |
rethrowableException = exception; |
@@ -6538,7 +6530,7 @@ class StringBuilderVisitor extends ast.Visitor { |
// conversions. |
// 2. The value can be primitive, because the library stringifier has |
// fast-path code for most primitives. |
- if (expression.canBePrimitive(compiler)) { |
+ if (expression.canBePrimitive(builder.closedWorld)) { |
append(stringify(node, expression)); |
return; |
} |
@@ -6548,7 +6540,7 @@ class StringBuilderVisitor extends ast.Visitor { |
Selector selector = Selectors.toString_; |
TypeMask type = TypeMaskFactory.inferredTypeForSelector( |
selector, expression.instructionType, compiler); |
- if (type.containsOnlyString(compiler.closedWorld)) { |
+ if (type.containsOnlyString(builder.closedWorld)) { |
builder.pushInvokeDynamic(node, selector, expression.instructionType, |
<HInstruction>[expression]); |
append(builder.pop()); |
@@ -6581,14 +6573,14 @@ class StringBuilderVisitor extends ast.Visitor { |
HInstruction concat(HInstruction left, HInstruction right) { |
HInstruction instruction = |
- new HStringConcat(left, right, builder.backend.stringType); |
+ new HStringConcat(left, right, builder.commonMasks.stringType); |
builder.add(instruction); |
return instruction; |
} |
HInstruction stringify(ast.Node node, HInstruction expression) { |
HInstruction instruction = |
- new HStringify(expression, builder.backend.stringType); |
+ new HStringify(expression, builder.commonMasks.stringType); |
builder.add(instruction); |
return instruction; |
} |