Index: sdk/lib/_internal/compiler/implementation/ssa/codegen.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart |
index 7b0b1a119c67bf8984bad08d580bc1cce559bd00..d0e882fd26ec56d12160543ceb24032a4432f5dd 100644 |
--- a/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart |
+++ b/sdk/lib/_internal/compiler/implementation/ssa/codegen.dart |
@@ -1796,7 +1796,8 @@ abstract class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor { |
List<js.Expression> arguments = visitArguments(node.inputs, start: 0); |
// TODO(floitsch): jsClassReference is an Access. We shouldn't treat it |
// as if it was a string. |
- push(new js.New(new js.VariableUse(jsClassReference), arguments), node); |
+ js.Expression constructor = new js.VariableUse(jsClassReference); |
ngeoffray
2013/10/17 09:08:59
Why this change?
sra1
2013/10/18 04:09:32
It can be changed back. Original formulation call
|
+ push(new js.New(constructor, arguments), node); |
registerForeignTypes(node); |
if (node.instantiatedTypes == null) { |
return; |
@@ -1820,6 +1821,15 @@ abstract class SsaCodeGenerator implements HVisitor, HBlockInformationVisitor { |
FunctionConstant function = constant; |
world.registerStaticUse(function.element); |
} |
+ if (constant.isType()) { |
+ // If the type is a web component, we need to ensure the constructors are |
ngeoffray
2013/10/17 09:08:59
There's no check of 'web component' here. Maybe yo
sra1
2013/10/18 04:09:32
We now register the constant with the backend.
|
+ // available to 'upgrade' the native object. |
+ TypeConstant type = constant; |
+ Element element = type.representedType.element; |
+ if (element != null && element.isClass()) { |
+ backend.registerEscapingConstructorsOfClass(element, world); |
+ } |
+ } |
push(backend.emitter.constantReference(constant)); |
} |