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

Side by Side Diff: pkg/compiler/lib/src/js_backend/runtime_types.dart

Issue 2564823002: Remove CodegenEnqueuer.compiler (Closed)
Patch Set: Created 4 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
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 js_backend.backend; 5 part of js_backend.backend;
6 6
7 /// For each class, stores the possible class subtype tests that could succeed. 7 /// For each class, stores the possible class subtype tests that could succeed.
8 abstract class TypeChecks { 8 abstract class TypeChecks {
9 /// Get the set of checks required for class [element]. 9 /// Get the set of checks required for class [element].
10 Iterable<TypeCheck> operator [](ClassElement element); 10 Iterable<TypeCheck> operator [](ClassElement element);
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 // If there are no classes that use their variables in checks, there is 174 // If there are no classes that use their variables in checks, there is
175 // nothing to do. 175 // nothing to do.
176 if (classesUsingChecks.isEmpty) return; 176 if (classesUsingChecks.isEmpty) return;
177 Set<DartType> instantiatedTypes = universe.instantiatedTypes; 177 Set<DartType> instantiatedTypes = universe.instantiatedTypes;
178 if (cannotDetermineInstantiatedTypesPrecisely) { 178 if (cannotDetermineInstantiatedTypesPrecisely) {
179 for (DartType type in instantiatedTypes) { 179 for (DartType type in instantiatedTypes) {
180 if (type.kind != TypeKind.INTERFACE) continue; 180 if (type.kind != TypeKind.INTERFACE) continue;
181 InterfaceType interface = type; 181 InterfaceType interface = type;
182 do { 182 do {
183 for (DartType argument in interface.typeArguments) { 183 for (DartType argument in interface.typeArguments) {
184 universe.registerIsCheck(argument, compiler.resolution); 184 universe.registerIsCheck(argument);
185 } 185 }
186 interface = interface.element.supertype; 186 interface = interface.element.supertype;
187 } while (interface != null && !instantiatedTypes.contains(interface)); 187 } while (interface != null && !instantiatedTypes.contains(interface));
188 } 188 }
189 } else { 189 } else {
190 // Find all instantiated types that are a subtype of a class that uses 190 // Find all instantiated types that are a subtype of a class that uses
191 // one of its type arguments in an is-check and add the arguments to the 191 // one of its type arguments in an is-check and add the arguments to the
192 // set of is-checks. 192 // set of is-checks.
193 // TODO(karlklose): replace this with code that uses a subtype lookup 193 // TODO(karlklose): replace this with code that uses a subtype lookup
194 // datastructure in the world. 194 // datastructure in the world.
195 for (DartType type in instantiatedTypes) { 195 for (DartType type in instantiatedTypes) {
196 if (type.kind != TypeKind.INTERFACE) continue; 196 if (type.kind != TypeKind.INTERFACE) continue;
197 InterfaceType classType = type; 197 InterfaceType classType = type;
198 for (ClassElement cls in classesUsingChecks) { 198 for (ClassElement cls in classesUsingChecks) {
199 InterfaceType current = classType; 199 InterfaceType current = classType;
200 do { 200 do {
201 // We need the type as instance of its superclass anyway, so we just 201 // We need the type as instance of its superclass anyway, so we just
202 // try to compute the substitution; if the result is [:null:], the 202 // try to compute the substitution; if the result is [:null:], the
203 // classes are not related. 203 // classes are not related.
204 InterfaceType instance = current.asInstanceOf(cls); 204 InterfaceType instance = current.asInstanceOf(cls);
205 if (instance == null) break; 205 if (instance == null) break;
206 for (DartType argument in instance.typeArguments) { 206 for (DartType argument in instance.typeArguments) {
207 universe.registerIsCheck(argument, compiler.resolution); 207 universe.registerIsCheck(argument);
208 } 208 }
209 current = current.element.supertype; 209 current = current.element.supertype;
210 } while (current != null && !instantiatedTypes.contains(current)); 210 } while (current != null && !instantiatedTypes.contains(current));
211 } 211 }
212 } 212 }
213 } 213 }
214 } 214 }
215 215
216 @override 216 @override
217 void computeClassesNeedingRti() { 217 void computeClassesNeedingRti() {
(...skipping 816 matching lines...) Expand 10 before | Expand all | Expand 10 after
1034 * substition for this check. 1034 * substition for this check.
1035 */ 1035 */
1036 class TypeCheck { 1036 class TypeCheck {
1037 final ClassElement cls; 1037 final ClassElement cls;
1038 final Substitution substitution; 1038 final Substitution substitution;
1039 final int hashCode = _nextHash = (_nextHash + 100003).toUnsigned(30); 1039 final int hashCode = _nextHash = (_nextHash + 100003).toUnsigned(30);
1040 static int _nextHash = 0; 1040 static int _nextHash = 0;
1041 1041
1042 TypeCheck(this.cls, this.substitution); 1042 TypeCheck(this.cls, this.substitution);
1043 } 1043 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/js_backend/enqueuer.dart ('k') | pkg/compiler/lib/src/universe/world_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698