Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(366)

Unified Diff: pkg/compiler/lib/src/ssa/builder.dart

Issue 1149403009: Refactoring resolution of local access and unqualified access of statics (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Fix after rebase Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/resolved_visitor.dart ('k') | tests/compiler/dart2js/diagnose_ambiguous_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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));
« no previous file with comments | « pkg/compiler/lib/src/resolved_visitor.dart ('k') | tests/compiler/dart2js/diagnose_ambiguous_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698