| Index: sdk/lib/_internal/compiler/implementation/ir/ir_builder.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/ir/ir_builder.dart b/sdk/lib/_internal/compiler/implementation/ir/ir_builder.dart
|
| index 5999c98bdba3525aa0db233f865872ee32f4f99a..eca0b6718a54ed2f66a4049daf9ff70ea2a3ee8a 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/ir/ir_builder.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/ir/ir_builder.dart
|
| @@ -1235,21 +1235,19 @@ class IrBuilder extends ResolvedVisitor<ir.Primitive> {
|
|
|
| ir.Primitive visitTypeReferenceSend(ast.Send node) {
|
| assert(isOpen);
|
| - Element element = elements[node];
|
| - assert(element is TypeDeclarationElement || element.isTypeVariable);
|
| -
|
| // If the user is trying to invoke the type literal or variable,
|
| // it must be treated as a function call.
|
| if (node.argumentsNode != null) {
|
| return visitDynamicSend(node);
|
| }
|
|
|
| - if (element is TypeDeclarationElement) {
|
| - return translateConstant(node);
|
| - } else {
|
| - ir.Primitive prim = new ir.ReifyTypeVar(element);
|
| + DartType type = elements.getTypeLiteralType(node);
|
| + if (type is TypeVariableType) {
|
| + ir.Primitive prim = new ir.ReifyTypeVar(type.element);
|
| add(new ir.LetPrim(prim));
|
| return prim;
|
| + } else {
|
| + return translateConstant(node);
|
| }
|
| }
|
|
|
| @@ -1528,8 +1526,9 @@ class ConstExpBuilder extends ast.Visitor<ConstExp> {
|
| else
|
| return new VariableConstExp(element);
|
| }
|
| - if (Elements.isClass(element) || Elements.isTypedef(element)) {
|
| - return new TypeConstExp(element);
|
| + DartType type = elements.getTypeLiteralType(node);
|
| + if (type != null) {
|
| + return new TypeConstExp(type);
|
| }
|
| throw "Unexpected constant Send: $node";
|
| }
|
|
|