[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`
This commit is contained in:
Dmitriy Novozhilov
2023-10-19 17:42:26 +03:00
committed by Space Team
parent 81821d4cd4
commit 07c4cd231c
@@ -228,27 +228,27 @@ class IrBuiltInsOverFir(
return loadClass(ClassId(StandardClassIds.BASE_COLLECTIONS_PACKAGE, Name.identifier("${primitiveType.typeName}Iterator"))) return loadClass(ClassId(StandardClassIds.BASE_COLLECTIONS_PACKAGE, Name.identifier("${primitiveType.typeName}Iterator")))
} }
override val booleanIterator = primitiveIterator(PrimitiveType.BOOLEAN) override val booleanIterator by lazy { primitiveIterator(PrimitiveType.BOOLEAN) }
override val charIterator = primitiveIterator(PrimitiveType.CHAR) override val charIterator by lazy { primitiveIterator(PrimitiveType.CHAR) }
override val byteIterator = primitiveIterator(PrimitiveType.BYTE) override val byteIterator by lazy { primitiveIterator(PrimitiveType.BYTE) }
override val shortIterator = primitiveIterator(PrimitiveType.SHORT) override val shortIterator by lazy { primitiveIterator(PrimitiveType.SHORT) }
override val intIterator = primitiveIterator(PrimitiveType.INT) override val intIterator by lazy { primitiveIterator(PrimitiveType.INT) }
override val longIterator = primitiveIterator(PrimitiveType.LONG) override val longIterator by lazy { primitiveIterator(PrimitiveType.LONG) }
override val floatIterator = primitiveIterator(PrimitiveType.FLOAT) override val floatIterator by lazy { primitiveIterator(PrimitiveType.FLOAT) }
override val doubleIterator = primitiveIterator(PrimitiveType.DOUBLE) override val doubleIterator by lazy { primitiveIterator(PrimitiveType.DOUBLE) }
private fun loadPrimitiveArray(primitiveType: PrimitiveType): IrClassSymbol { private fun loadPrimitiveArray(primitiveType: PrimitiveType): IrClassSymbol {
return loadClass(ClassId(StandardClassIds.BASE_KOTLIN_PACKAGE, Name.identifier("${primitiveType.typeName}Array"))) return loadClass(ClassId(StandardClassIds.BASE_KOTLIN_PACKAGE, Name.identifier("${primitiveType.typeName}Array")))
} }
override val booleanArray: IrClassSymbol = loadPrimitiveArray(PrimitiveType.BOOLEAN) override val booleanArray: IrClassSymbol by lazy { loadPrimitiveArray(PrimitiveType.BOOLEAN) }
override val charArray: IrClassSymbol = loadPrimitiveArray(PrimitiveType.CHAR) override val charArray: IrClassSymbol by lazy { loadPrimitiveArray(PrimitiveType.CHAR) }
override val byteArray: IrClassSymbol = loadPrimitiveArray(PrimitiveType.BYTE) override val byteArray: IrClassSymbol by lazy { loadPrimitiveArray(PrimitiveType.BYTE) }
override val shortArray: IrClassSymbol = loadPrimitiveArray(PrimitiveType.SHORT) override val shortArray: IrClassSymbol by lazy { loadPrimitiveArray(PrimitiveType.SHORT) }
override val intArray: IrClassSymbol = loadPrimitiveArray(PrimitiveType.INT) override val intArray: IrClassSymbol by lazy { loadPrimitiveArray(PrimitiveType.INT) }
override val longArray: IrClassSymbol = loadPrimitiveArray(PrimitiveType.LONG) override val longArray: IrClassSymbol by lazy { loadPrimitiveArray(PrimitiveType.LONG) }
override val floatArray: IrClassSymbol = loadPrimitiveArray(PrimitiveType.FLOAT) override val floatArray: IrClassSymbol by lazy { loadPrimitiveArray(PrimitiveType.FLOAT) }
override val doubleArray: IrClassSymbol = loadPrimitiveArray(PrimitiveType.DOUBLE) override val doubleArray: IrClassSymbol by lazy { loadPrimitiveArray(PrimitiveType.DOUBLE) }
override val primitiveArraysToPrimitiveTypes: Map<IrClassSymbol, PrimitiveType> by lazy { override val primitiveArraysToPrimitiveTypes: Map<IrClassSymbol, PrimitiveType> by lazy {
mapOf( mapOf(