| 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..04c7eb08c4ddfa4aec47a96ddb39a393285a81dd 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(target.declaration);
|
| assert(elementInferenceResults != null);
|
| graph.element = target;
|
| - sourceElementStack.add(target);
|
| + sourceElementStack.add(target.declaration);
|
| 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
|
|
|