Index: sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
index f47e5dac0a6b69579515f4db3b9ffccfc7e1b6a0..5cb4116d1479d589d1e338cd6027b52b7e3eb79a 100644 |
--- a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
+++ b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart |
@@ -3026,7 +3026,13 @@ class SsaBuilder extends ResolvedVisitor implements Visitor { |
InterfaceType interfaceType = type; |
bool hasTypeArguments = !interfaceType.arguments.isEmpty; |
if (!isInQuotes) template.add("'"); |
- template.add(rti.getName(type.element)); |
+ if (type.element == compiler.dynamicClass) { |
ngeoffray
2012/11/15 16:07:24
This looks fishy, why can't rti.getName return 'dy
karlklose
2012/11/19 15:08:58
Done.
|
+ // We represent the dynamic type by a class, which has a different |
+ // name. |
+ template.add('dynamic'); |
+ } else { |
+ template.add(rti.getName(type.element)); |
+ } |
if (hasTypeArguments) { |
template.add("<"); |
for (DartType argument in interfaceType.arguments) { |
@@ -3260,22 +3266,17 @@ class SsaBuilder extends ResolvedVisitor implements Visitor { |
visitTypeReferenceSend(Send node) { |
Element element = elements[node]; |
- HInstruction name; |
- Element helper = |
- compiler.findHelper(const SourceString('createRuntimeType')); |
- if (element.isClass()) { |
- String string = rti.generateRuntimeTypeString(element, 0); |
- name = addConstantString(node.selector, string); |
- } else if (element.isTypedef()) { |
- // TODO(karlklose): implement support for type variables in typedefs. |
- name = addConstantString(node.selector, rti.getName(element)); |
+ if (element.isClass() || element.isTypedef()) { |
+ // TODO(karlklose): add type representation |
+ ConstantHandler handler = compiler.constantHandler; |
+ Constant constant = handler.compileNodeWithDefinitions(node, elements); |
+ stack.add(graph.addConstant(constant)); |
} else if (element.isTypeVariable()) { |
// TODO(6248): implement support for type variables. |
compiler.unimplemented('first class type for type variable', node: node); |
} else { |
- internalError('unexpected element $element', node: node); |
+ internalError('unexpected element kind $element', node: node); |
} |
- pushInvokeHelper1(helper, name); |
if (node.isCall) { |
// This send is of the form 'e(...)', where e is resolved to a type |
// reference. We create a regular closure call on the result of the type |