From 07c4cd231c027b64be53b5e375a3d2e38a8b0dc0 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 19 Oct 2023 17:42:26 +0300 Subject: [PATCH] [FIR2IR] Lazily load all classes in FIR2IR builtins which may appear in sources If some of builtin classes is declared in sources, trying to load it in IrBuiltInsOverFir before fir2ir pass which generates IR for source declarations will lead to creating lazy class instead of normal one Without this change the following tests are failing: - `FirLightTreeBlackBoxInlineCodegenWithBytecodeInlinerTestGenerated.Signature` - `testByteIteratorWithWhileLoop` - `testByteIteratorWithForLoop` --- .../kotlin/fir/backend/IrBuiltInsOverFir.kt | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt index 6791cdc0b29..edce1a1bdcd 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/IrBuiltInsOverFir.kt @@ -228,27 +228,27 @@ class IrBuiltInsOverFir( return loadClass(ClassId(StandardClassIds.BASE_COLLECTIONS_PACKAGE, Name.identifier("${primitiveType.typeName}Iterator"))) } - override val booleanIterator = primitiveIterator(PrimitiveType.BOOLEAN) - override val charIterator = primitiveIterator(PrimitiveType.CHAR) - override val byteIterator = primitiveIterator(PrimitiveType.BYTE) - override val shortIterator = primitiveIterator(PrimitiveType.SHORT) - override val intIterator = primitiveIterator(PrimitiveType.INT) - override val longIterator = primitiveIterator(PrimitiveType.LONG) - override val floatIterator = primitiveIterator(PrimitiveType.FLOAT) - override val doubleIterator = primitiveIterator(PrimitiveType.DOUBLE) + override val booleanIterator by lazy { primitiveIterator(PrimitiveType.BOOLEAN) } + override val charIterator by lazy { primitiveIterator(PrimitiveType.CHAR) } + override val byteIterator by lazy { primitiveIterator(PrimitiveType.BYTE) } + override val shortIterator by lazy { primitiveIterator(PrimitiveType.SHORT) } + override val intIterator by lazy { primitiveIterator(PrimitiveType.INT) } + override val longIterator by lazy { primitiveIterator(PrimitiveType.LONG) } + override val floatIterator by lazy { primitiveIterator(PrimitiveType.FLOAT) } + override val doubleIterator by lazy { primitiveIterator(PrimitiveType.DOUBLE) } private fun loadPrimitiveArray(primitiveType: PrimitiveType): IrClassSymbol { return loadClass(ClassId(StandardClassIds.BASE_KOTLIN_PACKAGE, Name.identifier("${primitiveType.typeName}Array"))) } - override val booleanArray: IrClassSymbol = loadPrimitiveArray(PrimitiveType.BOOLEAN) - override val charArray: IrClassSymbol = loadPrimitiveArray(PrimitiveType.CHAR) - override val byteArray: IrClassSymbol = loadPrimitiveArray(PrimitiveType.BYTE) - override val shortArray: IrClassSymbol = loadPrimitiveArray(PrimitiveType.SHORT) - override val intArray: IrClassSymbol = loadPrimitiveArray(PrimitiveType.INT) - override val longArray: IrClassSymbol = loadPrimitiveArray(PrimitiveType.LONG) - override val floatArray: IrClassSymbol = loadPrimitiveArray(PrimitiveType.FLOAT) - override val doubleArray: IrClassSymbol = loadPrimitiveArray(PrimitiveType.DOUBLE) + override val booleanArray: IrClassSymbol by lazy { loadPrimitiveArray(PrimitiveType.BOOLEAN) } + override val charArray: IrClassSymbol by lazy { loadPrimitiveArray(PrimitiveType.CHAR) } + override val byteArray: IrClassSymbol by lazy { loadPrimitiveArray(PrimitiveType.BYTE) } + override val shortArray: IrClassSymbol by lazy { loadPrimitiveArray(PrimitiveType.SHORT) } + override val intArray: IrClassSymbol by lazy { loadPrimitiveArray(PrimitiveType.INT) } + override val longArray: IrClassSymbol by lazy { loadPrimitiveArray(PrimitiveType.LONG) } + override val floatArray: IrClassSymbol by lazy { loadPrimitiveArray(PrimitiveType.FLOAT) } + override val doubleArray: IrClassSymbol by lazy { loadPrimitiveArray(PrimitiveType.DOUBLE) } override val primitiveArraysToPrimitiveTypes: Map by lazy { mapOf(