K2 Scripting: make FirScript a CFG owner

This commit is contained in:
Ilya Chernikov
2023-11-21 13:45:00 +01:00
committed by Space Team
parent 41ebe498f2
commit b7057eb22f
5 changed files with 14 additions and 7 deletions
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.FirModuleData
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirScriptSymbol
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@@ -21,12 +22,13 @@ import org.jetbrains.kotlin.name.Name
/**
* Generated from: [org.jetbrains.kotlin.fir.tree.generator.FirTreeBuilder.script]
*/
abstract class FirScript : FirDeclaration() {
abstract class FirScript : FirDeclaration(), FirControlFlowGraphOwner {
abstract override val source: KtSourceElement?
abstract override val annotations: List<FirAnnotation>
abstract override val moduleData: FirModuleData
abstract override val origin: FirDeclarationOrigin
abstract override val attributes: FirDeclarationAttributes
abstract override val controlFlowGraphReference: FirControlFlowGraphReference?
abstract val name: Name
abstract val statements: List<FirStatement>
abstract override val symbol: FirScriptSymbol
@@ -43,6 +45,8 @@ abstract class FirScript : FirDeclaration() {
abstract override fun replaceAnnotations(newAnnotations: List<FirAnnotation>)
abstract override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?)
abstract fun replaceStatements(newStatements: List<FirStatement>)
abstract override fun <D> transformAnnotations(transformer: FirTransformer<D>, data: D): FirScript
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.builder.toMutableOrEmpty
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.references.FirControlFlowGraphReference
import org.jetbrains.kotlin.fir.symbols.impl.FirScriptSymbol
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.fir.visitors.FirVisitor
@@ -38,6 +39,7 @@ internal class FirScriptImpl(
override var contextReceivers: MutableOrEmptyList<FirContextReceiver>,
override val resultPropertyName: Name?,
) : FirScript() {
override var controlFlowGraphReference: FirControlFlowGraphReference? = null
init {
symbol.bind(this)
@@ -46,6 +48,7 @@ internal class FirScriptImpl(
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
annotations.forEach { it.accept(visitor, data) }
controlFlowGraphReference?.accept(visitor, data)
statements.forEach { it.accept(visitor, data) }
parameters.forEach { it.accept(visitor, data) }
contextReceivers.forEach { it.accept(visitor, data) }
@@ -53,6 +56,7 @@ internal class FirScriptImpl(
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirScriptImpl {
transformAnnotations(transformer, data)
controlFlowGraphReference = controlFlowGraphReference?.transform(transformer, data)
transformStatements(transformer, data)
parameters.transformInplace(transformer, data)
contextReceivers.transformInplace(transformer, data)
@@ -73,6 +77,10 @@ internal class FirScriptImpl(
annotations = newAnnotations.toMutableOrEmpty()
}
override fun replaceControlFlowGraphReference(newControlFlowGraphReference: FirControlFlowGraphReference?) {
controlFlowGraphReference = newControlFlowGraphReference
}
override fun replaceStatements(newStatements: List<FirStatement>) {
statements = newStatements.toMutableOrEmpty()
}
@@ -59,9 +59,6 @@ abstract class FirDefaultVisitor<out R, in D> : FirVisitor<R, D>() {
override fun visitRegularClass(regularClass: FirRegularClass, data: D): R =
visitClass(regularClass, data)
override fun visitScript(script: FirScript, data: D): R =
visitDeclaration(script, data)
override fun visitCodeFragment(codeFragment: FirCodeFragment, data: D): R =
visitDeclaration(codeFragment, data)
@@ -46,8 +46,6 @@ abstract class FirDefaultVisitorVoid : FirVisitorVoid() {
override fun visitRegularClass(regularClass: FirRegularClass) = visitClass(regularClass)
override fun visitScript(script: FirScript) = visitDeclaration(script)
override fun visitCodeFragment(codeFragment: FirCodeFragment) = visitDeclaration(codeFragment)
override fun visitAnonymousFunctionExpression(anonymousFunctionExpression: FirAnonymousFunctionExpression) = visitExpression(anonymousFunctionExpression)