Index: pkg/compiler/lib/src/ssa/builder_kernel.dart |
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart |
index 7813fc091982ec5ae66e66ed3897fdb705909c49..9d7852c0a7ac661a9c0cfbc14e83e70900a7c596 100644 |
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart |
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart |
@@ -224,13 +224,21 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder { |
} |
void _addClassTypeVariablesIfNeeded(ir.Member constructor) { |
- var enclosing = astAdapter.getElement(constructor).enclosingElement; |
- if (backend.classNeedsRti(enclosing)) { |
- enclosing.typeVariables.forEach((TypeVariableType typeVariable) { |
+ var enclosing = constructor.enclosingClass; |
+ if (backend.classNeedsRti(astAdapter.getElement(enclosing))) { |
+ enclosing.typeParameters.forEach((ir.TypeParameter typeParameter) { |
+ var typeParamElement = astAdapter.getElement(typeParameter); |
HParameterValue param = |
- addParameter(typeVariable.element, commonMasks.nonNullType); |
+ addParameter(typeParamElement, commonMasks.nonNullType); |
+ var dart_type = astAdapter.getDartType(typeParameter.bound); |
+ // This is a little bit wacky (and n^2) until we make the localsHandler |
+ // take Kernel DartTypes instead of just the AST DartTypes. |
+ var typeVariableType = (astAdapter.getElement(constructor)) |
+ .enclosingElement |
+ .typeVariables |
+ .firstWhere((TypeVariableType i) => i.name == typeParameter.name); |
localsHandler.directLocals[ |
- localsHandler.getTypeVariableAsLocal(typeVariable)] = param; |
+ localsHandler.getTypeVariableAsLocal(typeVariableType)] = param; |
}); |
} |
} |
@@ -1964,8 +1972,8 @@ class KernelSsaBuilder extends ir.Visitor with GraphBuilder { |
// Note: The call to "unalias" this type like in the original SSA builder is |
// unnecessary in kernel because Kernel has no notion of typedef. |
// TODO(efortuna): Add test for this. |
- DartType typeValue = localsHandler.substInContext( |
- astAdapter.getDartType(type)); |
+ DartType typeValue = |
+ localsHandler.substInContext(astAdapter.getDartType(type)); |
if (type is ir.InvalidType) { |
generateTypeError(node, (typeValue.element as ErroneousElement).message); |
return new HIs.compound( |