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

Side by Side Diff: dart/lib/compiler/implementation/elements/elements.dart

Issue 10836235: Check overrides. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #library('elements'); 5 #library('elements');
6 6
7 #import('../tree/tree.dart'); 7 #import('../tree/tree.dart');
8 #import('../scanner/scannerlib.dart'); 8 #import('../scanner/scannerlib.dart');
9 #import('../leg.dart'); // TODO(karlklose): we only need type. 9 #import('../leg.dart'); // TODO(karlklose): we only need type.
10 #import('../util/util.dart'); 10 #import('../util/util.dart');
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 268
269 bool _isNative = false; 269 bool _isNative = false;
270 void setNative() { _isNative = true; } 270 void setNative() { _isNative = true; }
271 bool isNative() => _isNative; 271 bool isNative() => _isNative;
272 272
273 FunctionElement asFunctionElement() => null; 273 FunctionElement asFunctionElement() => null;
274 274
275 Element cloneTo(Element enclosing, DiagnosticListener listener) { 275 Element cloneTo(Element enclosing, DiagnosticListener listener) {
276 listener.cancel("Unimplemented cloneTo", element: this); 276 listener.cancel("Unimplemented cloneTo", element: this);
277 } 277 }
278
279 Link<Type> get allSupertypesAndSelf() {
280 return allSupertypes.prepend(new InterfaceType(this));
281 }
278 } 282 }
279 283
280 class ContainerElement extends Element { 284 class ContainerElement extends Element {
281 ContainerElement(name, kind, enclosingElement) : 285 ContainerElement(name, kind, enclosingElement) :
282 super(name, kind, enclosingElement); 286 super(name, kind, enclosingElement);
283 287
284 abstract void addMember(Element element, DiagnosticListener listener); 288 abstract void addMember(Element element, DiagnosticListener listener);
285 289
286 void addGetterOrSetter(Element element, 290 void addGetterOrSetter(Element element,
287 Element existing, 291 Element existing,
(...skipping 780 matching lines...) Expand 10 before | Expand all | Expand 10 after
1068 bool isPrivate = memberName.isPrivate(); 1072 bool isPrivate = memberName.isPrivate();
1069 for (ClassElement s = superclass; s != null; s = s.superclass) { 1073 for (ClassElement s = superclass; s != null; s = s.superclass) {
1070 // Private members from a different library are not visible. 1074 // Private members from a different library are not visible.
1071 if (isPrivate && getLibrary() !== s.getLibrary()) continue; 1075 if (isPrivate && getLibrary() !== s.getLibrary()) continue;
1072 Element e = s.lookupLocalMember(memberName); 1076 Element e = s.lookupLocalMember(memberName);
1073 if (e === null) continue; 1077 if (e === null) continue;
1074 // Static members are not inherited. 1078 // Static members are not inherited.
1075 if (e.modifiers.isStatic()) continue; 1079 if (e.modifiers.isStatic()) continue;
1076 return e; 1080 return e;
1077 } 1081 }
1082 if (isInterface()) {
1083 return lookupSuperInterfaceMember(memberName, getLibrary());
1084 }
1078 return null; 1085 return null;
1079 } 1086 }
1080 1087
1088 Element lookupSuperInterfaceMember(SourceString memberName,
1089 LibraryElement fromLibrary) {
1090 for (Type t in interfaces) {
1091 Element e = t.element.lookupLocalMember(memberName);
1092 if (e === null) continue;
1093 // Private members from a different library are not visible.
1094 if (memberName.isPrivate() && fromLibrary !== e.getLibrary()) continue;
karlklose 2012/08/14 11:06:51 You could store the result of memberName.isPrivate
ahe 2012/08/14 18:20:34 Done.
1095 // Static members are not inherited.
1096 if (e.modifiers.isStatic()) continue;
1097 return e;
1098 }
1099 }
karlklose 2012/08/14 11:06:51 I would prefer an explicit 'return null' here.
ahe 2012/08/14 18:20:34 Done.
1100
1081 /** 1101 /**
1082 * Find the first member in the class chain with the given 1102 * Find the first member in the class chain with the given
1083 * [memberName]. This method is NOT to be used for resolving 1103 * [memberName]. This method is NOT to be used for resolving
1084 * unqualified sends because it does not implement the scoping 1104 * unqualified sends because it does not implement the scoping
1085 * rules, where library scope comes before superclass scope. 1105 * rules, where library scope comes before superclass scope.
1086 */ 1106 */
1087 Element lookupMember(SourceString memberName) { 1107 Element lookupMember(SourceString memberName) {
1088 Element localMember = localMembers[memberName]; 1108 Element localMember = localMembers[memberName];
1089 return localMember === null ? lookupSuperMember(memberName) : localMember; 1109 return localMember === null ? lookupSuperMember(memberName) : localMember;
1090 } 1110 }
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after
1419 Node parseNode(compiler) => cachedNode; 1439 Node parseNode(compiler) => cachedNode;
1420 1440
1421 String toString() => "${enclosingElement.toString()}.${name.slowToString()}"; 1441 String toString() => "${enclosingElement.toString()}.${name.slowToString()}";
1422 1442
1423 TypeVariableElement cloneTo(Element enclosing, DiagnosticListener listener) { 1443 TypeVariableElement cloneTo(Element enclosing, DiagnosticListener listener) {
1424 TypeVariableElement result = 1444 TypeVariableElement result =
1425 new TypeVariableElement(name, enclosing, node, type, bound); 1445 new TypeVariableElement(name, enclosing, node, type, bound);
1426 return result; 1446 return result;
1427 } 1447 }
1428 } 1448 }
OLDNEW
« no previous file with comments | « no previous file | dart/lib/compiler/implementation/enqueue.dart » ('j') | dart/lib/compiler/implementation/enqueue.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698