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

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

Issue 11416144: Produce run-time error when type parameters are accessed from static context. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Removed redundant malformed type replacement with dynamic type. Created 8 years 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 'dart:uri'; 7 import 'dart:uri';
8 8
9 // TODO(ahe): Rename prefix to 'api' when VM bug is fixed. 9 // TODO(ahe): Rename prefix to 'api' when VM bug is fixed.
10 import '../../compiler.dart' as api_e; 10 import '../../compiler.dart' as api_e;
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
113 const ElementKind('statement', ElementCategory.NONE); 113 const ElementKind('statement', ElementCategory.NONE);
114 static const ElementKind LABEL = 114 static const ElementKind LABEL =
115 const ElementKind('label', ElementCategory.NONE); 115 const ElementKind('label', ElementCategory.NONE);
116 static const ElementKind VOID = 116 static const ElementKind VOID =
117 const ElementKind('void', ElementCategory.NONE); 117 const ElementKind('void', ElementCategory.NONE);
118 118
119 static const ElementKind AMBIGUOUS = 119 static const ElementKind AMBIGUOUS =
120 const ElementKind('ambiguous', ElementCategory.NONE); 120 const ElementKind('ambiguous', ElementCategory.NONE);
121 static const ElementKind ERROR = 121 static const ElementKind ERROR =
122 const ElementKind('error', ElementCategory.NONE); 122 const ElementKind('error', ElementCategory.NONE);
123 static const ElementKind MALFORMED_TYPE =
124 const ElementKind('malformed', ElementCategory.NONE);
123 125
124 toString() => id; 126 toString() => id;
125 } 127 }
126 128
127 class Element implements Spannable { 129 class Element implements Spannable {
128 static int elementHashCode = 0; 130 static int elementHashCode = 0;
129 131
130 final SourceString name; 132 final SourceString name;
131 final ElementKind kind; 133 final ElementKind kind;
132 final Element enclosingElement; 134 final Element enclosingElement;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 bool isLibrary() => identical(kind, ElementKind.LIBRARY); 195 bool isLibrary() => identical(kind, ElementKind.LIBRARY);
194 bool impliesType() => (kind.category & ElementCategory.IMPLIES_TYPE) != 0; 196 bool impliesType() => (kind.category & ElementCategory.IMPLIES_TYPE) != 0;
195 bool isExtendable() => (kind.category & ElementCategory.IS_EXTENDABLE) != 0; 197 bool isExtendable() => (kind.category & ElementCategory.IS_EXTENDABLE) != 0;
196 198
197 /** See [ErroneousElement] for documentation. */ 199 /** See [ErroneousElement] for documentation. */
198 bool isErroneous() => false; 200 bool isErroneous() => false;
199 201
200 /** See [AmbiguousElement] for documentation. */ 202 /** See [AmbiguousElement] for documentation. */
201 bool isAmbiguous() => false; 203 bool isAmbiguous() => false;
202 204
205 bool isMalformed() => false;
206
203 /** 207 /**
204 * Is [:true:] if this element has a corresponding patch. 208 * Is [:true:] if this element has a corresponding patch.
205 * 209 *
206 * If [:true:] this element has a non-null [patch] field. 210 * If [:true:] this element has a non-null [patch] field.
207 * 211 *
208 * See [:patch_parser.dart:] for a description of the terminology. 212 * See [:patch_parser.dart:] for a description of the terminology.
209 */ 213 */
210 bool get isPatched => false; 214 bool get isPatched => false;
211 215
212 /** 216 /**
(...skipping 1099 matching lines...) Expand 10 before | Expand all | Expand 10 after
1312 class VoidElement extends Element { 1316 class VoidElement extends Element {
1313 VoidElement(Element enclosing) 1317 VoidElement(Element enclosing)
1314 : super(const SourceString('void'), ElementKind.VOID, enclosing); 1318 : super(const SourceString('void'), ElementKind.VOID, enclosing);
1315 DartType computeType(compiler) => compiler.types.voidType; 1319 DartType computeType(compiler) => compiler.types.voidType;
1316 Node parseNode(_) { 1320 Node parseNode(_) {
1317 throw 'internal error: parseNode on void'; 1321 throw 'internal error: parseNode on void';
1318 } 1322 }
1319 bool impliesType() => true; 1323 bool impliesType() => true;
1320 } 1324 }
1321 1325
1326 class MalformedTypeElement extends Element {
1327 final TypeAnnotation typeNode;
1328
1329 MalformedTypeElement(this.typeNode, Element enclosing)
1330 : super(const SourceString('malformed'),
1331 ElementKind.MALFORMED_TYPE,
1332 enclosing);
1333
1334 DartType computeType(compiler) => compiler.types.malformedType;
1335
1336 Node parseNode(_) => typeNode;
1337
1338 bool impliesType() => true;
1339
1340 bool isMalformed() => true;
1341 }
1342
1322 /** 1343 /**
1323 * [TypeDeclarationElement] defines the common interface for class/interface 1344 * [TypeDeclarationElement] defines the common interface for class/interface
1324 * declarations and typedefs. 1345 * declarations and typedefs.
1325 */ 1346 */
1326 abstract class TypeDeclarationElement implements Element { 1347 abstract class TypeDeclarationElement implements Element {
1327 // TODO(johnniwinther): This class should eventually be a mixin. 1348 // TODO(johnniwinther): This class should eventually be a mixin.
1328 1349
1329 /** 1350 /**
1330 * The type variables declared on this declaration. The type variables are not 1351 * The type variables declared on this declaration. The type variables are not
1331 * available until the type of the element has been computed through 1352 * available until the type of the element has been computed through
(...skipping 385 matching lines...) Expand 10 before | Expand all | Expand 10 after
1717 return 'patch ${super.toString()}'; 1738 return 'patch ${super.toString()}';
1718 } else if (patch != null) { 1739 } else if (patch != null) {
1719 return 'origin ${super.toString()}'; 1740 return 'origin ${super.toString()}';
1720 } else { 1741 } else {
1721 return super.toString(); 1742 return super.toString();
1722 } 1743 }
1723 } 1744 }
1724 } 1745 }
1725 1746
1726 class Elements { 1747 class Elements {
1727 static bool isUnresolved(Element e) => e == null || e.isErroneous(); 1748 static bool isUnresolved(Element e) {
1749 return e == null || e.isErroneous() || e.isMalformed();
1750 }
1728 static bool isErroneousElement(Element e) => e != null && e.isErroneous(); 1751 static bool isErroneousElement(Element e) => e != null && e.isErroneous();
1752 static bool isMalformedElement(Element e) => e != null && e.isMalformed();
1729 1753
1730 static bool isClass(Element e) => e != null && e.kind == ElementKind.CLASS; 1754 static bool isClass(Element e) => e != null && e.kind == ElementKind.CLASS;
1731 static bool isTypedef(Element e) { 1755 static bool isTypedef(Element e) {
1732 return e != null && e.kind == ElementKind.TYPEDEF; 1756 return e != null && e.kind == ElementKind.TYPEDEF;
1733 } 1757 }
1734 1758
1735 static bool isLocal(Element element) { 1759 static bool isLocal(Element element) {
1736 return !Elements.isUnresolved(element) 1760 return !Elements.isUnresolved(element)
1737 && !element.isInstanceMember() 1761 && !element.isInstanceMember()
1738 && !isStaticOrTopLevelField(element) 1762 && !isStaticOrTopLevelField(element)
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
2051 2075
2052 MetadataAnnotation ensureResolved(Compiler compiler) { 2076 MetadataAnnotation ensureResolved(Compiler compiler) {
2053 if (resolutionState == STATE_NOT_STARTED) { 2077 if (resolutionState == STATE_NOT_STARTED) {
2054 compiler.resolver.resolveMetadataAnnotation(this); 2078 compiler.resolver.resolveMetadataAnnotation(this);
2055 } 2079 }
2056 return this; 2080 return this;
2057 } 2081 }
2058 2082
2059 String toString() => 'MetadataAnnotation($value, $resolutionState)'; 2083 String toString() => 'MetadataAnnotation($value, $resolutionState)';
2060 } 2084 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698