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

Unified Diff: sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart

Issue 11414064: Ignore functions that have the same name as fields in gets and sets. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: extrapolate Karl's comment to getters Created 8 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
diff --git a/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart b/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
index cd522c3aca2ec79839f358bdf2e34e9bc22a42c8..3b2334cf63f504df5d006b88f0004e73836be689 100644
--- a/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
@@ -1019,14 +1019,14 @@ class TypeInferrerVisitor extends ResolvedVisitor<ConcreteType> {
}
ConcreteType analyzeSetNode(Node receiver, ConcreteType argumentType,
- SourceString source) {
+ SourceString name) {
ConcreteType receiverType = analyze(receiver);
- void augmentField(BaseType baseReceiverType, Element fieldOrSetter) {
- if (fieldOrSetter.isField()) {
- inferrer.augmentFieldType(fieldOrSetter, argumentType);
- } else {
- AbstractFieldElement abstractField = fieldOrSetter;
+ void augmentField(BaseType baseReceiverType, Element member) {
+ if (member.isField()) {
+ inferrer.augmentFieldType(member, argumentType);
+ } else if (member.isAbstractField()){
+ AbstractFieldElement abstractField = member;
FunctionElement setter = abstractField.setter;
// TODO(polux): A setter always returns void so there's no need to
// invalidate its callers even if it is called with new arguments.
@@ -1037,10 +1037,12 @@ class TypeInferrerVisitor extends ResolvedVisitor<ConcreteType> {
inferrer.getSendReturnType(setter, baseReceiverType,
new ArgumentsTypes([argumentType], new Map()));
}
+ // since this is a sendSet we ignore non-fields
}
if (receiverType.isUnkown()) {
- for (Element member in inferrer.getMembersByName(source)) {
+ for (Element member in inferrer.getMembersByName(name)) {
+ if (!(member.isField() || member.isAbstractField())) continue;
Element classElem = member.getEnclosingClass();
BaseType baseReceiverType = new ClassBaseType(classElem);
augmentField(baseReceiverType, member);
@@ -1049,7 +1051,7 @@ class TypeInferrerVisitor extends ResolvedVisitor<ConcreteType> {
for (BaseType baseReceiverType in receiverType.baseTypes) {
if (!baseReceiverType.isClass()) continue;
ClassBaseType baseReceiverClassType = baseReceiverType;
- Element member = baseReceiverClassType.element.lookupMember(source);
+ Element member = baseReceiverClassType.element.lookupMember(name);
if (member != null) {
augmentField(baseReceiverClassType, member);
}
@@ -1356,22 +1358,24 @@ class TypeInferrerVisitor extends ResolvedVisitor<ConcreteType> {
assert(node.receiver != null);
ConcreteType result = new ConcreteType.empty();
- void augmentResult(BaseType baseReceiverType, Element getterOrField) {
- if (getterOrField.isField()) {
- result = result.union(analyzeFieldRead(getterOrField));
- } else {
+ void augmentResult(BaseType baseReceiverType, Element member) {
+ if (member.isField()) {
+ result = result.union(analyzeFieldRead(member));
+ } else if (member.isAbstractField()){
// call to a getter
- AbstractFieldElement abstractField = getterOrField;
+ AbstractFieldElement abstractField = member;
result = result.union(analyzeGetterSend(baseReceiverType,
abstractField.getter));
}
+ // since this is a get we ignore non-fields
}
ConcreteType receiverType = analyze(node.receiver);
if (receiverType.isUnkown()) {
List<Element> members =
inferrer.getMembersByName(node.selector.asIdentifier().source);
- for (final member in members) {
+ for (Element member in members) {
+ if (!(member.isField() || member.isAbstractField())) continue;
Element classElement = member.getEnclosingClass();
ClassBaseType baseReceiverType = new ClassBaseType(classElement);
augmentResult(baseReceiverType, member);
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698