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

Unified Diff: sdk/lib/_internal/compiler/implementation/universe/universe.dart

Issue 13642002: Make sure required type arguments are given when using factories. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments. Created 7 years, 8 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
Index: sdk/lib/_internal/compiler/implementation/universe/universe.dart
diff --git a/sdk/lib/_internal/compiler/implementation/universe/universe.dart b/sdk/lib/_internal/compiler/implementation/universe/universe.dart
index c167c6fdbc560d74634b6398e322de8fe0eaec3a..76d4fb200c627910e154edbeb64d6e223c797452 100644
--- a/sdk/lib/_internal/compiler/implementation/universe/universe.dart
+++ b/sdk/lib/_internal/compiler/implementation/universe/universe.dart
@@ -50,6 +50,8 @@ class Universe {
final Set<Element> fieldSetters;
final Set<DartType> isChecks;
+ bool usingFactoryWithTypeArguments = false;
+
Universe() : instantiatedClasses = new Set<ClassElement>(),
instantiatedTypes = new Set<DartType>(),
staticFunctionsNeedingGetter = new Set<FunctionElement>(),
@@ -89,41 +91,6 @@ class Universe {
bool hasFieldSetter(Element member, Compiler compiler) {
return fieldSetters.contains(member);
}
-
- /**
- * Compute type arguments of classes that use one of their type variables in
- * is-checks and add the is-checks that they imply.
- *
- * This function must be called after all is-checks have been registered.
- *
- * TODO(karlklose): move these computations into a function producing an
- * immutable datastructure.
- */
- void addImplicitChecks(Iterable<ClassElement> classesUsingChecks) {
- // If there are no classes that use their variables in checks, there is
- // nothing to do.
- if (classesUsingChecks.isEmpty) return;
- // Find all instantiated types that are a subtype of a class that uses
- // one of its type arguments in an is-check and add the arguments to the
- // set of is-checks.
- // TODO(karlklose): replace this with code that uses a subtype lookup
- // datastructure in the world.
- for (DartType type in instantiatedTypes) {
- if (type.kind != TypeKind.INTERFACE) continue;
- InterfaceType classType = type;
- for (ClassElement cls in classesUsingChecks) {
- // We need the type as instance of its superclass anyway, so we just
- // try to compute the substitution; if the result is [:null:], the
- // classes are not related.
- InterfaceType instance = classType.asInstanceOf(cls);
- if (instance == null) continue;
- Link<DartType> typeArguments = instance.typeArguments;
- for (DartType argument in typeArguments) {
- isChecks.add(argument);
- }
- }
- }
- }
}
class SelectorKind {
« no previous file with comments | « sdk/lib/_internal/compiler/implementation/ssa/builder.dart ('k') | tests/language/factory_type_parameter2_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698