diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/descriptors/FirModuleDescriptor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/descriptors/FirModuleDescriptor.kt index 4ab2c245856..ab2379da38a 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/descriptors/FirModuleDescriptor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/descriptors/FirModuleDescriptor.kt @@ -61,7 +61,7 @@ class FirModuleDescriptor(val session: FirSession) : ModuleDescriptor { } override fun getName(): Name { - return Name.identifier("module for FIR session") + return FIR_MODULE_NAME } override val stableName: Name? @@ -74,4 +74,7 @@ class FirModuleDescriptor(val session: FirSession) : ModuleDescriptor { override val annotations: Annotations get() = Annotations.EMPTY + companion object { + val FIR_MODULE_NAME = Name.identifier("module for FIR session") + } } diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/DumpLoweredIrTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/LoweredIrInterpreterTestGenerated.java similarity index 97% rename from compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/DumpLoweredIrTestGenerated.java rename to compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/LoweredIrInterpreterTestGenerated.java index 531a0c9da75..a367fdd4c1d 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/ir/DumpLoweredIrTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/ir/LoweredIrInterpreterTestGenerated.java @@ -19,7 +19,7 @@ import java.util.regex.Pattern; @SuppressWarnings("all") @TestMetadata("compiler/testData/ir/loweredIr") @TestDataPath("$PROJECT_ROOT") -public class DumpLoweredIrTestGenerated extends AbstractDumpLoweredIrTest { +public class LoweredIrInterpreterTestGenerated extends AbstractLoweredIrInterpreterTest { @Test public void testAllFilesPresentInLoweredIr() throws Exception { KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/ir/loweredIr"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true); diff --git a/compiler/testData/ir/loweredIr/interpreter/constTrimIndent.kt b/compiler/testData/ir/loweredIr/interpreter/constTrimIndent.kt index 7572b0435e1..49fbd964445 100644 --- a/compiler/testData/ir/loweredIr/interpreter/constTrimIndent.kt +++ b/compiler/testData/ir/loweredIr/interpreter/constTrimIndent.kt @@ -5,4 +5,10 @@ const val complexTrimIndent = ABC 123 456 - """.trimIndent() \ No newline at end of file + """.trimIndent() + +fun box(): String { + if (trimIndent != "123") return "Fail 1" + if (complexTrimIndent != "ABC\n123\n456") return "Fail 2" + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/ir/loweredIr/interpreter/constTrimIndent_AFTER.ConstEvaluationLowering.ir b/compiler/testData/ir/loweredIr/interpreter/constTrimIndent_AFTER.ConstEvaluationLowering.ir deleted file mode 100644 index 9742ecc8de5..00000000000 --- a/compiler/testData/ir/loweredIr/interpreter/constTrimIndent_AFTER.ConstEvaluationLowering.ir +++ /dev/null @@ -1,21 +0,0 @@ -// --- IR for
after Evaluate functions that are marked as `Foldable` -MODULE_FRAGMENT name:
- FILE fqName: fileName:/constTrimIndent.kt - PROPERTY name:trimIndent visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:trimIndent type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="123" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:trimIndent visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:trimIndent type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:complexTrimIndent visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:complexTrimIndent type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="ABC\n123\n456" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:complexTrimIndent visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:complexTrimIndent type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null diff --git a/compiler/testData/ir/loweredIr/interpreter/constTrimMargin.kt b/compiler/testData/ir/loweredIr/interpreter/constTrimMargin.kt index 856c77bf169..d104852067a 100644 --- a/compiler/testData/ir/loweredIr/interpreter/constTrimMargin.kt +++ b/compiler/testData/ir/loweredIr/interpreter/constTrimMargin.kt @@ -10,3 +10,10 @@ const val withoutMargin = """ #foo #bar """.trimMargin("#") + +fun box(): String { + if (trimMargin != "123") return "Fail 1" + if (trimMarginDefault != "ABC\n123\n456") return "Fail 2" + if (withoutMargin != "XYZ\nfoo\nbar") return "Fail 3" + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/ir/loweredIr/interpreter/constTrimMargin_AFTER.ConstEvaluationLowering.ir b/compiler/testData/ir/loweredIr/interpreter/constTrimMargin_AFTER.ConstEvaluationLowering.ir deleted file mode 100644 index 6bb9e957a93..00000000000 --- a/compiler/testData/ir/loweredIr/interpreter/constTrimMargin_AFTER.ConstEvaluationLowering.ir +++ /dev/null @@ -1,30 +0,0 @@ -// --- IR for
after Evaluate functions that are marked as `Foldable` -MODULE_FRAGMENT name:
- FILE fqName: fileName:/constTrimMargin.kt - PROPERTY name:trimMargin visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:trimMargin type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="123" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:trimMargin visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:trimMargin type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:trimMarginDefault visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:trimMarginDefault type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="ABC\n123\n456" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:trimMarginDefault visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:trimMarginDefault type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:withoutMargin visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:withoutMargin type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="XYZ\nfoo\nbar" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:withoutMargin visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:withoutMargin type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null diff --git a/compiler/testData/ir/loweredIr/interpreter/enumName.kt b/compiler/testData/ir/loweredIr/interpreter/enumName.kt index 86007e6142b..0b103bc471e 100644 --- a/compiler/testData/ir/loweredIr/interpreter/enumName.kt +++ b/compiler/testData/ir/loweredIr/interpreter/enumName.kt @@ -6,3 +6,10 @@ const val name1 = EnumClass.OK.name const val name2 = EnumClass.VALUE.name const val name3 = EnumClass.anotherValue.name const val name4 = EnumClass.WITH_UNDERSCORE.name + +fun box(): String { + if (name2 != "VALUE") return "Fail 1" + if (name3 != "anotherValue") return "Fail 2" + if (name4 != "WITH_UNDERSCORE") return "Fail 3" + return name1 +} \ No newline at end of file diff --git a/compiler/testData/ir/loweredIr/interpreter/enumName_AFTER.ConstEvaluationLowering.ir b/compiler/testData/ir/loweredIr/interpreter/enumName_AFTER.ConstEvaluationLowering.ir deleted file mode 100644 index 278f06ac307..00000000000 --- a/compiler/testData/ir/loweredIr/interpreter/enumName_AFTER.ConstEvaluationLowering.ir +++ /dev/null @@ -1,111 +0,0 @@ -// --- IR for
after Evaluate functions that are marked as `Foldable` -MODULE_FRAGMENT name:
- FILE fqName: fileName:/enumName.kt - CLASS ENUM_CLASS name:EnumClass modality:FINAL visibility:public superTypes:[kotlin.Enum<.EnumClass>] - $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.EnumClass - CONSTRUCTOR visibility:private <> () returnType:.EnumClass [primary] - BLOCK_BODY - ENUM_CONSTRUCTOR_CALL 'public constructor (name: kotlin.String, ordinal: kotlin.Int) [primary] declared in kotlin.Enum' - : .EnumClass - INSTANCE_INITIALIZER_CALL classDescriptor='CLASS ENUM_CLASS name:EnumClass modality:FINAL visibility:public superTypes:[kotlin.Enum<.EnumClass>]' - ENUM_ENTRY name:OK - init: EXPRESSION_BODY - ENUM_CONSTRUCTOR_CALL 'private constructor () [primary] declared in .EnumClass' - ENUM_ENTRY name:VALUE - init: EXPRESSION_BODY - ENUM_CONSTRUCTOR_CALL 'private constructor () [primary] declared in .EnumClass' - ENUM_ENTRY name:anotherValue - init: EXPRESSION_BODY - ENUM_CONSTRUCTOR_CALL 'private constructor () [primary] declared in .EnumClass' - ENUM_ENTRY name:WITH_UNDERSCORE - init: EXPRESSION_BODY - ENUM_CONSTRUCTOR_CALL 'private constructor () [primary] declared in .EnumClass' - PROPERTY FAKE_OVERRIDE name:name visibility:public modality:FINAL [fake_override,val] - annotations: - Foldable - overridden: - public final name: kotlin.String [val] - FUN FAKE_OVERRIDE name: visibility:public modality:FINAL <> ($this:kotlin.Enum<.EnumClass>) returnType:kotlin.String [fake_override] - correspondingProperty: PROPERTY FAKE_OVERRIDE name:name visibility:public modality:FINAL [fake_override,val] - overridden: - public final fun (): kotlin.String declared in kotlin.Enum - $this: VALUE_PARAMETER name: type:kotlin.Enum<.EnumClass> - PROPERTY FAKE_OVERRIDE name:ordinal visibility:public modality:FINAL [fake_override,val] - overridden: - public final ordinal: kotlin.Int [val] - FUN FAKE_OVERRIDE name: visibility:public modality:FINAL <> ($this:kotlin.Enum<.EnumClass>) returnType:kotlin.Int [fake_override] - correspondingProperty: PROPERTY FAKE_OVERRIDE name:ordinal visibility:public modality:FINAL [fake_override,val] - overridden: - public final fun (): kotlin.Int declared in kotlin.Enum - $this: VALUE_PARAMETER name: type:kotlin.Enum<.EnumClass> - FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum<.EnumClass>) returnType:kotlin.Any [fake_override] - overridden: - protected final fun clone (): kotlin.Any declared in kotlin.Enum - $this: VALUE_PARAMETER name: type:kotlin.Enum<.EnumClass> - FUN FAKE_OVERRIDE name:compareTo visibility:public modality:FINAL <> ($this:kotlin.Enum<.EnumClass>, other:.EnumClass) returnType:kotlin.Int [fake_override,operator] - overridden: - public final fun compareTo (other: E of kotlin.Enum): kotlin.Int [operator] declared in kotlin.Enum - $this: VALUE_PARAMETER name: type:kotlin.Enum<.EnumClass> - VALUE_PARAMETER name:other index:0 type:.EnumClass - FUN FAKE_OVERRIDE name:equals visibility:public modality:FINAL <> ($this:kotlin.Enum<.EnumClass>, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] - overridden: - public final fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Enum - $this: VALUE_PARAMETER name: type:kotlin.Enum<.EnumClass> - VALUE_PARAMETER name:other index:0 type:kotlin.Any? - FUN FAKE_OVERRIDE name:finalize visibility:protected/*protected and package*/ modality:FINAL <> ($this:kotlin.Enum<.EnumClass>) returnType:kotlin.Unit [fake_override] - overridden: - protected/*protected and package*/ final fun finalize (): kotlin.Unit declared in kotlin.Enum - $this: VALUE_PARAMETER name: type:kotlin.Enum<.EnumClass> - FUN FAKE_OVERRIDE name:getDeclaringClass visibility:public modality:FINAL <> ($this:kotlin.Enum<.EnumClass>) returnType:@[FlexibleNullability] java.lang.Class<@[FlexibleNullability] .EnumClass?>? [fake_override] - overridden: - public final fun getDeclaringClass (): @[FlexibleNullability] java.lang.Class<@[FlexibleNullability] E of kotlin.Enum?>? declared in kotlin.Enum - $this: VALUE_PARAMETER name: type:kotlin.Enum<.EnumClass> - FUN FAKE_OVERRIDE name:hashCode visibility:public modality:FINAL <> ($this:kotlin.Enum<.EnumClass>) returnType:kotlin.Int [fake_override] - overridden: - public final fun hashCode (): kotlin.Int declared in kotlin.Enum - $this: VALUE_PARAMETER name: type:kotlin.Enum<.EnumClass> - FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Enum<.EnumClass>) returnType:kotlin.String [fake_override] - overridden: - public open fun toString (): kotlin.String declared in kotlin.Enum - $this: VALUE_PARAMETER name: type:kotlin.Enum<.EnumClass> - FUN ENUM_CLASS_SPECIAL_MEMBER name:values visibility:public modality:FINAL <> () returnType:kotlin.Array<.EnumClass> - SYNTHETIC_BODY kind=ENUM_VALUES - FUN ENUM_CLASS_SPECIAL_MEMBER name:valueOf visibility:public modality:FINAL <> (value:kotlin.String) returnType:.EnumClass - VALUE_PARAMETER name:value index:0 type:kotlin.String - SYNTHETIC_BODY kind=ENUM_VALUEOF - PROPERTY name:name1 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:name1 type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="OK" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:name1 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name1 type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:name2 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:name2 type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="VALUE" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:name2 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name2 type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:name3 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:name3 type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="anotherValue" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:name3 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name3 type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:name4 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:name4 type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="WITH_UNDERSCORE" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:name4 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:name4 type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null diff --git a/compiler/testData/ir/loweredIr/interpreter/ifConstVal.kt b/compiler/testData/ir/loweredIr/interpreter/ifConstVal.kt index c4a0fa72622..df9acd3b5c1 100644 --- a/compiler/testData/ir/loweredIr/interpreter/ifConstVal.kt +++ b/compiler/testData/ir/loweredIr/interpreter/ifConstVal.kt @@ -15,3 +15,12 @@ const val withWhen3 = when(value) { else -> "3" } const val multibranchIf = if (value == 100) 1 else if (value == 1000) 2 else 3 + +fun box(): String { + if (condition != "True") return "Fail 1" + if (withWhen != "True") return "Fail 2" + if (withWhen2 != "True") return "Fail 3" + if (withWhen3 != "1") return "Fail 4" + if (multibranchIf != 3) return "Fail 5" + return "OK" +} diff --git a/compiler/testData/ir/loweredIr/interpreter/ifConstVal_AFTER.ConstEvaluationLowering.ir b/compiler/testData/ir/loweredIr/interpreter/ifConstVal_AFTER.ConstEvaluationLowering.ir deleted file mode 100644 index 1bd0ee74246..00000000000 --- a/compiler/testData/ir/loweredIr/interpreter/ifConstVal_AFTER.ConstEvaluationLowering.ir +++ /dev/null @@ -1,66 +0,0 @@ -// --- IR for
after Evaluate functions that are marked as `Foldable` -MODULE_FRAGMENT name:
- FILE fqName: fileName:/ifConstVal.kt - PROPERTY name:flag visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:flag type:kotlin.Boolean visibility:public [final,static] - EXPRESSION_BODY - CONST Boolean type=kotlin.Boolean value=true - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Boolean - correspondingProperty: PROPERTY name:flag visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Boolean declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:flag type:kotlin.Boolean visibility:public [final,static]' type=kotlin.Boolean origin=null - PROPERTY name:value visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:value type:kotlin.Int visibility:public [final,static] - EXPRESSION_BODY - CONST Int type=kotlin.Int value=10 - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Int - correspondingProperty: PROPERTY name:value visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Int declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:value type:kotlin.Int visibility:public [final,static]' type=kotlin.Int origin=null - PROPERTY name:condition visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:condition type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="True" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:condition visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:condition type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:withWhen visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:withWhen type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="True" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:withWhen visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:withWhen type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:withWhen2 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:withWhen2 type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="True" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:withWhen2 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:withWhen2 type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:withWhen3 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:withWhen3 type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="1" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:withWhen3 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:withWhen3 type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:multibranchIf visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:multibranchIf type:kotlin.Int visibility:public [final,static] - EXPRESSION_BODY - CONST Int type=kotlin.Int value=3 - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Int - correspondingProperty: PROPERTY name:multibranchIf visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Int declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:multibranchIf type:kotlin.Int visibility:public [final,static]' type=kotlin.Int origin=null diff --git a/compiler/testData/ir/loweredIr/interpreter/kCallableName.kt b/compiler/testData/ir/loweredIr/interpreter/kCallableName.kt index 89115b32b6b..2f507242e4c 100644 --- a/compiler/testData/ir/loweredIr/interpreter/kCallableName.kt +++ b/compiler/testData/ir/loweredIr/interpreter/kCallableName.kt @@ -8,3 +8,12 @@ const val propertyName2 = A::somePropertyWithLongName.name const val methodName = A::foo.name const val className = ::A.name const val topLevelPropName = ::topLevelProp.name + +fun box(): String { + if (propertyName1 != "OK") return "Fail 1" + if (propertyName2 != "somePropertyWithLongName") return "Fail 2" + if (methodName != "foo") return "Fail 3" + if (className != "") return "Fail 4" + if (topLevelPropName != "topLevelProp") return "Fail 5" + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/ir/loweredIr/interpreter/kCallableName_AFTER.ConstEvaluationLowering.ir b/compiler/testData/ir/loweredIr/interpreter/kCallableName_AFTER.ConstEvaluationLowering.ir deleted file mode 100644 index 9a5f48b82b7..00000000000 --- a/compiler/testData/ir/loweredIr/interpreter/kCallableName_AFTER.ConstEvaluationLowering.ir +++ /dev/null @@ -1,103 +0,0 @@ -// --- IR for
after Evaluate functions that are marked as `Foldable` -MODULE_FRAGMENT name:
- FILE fqName: fileName:/kCallableName.kt - CLASS CLASS name:A modality:FINAL visibility:public superTypes:[kotlin.Any] - $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.A - CONSTRUCTOR visibility:public <> (OK:kotlin.Int, somePropertyWithLongName:kotlin.String) returnType:.A [primary] - VALUE_PARAMETER name:OK index:0 type:kotlin.Int - VALUE_PARAMETER name:somePropertyWithLongName index:1 type:kotlin.String - BLOCK_BODY - DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in kotlin.Any' - INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:A modality:FINAL visibility:public superTypes:[kotlin.Any]' - PROPERTY name:OK visibility:public modality:FINAL [val] - FIELD PROPERTY_BACKING_FIELD name:OK type:kotlin.Int visibility:private [final] - EXPRESSION_BODY - GET_VAR 'OK: kotlin.Int declared in .A.' type=kotlin.Int origin=INITIALIZE_PROPERTY_FROM_PARAMETER - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.A) returnType:kotlin.Int - correspondingProperty: PROPERTY name:OK visibility:public modality:FINAL [val] - $this: VALUE_PARAMETER name: type:.A - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Int declared in .A' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:OK type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null - receiver: GET_VAR ': .A declared in .A.' type=.A origin=null - PROPERTY name:somePropertyWithLongName visibility:public modality:FINAL [val] - FIELD PROPERTY_BACKING_FIELD name:somePropertyWithLongName type:kotlin.String visibility:private [final] - EXPRESSION_BODY - GET_VAR 'somePropertyWithLongName: kotlin.String declared in .A.' type=kotlin.String origin=INITIALIZE_PROPERTY_FROM_PARAMETER - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.A) returnType:kotlin.String - correspondingProperty: PROPERTY name:somePropertyWithLongName visibility:public modality:FINAL [val] - $this: VALUE_PARAMETER name: type:.A - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in .A' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:somePropertyWithLongName type:kotlin.String visibility:private [final]' type=kotlin.String origin=null - receiver: GET_VAR ': .A declared in .A.' type=.A origin=null - FUN name:foo visibility:public modality:FINAL <> ($this:.A) returnType:kotlin.Unit - $this: VALUE_PARAMETER name: type:.A - BLOCK_BODY - FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] - overridden: - public open fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Any - $this: VALUE_PARAMETER name: type:kotlin.Any - VALUE_PARAMETER name:other index:0 type:kotlin.Any? - FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] - overridden: - public open fun hashCode (): kotlin.Int declared in kotlin.Any - $this: VALUE_PARAMETER name: type:kotlin.Any - FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] - overridden: - public open fun toString (): kotlin.String declared in kotlin.Any - $this: VALUE_PARAMETER name: type:kotlin.Any - PROPERTY name:topLevelProp visibility:public modality:FINAL [val] - FIELD PROPERTY_BACKING_FIELD name:topLevelProp type:kotlin.Int visibility:private [final,static] - EXPRESSION_BODY - CONST Int type=kotlin.Int value=1 - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Int - correspondingProperty: PROPERTY name:topLevelProp visibility:public modality:FINAL [val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Int declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:topLevelProp type:kotlin.Int visibility:private [final,static]' type=kotlin.Int origin=null - PROPERTY name:propertyName1 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:propertyName1 type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="OK" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:propertyName1 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:propertyName1 type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:propertyName2 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:propertyName2 type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="somePropertyWithLongName" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:propertyName2 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:propertyName2 type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:methodName visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:methodName type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="foo" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:methodName visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:methodName type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:className visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:className type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:className visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:className type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:topLevelPropName visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:topLevelPropName type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="topLevelProp" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:topLevelPropName visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:topLevelPropName type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null diff --git a/compiler/testData/ir/loweredIr/interpreter/primitiveOperations.kt b/compiler/testData/ir/loweredIr/interpreter/primitiveOperations.kt index ea2d0fcdaef..7b388da51e2 100644 --- a/compiler/testData/ir/loweredIr/interpreter/primitiveOperations.kt +++ b/compiler/testData/ir/loweredIr/interpreter/primitiveOperations.kt @@ -10,6 +10,27 @@ const val toString4 = 4L.toString() const val toString5 = 5.0.toString() const val equals1 = "1" == toString1 -const val equals2 = 2 == "2" -const val equals3 = 3 == 3L -const val equals4 = 4.0 == 4f +const val equals2 = "4" == toString4 +const val equals3 = "5.0" == toString5 +const val equals4 = mul == 100L +const val equals5 = divide == 0.5 + +fun box(): String { + if (add != 10) return "Fail 1" + if (concat != "1234") return "Fail 2" + if (divide != 0.5) return "Fail 3" + if (mul != 1000L) return "Fail 4" + + if (toString1 != "1") return "Fail 5" + if (toString2 != "2") return "Fail 6" + if (toString3 != "3") return "Fail 7" + if (toString4 != "4") return "Fail 8" + if (toString5 != "5.0") return "Fail 9" + + if (equals1 != true) return "Fail 10" + if (equals2 != true) return "Fail 11" + if (equals3 != true) return "Fail 12" + if (equals4 != false) return "Fail 13" + if (equals5 != true) return "Fail 14" + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/ir/loweredIr/interpreter/primitiveOperations_AFTER.ConstEvaluationLowering.ir b/compiler/testData/ir/loweredIr/interpreter/primitiveOperations_AFTER.ConstEvaluationLowering.ir deleted file mode 100644 index 6b8ff41d2cf..00000000000 --- a/compiler/testData/ir/loweredIr/interpreter/primitiveOperations_AFTER.ConstEvaluationLowering.ir +++ /dev/null @@ -1,120 +0,0 @@ -// --- IR for
after Evaluate functions that are marked as `Foldable` -MODULE_FRAGMENT name:
- FILE fqName: fileName:/primitiveOperations.kt - PROPERTY name:add visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:add type:kotlin.Int visibility:public [final,static] - EXPRESSION_BODY - CONST Int type=kotlin.Int value=10 - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Int - correspondingProperty: PROPERTY name:add visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Int declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:add type:kotlin.Int visibility:public [final,static]' type=kotlin.Int origin=null - PROPERTY name:concat visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:concat type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="1234" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:concat visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:concat type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:divide visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:divide type:kotlin.Double visibility:public [final,static] - EXPRESSION_BODY - CONST Double type=kotlin.Double value=0.5 - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Double - correspondingProperty: PROPERTY name:divide visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Double declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:divide type:kotlin.Double visibility:public [final,static]' type=kotlin.Double origin=null - PROPERTY name:mul visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:mul type:kotlin.Long visibility:public [final,static] - EXPRESSION_BODY - CONST Long type=kotlin.Long value=1000 - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Long - correspondingProperty: PROPERTY name:mul visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Long declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:mul type:kotlin.Long visibility:public [final,static]' type=kotlin.Long origin=null - PROPERTY name:toString1 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:toString1 type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="1" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:toString1 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:toString1 type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:toString2 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:toString2 type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="2" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:toString2 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:toString2 type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:toString3 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:toString3 type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="3" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:toString3 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:toString3 type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:toString4 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:toString4 type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="4" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:toString4 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:toString4 type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:toString5 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:toString5 type:kotlin.String visibility:public [final,static] - EXPRESSION_BODY - CONST String type=kotlin.String value="5.0" - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.String - correspondingProperty: PROPERTY name:toString5 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:toString5 type:kotlin.String visibility:public [final,static]' type=kotlin.String origin=null - PROPERTY name:equals1 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:equals1 type:kotlin.Boolean visibility:public [final,static] - EXPRESSION_BODY - CONST Boolean type=kotlin.Boolean value=true - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Boolean - correspondingProperty: PROPERTY name:equals1 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Boolean declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:equals1 type:kotlin.Boolean visibility:public [final,static]' type=kotlin.Boolean origin=null - PROPERTY name:equals2 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:equals2 type:kotlin.Boolean visibility:public [final,static] - EXPRESSION_BODY - CONST Boolean type=kotlin.Boolean value=false - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Boolean - correspondingProperty: PROPERTY name:equals2 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Boolean declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:equals2 type:kotlin.Boolean visibility:public [final,static]' type=kotlin.Boolean origin=null - PROPERTY name:equals3 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:equals3 type:kotlin.Boolean visibility:public [final,static] - EXPRESSION_BODY - CONST Boolean type=kotlin.Boolean value=false - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Boolean - correspondingProperty: PROPERTY name:equals3 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Boolean declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:equals3 type:kotlin.Boolean visibility:public [final,static]' type=kotlin.Boolean origin=null - PROPERTY name:equals4 visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:equals4 type:kotlin.Boolean visibility:public [final,static] - EXPRESSION_BODY - CONST Boolean type=kotlin.Boolean value=false - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Boolean - correspondingProperty: PROPERTY name:equals4 visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Boolean declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:equals4 type:kotlin.Boolean visibility:public [final,static]' type=kotlin.Boolean origin=null diff --git a/compiler/testData/ir/loweredIr/interpreter/stdlibConst.kt b/compiler/testData/ir/loweredIr/interpreter/stdlibConst.kt index ac770955966..9126a067754 100644 --- a/compiler/testData/ir/loweredIr/interpreter/stdlibConst.kt +++ b/compiler/testData/ir/loweredIr/interpreter/stdlibConst.kt @@ -3,3 +3,11 @@ const val code = '1'.code const val floorDiv = 10.floorDiv(2) const val mod = 5.mod(3) + +fun box(): String { + if (code != 49) return "Fail 1" + if (floorDiv != 5) return "Fail 2" + if (mod != 2) return "Fail 3" + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/ir/loweredIr/interpreter/stdlibConst_AFTER.ConstEvaluationLowering.ir b/compiler/testData/ir/loweredIr/interpreter/stdlibConst_AFTER.ConstEvaluationLowering.ir deleted file mode 100644 index 0051d36caa0..00000000000 --- a/compiler/testData/ir/loweredIr/interpreter/stdlibConst_AFTER.ConstEvaluationLowering.ir +++ /dev/null @@ -1,30 +0,0 @@ -// --- IR for
after Evaluate functions that are marked as `Foldable` -MODULE_FRAGMENT name:
- FILE fqName: fileName:/stdlibConst.kt - PROPERTY name:code visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:code type:kotlin.Int visibility:public [final,static] - EXPRESSION_BODY - CONST Int type=kotlin.Int value=49 - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Int - correspondingProperty: PROPERTY name:code visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Int declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:code type:kotlin.Int visibility:public [final,static]' type=kotlin.Int origin=null - PROPERTY name:floorDiv visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:floorDiv type:kotlin.Int visibility:public [final,static] - EXPRESSION_BODY - CONST Int type=kotlin.Int value=5 - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Int - correspondingProperty: PROPERTY name:floorDiv visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Int declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:floorDiv type:kotlin.Int visibility:public [final,static]' type=kotlin.Int origin=null - PROPERTY name:mod visibility:public modality:FINAL [const,val] - FIELD PROPERTY_BACKING_FIELD name:mod type:kotlin.Int visibility:public [final,static] - EXPRESSION_BODY - CONST Int type=kotlin.Int value=2 - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> () returnType:kotlin.Int - correspondingProperty: PROPERTY name:mod visibility:public modality:FINAL [const,val] - BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Int declared in ' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:mod type:kotlin.Int visibility:public [final,static]' type=kotlin.Int origin=null diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrInterpreterDumpHandler.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrInterpreterDumpHandler.kt new file mode 100644 index 00000000000..002af2fa17b --- /dev/null +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/IrInterpreterDumpHandler.kt @@ -0,0 +1,59 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.test.backend.handlers + +import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor +import org.jetbrains.kotlin.test.directives.CodegenTestDirectives +import org.jetbrains.kotlin.test.model.BinaryArtifacts +import org.jetbrains.kotlin.test.model.TestModule +import org.jetbrains.kotlin.test.services.TestServices +import org.jetbrains.kotlin.test.services.assertions +import org.jetbrains.kotlin.test.services.getOrCreateTempDirectory +import java.io.File + +class IrInterpreterDumpHandler(testServices: TestServices) : JvmBinaryArtifactHandler(testServices) { + private fun getDump(): Pair? { + val dumpDirectory = testServices.getOrCreateTempDirectory(PhasedIrDumpHandler.DUMPED_IR_FOLDER_NAME) + val dumpFiles = dumpDirectory.resolve(FirModuleDescriptor.FIR_MODULE_NAME.asString()).listFiles() + val before = dumpFiles?.single { it.name.contains(PhasedIrDumpHandler.BEFORE_PREFIX) } ?: return null + val after = dumpFiles.single { it.name.contains(PhasedIrDumpHandler.AFTER_PREFIX) } ?: return null + return Pair(before, after) + } + + private fun findConstProperties(text: String): List { + return text.split("\n") + .mapIndexed { index: Int, line: String -> Pair(index, line) } + .filter { it.second.trim().startsWith("PROPERTY") && it.second.contains("[const,val]") } + .map { it.first } + } + + private fun checkInitializersAreConst(text: String, propertiesStart: List) { + val lines = text.split("\n") + for (index in propertiesStart) { + testServices.assertions.assertTrue(lines[index + 3].trim().startsWith("CONST")) { + "Property at $index wasn't converted to const" + } + } + } + + override fun processModule(module: TestModule, info: BinaryArtifacts.Jvm) { + if (CodegenTestDirectives.DUMP_IR_FOR_GIVEN_PHASES !in module.directives) return + val (before, after) = getDump() ?: testServices.assertions.fail { "Cannot find BEFORE and AFTER lowering files" } + + val beforeText = before.readText() + val afterText = after.readText() + val propertiesBefore = findConstProperties(beforeText) + val propertiesAfter = findConstProperties(afterText) + testServices.assertions.assertTrue(propertiesBefore.isNotEmpty()) { "Test file doesn't contain const properties" } + testServices.assertions.assertEquals(propertiesBefore.size, propertiesAfter.size) { + "After lowering some properties are missing" + } + + checkInitializersAreConst(afterText, propertiesAfter) + } + + override fun processAfterAllModules(someAssertionWasFailed: Boolean) {} +} diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/PhasedIrDumpHandler.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/PhasedIrDumpHandler.kt index aa881f82b18..1b9de68016b 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/PhasedIrDumpHandler.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/backend/handlers/PhasedIrDumpHandler.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.test.model.BinaryArtifacts import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.getOrCreateTempDirectory +import java.io.File class PhasedIrDumpHandler(testServices: TestServices) : JvmBinaryArtifactHandler(testServices) { override fun processModule(module: TestModule, info: BinaryArtifacts.Jvm) { @@ -40,5 +41,6 @@ class PhasedIrDumpHandler(testServices: TestServices) : JvmBinaryArtifactHandler companion object { const val DUMPED_IR_FOLDER_NAME = "dumped_ir" val AFTER_PREFIX = BeforeOrAfter.AFTER.name + val BEFORE_PREFIX = BeforeOrAfter.BEFORE.name } } diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/ir/AbstractDumpLoweredIrTest.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/ir/AbstractDumpLoweredIrTest.kt deleted file mode 100644 index d7e9b00a84e..00000000000 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/ir/AbstractDumpLoweredIrTest.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. - * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.test.runners.ir - -import org.jetbrains.kotlin.backend.jvm.lower.constEvaluationPhase -import org.jetbrains.kotlin.platform.jvm.JvmPlatforms -import org.jetbrains.kotlin.test.TargetBackend -import org.jetbrains.kotlin.test.backend.handlers.PhasedIrDumpHandler -import org.jetbrains.kotlin.test.builders.* -import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.DUMP_IR_FOR_GIVEN_PHASES -import org.jetbrains.kotlin.test.model.ArtifactKinds -import org.jetbrains.kotlin.test.model.DependencyKind -import org.jetbrains.kotlin.test.model.FrontendKinds -import org.jetbrains.kotlin.test.runners.AbstractKotlinCompilerWithTargetBackendTest -import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator -import org.jetbrains.kotlin.test.services.configuration.JvmEnvironmentConfigurator - -open class AbstractDumpLoweredIrTest: AbstractKotlinCompilerWithTargetBackendTest(TargetBackend.JVM_IR) { - override fun TestConfigurationBuilder.configuration() { - globalDefaults { - frontend = FrontendKinds.ClassicFrontend - targetPlatform = JvmPlatforms.defaultJvmPlatform - artifactKind = ArtifactKinds.Jvm - targetBackend = TargetBackend.JVM_IR - dependencyKind = DependencyKind.Source - } - - useConfigurators( - ::CommonEnvironmentConfigurator, - ::JvmEnvironmentConfigurator - ) - - forTestsMatching("compiler/testData/ir/loweredIr/interpreter/*") { - defaultDirectives { - DUMP_IR_FOR_GIVEN_PHASES with constEvaluationPhase - } - } - - classicFrontendStep() - psi2IrStep() - jvmIrBackendStep() - jvmArtifactsHandlersStep { - useHandlers(::PhasedIrDumpHandler) - } - } -} \ No newline at end of file diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/ir/AbstractLoweredIrInterpreterTest.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/ir/AbstractLoweredIrInterpreterTest.kt new file mode 100644 index 00000000000..df1d644c23f --- /dev/null +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/ir/AbstractLoweredIrInterpreterTest.kt @@ -0,0 +1,57 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.test.runners.ir + +import org.jetbrains.kotlin.backend.jvm.lower.constEvaluationPhase +import org.jetbrains.kotlin.test.Constructor +import org.jetbrains.kotlin.test.TargetBackend +import org.jetbrains.kotlin.test.backend.handlers.IrInterpreterDumpHandler +import org.jetbrains.kotlin.test.backend.ir.IrBackendInput +import org.jetbrains.kotlin.test.backend.ir.JvmIrBackendFacade +import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder +import org.jetbrains.kotlin.test.builders.configureJvmArtifactsHandlersStep +import org.jetbrains.kotlin.test.directives.CodegenTestDirectives.DUMP_IR_FOR_GIVEN_PHASES +import org.jetbrains.kotlin.test.frontend.fir.Fir2IrResultsConverter +import org.jetbrains.kotlin.test.frontend.fir.FirFrontendFacade +import org.jetbrains.kotlin.test.frontend.fir.FirOutputArtifact +import org.jetbrains.kotlin.test.model.* +import org.jetbrains.kotlin.test.runners.codegen.AbstractJvmBlackBoxCodegenTestBase +import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator +import org.jetbrains.kotlin.test.services.configuration.JvmEnvironmentConfigurator + +open class AbstractLoweredIrInterpreterTest : AbstractJvmBlackBoxCodegenTestBase( + FrontendKinds.FIR, + TargetBackend.JVM_IR +) { + override val frontendFacade: Constructor> + get() = ::FirFrontendFacade + + override val frontendToBackendConverter: Constructor> + get() = ::Fir2IrResultsConverter + + override val backendFacade: Constructor> + get() = ::JvmIrBackendFacade + + override fun configure(builder: TestConfigurationBuilder) { + super.configure(builder) + with(builder) { + useConfigurators( + ::CommonEnvironmentConfigurator, + ::JvmEnvironmentConfigurator + ) + + forTestsMatching("compiler/testData/ir/loweredIr/interpreter/*") { + defaultDirectives { + DUMP_IR_FOR_GIVEN_PHASES with constEvaluationPhase + } + } + + configureJvmArtifactsHandlersStep { + useHandlers(::IrInterpreterDumpHandler) + } + } + } +} \ No newline at end of file diff --git a/compiler/tests-for-compiler-generator/tests/org/jetbrains/kotlin/test/generators/GenerateJUnit5CompilerTests.kt b/compiler/tests-for-compiler-generator/tests/org/jetbrains/kotlin/test/generators/GenerateJUnit5CompilerTests.kt index fd6760ec084..5b7b66acae1 100644 --- a/compiler/tests-for-compiler-generator/tests/org/jetbrains/kotlin/test/generators/GenerateJUnit5CompilerTests.kt +++ b/compiler/tests-for-compiler-generator/tests/org/jetbrains/kotlin/test/generators/GenerateJUnit5CompilerTests.kt @@ -10,7 +10,7 @@ import org.jetbrains.kotlin.generators.util.TestGeneratorUtil import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.test.runners.* import org.jetbrains.kotlin.test.runners.codegen.* -import org.jetbrains.kotlin.test.runners.ir.AbstractDumpLoweredIrTest +import org.jetbrains.kotlin.test.runners.ir.AbstractLoweredIrInterpreterTest import org.jetbrains.kotlin.test.runners.ir.AbstractFir2IrTextTest import org.jetbrains.kotlin.test.runners.ir.AbstractIrTextTest import org.jetbrains.kotlin.test.runners.ir.AbstractLightTreeFir2IrTextTest @@ -118,10 +118,6 @@ fun generateJUnit5CompilerTests(args: Array) { model("ir/irText") } - testClass { - model("ir/loweredIr") - } - testClass { model("codegen/bytecodeText") } @@ -247,6 +243,10 @@ fun generateJUnit5CompilerTests(args: Array) { testClass { model("debug/localVariables") } + + testClass { + model("ir/loweredIr") + } } testGroup(testsRoot = "compiler/fir/fir2ir/tests-gen", testDataRoot = "compiler/fir/fir2ir/testData") {