Index: pkg/compiler/lib/src/js_emitter/full_emitter/container_builder.dart |
diff --git a/pkg/compiler/lib/src/js_emitter/full_emitter/container_builder.dart b/pkg/compiler/lib/src/js_emitter/full_emitter/container_builder.dart |
index ebd7d1a1d2ad9df200e6962dcb69a28746240474..ac95afc4e8600624d07c58cf575fde30bd03698b 100644 |
--- a/pkg/compiler/lib/src/js_emitter/full_emitter/container_builder.dart |
+++ b/pkg/compiler/lib/src/js_emitter/full_emitter/container_builder.dart |
@@ -67,8 +67,11 @@ class ContainerBuilder extends CodeEmitterHelper { |
// ... |
// O. First parameter name (if needed for reflection or Function.apply). |
// ... |
- // P. Unmangled name (if reflectable). |
- // P+1. First metadata (if reflectable). |
+ // P. Whether the first argument is field initialization parameter |
+ // (if reflectable and a constructor) |
+ // ... |
+ // Q. Unmangled name (if reflectable). |
+ // Q+1. First metadata (if reflectable). |
// ... |
// TODO(ahe): Consider one of the parameter counts can be replaced by the |
// length property of the JavaScript function object. |
@@ -151,7 +154,10 @@ class ContainerBuilder extends CodeEmitterHelper { |
} |
if (canBeReflected) { |
jsAst.LiteralString reflectionName; |
+ List<jsAst.LiteralBool> argumentsInstantiatingFields = new List(); |
if (member.isConstructor) { |
+ member.functionSignature.forEachParameter((element) => |
+ argumentsInstantiatingFields.add(js.boolean(element is InitializingFormalElement))); |
// TODO(herhut): This registers name as a mangled name. Do we need this |
// given that we use a different name below? |
emitter.getReflectionName(member, name); |
@@ -161,8 +167,11 @@ class ContainerBuilder extends CodeEmitterHelper { |
} else { |
reflectionName = |
js.string(namer.privateName(member.memberName)); |
+ member.functionSignature.forEachParameter((element) => |
+ argumentsInstantiatingFields.add(js.boolean(false))); |
} |
expressions |
+ ..addAll(argumentsInstantiatingFields) |
..add(reflectionName) |
..addAll(task.metadataCollector.computeMetadata(member)); |
} else if (isClosure && canBeApplied) { |