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 4d770f69583c56a2ab5e2c2cb841a24c2c2c470b..1619cd9a6bcca33a85cbee8f52fe8daa822c2626 100644 |
--- a/pkg/compiler/lib/src/ssa/builder.dart |
+++ b/pkg/compiler/lib/src/ssa/builder.dart |
@@ -145,9 +145,6 @@ class SsaBuilder extends ast.Visitor |
// code-analysis too. |
final CodegenRegistry registry; |
- /// All results from the global type-inference analysis. |
- final GlobalTypeInferenceResults inferenceResults; |
- |
/// Results from the global type-inference analysis corresponding to the |
/// current element being visited. |
/// |
@@ -205,8 +202,7 @@ class SsaBuilder extends ast.Visitor |
: this.infoReporter = backend.compiler.dumpInfoTask, |
this.backend = backend, |
this.constantSystem = backend.constantSystem, |
- this.rtiSubstitutions = backend.rtiSubstitutions, |
- this.inferenceResults = backend.compiler.globalInference.results { |
+ this.rtiSubstitutions = backend.rtiSubstitutions { |
assert(target.isImplementation); |
compiler = backend.compiler; |
elementInferenceResults = _resultOf(target); |
@@ -217,7 +213,8 @@ class SsaBuilder extends ast.Visitor |
sourceInformationFactory.createBuilderForContext(resolvedAst); |
graph.sourceInformation = |
sourceInformationBuilder.buildVariableDeclaration(); |
- localsHandler = new LocalsHandler(this, target, null, compiler); |
+ localsHandler = new LocalsHandler( |
+ this, target, null, backend.nativeData, backend.interceptorData); |
loopHandler = new SsaLoopHandler(this); |
typeBuilder = new TypeBuilder(this); |
} |
@@ -260,7 +257,7 @@ class SsaBuilder extends ast.Visitor |
/// context were we don't expect to see a constructor body element, we |
/// directly fetch the data from the global inference results. |
GlobalTypeInferenceElementResult _resultOf(MemberElement element) => |
- inferenceResults.resultOfMember( |
+ globalInferenceResults.resultOfMember( |
element is ConstructorBodyElementX ? element.constructor : element); |
/// Build the graph for [target]. |
@@ -457,7 +454,7 @@ class SsaBuilder extends ast.Visitor |
// A generative constructor body is not seen by global analysis, |
// so we should not query for its type. |
if (!function.isGenerativeConstructorBody) { |
- if (inferenceResults.resultOfMember(function).throwsAlways) { |
+ if (globalInferenceResults.resultOfMember(function).throwsAlways) { |
isReachable = false; |
return false; |
} |
@@ -591,7 +588,7 @@ class SsaBuilder extends ast.Visitor |
bool isFunctionCalledOnce(MethodElement element) { |
// ConstructorBodyElements are not in the type inference graph. |
if (element is ConstructorBodyElement) return false; |
- return inferenceResults.resultOfMember(element).isCalledOnce; |
+ return globalInferenceResults.resultOfMember(element).isCalledOnce; |
} |
bool isCalledOnce(MethodElement element) { |
@@ -798,9 +795,10 @@ class SsaBuilder extends ast.Visitor |
{ResolutionInterfaceType instanceType}) { |
ResolvedAst resolvedAst = function.resolvedAst; |
assert(resolvedAst != null); |
- localsHandler = new LocalsHandler(this, function, instanceType, compiler); |
+ localsHandler = new LocalsHandler(this, function, instanceType, |
+ backend.nativeData, backend.interceptorData); |
localsHandler.closureData = |
- compiler.closureToClassMapper.getClosureToClassMapping(resolvedAst); |
+ closureToClassMapper.getClosureToClassMapping(resolvedAst); |
returnLocal = new SyntheticLocal("result", function); |
localsHandler.updateLocal(returnLocal, graph.addConstantNull(closedWorld)); |
@@ -964,10 +962,10 @@ class SsaBuilder extends ast.Visitor |
ResolvedAst oldResolvedAst = resolvedAst; |
resolvedAst = callee.resolvedAst; |
final oldElementInferenceResults = elementInferenceResults; |
- elementInferenceResults = inferenceResults.resultOfMember(callee); |
+ elementInferenceResults = globalInferenceResults.resultOfMember(callee); |
ClosureClassMap oldClosureData = localsHandler.closureData; |
ClosureClassMap newClosureData = |
- compiler.closureToClassMapper.getClosureToClassMapping(resolvedAst); |
+ closureToClassMapper.getClosureToClassMapping(resolvedAst); |
localsHandler.closureData = newClosureData; |
if (resolvedAst.kind == ResolvedAstKind.PARSED) { |
localsHandler.enterScope(resolvedAst.node, callee); |
@@ -1139,10 +1137,11 @@ class SsaBuilder extends ast.Visitor |
ResolvedAst savedResolvedAst = resolvedAst; |
resolvedAst = fieldResolvedAst; |
final oldElementInferenceResults = elementInferenceResults; |
- elementInferenceResults = inferenceResults.resultOfMember(member); |
+ elementInferenceResults = |
+ globalInferenceResults.resultOfMember(member); |
// In case the field initializer uses closures, run the |
// closure to class mapper. |
- compiler.closureToClassMapper.getClosureToClassMapping(resolvedAst); |
+ closureToClassMapper.getClosureToClassMapping(resolvedAst); |
inlinedFrom(fieldResolvedAst, () => right.accept(this)); |
resolvedAst = savedResolvedAst; |
elementInferenceResults = oldElementInferenceResults; |
@@ -1304,8 +1303,8 @@ class SsaBuilder extends ast.Visitor |
} |
bodyCallInputs.add(newObject); |
ast.Node node = constructorResolvedAst.node; |
- ClosureClassMap parameterClosureData = compiler.closureToClassMapper |
- .getClosureToClassMapping(constructorResolvedAst); |
+ ClosureClassMap parameterClosureData = |
+ closureToClassMapper.getClosureToClassMapping(constructorResolvedAst); |
FunctionSignature functionSignature = body.functionSignature; |
// Provide the parameters to the generative constructor body. |
@@ -2995,7 +2994,8 @@ class SsaBuilder extends ast.Visitor |
graph.addConstantString(new ast.DartString.literal(loadId), closedWorld) |
]; |
push(new HInvokeStatic(loadFunction, inputs, commonMasks.nonNullType, |
- targetCanThrow: false)..sourceInformation = sourceInformation); |
+ targetCanThrow: false) |
+ ..sourceInformation = sourceInformation); |
} |
generateSuperNoSuchMethodSend( |
@@ -3431,7 +3431,7 @@ class SsaBuilder extends ast.Visitor |
? native.NativeThrowBehavior.MAY |
: native.NativeThrowBehavior.NEVER); |
push(foreign); |
- if (inferenceResults.isFixedArrayCheckedForGrowable(send)) { |
+ if (globalInferenceResults.isFixedArrayCheckedForGrowable(send)) { |
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. |
@@ -4096,7 +4096,8 @@ class SsaBuilder extends ast.Visitor |
nativeBehavior.codeTemplate = codeTemplate; |
return new HForeignCode(codeTemplate, commonMasks.dynamicType, inputs, |
- nativeBehavior: nativeBehavior)..sourceInformation = sourceInformation; |
+ nativeBehavior: nativeBehavior) |
+ ..sourceInformation = sourceInformation; |
} |
void pushInvokeStatic( |