JS: fix object expression constructor delegation to secondary constructors with default arguments (KT-30517 fixed)
This commit is contained in:
committed by
Anton Bannykh
parent
419d414681
commit
9a971172c9
+13
-9
@@ -242,16 +242,20 @@ public final class ClassInitializerTranslator extends AbstractTranslator {
|
||||
addCallToSuperMethod(arguments, initializer, superCall.getCall().getCallElement());
|
||||
}
|
||||
else {
|
||||
int maxValueArgumentIndex = 0;
|
||||
for (ValueParameterDescriptor arg : superCall.getValueArguments().keySet()) {
|
||||
ResolvedValueArgument resolvedArg = superCall.getValueArguments().get(arg);
|
||||
if (!(resolvedArg instanceof DefaultValueArgument)) {
|
||||
maxValueArgumentIndex = Math.max(maxValueArgumentIndex, arg.getIndex() + 1);
|
||||
// Add `void 0` for the trailing default arguments
|
||||
// Anonymous object constructor already has all the parameters proxied, including ones with default values
|
||||
if (!DescriptorUtils.isAnonymousObject(classDescriptor)) {
|
||||
int maxValueArgumentIndex = 0;
|
||||
for (ValueParameterDescriptor arg : superCall.getValueArguments().keySet()) {
|
||||
ResolvedValueArgument resolvedArg = superCall.getValueArguments().get(arg);
|
||||
if (!(resolvedArg instanceof DefaultValueArgument)) {
|
||||
maxValueArgumentIndex = Math.max(maxValueArgumentIndex, arg.getIndex() + 1);
|
||||
}
|
||||
}
|
||||
int padSize = superDescriptor.getValueParameters().size() - maxValueArgumentIndex;
|
||||
while (padSize-- > 0) {
|
||||
arguments.add(Namer.getUndefinedExpression());
|
||||
}
|
||||
}
|
||||
int padSize = superDescriptor.getValueParameters().size() - maxValueArgumentIndex;
|
||||
while (padSize-- > 0) {
|
||||
arguments.add(Namer.getUndefinedExpression());
|
||||
}
|
||||
addCallToSuperSecondaryConstructor(arguments, superDescriptor);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user