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

Side by Side Diff: pkg/compiler/lib/src/elements/elements.dart

Issue 2925263002: A step towards handling `new Object()` in compile_from_dill_test (Closed)
Patch Set: Created 3 years, 6 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
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 '../common.dart'; 7 import '../common.dart';
8 import '../common/resolution.dart' show Resolution; 8 import '../common/resolution.dart' show Resolution;
9 import '../constants/constructors.dart'; 9 import '../constants/constructors.dart';
10 import '../constants/expressions.dart'; 10 import '../constants/expressions.dart';
(...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 static bool isStaticOrTopLevelFunction(Element element) { 500 static bool isStaticOrTopLevelFunction(Element element) {
501 return isStaticOrTopLevel(element) && element.isFunction; 501 return isStaticOrTopLevel(element) && element.isFunction;
502 } 502 }
503 503
504 static bool isInstanceMethod(Element element) { 504 static bool isInstanceMethod(Element element) {
505 return !Elements.isUnresolved(element) && 505 return !Elements.isUnresolved(element) &&
506 element.isInstanceMember && 506 element.isInstanceMember &&
507 (identical(element.kind, ElementKind.FUNCTION)); 507 (identical(element.kind, ElementKind.FUNCTION));
508 } 508 }
509 509
510 /// Also returns true for [ConstructorBodyElement]s and getters/setters.
511 static bool isNonAbstractInstanceMember(Element element) {
512 // The generative constructor body is not a function. We therefore treat
513 // it specially.
514 if (element.isGenerativeConstructorBody) return true;
515 return !Elements.isUnresolved(element) &&
516 !element.isAbstract &&
517 element.isInstanceMember &&
518 (element.isFunction || element.isAccessor);
519 }
520
521 static bool isInstanceSend(Send send, TreeElements elements) { 510 static bool isInstanceSend(Send send, TreeElements elements) {
522 Element element = elements[send]; 511 Element element = elements[send];
523 if (element == null) return !isClosureSend(send, element); 512 if (element == null) return !isClosureSend(send, element);
524 return isInstanceMethod(element) || 513 return isInstanceMethod(element) ||
525 isInstanceField(element) || 514 isInstanceField(element) ||
526 (send.isConditional && !element.isStatic); 515 (send.isConditional && !element.isStatic);
527 } 516 }
528 517
529 static bool isClosureSend(Send send, Element element) { 518 static bool isClosureSend(Send send, Element element) {
530 if (send.isPropertyAccess) return false; 519 if (send.isPropertyAccess) return false;
(...skipping 1004 matching lines...) Expand 10 before | Expand all | Expand 10 after
1535 bool implementsInterface(ClassElement intrface); 1524 bool implementsInterface(ClassElement intrface);
1536 1525
1537 bool hasFieldShadowedBy(Element fieldMember); 1526 bool hasFieldShadowedBy(Element fieldMember);
1538 1527
1539 /// Returns `true` if this class has a @proxy annotation. 1528 /// Returns `true` if this class has a @proxy annotation.
1540 bool get isProxy; 1529 bool get isProxy;
1541 1530
1542 /// Returns `true` if the class hierarchy for this class contains errors. 1531 /// Returns `true` if the class hierarchy for this class contains errors.
1543 bool get hasIncompleteHierarchy; 1532 bool get hasIncompleteHierarchy;
1544 1533
1545 void addBackendMember(Element element); 1534 void addBackendMember(ConstructorBodyElement element);
1546 void reverseBackendMembers(); 1535 void reverseBackendMembers();
1547 1536
1548 Element lookupMember(String memberName); 1537 Element lookupMember(String memberName);
1549 1538
1550 /// Looks up a class instance member declared or inherited in this class 1539 /// Looks up a class instance member declared or inherited in this class
1551 /// using [memberName] to match the (private) name and getter/setter property. 1540 /// using [memberName] to match the (private) name and getter/setter property.
1552 /// 1541 ///
1553 /// This method recursively visits superclasses until the member is found or 1542 /// This method recursively visits superclasses until the member is found or
1554 /// [stopAt] is reached. 1543 /// [stopAt] is reached.
1555 MemberElement lookupByName(Name memberName, {ClassElement stopAt}); 1544 MemberElement lookupByName(Name memberName, {ClassElement stopAt});
1556 MemberElement lookupSuperByName(Name memberName); 1545 MemberElement lookupSuperByName(Name memberName);
1557 1546
1558 Element lookupLocalMember(String memberName); 1547 Element lookupLocalMember(String memberName);
1559 Element lookupBackendMember(String memberName); 1548 ConstructorBodyElement lookupBackendMember(String memberName);
1560 Element lookupSuperMember(String memberName); 1549 Element lookupSuperMember(String memberName);
1561 1550
1562 Element lookupSuperMemberInLibrary(String memberName, LibraryElement library); 1551 Element lookupSuperMemberInLibrary(String memberName, LibraryElement library);
1563 1552
1564 // TODO(johnniwinther): Clean up semantics. Can the default constructor take 1553 // TODO(johnniwinther): Clean up semantics. Can the default constructor take
1565 // optional arguments? Must it be resolved? 1554 // optional arguments? Must it be resolved?
1566 ConstructorElement lookupDefaultConstructor(); 1555 ConstructorElement lookupDefaultConstructor();
1567 ConstructorElement lookupConstructor(String name); 1556 ConstructorElement lookupConstructor(String name);
1568 1557
1569 void forEachMember(void f(ClassElement enclosingClass, Element member), 1558 void forEachMember(void f(ClassElement enclosingClass, Element member),
1570 {bool includeBackendMembers: false, 1559 {bool includeBackendMembers: false,
1571 bool includeSuperAndInjectedMembers: false}); 1560 bool includeSuperAndInjectedMembers: false});
1572 1561
1573 void forEachInstanceField( 1562 void forEachInstanceField(
1574 void f(ClassElement enclosingClass, FieldElement field), 1563 void f(ClassElement enclosingClass, FieldElement field),
1575 {bool includeSuperAndInjectedMembers: false}); 1564 {bool includeSuperAndInjectedMembers: false});
1576 1565
1577 /// Similar to [forEachInstanceField] but visits static fields. 1566 /// Similar to [forEachInstanceField] but visits static fields.
1578 void forEachStaticField(void f(ClassElement enclosingClass, Element field)); 1567 void forEachStaticField(void f(ClassElement enclosingClass, Element field));
1579 1568
1580 void forEachBackendMember(void f(Element member)); 1569 void forEachBackendMember(void f(ConstructorBodyElement member));
1581 1570
1582 /// Looks up the member [name] in this class. 1571 /// Looks up the member [name] in this class.
1583 Member lookupClassMember(Name name); 1572 Member lookupClassMember(Name name);
1584 1573
1585 /// Calls [f] with each member of this class. 1574 /// Calls [f] with each member of this class.
1586 void forEachClassMember(f(Member member)); 1575 void forEachClassMember(f(Member member));
1587 1576
1588 /// Looks up the member [name] in the interface of this class. 1577 /// Looks up the member [name] in the interface of this class.
1589 MemberSignature lookupInterfaceMember(Name name); 1578 MemberSignature lookupInterfaceMember(Name name);
1590 1579
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
1909 /// by a field. 1898 /// by a field.
1910 bool get isDeclaredByField; 1899 bool get isDeclaredByField;
1911 1900
1912 /// Returns `true` if this member is abstract. 1901 /// Returns `true` if this member is abstract.
1913 bool get isAbstract; 1902 bool get isAbstract;
1914 1903
1915 /// If abstract, [implementation] points to the overridden concrete member, 1904 /// If abstract, [implementation] points to the overridden concrete member,
1916 /// if any. Otherwise [implementation] points to the member itself. 1905 /// if any. Otherwise [implementation] points to the member itself.
1917 Member get implementation; 1906 Member get implementation;
1918 } 1907 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698