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

Unified Diff: frog/leg/ssa/builder.dart

Issue 9245002: Support getters and setters. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 8 years, 11 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
Index: frog/leg/ssa/builder.dart
===================================================================
--- frog/leg/ssa/builder.dart (revision 3791)
+++ frog/leg/ssa/builder.dart (working copy)
@@ -783,6 +783,9 @@
Selector selector = elements.getSelector(send);
if (Elements.isStaticOrTopLevelField(element)) {
push(new HStatic(element));
+ if (element.kind == ElementKind.GETTER) {
+ push(new HInvokeStatic(selector, <HInstruction>[pop()]));
+ }
} else if (element === null || Elements.isInstanceField(element)) {
HInstruction receiver;
if (send.receiver == null) {
@@ -820,18 +823,15 @@
void generateSetter(SendSet send, Element element, HInstruction value) {
Selector selector = elements.getSelector(send);
if (Elements.isStaticOrTopLevelField(element)) {
- add(new HStaticStore(element, value));
- stack.add(value);
- } else if (Elements.isInstanceField(element)) {
- SourceString methodName = element.name;
- HInstruction receiver = thisDefinition;
- if (receiver === null) {
- compiler.unimplemented("Ssa.generateSetter.", node: send);
+ if (element.kind == ElementKind.SETTER) {
+ HStatic target = new HStatic(element);
+ add(target);
+ add(new HInvokeStatic(selector, <HInstruction>[target, value]));
+ } else {
+ add(new HStaticStore(element, value));
}
- add(new HInvokeDynamicSetter(
- selector, element, methodName, receiver, value));
stack.add(value);
- } else if (element === null) {
+ } else if (element === null || Elements.isInstanceField(element)) {
SourceString dartSetterName = send.selector.asIdentifier().source;
HInstruction receiver;
if (send.receiver == null) {

Powered by Google App Engine
This is Rietveld 408576698