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

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

Issue 2731173002: Add ClassEntity.library, MemberEntity.library and FunctionEntity.isExternal (Closed)
Patch Set: Updated cf. comments. Created 3 years, 9 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) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 entities; 5 library entities;
6 6
7 import '../common.dart'; 7 import '../common.dart';
8 8
9 /// Abstract interface for entities. 9 /// Abstract interface for entities.
10 /// 10 ///
(...skipping 12 matching lines...) Expand all
23 /// 23 ///
24 /// Currently only [LibraryElement] but later also kernel based Dart classes 24 /// Currently only [LibraryElement] but later also kernel based Dart classes
25 /// and/or Dart-in-JS classes. 25 /// and/or Dart-in-JS classes.
26 abstract class LibraryEntity extends Entity {} 26 abstract class LibraryEntity extends Entity {}
27 27
28 /// Stripped down super interface for class like entities. 28 /// Stripped down super interface for class like entities.
29 /// 29 ///
30 /// Currently only [ClassElement] but later also kernel based Dart classes 30 /// Currently only [ClassElement] but later also kernel based Dart classes
31 /// and/or Dart-in-JS classes. 31 /// and/or Dart-in-JS classes.
32 abstract class ClassEntity extends Entity { 32 abstract class ClassEntity extends Entity {
33 /// If this is a normal class, the enclosing library for this class. If this
34 /// is a closure class, the enclosing class of the closure for which it was
35 /// created.
36 LibraryEntity get library;
37
38 /// Whether this is a synthesized class for a closurized method or local
39 /// function.
33 bool get isClosure; 40 bool get isClosure;
34 } 41 }
35 42
36 abstract class TypeVariableEntity extends Entity { 43 abstract class TypeVariableEntity extends Entity {
44 /// The class or generic method that declared this type variable.
37 Entity get typeDeclaration; 45 Entity get typeDeclaration;
46
47 /// The index of this type variable in the type variables of its
48 /// [typeDeclaration].
38 int get index; 49 int get index;
39 } 50 }
40 51
41 /// Stripped down super interface for member like entities, that is, 52 /// Stripped down super interface for member like entities, that is,
42 /// constructors, methods, fields etc. 53 /// constructors, methods, fields etc.
43 /// 54 ///
44 /// Currently only [MemberElement] but later also kernel based Dart members 55 /// Currently only [MemberElement] but later also kernel based Dart members
45 /// and/or Dart-in-JS properties. 56 /// and/or Dart-in-JS properties.
46 abstract class MemberEntity extends Entity { 57 abstract class MemberEntity extends Entity {
58 /// Whether this is a member of a library.
47 bool get isTopLevel; 59 bool get isTopLevel;
60
61 /// Whether this is a static member of a class.
48 bool get isStatic; 62 bool get isStatic;
63
64 /// Whether this is an instance member of a class.
49 bool get isInstanceMember; 65 bool get isInstanceMember;
66
67 /// Whether this is a constructor.
50 bool get isConstructor; 68 bool get isConstructor;
69
70 /// Whether this is a field.
51 bool get isField; 71 bool get isField;
72
73 /// Whether this is a normal method (neither constructor, getter or setter)
74 /// or operator method.
52 bool get isFunction; 75 bool get isFunction;
76
77 /// Whether this is a getter.
53 bool get isGetter; 78 bool get isGetter;
79
80 /// Whether this is a setter.
54 bool get isSetter; 81 bool get isSetter;
82
83 /// Whether this member is assignable, i.e. a non-final field.
55 bool get isAssignable; 84 bool get isAssignable;
85
86 /// The enclosing class if this is a constuctor, instance member or
87 /// static member of a class.
56 ClassEntity get enclosingClass; 88 ClassEntity get enclosingClass;
89
90 /// The enclosing library if this is a library member, otherwise the
91 /// enclosing library of the [enclosingClass].
92 LibraryEntity get library;
57 } 93 }
58 94
59 /// Stripped down super interface for field like entities. 95 /// Stripped down super interface for field like entities.
60 /// 96 ///
61 /// Currently only [FieldElement] but later also kernel based Dart fields 97 /// Currently only [FieldElement] but later also kernel based Dart fields
62 /// and/or Dart-in-JS field-like properties. 98 /// and/or Dart-in-JS field-like properties.
63 abstract class FieldEntity extends MemberEntity {} 99 abstract class FieldEntity extends MemberEntity {}
64 100
65 /// Stripped down super interface for function like entities. 101 /// Stripped down super interface for function like entities.
66 /// 102 ///
67 /// Currently only [MethodElement] but later also kernel based Dart constructors 103 /// Currently only [MethodElement] but later also kernel based Dart constructors
68 /// and methods and/or Dart-in-JS function-like properties. 104 /// and methods and/or Dart-in-JS function-like properties.
69 abstract class FunctionEntity extends MemberEntity {} 105 abstract class FunctionEntity extends MemberEntity {
106 /// Whether this function is external, i.e. the body is not defined in terms
107 /// of Dart code.
108 bool get isExternal;
109 }
70 110
71 /// Stripped down super interface for constructor like entities. 111 /// Stripped down super interface for constructor like entities.
72 /// 112 ///
73 /// Currently only [ConstructorElement] but later also kernel based Dart 113 /// Currently only [ConstructorElement] but later also kernel based Dart
74 /// constructors and/or Dart-in-JS constructor-like properties. 114 /// constructors and/or Dart-in-JS constructor-like properties.
75 // TODO(johnniwinther): Remove factory constructors from the set of 115 // TODO(johnniwinther): Remove factory constructors from the set of
76 // constructors. 116 // constructors.
77 abstract class ConstructorEntity extends FunctionEntity { 117 abstract class ConstructorEntity extends FunctionEntity {
118 /// Whether this is a generative constructor, possibly redirecting.
78 bool get isGenerativeConstructor; 119 bool get isGenerativeConstructor;
120
121 /// Whether this is a factory constructor, possibly redirecting.
79 bool get isFactoryConstructor; 122 bool get isFactoryConstructor;
80 } 123 }
81 124
82 /// An entity that defines a local entity (memory slot) in generated code. 125 /// An entity that defines a local entity (memory slot) in generated code.
83 /// 126 ///
84 /// Parameters, local variables and local functions (can) define local entity 127 /// Parameters, local variables and local functions (can) define local entity
85 /// and thus implement [Local] through [LocalElement]. For non-element locals, 128 /// and thus implement [Local] through [LocalElement]. For non-element locals,
86 /// like `this` and boxes, specialized [Local] classes are created. 129 /// like `this` and boxes, specialized [Local] classes are created.
87 /// 130 ///
88 /// Type variables can introduce locals in factories and constructors 131 /// Type variables can introduce locals in factories and constructors
89 /// but since one type variable can introduce different locals in different 132 /// but since one type variable can introduce different locals in different
90 /// factories and constructors it is not itself a [Local] but instead 133 /// factories and constructors it is not itself a [Local] but instead
91 /// a non-element [Local] is created through a specialized class. 134 /// a non-element [Local] is created through a specialized class.
92 // TODO(johnniwinther): Should [Local] have `isAssignable` or `type`? 135 // TODO(johnniwinther): Should [Local] have `isAssignable` or `type`?
93 abstract class Local extends Entity { 136 abstract class Local extends Entity {
94 /// The context in which this local is defined. 137 /// The context in which this local is defined.
95 Entity get executableContext; 138 Entity get executableContext;
96 139
97 /// The outermost member that contains this element. 140 /// The outermost member that contains this element.
98 /// 141 ///
99 /// For top level, static or instance members, the member context is the 142 /// For top level, static or instance members, the member context is the
100 /// element itself. For parameters, local variables and nested closures, the 143 /// element itself. For parameters, local variables and nested closures, the
101 /// member context is the top level, static or instance member in which it is 144 /// member context is the top level, static or instance member in which it is
102 /// defined. 145 /// defined.
103 MemberEntity get memberContext; 146 MemberEntity get memberContext;
104 } 147 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/elements/common.dart ('k') | pkg/compiler/lib/src/inferrer/type_graph_nodes.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698