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

Unified Diff: sdk/lib/_internal/compiler/implementation/ir/ir_builder.dart

Issue 359413006: Fix handling of type literals. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Updated cf. comments. Created 6 years, 6 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/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 10a718c477bf9942d3d39cabea1483fc7161fbf7..7feadf09bca89a5bc48acbf51e28c1e7cffd0aa5 100644
--- a/sdk/lib/_internal/compiler/implementation/ir/ir_builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/ir/ir_builder.dart
@@ -1302,23 +1302,26 @@ class IrBuilder extends ResolvedVisitor<ir.Primitive> {
}
}
- ir.Primitive visitTypeReferenceSend(ast.Send node) {
- assert(isOpen);
- Element element = elements[node];
- assert(element is TypeDeclarationElement || element.isTypeVariable);
+ visitTypePrefixSend(ast.Send node) {
+ compiler.internalError(node, "visitTypePrefixSend should not be called.");
+ }
+ ir.Primitive visitTypeLiteralSend(ast.Send node) {
+ assert(isOpen);
// If the user is trying to invoke the type literal or variable,
// it must be treated as a function call.
if (node.argumentsNode != null) {
+ // TODO(sigurdm): Change this to match proposed semantics of issue #19725.
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);
}
}
@@ -1597,8 +1600,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";
}

Powered by Google App Engine
This is Rietveld 408576698