diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ArgumentGenerator.java b/compiler/backend/src/org/jetbrains/jet/codegen/ArgumentGenerator.java index 72c58dcae8f..f1b79869e04 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ArgumentGenerator.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ArgumentGenerator.java @@ -22,23 +22,33 @@ import org.jetbrains.jet.lang.resolve.calls.model.ExpressionValueArgument; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedValueArgument; import org.jetbrains.jet.lang.resolve.calls.model.VarargValueArgument; +import java.util.ArrayList; +import java.util.Collections; import java.util.List; public abstract class ArgumentGenerator { /** - * @return a bit mask of default arguments which should be passed as the last argument to $default method, if there were any default - * arguments, or 0 if there were none + * @return a {@code List} of bit masks of default arguments that should be passed as last arguments to $default method, if there were + * any default arguments, or an empty {@code List} if there were none */ - public int generate(@NotNull List valueArguments) { + @NotNull + public List generate(@NotNull List valueArguments) { + List masks = new ArrayList(1); + boolean maskIsNeeded = false; int mask = 0; int n = valueArguments.size(); for (int i = 0; i < n; i++) { + if (i != 0 && i % Integer.SIZE == 0) { + masks.add(mask); + mask = 0; + } ResolvedValueArgument argument = valueArguments.get(i); if (argument instanceof ExpressionValueArgument) { generateExpression(i, (ExpressionValueArgument) argument); } else if (argument instanceof DefaultValueArgument) { - mask |= 1 << i; + maskIsNeeded = true; + mask |= 1 << (i % Integer.SIZE); generateDefault(i, (DefaultValueArgument) argument); } else if (argument instanceof VarargValueArgument) { @@ -49,7 +59,12 @@ public abstract class ArgumentGenerator { } } - return mask; + if (!maskIsNeeded) { + return Collections.emptyList(); + } + + masks.add(mask); + return masks; } protected void generateExpression(int i, @NotNull ExpressionValueArgument argument) { diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/CallableMethod.java b/compiler/backend/src/org/jetbrains/jet/codegen/CallableMethod.java index 08eabbf8592..b0bb1440f19 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/CallableMethod.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/CallableMethod.java @@ -19,6 +19,7 @@ package org.jetbrains.jet.codegen; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.codegen.state.GenerationState; +import org.jetbrains.jet.codegen.state.JetTypeMapper; import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall; import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterKind; @@ -134,8 +135,7 @@ public class CallableMethod implements Callable { } Method method = getAsmMethod(); - - String desc = method.getDescriptor().replace(")", "I)"); + String desc = JetTypeMapper.getDefaultDescriptor(method, receiverParameterType != null); if ("".equals(method.getName())) { v.visitMethodInsn(INVOKESPECIAL, defaultImplOwner.getInternalName(), "", desc, false); } diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java index 012dfc1ee87..e131ae74f79 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java @@ -81,7 +81,8 @@ import static org.jetbrains.jet.lang.psi.PsiPackage.JetPsiFactory; import static org.jetbrains.jet.lang.resolve.BindingContext.*; import static org.jetbrains.jet.lang.resolve.BindingContextUtils.getNotNull; import static org.jetbrains.jet.lang.resolve.BindingContextUtils.isVarCapturedInClosure; -import static org.jetbrains.jet.lang.resolve.calls.callUtil.CallUtilPackage.*; +import static org.jetbrains.jet.lang.resolve.calls.callUtil.CallUtilPackage.getResolvedCall; +import static org.jetbrains.jet.lang.resolve.calls.callUtil.CallUtilPackage.getResolvedCallWithAssert; import static org.jetbrains.jet.lang.resolve.java.AsmTypeConstants.*; import static org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames.KotlinSyntheticClass; import static org.jetbrains.jet.lang.resolve.java.diagnostics.DiagnosticsPackage.OtherOrigin; @@ -2175,19 +2176,18 @@ public class ExpressionCodegen extends JetVisitor implem List valueArguments = resolvedCall.getValueArgumentsByIndex(); assert valueArguments != null : "Failed to arrange value arguments by index: " + resolvedCall.getResultingDescriptor(); - int mask = argumentGenerator.generate(valueArguments); + List masks = argumentGenerator.generate(valueArguments); if (tailRecursionCodegen.isTailRecursion(resolvedCall)) { tailRecursionCodegen.generateTailRecursion(resolvedCall); return; } - boolean callDefault = mask != 0; - if (callDefault) { + for (int mask : masks) { callGenerator.putValueIfNeeded(null, Type.INT_TYPE, StackValue.constant(mask, Type.INT_TYPE)); } - callGenerator.genCall(callableMethod, resolvedCall, callDefault, this); + callGenerator.genCall(callableMethod, resolvedCall, !masks.isEmpty(), this); } @NotNull diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java index 7cb1b7753e6..c4c7640f770 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java @@ -59,10 +59,7 @@ import org.jetbrains.org.objectweb.asm.util.TraceMethodVisitor; import java.io.PrintWriter; import java.io.StringWriter; -import java.util.Collection; -import java.util.Iterator; -import java.util.List; -import java.util.Set; +import java.util.*; import static org.jetbrains.jet.codegen.AsmUtil.*; import static org.jetbrains.jet.codegen.JvmSerializationBindings.*; @@ -524,13 +521,22 @@ public class FunctionCodegen extends ParentCodegenAware { v.load(0, methodOwner); // Load this on stack int mask = 0; + List masks = new ArrayList(1); for (ValueParameterDescriptor parameterDescriptor : constructorDescriptor.getValueParameters()) { Type paramType = state.getTypeMapper().mapType(parameterDescriptor.getType()); pushDefaultValueOnStack(paramType, v); - mask |= (1 << parameterDescriptor.getIndex()); + int i = parameterDescriptor.getIndex(); + if (i != 0 && i % Integer.SIZE == 0) { + masks.add(mask); + mask = 0; + } + mask |= (1 << (i % Integer.SIZE)); } - v.iconst(mask); - String desc = method.getAsmMethod().getDescriptor().replace(")", "I)"); + masks.add(mask); + for (int m : masks) { + v.iconst(m); + } + String desc = JetTypeMapper.getDefaultDescriptor(method.getAsmMethod(), false); v.invokespecial(methodOwner.getInternalName(), "", desc, false); v.areturn(Type.VOID_TYPE); endVisit(mv, "default constructor for " + methodOwner.getInternalName(), null); @@ -610,8 +616,6 @@ public class FunctionCodegen extends ParentCodegenAware { ExpressionCodegen codegen = new ExpressionCodegen(mv, frameMap, signature.getReturnType(), methodContext, state, parentCodegen); - int maskIndex = frameMap.enterTemp(Type.INT_TYPE); - CallGenerator generator = codegen.getOrCreateCallGenerator(functionDescriptor, function); InstructionAdapter iv = new InstructionAdapter(mv); @@ -625,15 +629,19 @@ public class FunctionCodegen extends ParentCodegenAware { capturedArgumentsCount++; } + int maskIndex = 0; List valueParameters = functionDescriptor.getValueParameters(); for (int index = 0; index < valueParameters.size(); index++) { + if (index % Integer.SIZE == 0) { + maskIndex = frameMap.enterTemp(Type.INT_TYPE); + } ValueParameterDescriptor parameterDescriptor = valueParameters.get(index); Type type = mappedParameters.get(capturedArgumentsCount + index).getAsmType(); int parameterIndex = frameMap.getIndex(parameterDescriptor); if (parameterDescriptor.declaresDefaultValue()) { iv.load(maskIndex, Type.INT_TYPE); - iv.iconst(1 << index); + iv.iconst(1 << (index % Integer.SIZE)); iv.and(Type.INT_TYPE); Label loadArg = new Label(); iv.ifeq(loadArg); diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java index e7badc17e59..905d38752e7 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/state/JetTypeMapper.java @@ -16,6 +16,7 @@ package org.jetbrains.jet.codegen.state; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -613,11 +614,23 @@ public class JetTypeMapper { return sw.makeJvmMethodSignature(mapFunctionName(f)); } + @NotNull + public static String getDefaultDescriptor(@NotNull Method method, boolean isExtension) { + String descriptor = method.getDescriptor(); + int argumentsCount = (Type.getArgumentsAndReturnSizes(descriptor) >> 2) - 1; + if (isExtension) { + argumentsCount--; + } + int maskArgumentsCount = (argumentsCount + Integer.SIZE - 1) / Integer.SIZE; + String maskArguments = StringUtil.repeat(Type.INT_TYPE.getDescriptor(), maskArgumentsCount); + return descriptor.replace(")", maskArguments + ")"); + } + @NotNull public Method mapDefaultMethod(@NotNull FunctionDescriptor functionDescriptor, @NotNull OwnerKind kind, @NotNull CodegenContext context) { Method jvmSignature = mapSignature(functionDescriptor, kind).getAsmMethod(); Type ownerType = mapOwner(functionDescriptor, isCallInsideSameModuleAsDeclared(functionDescriptor, context, getOutDirectory())); - String descriptor = jvmSignature.getDescriptor().replace(")", "I)"); + String descriptor = getDefaultDescriptor(jvmSignature, functionDescriptor.getReceiverParameter() != null); boolean isConstructor = "".equals(jvmSignature.getName()); if (!isStatic(kind) && !isConstructor) { descriptor = descriptor.replace("(", "(" + ownerType.getDescriptor()); diff --git a/compiler/testData/codegen/box/defaultArguments/function/extensionFunctionManyArgs.kt b/compiler/testData/codegen/box/defaultArguments/function/extensionFunctionManyArgs.kt new file mode 100644 index 00000000000..82984a99369 --- /dev/null +++ b/compiler/testData/codegen/box/defaultArguments/function/extensionFunctionManyArgs.kt @@ -0,0 +1,205 @@ +fun Int.foo(a: Int = 1, + b: Int = 2, + c: Int = 3, + d: Int = 4, + e: Int = 5, + f: Int = 6, + g: Int = 7, + h: Int = 8, + i: Int = 9, + j: Int = 10, + k: Int = 11, + l: Int = 12, + m: Int = 13, + n: Int = 14, + o: Int = 15, + p: Int = 16, + q: Int = 17, + r: Int = 18, + s: Int = 19, + t: Int = 20, + u: Int = 21, + v: Int = 22, + w: Int = 23, + x: Int = 24, + y: Int = 25, + z: Int = 26, + aa: Int = 27, + bb: Int = 28, + cc: Int = 29, + dd: Int = 30, + ee: Int = 31, + ff: Int = 32): String { + return "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z $aa $bb $cc $dd $ee $ff" +} + +fun String.bar(a: Int = 1, + b: Int = 2, + c: Int = 3, + d: Int = 4, + e: Int = 5, + f: Int = 6, + g: Int = 7, + h: Int = 8, + i: Int = 9, + j: Int = 10, + k: Int = 11, + l: Int = 12, + m: Int = 13, + n: Int = 14, + o: Int = 15, + p: Int = 16, + q: Int = 17, + r: Int = 18, + s: Int = 19, + t: Int = 20, + u: Int = 21, + v: Int = 22, + w: Int = 23, + x: Int = 24, + y: Int = 25, + z: Int = 26, + aa: Int = 27, + bb: Int = 28, + cc: Int = 29, + dd: Int = 30, + ee: Int = 31, + ff: Int = 32, + gg: Int = 33, + hh: Int = 34, + ii: Int = 35, + jj: Int = 36, + kk: Int = 37, + ll: Int = 38, + mm: Int = 39, + nn: Int = 40): String { + return "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z $aa $bb $cc $dd $ee $ff " + + "$gg $hh $ii $jj $kk $ll $mm $nn" +} + +fun Char.baz(a: Int = 1, + b: Int = 2, + c: Int = 3, + d: Int = 4, + e: Int = 5, + f: Int = 6, + g: Int = 7, + h: Int = 8, + i: Int = 9, + j: Int = 10, + k: Int = 11, + l: Int = 12, + m: Int = 13, + n: Int = 14, + o: Int = 15, + p: Int = 16, + q: Int = 17, + r: Int = 18, + s: Int = 19, + t: Int = 20, + u: Int = 21, + v: Int = 22, + w: Int = 23, + x: Int = 24, + y: Int = 25, + z: Int = 26, + aa: Int = 27, + bb: Int = 28, + cc: Int = 29, + dd: Int = 30, + ee: Int = 31, + ff: Int = 32, + gg: Int = 33, + hh: Int = 34, + ii: Int = 35, + jj: Int = 36, + kk: Int = 37, + ll: Int = 38, + mm: Int = 39, + nn: Int = 40, + oo: Int = 41, + pp: Int = 42, + qq: Int = 43, + rr: Int = 44, + ss: Int = 45, + tt: Int = 46, + uu: Int = 47, + vv: Int = 48, + ww: Int = 49, + xx: Int = 50, + yy: Int = 51, + zz: Int = 52, + aaa: Int = 53, + bbb: Int = 54, + ccc: Int = 55, + ddd: Int = 56, + eee: Int = 57, + fff: Int = 58, + ggg: Int = 59, + hhh: Int = 60, + iii: Int = 61, + jjj: Int = 62, + kkk: Int = 63, + lll: Int = 64, + mmm: Int = 65, + nnn: Int = 66, + ooo: Int = 67, + ppp: Int = 68, + qqq: Int = 69, + rrr: Int = 70): String { + return "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z $aa $bb $cc $dd $ee $ff $gg $hh $ii $jj $kk " + + "$ll $mm $nn $oo $pp $qq $rr $ss $tt $uu $vv $ww $xx $yy $zz $aaa $bbb $ccc $ddd $eee $fff $ggg $hhh $iii $jjj $kkk $lll " + + "$mmm $nnn $ooo $ppp $qqq $rrr" +} + +fun box(): String { + val test1 = 1.foo(4, e = 8, f = 15, w = 16, aa = 23, ff = 42) + val test2 = 1.foo() + val test3 = 1.foo(32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, q = 16, r = 15, s = 14, t = 13, + u = 12, v = 11, w = 10, x = 9, y = 8, z = 7, aa = 6, bb = 5, cc = 4, dd = 3, ee = 2, ff = 1) + if (test1 != "4 2 3 4 8 15 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 16 24 25 26 23 28 29 30 31 42") { + return "test1 = $test1" + } + if (test2 != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32") { + return "test2 = $test2" + } + if (test3 != "32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1") { + return "test3 = $test3" + } + + val test4 = "".bar(54, 217, h = 236, l = 18, q = 3216, u = 8, aa = 22, ff = 33, jj = 44, mm = 55) + val test5 = "".bar() + val test6 = "".bar(40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, u = 20, v = 19, + w = 18, x = 17, y = 16, z = 15, aa = 14, bb = 13, cc = 12, dd = 11, ee = 10, ff = 9, gg = 8, hh = 7, ii = 6, + jj = 5, kk = 4, ll = 3, mm = 2, nn = 1) + if (test4 != "54 217 3 4 5 6 7 236 9 10 11 18 13 14 15 16 3216 18 19 20 8 22 23 24 25 26 22 28 29 30 31 33 33 34 35 44 37 38 55 40") { + return "test4 = $test4" + } + if (test5 != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40") { + return "test5 = $test5" + } + if (test6 != "40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1") { + return "test6 = $test6" + } + + val test7 = 'a'.baz(5, f = 3, w = 1, aa = 71, nn = 2, qq = 15, ww = 97, aaa = 261258, iii = 3, nnn = 8, rrr = 7) + val test8 = 'a'.baz() + val test9 = 'a'.baz(70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, + 40, 39, 38, 37, 36, jj = 35, kk = 34, ll = 33, mm = 32, nn = 31, oo = 30, pp = 29, qq = 28, rr = 27, ss = 26, tt = 25, + uu = 24, vv = 23, ww = 22, xx = 21, yy = 20, zz = 19, aaa = 18, bbb = 17, ccc = 16, ddd = 15, eee = 14, fff = 13, + ggg = 12, hhh = 11, iii = 10, jjj = 9, kkk = 8, lll = 7, mmm = 6, nnn = 5, ooo = 4, ppp = 3, qqq = 2, rrr = 1) + if (test7 != "5 2 3 4 5 3 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 24 25 26 71 28 29 30 31 32 33 34 35 36 37 38 39 2 41 42 15 " + + "44 45 46 47 48 97 50 51 52 261258 54 55 56 57 58 59 60 3 62 63 64 65 8 67 68 69 7") { + return "test7 = $test7" + } + if (test8 != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 " + + "43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70") { + return "test8 = $test8" + } + if (test9 != "70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 " + + "31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1") { + return "test9 = $test9" + } + + return "OK" +} diff --git a/compiler/testData/codegen/box/defaultArguments/function/innerExtentionFunctionManyArgs.kt b/compiler/testData/codegen/box/defaultArguments/function/innerExtentionFunctionManyArgs.kt new file mode 100644 index 00000000000..3ed1be3d6c4 --- /dev/null +++ b/compiler/testData/codegen/box/defaultArguments/function/innerExtentionFunctionManyArgs.kt @@ -0,0 +1,211 @@ +class A { + fun Int.foo(a: Int = 1, + b: Int = 2, + c: Int = 3, + d: Int = 4, + e: Int = 5, + f: Int = 6, + g: Int = 7, + h: Int = 8, + i: Int = 9, + j: Int = 10, + k: Int = 11, + l: Int = 12, + m: Int = 13, + n: Int = 14, + o: Int = 15, + p: Int = 16, + q: Int = 17, + r: Int = 18, + s: Int = 19, + t: Int = 20, + u: Int = 21, + v: Int = 22, + w: Int = 23, + x: Int = 24, + y: Int = 25, + z: Int = 26, + aa: Int = 27, + bb: Int = 28, + cc: Int = 29, + dd: Int = 30, + ee: Int = 31, + ff: Int = 32): String { + return "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z $aa $bb $cc $dd $ee $ff" + } + + fun String.bar(a: Int = 1, + b: Int = 2, + c: Int = 3, + d: Int = 4, + e: Int = 5, + f: Int = 6, + g: Int = 7, + h: Int = 8, + i: Int = 9, + j: Int = 10, + k: Int = 11, + l: Int = 12, + m: Int = 13, + n: Int = 14, + o: Int = 15, + p: Int = 16, + q: Int = 17, + r: Int = 18, + s: Int = 19, + t: Int = 20, + u: Int = 21, + v: Int = 22, + w: Int = 23, + x: Int = 24, + y: Int = 25, + z: Int = 26, + aa: Int = 27, + bb: Int = 28, + cc: Int = 29, + dd: Int = 30, + ee: Int = 31, + ff: Int = 32, + gg: Int = 33, + hh: Int = 34, + ii: Int = 35, + jj: Int = 36, + kk: Int = 37, + ll: Int = 38, + mm: Int = 39, + nn: Int = 40): String { + return "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z $aa $bb $cc $dd $ee $ff " + + "$gg $hh $ii $jj $kk $ll $mm $nn" + } + + fun Char.baz(a: Int = 1, + b: Int = 2, + c: Int = 3, + d: Int = 4, + e: Int = 5, + f: Int = 6, + g: Int = 7, + h: Int = 8, + i: Int = 9, + j: Int = 10, + k: Int = 11, + l: Int = 12, + m: Int = 13, + n: Int = 14, + o: Int = 15, + p: Int = 16, + q: Int = 17, + r: Int = 18, + s: Int = 19, + t: Int = 20, + u: Int = 21, + v: Int = 22, + w: Int = 23, + x: Int = 24, + y: Int = 25, + z: Int = 26, + aa: Int = 27, + bb: Int = 28, + cc: Int = 29, + dd: Int = 30, + ee: Int = 31, + ff: Int = 32, + gg: Int = 33, + hh: Int = 34, + ii: Int = 35, + jj: Int = 36, + kk: Int = 37, + ll: Int = 38, + mm: Int = 39, + nn: Int = 40, + oo: Int = 41, + pp: Int = 42, + qq: Int = 43, + rr: Int = 44, + ss: Int = 45, + tt: Int = 46, + uu: Int = 47, + vv: Int = 48, + ww: Int = 49, + xx: Int = 50, + yy: Int = 51, + zz: Int = 52, + aaa: Int = 53, + bbb: Int = 54, + ccc: Int = 55, + ddd: Int = 56, + eee: Int = 57, + fff: Int = 58, + ggg: Int = 59, + hhh: Int = 60, + iii: Int = 61, + jjj: Int = 62, + kkk: Int = 63, + lll: Int = 64, + mmm: Int = 65, + nnn: Int = 66, + ooo: Int = 67, + ppp: Int = 68, + qqq: Int = 69, + rrr: Int = 70): String { + return "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z $aa $bb $cc $dd $ee $ff $gg $hh $ii $jj $kk " + + "$ll $mm $nn $oo $pp $qq $rr $ss $tt $uu $vv $ww $xx $yy $zz $aaa $bbb $ccc $ddd $eee $fff $ggg $hhh $iii $jjj $kkk $lll " + + "$mmm $nnn $ooo $ppp $qqq $rrr" + } + + fun test(): String { + val test1 = 1.foo(4, e = 8, f = 15, w = 16, aa = 23, ff = 42) + val test2 = 1.foo() + val test3 = 1.foo(32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, q = 16, r = 15, s = 14, t = 13, + u = 12, v = 11, w = 10, x = 9, y = 8, z = 7, aa = 6, bb = 5, cc = 4, dd = 3, ee = 2, ff = 1) + if (test1 != "4 2 3 4 8 15 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 16 24 25 26 23 28 29 30 31 42") { + return "test1 = $test1" + } + if (test2 != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32") { + return "test2 = $test2" + } + if (test3 != "32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1") { + return "test3 = $test3" + } + + val test4 = "".bar(54, 217, h = 236, l = 18, q = 3216, u = 8, aa = 22, ff = 33, jj = 44, mm = 55) + val test5 = "".bar() + val test6 = "".bar(40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, u = 20, v = 19, + w = 18, x = 17, y = 16, z = 15, aa = 14, bb = 13, cc = 12, dd = 11, ee = 10, ff = 9, gg = 8, hh = 7, ii = 6, + jj = 5, kk = 4, ll = 3, mm = 2, nn = 1) + if (test4 != "54 217 3 4 5 6 7 236 9 10 11 18 13 14 15 16 3216 18 19 20 8 22 23 24 25 26 22 28 29 30 31 33 33 34 35 44 37 38 55 40") { + return "test4 = $test4" + } + if (test5 != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40") { + return "test5 = $test5" + } + if (test6 != "40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1") { + return "test6 = $test6" + } + + val test7 = 'a'.baz(5, f = 3, w = 1, aa = 71, nn = 2, qq = 15, ww = 97, aaa = 261258, iii = 3, nnn = 8, rrr = 7) + val test8 = 'a'.baz() + val test9 = 'a'.baz(70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, + 40, 39, 38, 37, 36, jj = 35, kk = 34, ll = 33, mm = 32, nn = 31, oo = 30, pp = 29, qq = 28, rr = 27, ss = 26, tt = 25, + uu = 24, vv = 23, ww = 22, xx = 21, yy = 20, zz = 19, aaa = 18, bbb = 17, ccc = 16, ddd = 15, eee = 14, fff = 13, + ggg = 12, hhh = 11, iii = 10, jjj = 9, kkk = 8, lll = 7, mmm = 6, nnn = 5, ooo = 4, ppp = 3, qqq = 2, rrr = 1) + if (test7 != "5 2 3 4 5 3 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 24 25 26 71 28 29 30 31 32 33 34 35 36 37 38 39 2 41 42 15 " + + "44 45 46 47 48 97 50 51 52 261258 54 55 56 57 58 59 60 3 62 63 64 65 8 67 68 69 7") { + return "test7 = $test7" + } + if (test8 != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 " + + "43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70") { + return "test8 = $test8" + } + if (test9 != "70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 " + + "31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1") { + return "test9 = $test9" + } + + return "OK" + } +} + +fun box(): String { + return A().test() +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/defaultArguments/function/memberFunctionManyArgs.kt b/compiler/testData/codegen/box/defaultArguments/function/memberFunctionManyArgs.kt new file mode 100644 index 00000000000..def2549e106 --- /dev/null +++ b/compiler/testData/codegen/box/defaultArguments/function/memberFunctionManyArgs.kt @@ -0,0 +1,208 @@ +class A() { + fun foo(a: Int = 1, + b: Int = 2, + c: Int = 3, + d: Int = 4, + e: Int = 5, + f: Int = 6, + g: Int = 7, + h: Int = 8, + i: Int = 9, + j: Int = 10, + k: Int = 11, + l: Int = 12, + m: Int = 13, + n: Int = 14, + o: Int = 15, + p: Int = 16, + q: Int = 17, + r: Int = 18, + s: Int = 19, + t: Int = 20, + u: Int = 21, + v: Int = 22, + w: Int = 23, + x: Int = 24, + y: Int = 25, + z: Int = 26, + aa: Int = 27, + bb: Int = 28, + cc: Int = 29, + dd: Int = 30, + ee: Int = 31, + ff: Int = 32): String { + return "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z $aa $bb $cc $dd $ee $ff" + } + + fun bar(a: Int = 1, + b: Int = 2, + c: Int = 3, + d: Int = 4, + e: Int = 5, + f: Int = 6, + g: Int = 7, + h: Int = 8, + i: Int = 9, + j: Int = 10, + k: Int = 11, + l: Int = 12, + m: Int = 13, + n: Int = 14, + o: Int = 15, + p: Int = 16, + q: Int = 17, + r: Int = 18, + s: Int = 19, + t: Int = 20, + u: Int = 21, + v: Int = 22, + w: Int = 23, + x: Int = 24, + y: Int = 25, + z: Int = 26, + aa: Int = 27, + bb: Int = 28, + cc: Int = 29, + dd: Int = 30, + ee: Int = 31, + ff: Int = 32, + gg: Int = 33, + hh: Int = 34, + ii: Int = 35, + jj: Int = 36, + kk: Int = 37, + ll: Int = 38, + mm: Int = 39, + nn: Int = 40): String { + return "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z $aa $bb $cc $dd $ee $ff " + + "$gg $hh $ii $jj $kk $ll $mm $nn" + } + + fun baz(a: Int = 1, + b: Int = 2, + c: Int = 3, + d: Int = 4, + e: Int = 5, + f: Int = 6, + g: Int = 7, + h: Int = 8, + i: Int = 9, + j: Int = 10, + k: Int = 11, + l: Int = 12, + m: Int = 13, + n: Int = 14, + o: Int = 15, + p: Int = 16, + q: Int = 17, + r: Int = 18, + s: Int = 19, + t: Int = 20, + u: Int = 21, + v: Int = 22, + w: Int = 23, + x: Int = 24, + y: Int = 25, + z: Int = 26, + aa: Int = 27, + bb: Int = 28, + cc: Int = 29, + dd: Int = 30, + ee: Int = 31, + ff: Int = 32, + gg: Int = 33, + hh: Int = 34, + ii: Int = 35, + jj: Int = 36, + kk: Int = 37, + ll: Int = 38, + mm: Int = 39, + nn: Int = 40, + oo: Int = 41, + pp: Int = 42, + qq: Int = 43, + rr: Int = 44, + ss: Int = 45, + tt: Int = 46, + uu: Int = 47, + vv: Int = 48, + ww: Int = 49, + xx: Int = 50, + yy: Int = 51, + zz: Int = 52, + aaa: Int = 53, + bbb: Int = 54, + ccc: Int = 55, + ddd: Int = 56, + eee: Int = 57, + fff: Int = 58, + ggg: Int = 59, + hhh: Int = 60, + iii: Int = 61, + jjj: Int = 62, + kkk: Int = 63, + lll: Int = 64, + mmm: Int = 65, + nnn: Int = 66, + ooo: Int = 67, + ppp: Int = 68, + qqq: Int = 69, + rrr: Int = 70): String { + return "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z $aa $bb $cc $dd $ee $ff $gg $hh $ii $jj $kk " + + "$ll $mm $nn $oo $pp $qq $rr $ss $tt $uu $vv $ww $xx $yy $zz $aaa $bbb $ccc $ddd $eee $fff $ggg $hhh $iii $jjj $kkk $lll " + + "$mmm $nnn $ooo $ppp $qqq $rrr" + } +} + +fun box(): String { + val a = A() + val test1 = a.foo(4, e = 8, f = 15, w = 16, aa = 23, ff = 42) + val test2 = a.foo() + val test3 = a.foo(32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, q = 16, r = 15, s = 14, t = 13, + u = 12, v = 11, w = 10, x = 9, y = 8, z = 7, aa = 6, bb = 5, cc = 4, dd = 3, ee = 2, ff = 1) + if (test1 != "4 2 3 4 8 15 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 16 24 25 26 23 28 29 30 31 42") { + return "test1 = $test1" + } + if (test2 != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32") { + return "test2 = $test2" + } + if (test3 != "32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1") { + return "test3 = $test3" + } + + val test4 = a.bar(54, 217, h = 236, l = 18, q = 3216, u = 8, aa = 22, ff = 33, jj = 44, mm = 55) + val test5 = a.bar() + val test6 = a.bar(40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, u = 20, v = 19, + w = 18, x = 17, y = 16, z = 15, aa = 14, bb = 13, cc = 12, dd = 11, ee = 10, ff = 9, gg = 8, hh = 7, ii = 6, + jj = 5, kk = 4, ll = 3, mm = 2, nn = 1) + if (test4 != "54 217 3 4 5 6 7 236 9 10 11 18 13 14 15 16 3216 18 19 20 8 22 23 24 25 26 22 28 29 30 31 33 33 34 35 44 37 38 55 40") { + return "test4 = $test4" + } + if (test5 != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40") { + return "test5 = $test5" + } + if (test6 != "40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1") { + return "test6 = $test6" + } + + val test7 = a.baz(5, f = 3, w = 1, aa = 71, nn = 2, qq = 15, ww = 97, aaa = 261258, iii = 3, nnn = 8, rrr = 7) + val test8 = a.baz() + val test9 = a.baz(70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, + 40, 39, 38, 37, 36, jj = 35, kk = 34, ll = 33, mm = 32, nn = 31, oo = 30, pp = 29, qq = 28, rr = 27, ss = 26, tt = 25, + uu = 24, vv = 23, ww = 22, xx = 21, yy = 20, zz = 19, aaa = 18, bbb = 17, ccc = 16, ddd = 15, eee = 14, fff = 13, + ggg = 12, hhh = 11, iii = 10, jjj = 9, kkk = 8, lll = 7, mmm = 6, nnn = 5, ooo = 4, ppp = 3, qqq = 2, rrr = 1) + if (test7 != "5 2 3 4 5 3 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 24 25 26 71 28 29 30 31 32 33 34 35 36 37 38 39 2 41 42 15 " + + "44 45 46 47 48 97 50 51 52 261258 54 55 56 57 58 59 60 3 62 63 64 65 8 67 68 69 7") { + return "test7 = $test7" + } + if (test8 != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 " + + "43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70") { + return "test8 = $test8" + } + if (test9 != "70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 " + + "31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1") { + return "test9 = $test9" + } + + return "OK" +} diff --git a/compiler/testData/codegen/box/defaultArguments/function/topLevelManyArgs.kt b/compiler/testData/codegen/box/defaultArguments/function/topLevelManyArgs.kt new file mode 100644 index 00000000000..1086f23b45f --- /dev/null +++ b/compiler/testData/codegen/box/defaultArguments/function/topLevelManyArgs.kt @@ -0,0 +1,205 @@ +fun foo(a: Int = 1, + b: Int = 2, + c: Int = 3, + d: Int = 4, + e: Int = 5, + f: Int = 6, + g: Int = 7, + h: Int = 8, + i: Int = 9, + j: Int = 10, + k: Int = 11, + l: Int = 12, + m: Int = 13, + n: Int = 14, + o: Int = 15, + p: Int = 16, + q: Int = 17, + r: Int = 18, + s: Int = 19, + t: Int = 20, + u: Int = 21, + v: Int = 22, + w: Int = 23, + x: Int = 24, + y: Int = 25, + z: Int = 26, + aa: Int = 27, + bb: Int = 28, + cc: Int = 29, + dd: Int = 30, + ee: Int = 31, + ff: Int = 32): String { + return "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z $aa $bb $cc $dd $ee $ff" +} + +fun bar(a: Int = 1, + b: Int = 2, + c: Int = 3, + d: Int = 4, + e: Int = 5, + f: Int = 6, + g: Int = 7, + h: Int = 8, + i: Int = 9, + j: Int = 10, + k: Int = 11, + l: Int = 12, + m: Int = 13, + n: Int = 14, + o: Int = 15, + p: Int = 16, + q: Int = 17, + r: Int = 18, + s: Int = 19, + t: Int = 20, + u: Int = 21, + v: Int = 22, + w: Int = 23, + x: Int = 24, + y: Int = 25, + z: Int = 26, + aa: Int = 27, + bb: Int = 28, + cc: Int = 29, + dd: Int = 30, + ee: Int = 31, + ff: Int = 32, + gg: Int = 33, + hh: Int = 34, + ii: Int = 35, + jj: Int = 36, + kk: Int = 37, + ll: Int = 38, + mm: Int = 39, + nn: Int = 40): String { + return "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z $aa $bb $cc $dd $ee $ff " + + "$gg $hh $ii $jj $kk $ll $mm $nn" +} + +fun baz(a: Int = 1, + b: Int = 2, + c: Int = 3, + d: Int = 4, + e: Int = 5, + f: Int = 6, + g: Int = 7, + h: Int = 8, + i: Int = 9, + j: Int = 10, + k: Int = 11, + l: Int = 12, + m: Int = 13, + n: Int = 14, + o: Int = 15, + p: Int = 16, + q: Int = 17, + r: Int = 18, + s: Int = 19, + t: Int = 20, + u: Int = 21, + v: Int = 22, + w: Int = 23, + x: Int = 24, + y: Int = 25, + z: Int = 26, + aa: Int = 27, + bb: Int = 28, + cc: Int = 29, + dd: Int = 30, + ee: Int = 31, + ff: Int = 32, + gg: Int = 33, + hh: Int = 34, + ii: Int = 35, + jj: Int = 36, + kk: Int = 37, + ll: Int = 38, + mm: Int = 39, + nn: Int = 40, + oo: Int = 41, + pp: Int = 42, + qq: Int = 43, + rr: Int = 44, + ss: Int = 45, + tt: Int = 46, + uu: Int = 47, + vv: Int = 48, + ww: Int = 49, + xx: Int = 50, + yy: Int = 51, + zz: Int = 52, + aaa: Int = 53, + bbb: Int = 54, + ccc: Int = 55, + ddd: Int = 56, + eee: Int = 57, + fff: Int = 58, + ggg: Int = 59, + hhh: Int = 60, + iii: Int = 61, + jjj: Int = 62, + kkk: Int = 63, + lll: Int = 64, + mmm: Int = 65, + nnn: Int = 66, + ooo: Int = 67, + ppp: Int = 68, + qqq: Int = 69, + rrr: Int = 70): String { + return "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z $aa $bb $cc $dd $ee $ff $gg $hh $ii $jj $kk " + + "$ll $mm $nn $oo $pp $qq $rr $ss $tt $uu $vv $ww $xx $yy $zz $aaa $bbb $ccc $ddd $eee $fff $ggg $hhh $iii $jjj $kkk $lll " + + "$mmm $nnn $ooo $ppp $qqq $rrr" +} + +fun box(): String { + val test1 = foo(4, e = 8, f = 15, w = 16, aa = 23, ff = 42) + val test2 = foo() + val test3 = foo(32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, q = 16, r = 15, s = 14, t = 13, + u = 12, v = 11, w = 10, x = 9, y = 8, z = 7, aa = 6, bb = 5, cc = 4, dd = 3, ee = 2, ff = 1) + if (test1 != "4 2 3 4 8 15 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 16 24 25 26 23 28 29 30 31 42") { + return "test1 = $test1" + } + if (test2 != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32") { + return "test2 = $test2" + } + if (test3 != "32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1") { + return "test3 = $test3" + } + + val test4 = bar(54, 217, h = 236, l = 18, q = 3216, u = 8, aa = 22, ff = 33, jj = 44, mm = 55) + val test5 = bar() + val test6 = bar(40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, u = 20, v = 19, + w = 18, x = 17, y = 16, z = 15, aa = 14, bb = 13, cc = 12, dd = 11, ee = 10, ff = 9, gg = 8, hh = 7, ii = 6, + jj = 5, kk = 4, ll = 3, mm = 2, nn = 1) + if (test4 != "54 217 3 4 5 6 7 236 9 10 11 18 13 14 15 16 3216 18 19 20 8 22 23 24 25 26 22 28 29 30 31 33 33 34 35 44 37 38 55 40") { + return "test4 = $test4" + } + if (test5 != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40") { + return "test5 = $test5" + } + if (test6 != "40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1") { + return "test6 = $test6" + } + + val test7 = baz(5, f = 3, w = 1, aa = 71, nn = 2, qq = 15, ww = 97, aaa = 261258, iii = 3, nnn = 8, rrr = 7) + val test8 = baz() + val test9 = baz(70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, + 40, 39, 38, 37, 36, jj = 35, kk = 34, ll = 33, mm = 32, nn = 31, oo = 30, pp = 29, qq = 28, rr = 27, ss = 26, tt = 25, + uu = 24, vv = 23, ww = 22, xx = 21, yy = 20, zz = 19, aaa = 18, bbb = 17, ccc = 16, ddd = 15, eee = 14, fff = 13, + ggg = 12, hhh = 11, iii = 10, jjj = 9, kkk = 8, lll = 7, mmm = 6, nnn = 5, ooo = 4, ppp = 3, qqq = 2, rrr = 1) + if (test7 != "5 2 3 4 5 3 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 24 25 26 71 28 29 30 31 32 33 34 35 36 37 38 39 2 41 42 15 " + + "44 45 46 47 48 97 50 51 52 261258 54 55 56 57 58 59 60 3 62 63 64 65 8 67 68 69 7") { + return "test7 = $test7" + } + if (test8 != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 " + + "43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70") { + return "test8 = $test8" + } + if (test9 != "70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 " + + "31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1") { + return "test9 = $test9" + } + + return "OK" +} diff --git a/compiler/testData/codegen/boxWithStdlib/defaultArguments/constructor/manyArgs.kt b/compiler/testData/codegen/boxWithStdlib/defaultArguments/constructor/manyArgs.kt new file mode 100644 index 00000000000..001d9e2e6c6 --- /dev/null +++ b/compiler/testData/codegen/boxWithStdlib/defaultArguments/constructor/manyArgs.kt @@ -0,0 +1,211 @@ +class A(val a: Int = 1, + val b: Int = 2, + val c: Int = 3, + val d: Int = 4, + val e: Int = 5, + val f: Int = 6, + val g: Int = 7, + val h: Int = 8, + val i: Int = 9, + val j: Int = 10, + val k: Int = 11, + val l: Int = 12, + val m: Int = 13, + val n: Int = 14, + val o: Int = 15, + val p: Int = 16, + val q: Int = 17, + val r: Int = 18, + val s: Int = 19, + val t: Int = 20, + val u: Int = 21, + val v: Int = 22, + val w: Int = 23, + val x: Int = 24, + val y: Int = 25, + val z: Int = 26, + val aa: Int = 27, + val bb: Int = 28, + val cc: Int = 29, + val dd: Int = 30, + val ee: Int = 31, + val ff: Int = 32) { + override fun toString(): String { + return "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z $aa $bb $cc $dd $ee $ff" + } +} + +class B(val a: Int = 1, + val b: Int = 2, + val c: Int = 3, + val d: Int = 4, + val e: Int = 5, + val f: Int = 6, + val g: Int = 7, + val h: Int = 8, + val i: Int = 9, + val j: Int = 10, + val k: Int = 11, + val l: Int = 12, + val m: Int = 13, + val n: Int = 14, + val o: Int = 15, + val p: Int = 16, + val q: Int = 17, + val r: Int = 18, + val s: Int = 19, + val t: Int = 20, + val u: Int = 21, + val v: Int = 22, + val w: Int = 23, + val x: Int = 24, + val y: Int = 25, + val z: Int = 26, + val aa: Int = 27, + val bb: Int = 28, + val cc: Int = 29, + val dd: Int = 30, + val ee: Int = 31, + val ff: Int = 32, + val gg: Int = 33, + val hh: Int = 34, + val ii: Int = 35, + val jj: Int = 36, + val kk: Int = 37, + val ll: Int = 38, + val mm: Int = 39, + val nn: Int = 40) { + override fun toString(): String { + return "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z $aa $bb $cc $dd $ee $ff " + + "$gg $hh $ii $jj $kk $ll $mm $nn" + } +} + +class C(val a: Int = 1, + val b: Int = 2, + val c: Int = 3, + val d: Int = 4, + val e: Int = 5, + val f: Int = 6, + val g: Int = 7, + val h: Int = 8, + val i: Int = 9, + val j: Int = 10, + val k: Int = 11, + val l: Int = 12, + val m: Int = 13, + val n: Int = 14, + val o: Int = 15, + val p: Int = 16, + val q: Int = 17, + val r: Int = 18, + val s: Int = 19, + val t: Int = 20, + val u: Int = 21, + val v: Int = 22, + val w: Int = 23, + val x: Int = 24, + val y: Int = 25, + val z: Int = 26, + val aa: Int = 27, + val bb: Int = 28, + val cc: Int = 29, + val dd: Int = 30, + val ee: Int = 31, + val ff: Int = 32, + val gg: Int = 33, + val hh: Int = 34, + val ii: Int = 35, + val jj: Int = 36, + val kk: Int = 37, + val ll: Int = 38, + val mm: Int = 39, + val nn: Int = 40, + val oo: Int = 41, + val pp: Int = 42, + val qq: Int = 43, + val rr: Int = 44, + val ss: Int = 45, + val tt: Int = 46, + val uu: Int = 47, + val vv: Int = 48, + val ww: Int = 49, + val xx: Int = 50, + val yy: Int = 51, + val zz: Int = 52, + val aaa: Int = 53, + val bbb: Int = 54, + val ccc: Int = 55, + val ddd: Int = 56, + val eee: Int = 57, + val fff: Int = 58, + val ggg: Int = 59, + val hhh: Int = 60, + val iii: Int = 61, + val jjj: Int = 62, + val kkk: Int = 63, + val lll: Int = 64, + val mmm: Int = 65, + val nnn: Int = 66, + val ooo: Int = 67, + val ppp: Int = 68, + val qqq: Int = 69, + val rrr: Int = 70) { + override fun toString(): String { + return "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p $q $r $s $t $u $v $w $x $y $z $aa $bb $cc $dd $ee $ff $gg $hh $ii $jj $kk " + + "$ll $mm $nn $oo $pp $qq $rr $ss $tt $uu $vv $ww $xx $yy $zz $aaa $bbb $ccc $ddd $eee $fff $ggg $hhh $iii $jjj $kkk $lll " + + "$mmm $nnn $ooo $ppp $qqq $rrr" + } +} + +fun box(): String { + val test1 = A(4, e = 8, f = 15, w = 16, aa = 23, ff = 42).toString() + val test2 = javaClass().newInstance().toString() + val test3 = A(32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, q = 16, r = 15, s = 14, t = 13, + u = 12, v = 11, w = 10, x = 9, y = 8, z = 7, aa = 6, bb = 5, cc = 4, dd = 3, ee = 2, ff = 1).toString() + if (test1 != "4 2 3 4 8 15 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 16 24 25 26 23 28 29 30 31 42") { + return "test1 = $test1" + } + if (test2 != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32") { + return "test2 = $test2" + } + if (test3 != "32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1") { + return "test3 = $test3" + } + + val test4 = B(54, 217, h = 236, l = 18, q = 3216, u = 8, aa = 22, ff = 33, jj = 44, mm = 55).toString() + val test5 = javaClass().newInstance().toString() + val test6 = B(40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, u = 20, v = 19, + w = 18, x = 17, y = 16, z = 15, aa = 14, bb = 13, cc = 12, dd = 11, ee = 10, ff = 9, gg = 8, hh = 7, ii = 6, + jj = 5, kk = 4, ll = 3, mm = 2, nn = 1).toString() + if (test4 != "54 217 3 4 5 6 7 236 9 10 11 18 13 14 15 16 3216 18 19 20 8 22 23 24 25 26 22 28 29 30 31 33 33 34 35 44 37 38 55 40") { + return "test4 = $test4" + } + if (test5 != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40") { + return "test5 = $test5" + } + if (test6 != "40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1") { + return "test6 = $test6" + } + + val test7 = C(5, f = 3, w = 1, aa = 71, nn = 2, qq = 15, ww = 97, aaa = 261258, iii = 3, nnn = 8, rrr = 7).toString() + val test8 = javaClass().newInstance().toString() + val test9 = C(70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, + 40, 39, 38, 37, 36, jj = 35, kk = 34, ll = 33, mm = 32, nn = 31, oo = 30, pp = 29, qq = 28, rr = 27, ss = 26, tt = 25, + uu = 24, vv = 23, ww = 22, xx = 21, yy = 20, zz = 19, aaa = 18, bbb = 17, ccc = 16, ddd = 15, eee = 14, fff = 13, + ggg = 12, hhh = 11, iii = 10, jjj = 9, kkk = 8, lll = 7, mmm = 6, nnn = 5, ooo = 4, ppp = 3, qqq = 2, rrr = 1).toString() + if (test7 != "5 2 3 4 5 3 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 1 24 25 26 71 28 29 30 31 32 33 34 35 36 37 38 39 2 41 42 15 " + + "44 45 46 47 48 97 50 51 52 261258 54 55 56 57 58 59 60 3 62 63 64 65 8 67 68 69 7") { + return "test7 = $test7" + } + if (test8 != "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 " + + "43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70") { + return "test8 = $test8" + } + if (test9 != "70 69 68 67 66 65 64 63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 " + + "31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1") { + return "test9 = $test9" + } + + return "OK" +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java index a9aee1f3866..956c5679fd8 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxCodegenTestGenerated.java @@ -1814,6 +1814,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest("compiler/testData/codegen/box/defaultArguments/function/contains.kt"); } + @TestMetadata("extensionFunctionManyArgs.kt") + public void testExtensionFunctionManyArgs() throws Exception { + doTest("compiler/testData/codegen/box/defaultArguments/function/extensionFunctionManyArgs.kt"); + } + @TestMetadata("extentionFunction.kt") public void testExtentionFunction() throws Exception { doTest("compiler/testData/codegen/box/defaultArguments/function/extentionFunction.kt"); @@ -1864,11 +1869,26 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest("compiler/testData/codegen/box/defaultArguments/function/innerExtentionFunctionDoubleTwoArgs.kt"); } + @TestMetadata("innerExtentionFunctionManyArgs.kt") + public void testInnerExtentionFunctionManyArgs() throws Exception { + doTest("compiler/testData/codegen/box/defaultArguments/function/innerExtentionFunctionManyArgs.kt"); + } + + @TestMetadata("memberFunctionManyArgs.kt") + public void testMemberFunctionManyArgs() throws Exception { + doTest("compiler/testData/codegen/box/defaultArguments/function/memberFunctionManyArgs.kt"); + } + @TestMetadata("mixingNamedAndPositioned.kt") public void testMixingNamedAndPositioned() throws Exception { doTest("compiler/testData/codegen/box/defaultArguments/function/mixingNamedAndPositioned.kt"); } + @TestMetadata("topLevelManyArgs.kt") + public void testTopLevelManyArgs() throws Exception { + doTest("compiler/testData/codegen/box/defaultArguments/function/topLevelManyArgs.kt"); + } + @TestMetadata("trait.kt") public void testTrait() throws Exception { doTest("compiler/testData/codegen/box/defaultArguments/function/trait.kt"); diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java index 2eaf51e22ce..b70301d4160 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java @@ -31,7 +31,7 @@ import org.jetbrains.jet.codegen.generated.AbstractBlackBoxCodegenTest; /** This class is generated by {@link org.jetbrains.jet.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") @TestMetadata("compiler/testData/codegen/boxWithStdlib") -@InnerTestClasses({BlackBoxWithStdlibCodegenTestGenerated.Annotations.class, BlackBoxWithStdlibCodegenTestGenerated.Arrays.class, BlackBoxWithStdlibCodegenTestGenerated.BoxingOptimization.class, BlackBoxWithStdlibCodegenTestGenerated.CallableReference.class, BlackBoxWithStdlibCodegenTestGenerated.Casts.class, BlackBoxWithStdlibCodegenTestGenerated.DataClasses.class, BlackBoxWithStdlibCodegenTestGenerated.Evaluate.class, BlackBoxWithStdlibCodegenTestGenerated.FullJdk.class, BlackBoxWithStdlibCodegenTestGenerated.HashPMap.class, BlackBoxWithStdlibCodegenTestGenerated.JdkAnnotations.class, BlackBoxWithStdlibCodegenTestGenerated.PlatformNames.class, BlackBoxWithStdlibCodegenTestGenerated.Ranges.class, BlackBoxWithStdlibCodegenTestGenerated.Reflection.class, BlackBoxWithStdlibCodegenTestGenerated.Regressions.class, BlackBoxWithStdlibCodegenTestGenerated.Strings.class, BlackBoxWithStdlibCodegenTestGenerated.ToArray.class, BlackBoxWithStdlibCodegenTestGenerated.Vararg.class, BlackBoxWithStdlibCodegenTestGenerated.When.class, BlackBoxWithStdlibCodegenTestGenerated.WhenEnumOptimization.class, BlackBoxWithStdlibCodegenTestGenerated.WhenStringOptimization.class}) +@InnerTestClasses({BlackBoxWithStdlibCodegenTestGenerated.Annotations.class, BlackBoxWithStdlibCodegenTestGenerated.Arrays.class, BlackBoxWithStdlibCodegenTestGenerated.BoxingOptimization.class, BlackBoxWithStdlibCodegenTestGenerated.CallableReference.class, BlackBoxWithStdlibCodegenTestGenerated.Casts.class, BlackBoxWithStdlibCodegenTestGenerated.DataClasses.class, BlackBoxWithStdlibCodegenTestGenerated.DefaultArguments.class, BlackBoxWithStdlibCodegenTestGenerated.Evaluate.class, BlackBoxWithStdlibCodegenTestGenerated.FullJdk.class, BlackBoxWithStdlibCodegenTestGenerated.HashPMap.class, BlackBoxWithStdlibCodegenTestGenerated.JdkAnnotations.class, BlackBoxWithStdlibCodegenTestGenerated.PlatformNames.class, BlackBoxWithStdlibCodegenTestGenerated.Ranges.class, BlackBoxWithStdlibCodegenTestGenerated.Reflection.class, BlackBoxWithStdlibCodegenTestGenerated.Regressions.class, BlackBoxWithStdlibCodegenTestGenerated.Strings.class, BlackBoxWithStdlibCodegenTestGenerated.ToArray.class, BlackBoxWithStdlibCodegenTestGenerated.Vararg.class, BlackBoxWithStdlibCodegenTestGenerated.When.class, BlackBoxWithStdlibCodegenTestGenerated.WhenEnumOptimization.class, BlackBoxWithStdlibCodegenTestGenerated.WhenStringOptimization.class}) public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCodegenTest { public void testAllFilesPresentInBoxWithStdlib() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/codegen/boxWithStdlib"), Pattern.compile("^(.+)\\.kt$"), true); @@ -901,6 +901,34 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode } } + @TestMetadata("compiler/testData/codegen/boxWithStdlib/defaultArguments") + @InnerTestClasses({DefaultArguments.Constructor.class}) + public static class DefaultArguments extends AbstractBlackBoxCodegenTest { + public void testAllFilesPresentInDefaultArguments() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/codegen/boxWithStdlib/defaultArguments"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("compiler/testData/codegen/boxWithStdlib/defaultArguments/constructor") + public static class Constructor extends AbstractBlackBoxCodegenTest { + public void testAllFilesPresentInConstructor() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/codegen/boxWithStdlib/defaultArguments/constructor"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("manyArgs.kt") + public void testManyArgs() throws Exception { + doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/defaultArguments/constructor/manyArgs.kt"); + } + + } + + public static Test innerSuite() { + TestSuite suite = new TestSuite("DefaultArguments"); + suite.addTestSuite(DefaultArguments.class); + suite.addTestSuite(Constructor.class); + return suite; + } + } + @TestMetadata("compiler/testData/codegen/boxWithStdlib/evaluate") public static class Evaluate extends AbstractBlackBoxCodegenTest { public void testAllFilesPresentInEvaluate() throws Exception { @@ -2082,6 +2110,7 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode suite.addTest(CallableReference.innerSuite()); suite.addTestSuite(Casts.class); suite.addTest(DataClasses.innerSuite()); + suite.addTest(DefaultArguments.innerSuite()); suite.addTestSuite(Evaluate.class); suite.addTest(FullJdk.innerSuite()); suite.addTestSuite(HashPMap.class);