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

Unified Diff: frog/member.dart

Issue 8483005: better property overriding field (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 9 years, 1 month 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 | « frog/frogsh ('k') | tests/language/language.status » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: frog/member.dart
diff --git a/frog/member.dart b/frog/member.dart
index b676f475787750c4410921ed2d39ea6889b12aba..c8634f23f9a40b3d0d6aae51815aca3b6eb50597 100644
--- a/frog/member.dart
+++ b/frog/member.dart
@@ -378,6 +378,8 @@ class PropertyMember extends Member {
MethodMember getter;
MethodMember setter;
+ Member _overriddenField;
+
bool _provideFieldSyntax = false;
// TODO(jimhug): What is the right span for this beast?
@@ -411,6 +413,7 @@ class PropertyMember extends Member {
// TODO(jimhug):
// other.returnType.ensureAssignableFrom(returnType, null, true);
if (other.isProperty) addFromParent(other);
+ else _overriddenField = other;
return true;
} else {
world.error('property can only override field or property',
@@ -422,6 +425,9 @@ class PropertyMember extends Member {
Value get_(MethodGenerator context, Node node, Value target,
[bool isDynamic=false]) {
if (getter == null) {
+ if (_overriddenField != null) {
+ return _overriddenField.get_(context, node, target, isDynamic);
+ }
return target.invokeNoSuchMethod(context, 'get:$name', node);
}
return getter.invoke(context, node, target, Arguments.EMPTY);
@@ -429,6 +435,13 @@ class PropertyMember extends Member {
Value set_(MethodGenerator context, Node node, Value target, Value value,
[bool isDynamic=false]) {
+ if (setter == null) {
+ if (_overriddenField != null) {
+ return _overriddenField.set_(context, node, target, value, isDynamic);
+ }
+ return target.invokeNoSuchMethod(context, 'set:$name', node,
+ new Arguments(null, [value]));
+ }
return setter.invoke(context, node, target, new Arguments(null, [value]),
isDynamic);
}
« no previous file with comments | « frog/frogsh ('k') | tests/language/language.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698