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

Unified Diff: pkg/analyzer2dart/lib/src/cps_generator.dart

Issue 1076793005: Fine-grain field, getter, setter, and function access in IrBuilder. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 8 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 | « no previous file | pkg/analyzer2dart/lib/src/modely.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer2dart/lib/src/cps_generator.dart
diff --git a/pkg/analyzer2dart/lib/src/cps_generator.dart b/pkg/analyzer2dart/lib/src/cps_generator.dart
index fbb0ee054f913c8325935731cf9fb358e3e68424..f2cc5d6cc228aaf1134f109562c311d78b42f87d 100644
--- a/pkg/analyzer2dart/lib/src/cps_generator.dart
+++ b/pkg/analyzer2dart/lib/src/cps_generator.dart
@@ -202,7 +202,7 @@ class CpsGeneratingVisitor extends SemanticVisitor<ir.Node>
analyzer.Element staticElement = semantics.element;
dart2js.Element element = converter.convertElement(staticElement);
List<ir.Primitive> arguments = visitArguments(node.argumentList);
- return irBuilder.buildStaticInvocation(
+ return irBuilder.buildStaticFunctionInvocation(
element,
createSelectorFromMethodInvocation(
node.argumentList, node.methodName.name),
@@ -218,13 +218,16 @@ class CpsGeneratingVisitor extends SemanticVisitor<ir.Node>
AccessSemantics semantics) {
analyzer.Element staticElement = semantics.element;
dart2js.Element element = converter.convertElement(staticElement);
- ir.Primitive receiver = irBuilder.buildLocalGet(element);
List<ir.Definition> arguments = visitArguments(node.argumentList);
- return irBuilder.buildCallInvocation(
- receiver,
- createSelectorFromMethodInvocation(
- node.argumentList, node.methodName.name),
- arguments);
+ Selector selector = createSelectorFromMethodInvocation(
+ node.argumentList, node.methodName.name);
+ if (semantics.kind == AccessKind.LOCAL_FUNCTION) {
+ return irBuilder.buildLocalFunctionInvocation(
+ element, selector, arguments);
+ } else {
+ return irBuilder.buildLocalVariableInvocation(
+ element, selector, arguments);
+ }
}
@override
@@ -348,7 +351,12 @@ class CpsGeneratingVisitor extends SemanticVisitor<ir.Node>
}
ir.Primitive handleLocalAccess(AstNode node, AccessSemantics semantics) {
- return irBuilder.buildLocalGet(getLocal(node, semantics));
+ dart2js.Element local = getLocal(node, semantics);
+ if (semantics.kind == AccessKind.LOCAL_FUNCTION) {
+ return irBuilder.buildLocalFunctionGet(local);
+ } else {
+ return irBuilder.buildLocalVariableGet(local);
+ }
}
ir.Primitive handleLocalAssignment(AssignmentExpression node,
@@ -356,7 +364,7 @@ class CpsGeneratingVisitor extends SemanticVisitor<ir.Node>
if (node.operator.lexeme != '=') {
return giveUp(node, 'Assignment operator: ${node.operator.lexeme}');
}
- return irBuilder.buildLocalSet(
+ return irBuilder.buildLocalVariableSet(
getLocal(node, semantics),
build(node.rightHandSide));
}
@@ -391,7 +399,7 @@ class CpsGeneratingVisitor extends SemanticVisitor<ir.Node>
// [TreeShaker] and shared with the [CpsGeneratingVisitor].
assert(invariant(node, target.isTopLevel || target.isStatic,
'$target expected to be top-level or static.'));
- return irBuilder.buildStaticSet(target, build(node.rightHandSide));
+ return irBuilder.buildStaticFieldSet(target, build(node.rightHandSide));
}
@override
@@ -411,7 +419,7 @@ class CpsGeneratingVisitor extends SemanticVisitor<ir.Node>
// [TreeShaker] and shared with the [CpsGeneratingVisitor].
assert(invariant(node, target.isTopLevel || target.isStatic,
'$target expected to be top-level or static.'));
- return irBuilder.buildStaticGet(target);
+ return irBuilder.buildStaticFieldGet(target);
}
ir.Primitive handleBinaryExpression(BinaryExpression node,
« no previous file with comments | « no previous file | pkg/analyzer2dart/lib/src/modely.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698