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)
|
addDeclarationToParentIfNeeded(irScript)
|
||||||
declarationStorage.withScope(irScript.symbol) {
|
declarationStorage.withScope(irScript.symbol) {
|
||||||
irScript.parent = parent
|
irScript.parent = parent
|
||||||
|
for (scriptDeclaration in declaration.declarations.filterIsInstance<FirRegularClass>()) {
|
||||||
|
registerClassAndNestedClasses(scriptDeclaration, irScript)
|
||||||
|
}
|
||||||
for (scriptDeclaration in declaration.declarations) {
|
for (scriptDeclaration in declaration.declarations) {
|
||||||
when (scriptDeclaration) {
|
when (scriptDeclaration) {
|
||||||
is FirRegularClass -> {
|
is FirRegularClass -> {
|
||||||
registerClassAndNestedClasses(scriptDeclaration, irScript)
|
|
||||||
processClassAndNestedClassHeaders(scriptDeclaration)
|
processClassAndNestedClassHeaders(scriptDeclaration)
|
||||||
}
|
}
|
||||||
is FirTypeAlias -> classifierStorage.createAndCacheIrTypeAlias(scriptDeclaration, irScript)
|
is FirTypeAlias -> classifierStorage.createAndCacheIrTypeAlias(scriptDeclaration, irScript)
|
||||||
|
|||||||
+6
@@ -54575,6 +54575,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
|
|||||||
runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt");
|
runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("outOuOrderDecls.kt")
|
||||||
|
public void testOutOuOrderDecls() {
|
||||||
|
runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("scripInstance.kt")
|
@TestMetadata("scripInstance.kt")
|
||||||
public void testScripInstance() {
|
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");
|
runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("outOuOrderDecls.kt")
|
||||||
|
public void testOutOuOrderDecls() {
|
||||||
|
runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("scripInstance.kt")
|
@TestMetadata("scripInstance.kt")
|
||||||
public void testScripInstance() {
|
public void testScripInstance() {
|
||||||
|
|||||||
+6
@@ -50687,6 +50687,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt");
|
runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("outOuOrderDecls.kt")
|
||||||
|
public void testOutOuOrderDecls() {
|
||||||
|
runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("scripInstance.kt")
|
@TestMetadata("scripInstance.kt")
|
||||||
public void testScripInstance() {
|
public void testScripInstance() {
|
||||||
|
|||||||
+6
@@ -53873,6 +53873,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt");
|
runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("outOuOrderDecls.kt")
|
||||||
|
public void testOutOuOrderDecls() {
|
||||||
|
runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("scripInstance.kt")
|
@TestMetadata("scripInstance.kt")
|
||||||
public void testScripInstance() {
|
public void testScripInstance() {
|
||||||
|
|||||||
+6
@@ -53873,6 +53873,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
|
|||||||
runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt");
|
runTest("compiler/testData/codegen/box/script/localCaptureTestsK2.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("outOuOrderDecls.kt")
|
||||||
|
public void testOutOuOrderDecls() {
|
||||||
|
runTest("compiler/testData/codegen/box/script/outOuOrderDecls.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("scripInstance.kt")
|
@TestMetadata("scripInstance.kt")
|
||||||
public void testScripInstance() {
|
public void testScripInstance() {
|
||||||
|
|||||||
+5
@@ -43545,6 +43545,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
runTest("compiler/testData/codegen/box/script/localCaptureTests.kt");
|
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")
|
@TestMetadata("scripInstance.kt")
|
||||||
public void testScripInstance() {
|
public void testScripInstance() {
|
||||||
runTest("compiler/testData/codegen/box/script/scripInstance.kt");
|
runTest("compiler/testData/codegen/box/script/scripInstance.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user