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

Unified Diff: pkg/compiler/lib/src/elements/modelx.dart

Issue 1132783002: Add Accessor, Getter, and Setter elements. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/elements/elements.dart ('k') | pkg/compiler/lib/src/elements/visitor.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/elements/modelx.dart
diff --git a/pkg/compiler/lib/src/elements/modelx.dart b/pkg/compiler/lib/src/elements/modelx.dart
index 36d6593a03750bd49336a8cfe573134f2a7c5505..8d905077bf0b0c67012c6178bac10fd2e4322033 100644
--- a/pkg/compiler/lib/src/elements/modelx.dart
+++ b/pkg/compiler/lib/src/elements/modelx.dart
@@ -171,7 +171,7 @@ abstract class ElementX extends Element {
Name get memberName => new Name(name, library);
- LibraryElement get implementationLibrary {
+ LibraryElementX get implementationLibrary {
Element element = this;
while (!identical(element.kind, ElementKind.LIBRARY)) {
element = element.enclosingElement;
@@ -421,9 +421,7 @@ class ErroneousConstructorElementX extends ErroneousElementX
throw new UnsupportedError("nestedClosures=");
}
- bool get hasNoBody => false;
-
- bool get _hasNoBody => false;
sigurdm 2015/05/08 11:20:48 Beautiful!
+ bool get hasBody => true;
sigurdm 2015/05/08 11:20:48 Does not seem like the right abstraction. Add TODO
Johnni Winther 2015/05/11 14:06:59 Removed.
void set effectiveTarget(_) {
throw new UnsupportedError("effectiveTarget=");
@@ -615,7 +613,7 @@ class ScopeX {
* element, they are enclosed by the class or compilation unit, as is the
* abstract field.
*/
- void addAccessor(FunctionElementX accessor,
+ void addAccessor(AccessorElementX accessor,
Element existing,
DiagnosticListener listener) {
void reportError(Element other) {
@@ -673,7 +671,7 @@ class CompilationUnitElementX extends ElementX
PartOf partTag;
Link<Element> localMembers = const Link<Element>();
- CompilationUnitElementX(Script script, LibraryElement library)
+ CompilationUnitElementX(Script script, LibraryElementX library)
: this.script = script,
super(script.name,
ElementKind.COMPILATION_UNIT,
@@ -681,6 +679,9 @@ class CompilationUnitElementX extends ElementX
library.addCompilationUnit(this);
}
+ @override
+ LibraryElementX get library => enclosingElement.declaration;
+
void forEachLocalMember(f(Element element)) {
localMembers.forEach(f);
}
@@ -932,6 +933,7 @@ class LibraryElementX
return tagsCache;
}
+ /// Record which element an import or export tag resolved to.
void recordResolvedTag(LibraryDependency tag, LibraryElement library) {
assert(tagMapping[tag] == null);
tagMapping[tag] = library;
@@ -1678,8 +1680,8 @@ class ErroneousInitializingFormalElementX extends ParameterElementX
}
class AbstractFieldElementX extends ElementX implements AbstractFieldElement {
- FunctionElementX getter;
- FunctionElementX setter;
+ MethodElementX getter;
sigurdm 2015/05/08 11:20:48 Could you even say: GetterElementX getter; ?
Johnni Winther 2015/05/11 14:06:59 Done.
+ MethodElementX setter;
AbstractFieldElementX(String name, Element enclosing)
: super(name, ElementKind.ABSTRACT_FIELD, enclosing);
@@ -1837,26 +1839,18 @@ abstract class BaseFunctionElementX
FunctionSignature functionSignatureCache;
- final bool _hasNoBody;
-
- AbstractFieldElement abstractField;
-
AsyncMarker asyncMarker = AsyncMarker.SYNC;
BaseFunctionElementX(String name,
ElementKind kind,
Modifiers this.modifiers,
- Element enclosing,
- bool hasNoBody)
- : super(name, kind, enclosing),
- _hasNoBody = hasNoBody {
+ Element enclosing)
+ : super(name, kind, enclosing) {
assert(modifiers != null);
}
bool get isExternal => modifiers.isExternal;
- bool get hasNoBody => _hasNoBody;
-
bool get isInstanceMember {
return isClassMember
&& !isConstructor
@@ -1911,11 +1905,7 @@ abstract class BaseFunctionElementX
}
}
- bool get isAbstract {
- return !modifiers.isExternal &&
- (isFunction || isAccessor) &&
- _hasNoBody;
- }
+ bool get isAbstract => false;
accept(ElementVisitor visitor, arg) {
return visitor.visitFunctionElement(this, arg);
@@ -1927,12 +1917,12 @@ abstract class BaseFunctionElementX
abstract class FunctionElementX extends BaseFunctionElementX
with AnalyzableElementX implements MethodElement {
+
FunctionElementX(String name,
ElementKind kind,
Modifiers modifiers,
- Element enclosing,
- bool hasNoBody)
- : super(name, kind, modifiers, enclosing, hasNoBody);
+ Element enclosing)
+ : super(name, kind, modifiers, enclosing);
MemberElement get memberContext => this;
@@ -1944,6 +1934,55 @@ abstract class FunctionElementX extends BaseFunctionElementX
}
}
+abstract class MethodElementX extends FunctionElementX {
+ final bool hasBody;
+
+ MethodElementX(String name,
+ ElementKind kind,
+ Modifiers modifiers,
+ Element enclosing,
+ // TODO(15101): Make this a named parameter.
+ this.hasBody)
+ : super(name, kind, modifiers, enclosing);
+
+ @override
+ bool get isAbstract {
+ return !modifiers.isExternal && !hasBody;
+ }
+}
+
+abstract class AccessorElementX extends MethodElementX
+ implements AccessorElement {
+ AbstractFieldElement abstractField;
+
+ AccessorElementX(String name,
+ ElementKind kind,
+ Modifiers modifiers,
+ Element enclosing,
+ bool hasBody)
+ : super(name, kind, modifiers, enclosing, hasBody);
+}
+
+abstract class GetterElementX extends AccessorElementX
+ implements GetterElement {
+
+ GetterElementX(String name,
+ Modifiers modifiers,
+ Element enclosing,
+ bool hasBody)
+ : super(name, ElementKind.GETTER, modifiers, enclosing, hasBody);
+}
+
+abstract class SetterElementX extends AccessorElementX
+ implements SetterElement {
+
+ SetterElementX(String name,
+ Modifiers modifiers,
+ Element enclosing,
+ bool hasBody)
+ : super(name, ElementKind.SETTER, modifiers, enclosing, hasBody);
+}
+
class LocalFunctionElementX extends BaseFunctionElementX
implements LocalFunctionElement {
final FunctionExpression node;
@@ -1953,7 +1992,7 @@ class LocalFunctionElementX extends BaseFunctionElementX
ElementKind kind,
Modifiers modifiers,
ExecutableElement enclosing)
- : super(name, kind, modifiers, enclosing, false);
+ : super(name, kind, modifiers, enclosing);
ExecutableElement get executableContext => enclosingElement;
@@ -2007,7 +2046,7 @@ abstract class ConstructorElementX extends FunctionElementX
ElementKind kind,
Modifiers modifiers,
Element enclosing)
- : super(name, kind, modifiers, enclosing, false);
+ : super(name, kind, modifiers, enclosing);
FunctionElement immediateRedirectionTarget;
@@ -2038,20 +2077,25 @@ abstract class ConstructorElementX extends FunctionElementX
return effectiveTargetType.substByContext(newType);
}
+ accept(ElementVisitor visitor, arg) {
+ return visitor.visitConstructorElement(this, arg);
+ }
+
ConstructorElement get definingConstructor => null;
ClassElement get enclosingClass => enclosingElement;
}
-class DeferredLoaderGetterElementX extends FunctionElementX {
+class DeferredLoaderGetterElementX extends GetterElementX
+ implements GetterElement {
final PrefixElement prefix;
DeferredLoaderGetterElementX(PrefixElement prefix)
: this.prefix = prefix,
super("loadLibrary",
- ElementKind.FUNCTION,
Modifiers.EMPTY,
- prefix, true);
+ prefix,
+ false);
FunctionSignature computeSignature(Compiler compiler) {
if (functionSignatureCache != null) return functionSignature;
@@ -2068,12 +2112,8 @@ class DeferredLoaderGetterElementX extends FunctionElementX {
bool get isSynthesized => true;
- bool get isFunction => false;
-
bool get isDeferredLoaderGetter => true;
- bool get isGetter => true;
-
bool get isTopLevel => true;
// By having position null, the enclosing elements location is printed in
// error messages.
@@ -2084,18 +2124,21 @@ class DeferredLoaderGetterElementX extends FunctionElementX {
bool get hasNode => false;
FunctionExpression get node => null;
+
+ @override
+ SetterElement get setter => null;
}
class ConstructorBodyElementX extends BaseFunctionElementX
implements ConstructorBodyElement {
- ConstructorElement constructor;
+ ConstructorElementX constructor;
- ConstructorBodyElementX(FunctionElement constructor)
+ ConstructorBodyElementX(ConstructorElementX constructor)
: this.constructor = constructor,
super(constructor.name,
ElementKind.GENERATIVE_CONSTRUCTOR_BODY,
Modifiers.EMPTY,
- constructor.enclosingElement, false) {
+ constructor.enclosingElement) {
functionSignatureCache = constructor.functionSignature;
}
@@ -2833,18 +2876,14 @@ class EnumConstructorElementX extends ConstructorElementX {
FunctionExpression parseNode(Compiler compiler) => node;
}
-class EnumMethodElementX extends FunctionElementX {
+class EnumMethodElementX extends MethodElementX {
final FunctionExpression node;
EnumMethodElementX(String name,
EnumClassElementX enumClass,
Modifiers modifiers,
this.node)
- : super(name,
- ElementKind.FUNCTION,
- modifiers,
- enumClass,
- false);
+ : super(name, ElementKind.FUNCTION, modifiers, enumClass, true);
@override
bool get hasNode => true;
« no previous file with comments | « pkg/compiler/lib/src/elements/elements.dart ('k') | pkg/compiler/lib/src/elements/visitor.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698