Associate vararg of unsigned types with corresponding arrays
This is a first step, full support will be added later #KT-24880 In Progress
This commit is contained in:
@@ -0,0 +1,34 @@
|
|||||||
|
// !LANGUAGE: +InlineClasses
|
||||||
|
// !SKIP_METADATA_VERSION_CHECK
|
||||||
|
// WITH_UNSIGNED
|
||||||
|
|
||||||
|
fun uint(vararg us: UInt): UIntArray = us
|
||||||
|
|
||||||
|
fun nullableUInt(vararg us: UInt?): UIntArray {
|
||||||
|
val ls = us.filterNotNull()
|
||||||
|
return UIntArray(ls.size) { ls[it] }
|
||||||
|
}
|
||||||
|
|
||||||
|
inline fun inlinedUInt(vararg us: UInt): UIntArray = us
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
val uints = uint(1u, 2u, 3u)
|
||||||
|
if (sum(*uints) != 6u) return "Fail 1"
|
||||||
|
|
||||||
|
val nullableUInts = nullableUInt(1u, null, 2u, null)
|
||||||
|
if (sum(*nullableUInts) != 3u) return "Fail 2"
|
||||||
|
|
||||||
|
val inlinedUInts = inlinedUInt(1u, 3u)
|
||||||
|
if (sum(*inlinedUInts) != 4u) return "Fail 3"
|
||||||
|
|
||||||
|
return "OK"
|
||||||
|
}
|
||||||
|
|
||||||
|
fun sum(vararg us: UInt): UInt {
|
||||||
|
var sum = 0u
|
||||||
|
for (i in us) {
|
||||||
|
sum += i
|
||||||
|
}
|
||||||
|
|
||||||
|
return sum
|
||||||
|
}
|
||||||
+8
-8
@@ -1,22 +1,22 @@
|
|||||||
package
|
package
|
||||||
|
|
||||||
public fun array(/*0*/ vararg a: kotlin.UIntArray /*kotlin.Array<out kotlin.UIntArray>*/): kotlin.Unit
|
public fun array(/*0*/ vararg a: kotlin.UIntArray /*kotlin.Array<out kotlin.UIntArray>*/): kotlin.Unit
|
||||||
public fun ubyte(/*0*/ vararg a: kotlin.UByte /*kotlin.Array<out kotlin.UByte>*/): kotlin.Unit
|
public fun ubyte(/*0*/ vararg a: kotlin.UByte /*kotlin.UByteArray*/): kotlin.Unit
|
||||||
public fun uint(/*0*/ vararg a: kotlin.UInt /*kotlin.Array<out kotlin.UInt>*/): kotlin.Unit
|
public fun uint(/*0*/ vararg a: kotlin.UInt /*kotlin.UIntArray*/): kotlin.Unit
|
||||||
public fun ulong(/*0*/ vararg a: kotlin.ULong /*kotlin.Array<out kotlin.ULong>*/): kotlin.Unit
|
public fun ulong(/*0*/ vararg a: kotlin.ULong /*kotlin.ULongArray*/): kotlin.Unit
|
||||||
public fun ushort(/*0*/ vararg a: kotlin.UShort /*kotlin.Array<out kotlin.UShort>*/): kotlin.Unit
|
public fun ushort(/*0*/ vararg a: kotlin.UShort /*kotlin.UShortArray*/): kotlin.Unit
|
||||||
|
|
||||||
public final annotation class Ann : kotlin.Annotation {
|
public final annotation class Ann : kotlin.Annotation {
|
||||||
public constructor Ann(/*0*/ vararg a: kotlin.UInt /*kotlin.Array<out kotlin.UInt>*/)
|
public constructor Ann(/*0*/ vararg a: kotlin.UInt /*kotlin.UIntArray*/)
|
||||||
public final val a: kotlin.Array<out kotlin.UInt>
|
public final val a: kotlin.UIntArray
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
}
|
}
|
||||||
|
|
||||||
public final class ValueParam {
|
public final class ValueParam {
|
||||||
public constructor ValueParam(/*0*/ vararg a: kotlin.ULong /*kotlin.Array<out kotlin.ULong>*/)
|
public constructor ValueParam(/*0*/ vararg a: kotlin.ULong /*kotlin.ULongArray*/)
|
||||||
public final val a: kotlin.Array<out kotlin.ULong>
|
public final val a: kotlin.ULongArray
|
||||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||||
|
|||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
// !LANGUAGE: +InlineClasses
|
||||||
|
// !SKIP_METADATA_VERSION_CHECK
|
||||||
|
|
||||||
|
fun ubyte(vararg a: UByte): UByteArray = a
|
||||||
|
fun ushort(vararg a: UShort): UShortArray = a
|
||||||
|
fun uint(vararg a: UInt): UIntArray = a
|
||||||
|
fun ulong(vararg a: ULong): ULongArray = a
|
||||||
|
|
||||||
|
fun rawUInt(vararg a: UInt): IntArray = <!TYPE_MISMATCH!>a<!>
|
||||||
+7
@@ -0,0 +1,7 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public fun rawUInt(/*0*/ vararg a: kotlin.UInt /*kotlin.UIntArray*/): kotlin.IntArray
|
||||||
|
public fun ubyte(/*0*/ vararg a: kotlin.UByte /*kotlin.UByteArray*/): kotlin.UByteArray
|
||||||
|
public fun uint(/*0*/ vararg a: kotlin.UInt /*kotlin.UIntArray*/): kotlin.UIntArray
|
||||||
|
public fun ulong(/*0*/ vararg a: kotlin.ULong /*kotlin.ULongArray*/): kotlin.ULongArray
|
||||||
|
public fun ushort(/*0*/ vararg a: kotlin.UShort /*kotlin.UShortArray*/): kotlin.UShortArray
|
||||||
Generated
+5
@@ -21323,6 +21323,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
public void testUnsignedLiteralsWithSignedOverflow() throws Exception {
|
public void testUnsignedLiteralsWithSignedOverflow() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/unsignedTypes/unsignedLiteralsWithSignedOverflow.kt");
|
runTest("compiler/testData/codegen/box/unsignedTypes/unsignedLiteralsWithSignedOverflow.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("varargsOfUnsignedTypes.kt")
|
||||||
|
public void testVarargsOfUnsignedTypes() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/unsignedTypes/varargsOfUnsignedTypes.kt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/box/vararg")
|
@TestMetadata("compiler/testData/codegen/box/vararg")
|
||||||
|
|||||||
+5
@@ -58,4 +58,9 @@ public class DiagnosticsWithUnsignedTypesGenerated extends AbstractDiagnosticsWi
|
|||||||
public void testUnsignedLiteralsTypeCheck() throws Exception {
|
public void testUnsignedLiteralsTypeCheck() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/testsWithUnsignedTypes/unsignedLiteralsTypeCheck.kt");
|
runTest("compiler/testData/diagnostics/testsWithUnsignedTypes/unsignedLiteralsTypeCheck.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("varargTypeToArrayTypeCheck.kt")
|
||||||
|
public void testVarargTypeToArrayTypeCheck() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/testsWithUnsignedTypes/varargTypeToArrayTypeCheck.kt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
@@ -21323,6 +21323,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
public void testUnsignedLiteralsWithSignedOverflow() throws Exception {
|
public void testUnsignedLiteralsWithSignedOverflow() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/unsignedTypes/unsignedLiteralsWithSignedOverflow.kt");
|
runTest("compiler/testData/codegen/box/unsignedTypes/unsignedLiteralsWithSignedOverflow.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("varargsOfUnsignedTypes.kt")
|
||||||
|
public void testVarargsOfUnsignedTypes() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/unsignedTypes/varargsOfUnsignedTypes.kt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/box/vararg")
|
@TestMetadata("compiler/testData/codegen/box/vararg")
|
||||||
|
|||||||
+5
@@ -21323,6 +21323,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
public void testUnsignedLiteralsWithSignedOverflow() throws Exception {
|
public void testUnsignedLiteralsWithSignedOverflow() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/unsignedTypes/unsignedLiteralsWithSignedOverflow.kt");
|
runTest("compiler/testData/codegen/box/unsignedTypes/unsignedLiteralsWithSignedOverflow.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("varargsOfUnsignedTypes.kt")
|
||||||
|
public void testVarargsOfUnsignedTypes() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/unsignedTypes/varargsOfUnsignedTypes.kt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/box/vararg")
|
@TestMetadata("compiler/testData/codegen/box/vararg")
|
||||||
|
|||||||
@@ -74,6 +74,7 @@ public abstract class KotlinBuiltIns {
|
|||||||
private ModuleDescriptorImpl builtInsModule;
|
private ModuleDescriptorImpl builtInsModule;
|
||||||
|
|
||||||
private final NotNullLazyValue<Primitives> primitives;
|
private final NotNullLazyValue<Primitives> primitives;
|
||||||
|
private final MemoizedFunctionToNotNull<ModuleDescriptor, UnsignedPrimitives> unsignedPrimitives;
|
||||||
private final NotNullLazyValue<PackageFragments> packageFragments;
|
private final NotNullLazyValue<PackageFragments> packageFragments;
|
||||||
|
|
||||||
private final MemoizedFunctionToNotNull<Integer, ClassDescriptor> suspendFunctionClasses;
|
private final MemoizedFunctionToNotNull<Integer, ClassDescriptor> suspendFunctionClasses;
|
||||||
@@ -123,6 +124,29 @@ public abstract class KotlinBuiltIns {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.unsignedPrimitives = storageManager.createMemoizedFunction(new Function1<ModuleDescriptor, UnsignedPrimitives>() {
|
||||||
|
@Override
|
||||||
|
public UnsignedPrimitives invoke(ModuleDescriptor module) {
|
||||||
|
Map<KotlinType, SimpleType> unsignedKotlinTypeToKotlinArrayType = new HashMap<KotlinType, SimpleType>();
|
||||||
|
Map<SimpleType, SimpleType> kotlinArrayTypeToUnsignedKotlinType = new HashMap<SimpleType, SimpleType>();
|
||||||
|
for (UnsignedType unsigned : UnsignedType.values()) {
|
||||||
|
ClassDescriptor descriptor = FindClassInModuleKt.findClassAcrossModuleDependencies(module, unsigned.getClassId());
|
||||||
|
if (descriptor == null) continue;
|
||||||
|
|
||||||
|
ClassDescriptor arrayDescriptor =
|
||||||
|
FindClassInModuleKt.findClassAcrossModuleDependencies(module, unsigned.getArrayClassId());
|
||||||
|
if (arrayDescriptor == null) continue;
|
||||||
|
|
||||||
|
SimpleType type = descriptor.getDefaultType();
|
||||||
|
SimpleType arrayType = arrayDescriptor.getDefaultType();
|
||||||
|
|
||||||
|
unsignedKotlinTypeToKotlinArrayType.put(type, arrayType);
|
||||||
|
kotlinArrayTypeToUnsignedKotlinType.put(arrayType, type);
|
||||||
|
}
|
||||||
|
return new UnsignedPrimitives(unsignedKotlinTypeToKotlinArrayType, kotlinArrayTypeToUnsignedKotlinType);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
this.suspendFunctionClasses = storageManager.createMemoizedFunction(new Function1<Integer, ClassDescriptor>() {
|
this.suspendFunctionClasses = storageManager.createMemoizedFunction(new Function1<Integer, ClassDescriptor>() {
|
||||||
@Override
|
@Override
|
||||||
public ClassDescriptor invoke(Integer arity) {
|
public ClassDescriptor invoke(Integer arity) {
|
||||||
@@ -239,6 +263,19 @@ public abstract class KotlinBuiltIns {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class UnsignedPrimitives {
|
||||||
|
public final Map<KotlinType, SimpleType> unsignedKotlinTypeToKotlinArrayType;
|
||||||
|
public final Map<SimpleType, SimpleType> kotlinArrayTypeToUnsignedKotlinType;
|
||||||
|
|
||||||
|
private UnsignedPrimitives(
|
||||||
|
@NotNull Map<KotlinType, SimpleType> unsignedKotlinTypeToKotlinArrayType,
|
||||||
|
@NotNull Map<SimpleType, SimpleType> kotlinArrayTypeToUnsignedKotlinType
|
||||||
|
) {
|
||||||
|
this.unsignedKotlinTypeToKotlinArrayType = unsignedKotlinTypeToKotlinArrayType;
|
||||||
|
this.kotlinArrayTypeToUnsignedKotlinType = kotlinArrayTypeToUnsignedKotlinType;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static class PackageFragments {
|
private static class PackageFragments {
|
||||||
public final PackageFragmentDescriptor builtInsPackageFragment;
|
public final PackageFragmentDescriptor builtInsPackageFragment;
|
||||||
public final PackageFragmentDescriptor collectionsPackageFragment;
|
public final PackageFragmentDescriptor collectionsPackageFragment;
|
||||||
@@ -802,12 +839,20 @@ public abstract class KotlinBuiltIns {
|
|||||||
}
|
}
|
||||||
return arrayType.getArguments().get(0).getType();
|
return arrayType.getArguments().get(0).getType();
|
||||||
}
|
}
|
||||||
|
KotlinType notNullArrayType = TypeUtils.makeNotNullable(arrayType);
|
||||||
//noinspection SuspiciousMethodCalls
|
//noinspection SuspiciousMethodCalls
|
||||||
KotlinType primitiveType = primitives.invoke().kotlinArrayTypeToPrimitiveKotlinType.get(TypeUtils.makeNotNullable(arrayType));
|
KotlinType primitiveType = primitives.invoke().kotlinArrayTypeToPrimitiveKotlinType.get(notNullArrayType);
|
||||||
if (primitiveType == null) {
|
if (primitiveType != null) return primitiveType;
|
||||||
throw new IllegalStateException("not array: " + arrayType);
|
|
||||||
|
ModuleDescriptor module = DescriptorUtils.getContainingModuleOrNull(notNullArrayType);
|
||||||
|
if (module != null) {
|
||||||
|
//noinspection SuspiciousMethodCalls
|
||||||
|
SimpleType unsignedType = unsignedPrimitives.invoke(module).kotlinArrayTypeToUnsignedKotlinType.get(notNullArrayType);
|
||||||
|
if (unsignedType != null) return unsignedType;
|
||||||
}
|
}
|
||||||
return primitiveType;
|
|
||||||
|
|
||||||
|
throw new IllegalStateException("not array: " + arrayType);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -820,7 +865,17 @@ public abstract class KotlinBuiltIns {
|
|||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public SimpleType getPrimitiveArrayKotlinTypeByPrimitiveKotlinType(@NotNull KotlinType kotlinType) {
|
public SimpleType getPrimitiveArrayKotlinTypeByPrimitiveKotlinType(@NotNull KotlinType kotlinType) {
|
||||||
return primitives.invoke().primitiveKotlinTypeToKotlinArrayType.get(kotlinType);
|
SimpleType primitiveArray = primitives.invoke().primitiveKotlinTypeToKotlinArrayType.get(kotlinType);
|
||||||
|
if (primitiveArray != null) return primitiveArray;
|
||||||
|
|
||||||
|
if (UnsignedTypes.INSTANCE.isUnsignedType(kotlinType)) {
|
||||||
|
ModuleDescriptor module = DescriptorUtils.getContainingModuleOrNull(kotlinType);
|
||||||
|
if (module == null) return null;
|
||||||
|
|
||||||
|
return unsignedPrimitives.invoke(module).unsignedKotlinTypeToKotlinArrayType.get(kotlinType);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isPrimitiveArray(@NotNull FqNameUnsafe arrayFqName) {
|
public static boolean isPrimitiveArray(@NotNull FqNameUnsafe arrayFqName) {
|
||||||
|
|||||||
@@ -7,15 +7,21 @@ package org.jetbrains.kotlin.builtins
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
|
||||||
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import kotlin.reflect.KClass
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
|
|
||||||
enum class UnsignedType(val typeName: Name) {
|
enum class UnsignedType(val classId: ClassId) {
|
||||||
UBYTE("UByte"), USHORT("UShort"), UINT("UInt"), ULONG("ULong");
|
UBYTE(ClassId.fromString("kotlin/UByte")),
|
||||||
|
USHORT(ClassId.fromString("kotlin/UShort")),
|
||||||
|
UINT(ClassId.fromString("kotlin/UInt")),
|
||||||
|
ULONG(ClassId.fromString("kotlin/ULong"));
|
||||||
|
|
||||||
constructor(typeName: String) : this(Name.identifier(typeName))
|
val typeName = classId.shortClassName
|
||||||
|
val arrayTypeName = Name.identifier(typeName.asString() + "Array")
|
||||||
|
val arrayClassId = ClassId(classId.packageFqName, arrayTypeName)
|
||||||
}
|
}
|
||||||
|
|
||||||
object UnsignedTypes {
|
object UnsignedTypes {
|
||||||
|
|||||||
@@ -184,6 +184,14 @@ public class DescriptorUtils {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static ModuleDescriptor getContainingModuleOrNull(@NotNull KotlinType kotlinType) {
|
||||||
|
ClassifierDescriptor descriptor = kotlinType.getConstructor().getDeclarationDescriptor();
|
||||||
|
if (descriptor == null) return null;
|
||||||
|
|
||||||
|
return getContainingModuleOrNull(descriptor);
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static ModuleDescriptor getContainingModule(@NotNull DeclarationDescriptor descriptor) {
|
public static ModuleDescriptor getContainingModule(@NotNull DeclarationDescriptor descriptor) {
|
||||||
ModuleDescriptor module = getContainingModuleOrNull(descriptor);
|
ModuleDescriptor module = getContainingModuleOrNull(descriptor);
|
||||||
|
|||||||
+5
@@ -20338,6 +20338,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
public void testAllFilesPresentInUnsignedTypes() throws Exception {
|
public void testAllFilesPresentInUnsignedTypes() throws Exception {
|
||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/unsignedTypes"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS_IR, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/unsignedTypes"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS_IR, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("varargsOfUnsignedTypes.kt")
|
||||||
|
public void testVarargsOfUnsignedTypes() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/unsignedTypes/varargsOfUnsignedTypes.kt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/box/vararg")
|
@TestMetadata("compiler/testData/codegen/box/vararg")
|
||||||
|
|||||||
+5
@@ -19210,6 +19210,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
public void testAllFilesPresentInUnsignedTypes() throws Exception {
|
public void testAllFilesPresentInUnsignedTypes() throws Exception {
|
||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/unsignedTypes"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/unsignedTypes"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("varargsOfUnsignedTypes.kt")
|
||||||
|
public void testVarargsOfUnsignedTypes() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/unsignedTypes/varargsOfUnsignedTypes.kt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestMetadata("compiler/testData/codegen/box/vararg")
|
@TestMetadata("compiler/testData/codegen/box/vararg")
|
||||||
|
|||||||
Reference in New Issue
Block a user