| 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 b2dcb8aac502618526bb1720db597f8b23d3871b..2b30331ddc41831734e52edc0d783110a895089a 100644
|
| --- a/pkg/compiler/lib/src/ssa/builder.dart
|
| +++ b/pkg/compiler/lib/src/ssa/builder.dart
|
| @@ -1322,9 +1322,12 @@ class SsaBuilder extends NewResolvedVisitor {
|
| bool meetsHardConstraints() {
|
| if (compiler.disableInlining) return false;
|
|
|
| - assert(selector != null
|
| - || Elements.isStaticOrTopLevel(element)
|
| - || element.isGenerativeConstructorBody);
|
| + assert(invariant(
|
| + currentNode != null ? currentNode : element,
|
| + selector != null ||
|
| + Elements.isStaticOrTopLevel(element) ||
|
| + element.isGenerativeConstructorBody,
|
| + message: "Missing selector for inlining of $element."));
|
| if (selector != null && !selector.applies(function, compiler.world)) {
|
| return false;
|
| }
|
| @@ -3246,8 +3249,7 @@ class SsaBuilder extends NewResolvedVisitor {
|
| return pop();
|
| }
|
|
|
| - String noSuchMethodTargetSymbolString(ErroneousElement error,
|
| - [String prefix]) {
|
| + String noSuchMethodTargetSymbolString(Element error, [String prefix]) {
|
| String result = error.name;
|
| if (prefix == "set") return "$result=";
|
| return result;
|
| @@ -3288,14 +3290,18 @@ class SsaBuilder extends NewResolvedVisitor {
|
| node);
|
| }
|
|
|
| + void handleInvalidStaticGet(ast.Send node, Element element) {
|
| + generateThrowNoSuchMethod(
|
| + node,
|
| + noSuchMethodTargetSymbolString(element, 'get'),
|
| + argumentNodes: const Link<ast.Node>());
|
| + }
|
| +
|
| /// Generate read access of an unresolved static or top level entity.
|
| void generateStaticUnresolvedGet(ast.Send node, Element element) {
|
| if (element is ErroneousElement) {
|
| // An erroneous element indicates an unresolved static getter.
|
| - generateThrowNoSuchMethod(
|
| - node,
|
| - noSuchMethodTargetSymbolString(element, 'get'),
|
| - argumentNodes: const Link<ast.Node>());
|
| + handleInvalidStaticGet(node, element);
|
| } else {
|
| // This happens when [element] has parse errors.
|
| assert(invariant(node, element == null || element.isErroneous));
|
| @@ -3907,6 +3913,16 @@ class SsaBuilder extends NewResolvedVisitor {
|
| generateCallInvoke(node, localsHandler.readLocal(function));
|
| }
|
|
|
| + @override
|
| + visitLocalFunctionIncompatibleInvoke(
|
| + ast.Send node,
|
| + LocalFunctionElement function,
|
| + ast.NodeList arguments,
|
| + CallStructure callStructure,
|
| + _) {
|
| + generateCallInvoke(node, localsHandler.readLocal(function));
|
| + }
|
| +
|
| void handleForeignJs(ast.Send node) {
|
| Link<ast.Node> link = node.arguments;
|
| // Don't visit the first argument, which is the type, and the second
|
| @@ -5147,6 +5163,22 @@ class SsaBuilder extends NewResolvedVisitor {
|
| }
|
|
|
| @override
|
| + void visitTopLevelSetterGet(
|
| + ast.Send node,
|
| + MethodElement setter,
|
| + _) {
|
| + handleInvalidStaticGet(node, setter);
|
| + }
|
| +
|
| + @override
|
| + void visitStaticSetterGet(
|
| + ast.Send node,
|
| + MethodElement setter,
|
| + _) {
|
| + handleInvalidStaticGet(node, setter);
|
| + }
|
| +
|
| + @override
|
| void visitUnresolvedGet(
|
| ast.Send node,
|
| Element element,
|
| @@ -5154,6 +5186,32 @@ class SsaBuilder extends NewResolvedVisitor {
|
| generateStaticUnresolvedGet(node, element);
|
| }
|
|
|
| + void handleInvalidStaticInvoke(ast.Send node, Element element) {
|
| + generateThrowNoSuchMethod(node,
|
| + noSuchMethodTargetSymbolString(element),
|
| + argumentNodes: node.arguments);
|
| + }
|
| +
|
| + @override
|
| + void visitStaticSetterInvoke(
|
| + ast.Send node,
|
| + MethodElement setter,
|
| + ast.NodeList arguments,
|
| + CallStructure callStructure,
|
| + _) {
|
| + handleInvalidStaticInvoke(node, setter);
|
| + }
|
| +
|
| + @override
|
| + void visitTopLevelSetterInvoke(
|
| + ast.Send node,
|
| + MethodElement setter,
|
| + ast.NodeList arguments,
|
| + CallStructure callStructure,
|
| + _) {
|
| + handleInvalidStaticInvoke(node, setter);
|
| + }
|
| +
|
| @override
|
| void visitUnresolvedInvoke(
|
| ast.Send node,
|
| @@ -5164,9 +5222,7 @@ class SsaBuilder extends NewResolvedVisitor {
|
| if (element is ErroneousElement) {
|
| // An erroneous element indicates that the funciton could not be
|
| // resolved (a warning has been issued).
|
| - generateThrowNoSuchMethod(node,
|
| - noSuchMethodTargetSymbolString(element),
|
| - argumentNodes: node.arguments);
|
| + handleInvalidStaticInvoke(node, element);
|
| } else {
|
| // TODO(ahe): Do something like [generateWrongArgumentCountError].
|
| stack.add(graph.addConstantNull(compiler));
|
|
|