Chromium Code Reviews| 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 ff49942f217fafc05b58505b801a8c4e9734ec5c..be23188a7127447e61c1016795333eeda7788471 100644 |
| --- a/pkg/compiler/lib/src/ssa/builder.dart |
| +++ b/pkg/compiler/lib/src/ssa/builder.dart |
| @@ -239,10 +239,10 @@ class SsaAstGraphBuilder extends ast.Visitor |
| this.constantSystem = backend.constantSystem, |
| this.rtiSubstitutions = backend.rtiSubstitutions { |
| assert(target.isImplementation); |
| - elementInferenceResults = _resultOf(target); |
| + elementInferenceResults = _resultOf(resolvedAst.element); |
|
Siggi Cherem (dart-lang)
2017/07/06 18:00:59
any reason to prefer this over `target.declaration
Johnni Winther
2017/07/07 09:58:40
Done.
|
| assert(elementInferenceResults != null); |
| graph.element = target; |
| - sourceElementStack.add(target); |
| + sourceElementStack.add(resolvedAst.element); |
|
Siggi Cherem (dart-lang)
2017/07/06 18:00:59
funny - this looks like this was a bug (seeing tha
Johnni Winther
2017/07/07 09:58:40
Acknowledged.
|
| sourceInformationBuilder = |
| sourceInformationFactory.createBuilderForContext(target); |
| graph.sourceInformation = |
| @@ -292,9 +292,11 @@ class SsaAstGraphBuilder extends ast.Visitor |
| /// Note: this helper is used selectively. When we know that we are in a |
| /// 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) => |
| - globalInferenceResults.resultOfMember( |
| - element is ConstructorBodyElementX ? element.constructor : element); |
| + GlobalTypeInferenceElementResult _resultOf(MemberElement element) { |
| + assert(element.isDeclaration); |
| + return globalInferenceResults.resultOfMember( |
| + element is ConstructorBodyElementX ? element.constructor : element); |
| + } |
| /// Build the graph for [target]. |
| HGraph build() { |
| @@ -489,7 +491,7 @@ class SsaAstGraphBuilder 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 (globalInferenceResults.resultOfMember(function).throwsAlways) { |
| + if (globalInferenceResults.resultOfMember(declaration).throwsAlways) { |
| isReachable = false; |
| return false; |
| } |
| @@ -507,7 +509,7 @@ class SsaAstGraphBuilder extends ast.Visitor |
| bool reductiveHeuristic() { |
| // The call is on a path which is executed rarely, so inline only if it |
| // does not make the program larger. |
| - if (isCalledOnce(function)) { |
| + if (isCalledOnce(declaration)) { |
| return InlineWeeder.canBeInlined(functionResolvedAst, null, |
| enableUserAssertions: options.enableUserAssertions); |
| } |
| @@ -565,7 +567,7 @@ class SsaAstGraphBuilder extends ast.Visitor |
| // If a method is called only once, and all the methods in the |
| // inlining stack are called only once as well, we know we will |
| // save on output size by inlining this method. |
| - if (isCalledOnce(function)) { |
| + if (isCalledOnce(declaration)) { |
| maxInliningNodes = null; |
| } |
| bool canInline = InlineWeeder.canBeInlined( |
| @@ -628,6 +630,7 @@ class SsaAstGraphBuilder extends ast.Visitor |
| } |
| bool isCalledOnce(MethodElement element) { |
| + assert(element.isDeclaration); |
| return allInlinedFunctionsCalledOnce && isFunctionCalledOnce(element); |
| } |
| @@ -639,7 +642,7 @@ class SsaAstGraphBuilder extends ast.Visitor |
| SourceInformationBuilder oldSourceInformationBuilder = |
| sourceInformationBuilder; |
| sourceInformationBuilder = sourceInformationBuilder.forContext(element); |
| - sourceElementStack.add(element.declaration); |
| + sourceElementStack.add(element); |
| var result = f(); |
| sourceInformationBuilder = oldSourceInformationBuilder; |
| sourceElementStack.removeLast(); |
| @@ -3683,7 +3686,7 @@ class SsaAstGraphBuilder extends ast.Visitor |
| @override |
| void visitTopLevelFunctionInvoke(ast.Send node, MethodElement function, |
| ast.NodeList arguments, CallStructure callStructure, _) { |
| - if (backend.isForeign(closedWorld.commonElements, function)) { |
| + if (closedWorld.commonElements.isForeign(function)) { |
| handleForeignSend(node, function); |
| } else { |
| generateStaticFunctionInvoke(node, function, callStructure); |
| @@ -6478,10 +6481,10 @@ class SsaAstGraphBuilder extends ast.Visitor |
| stack, |
| localsHandler, |
| inTryStatement, |
| - isCalledOnce(function), |
| + isCalledOnce(functionResolvedAst.element), |
| elementInferenceResults); |
| resolvedAst = functionResolvedAst; |
| - elementInferenceResults = _resultOf(function); |
| + elementInferenceResults = _resultOf(functionResolvedAst.element); |
| inliningStack.add(state); |
| // Setting up the state of the (AST) builder is performed even when the |