K2 Scripting, Fir2Ir: allow out of order supertypes declaration
fix script declarations registration logic in Fir2Ir to allow supertypes of a class to be defined later than the class itself. #KT-64534 fixed
This commit is contained in:
committed by
Space Team
parent
f18aa5e70f
commit
0df3a37303
@@ -528,10 +528,12 @@ class Fir2IrConverter(
|
||||
addDeclarationToParentIfNeeded(irScript)
|
||||
declarationStorage.withScope(irScript.symbol) {
|
||||
irScript.parent = parent
|
||||
for (scriptDeclaration in declaration.declarations.filterIsInstance<FirRegularClass>()) {
|
||||
registerClassAndNestedClasses(scriptDeclaration, irScript)
|
||||
}
|
||||
for (scriptDeclaration in declaration.declarations) {
|
||||
when (scriptDeclaration) {
|
||||
is FirRegularClass -> {
|
||||
registerClassAndNestedClasses(scriptDeclaration, irScript)
|
||||
processClassAndNestedClassHeaders(scriptDeclaration)
|
||||
}
|
||||
is FirTypeAlias -> classifierStorage.createAndCacheIrTypeAlias(scriptDeclaration, irScript)
|
||||
|
||||
+6
@@ -54575,6 +54575,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
|
||||
runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("outOuOrderDecls.kt")
|
||||
public void testOutOuOrderDecls() {
|
||||
runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("scripInstance.kt")
|
||||
public void testScripInstance() {
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
MODULE main
|
||||
CLASS Script.class
|
||||
CLASS METADATA
|
||||
K1
|
||||
<init>([Ljava/lang/String;)V
|
||||
K2
|
||||
---
|
||||
Property: class.metadata.superTypes
|
||||
K1
|
||||
[kotlin/script/templates/standard/ScriptTemplateWithArgs]
|
||||
K2
|
||||
[]
|
||||
Property: class.metadata.contextReceiverTypes
|
||||
K1
|
||||
[]
|
||||
K2
|
||||
[kotlin/script/templates/standard/ScriptTemplateWithArgs]
|
||||
CLASS Script$A.class
|
||||
CLASS METADATA
|
||||
Property: class.metadata.superTypes
|
||||
K1
|
||||
[Script.B, Script.C]
|
||||
K2
|
||||
[B, C]
|
||||
@@ -0,0 +1,14 @@
|
||||
// TARGET_BACKEND: JVM
|
||||
// IGNORE_LIGHT_ANALYSIS
|
||||
// JVM_ABI_K1_K2_DIFF: KT-63963, KT-63964, KT-63960
|
||||
// FILE: test.kt
|
||||
|
||||
fun box(): String = "OK"
|
||||
|
||||
// FILE: script.kts
|
||||
|
||||
class A : B, C {}
|
||||
|
||||
interface B
|
||||
|
||||
interface C
|
||||
+6
@@ -53873,6 +53873,12 @@ public class JvmAbiConsistencyTestBoxGenerated extends AbstractJvmAbiConsistency
|
||||
runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("outOuOrderDecls.kt")
|
||||
public void testOutOuOrderDecls() {
|
||||
runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("scripInstance.kt")
|
||||
public void testScripInstance() {
|
||||
|
||||
+6
@@ -50687,6 +50687,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("outOuOrderDecls.kt")
|
||||
public void testOutOuOrderDecls() {
|
||||
runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("scripInstance.kt")
|
||||
public void testScripInstance() {
|
||||
|
||||
+6
@@ -53873,6 +53873,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("outOuOrderDecls.kt")
|
||||
public void testOutOuOrderDecls() {
|
||||
runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("scripInstance.kt")
|
||||
public void testScripInstance() {
|
||||
|
||||
+6
@@ -53873,6 +53873,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
|
||||
runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("outOuOrderDecls.kt")
|
||||
public void testOutOuOrderDecls() {
|
||||
runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("scripInstance.kt")
|
||||
public void testScripInstance() {
|
||||
|
||||
+5
@@ -43545,6 +43545,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
runTest("compiler/testData/codegen/box/script/localCaptureTests.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("outOuOrderDecls.kt")
|
||||
public void testOutOuOrderDecls() {
|
||||
runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("scripInstance.kt")
|
||||
public void testScripInstance() {
|
||||
runTest("compiler/testData/codegen/box/script/scripInstance.kt");
|
||||
|
||||
Reference in New Issue
Block a user