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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/typechecker.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 part of dart2js; 5 part of dart2js;
6 6
7 class TypeCheckerTask extends CompilerTask { 7 class TypeCheckerTask extends CompilerTask {
8 TypeCheckerTask(Compiler compiler) : super(compiler); 8 TypeCheckerTask(Compiler compiler) : super(compiler);
9 String get name => "Type checker"; 9 String get name => "Type checker";
10 10
(...skipping 18 matching lines...) Expand all
29 class TypeKind { 29 class TypeKind {
30 final String id; 30 final String id;
31 31
32 const TypeKind(String this.id); 32 const TypeKind(String this.id);
33 33
34 static const TypeKind FUNCTION = const TypeKind('function'); 34 static const TypeKind FUNCTION = const TypeKind('function');
35 static const TypeKind INTERFACE = const TypeKind('interface'); 35 static const TypeKind INTERFACE = const TypeKind('interface');
36 static const TypeKind STATEMENT = const TypeKind('statement'); 36 static const TypeKind STATEMENT = const TypeKind('statement');
37 static const TypeKind TYPEDEF = const TypeKind('typedef'); 37 static const TypeKind TYPEDEF = const TypeKind('typedef');
38 static const TypeKind TYPE_VARIABLE = const TypeKind('type variable'); 38 static const TypeKind TYPE_VARIABLE = const TypeKind('type variable');
39 static const TypeKind MALFORMED_TYPE = const TypeKind('malformed');
39 static const TypeKind VOID = const TypeKind('void'); 40 static const TypeKind VOID = const TypeKind('void');
40 41
41 String toString() => id; 42 String toString() => id;
42 } 43 }
43 44
44 abstract class DartType { 45 abstract class DartType {
45 SourceString get name; 46 SourceString get name;
46 47
47 TypeKind get kind; 48 TypeKind get kind;
48 49
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 144
144 DartType unalias(Compiler compiler) => this; 145 DartType unalias(Compiler compiler) => this;
145 146
146 int get hashCode => 1729; 147 int get hashCode => 1729;
147 148
148 bool operator ==(other) => other is VoidType; 149 bool operator ==(other) => other is VoidType;
149 150
150 String toString() => name.slowToString(); 151 String toString() => name.slowToString();
151 } 152 }
152 153
154 class MalformedType extends DartType {
155 const MalformedType(this.element);
156
157 TypeKind get kind => TypeKind.MALFORMED_TYPE;
158
159 SourceString get name => element.name;
160
161 final MalformedTypeElement element;
162
163 DartType unalias(Compiler compiler) => this;
164
165 int get hashCode => 1733;
166
167 bool operator ==(other) => other is MalformedType;
ngeoffray 2012/11/27 09:37:35 Not checking if elements are equal is kind of stra
aam-me 2012/11/28 01:49:47 Good point. I used VoidType above as a template.
168
169 String toString() => name.slowToString();
170 }
171
153 class InterfaceType extends DartType { 172 class InterfaceType extends DartType {
154 final Element element; 173 final Element element;
155 final Link<DartType> arguments; 174 final Link<DartType> arguments;
156 175
157 InterfaceType(this.element, 176 InterfaceType(this.element,
158 [this.arguments = const Link<DartType>()]) { 177 [this.arguments = const Link<DartType>()]) {
159 assert(invariant(element, element.isDeclaration)); 178 assert(invariant(element, element.isDeclaration));
160 } 179 }
161 180
162 TypeKind get kind => TypeKind.INTERFACE; 181 TypeKind get kind => TypeKind.INTERFACE;
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 identical(s, dynamicType) || 333 identical(s, dynamicType) ||
315 identical(s.element, compiler.objectClass) || 334 identical(s.element, compiler.objectClass) ||
316 identical(t.element, compiler.nullClass)) { 335 identical(t.element, compiler.nullClass)) {
317 return true; 336 return true;
318 } 337 }
319 t = t.unalias(compiler); 338 t = t.unalias(compiler);
320 s = s.unalias(compiler); 339 s = s.unalias(compiler);
321 340
322 if (t is VoidType) { 341 if (t is VoidType) {
323 return false; 342 return false;
343 } else if (t is MalformedType) {
344 return false;
324 } else if (t is InterfaceType) { 345 } else if (t is InterfaceType) {
325 if (s is !InterfaceType) return false; 346 if (s is !InterfaceType) return false;
326 ClassElement tc = t.element; 347 ClassElement tc = t.element;
327 if (identical(tc, s.element)) return true; 348 if (identical(tc, s.element)) return true;
328 for (Link<DartType> supertypes = tc.allSupertypes; 349 for (Link<DartType> supertypes = tc.allSupertypes;
329 supertypes != null && !supertypes.isEmpty; 350 supertypes != null && !supertypes.isEmpty;
330 supertypes = supertypes.tail) { 351 supertypes = supertypes.tail) {
331 DartType supertype = supertypes.head; 352 DartType supertype = supertypes.head;
332 if (identical(supertype.element, s.element)) return true; 353 if (identical(supertype.element, s.element)) return true;
333 } 354 }
(...skipping 698 matching lines...) Expand 10 before | Expand all | Expand 10 after
1032 } 1053 }
1033 1054
1034 DartType visitStringNode(StringNode node) { 1055 DartType visitStringNode(StringNode node) {
1035 compiler.unimplemented('visitNode', node: node); 1056 compiler.unimplemented('visitNode', node: node);
1036 } 1057 }
1037 1058
1038 DartType visitLibraryDependency(LibraryDependency node) { 1059 DartType visitLibraryDependency(LibraryDependency node) {
1039 compiler.unimplemented('visitNode', node: node); 1060 compiler.unimplemented('visitNode', node: node);
1040 } 1061 }
1041 } 1062 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698