backend: connect lowering with IR generators
This commit is contained in:
committed by
SvyatoslavScherbina
parent
96611c1222
commit
008b8ec031
+2
@@ -18,8 +18,10 @@ package org.jetbrains.kotlin.backend.common
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.descriptors.SharedVariablesManager
|
import org.jetbrains.kotlin.backend.common.descriptors.SharedVariablesManager
|
||||||
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
||||||
|
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||||
|
|
||||||
interface BackendContext {
|
interface BackendContext {
|
||||||
val builtIns: KotlinBuiltIns
|
val builtIns: KotlinBuiltIns
|
||||||
|
val irBuiltIns: IrBuiltIns
|
||||||
val sharedVariablesManager: SharedVariablesManager
|
val sharedVariablesManager: SharedVariablesManager
|
||||||
}
|
}
|
||||||
|
|||||||
+39
@@ -0,0 +1,39 @@
|
|||||||
|
package org.jetbrains.kotlin.backend.common.lower
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.backend.common.BackendContext
|
||||||
|
import org.jetbrains.kotlin.descriptors.FunctionDescriptor
|
||||||
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
|
import org.jetbrains.kotlin.ir.builders.*
|
||||||
|
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||||
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|
||||||
|
class IrLoweringContext(backendContext: BackendContext) : GeneratorContext {
|
||||||
|
override val irBuiltIns: IrBuiltIns = backendContext.irBuiltIns
|
||||||
|
}
|
||||||
|
|
||||||
|
class FunctionIrGenerator(backendContext: BackendContext, functionDescriptor: FunctionDescriptor) : GeneratorWithScope {
|
||||||
|
override val context = IrLoweringContext(backendContext)
|
||||||
|
override val scope = Scope(functionDescriptor)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun BackendContext.createFunctionIrGenerator(functionDescriptor: FunctionDescriptor) =
|
||||||
|
FunctionIrGenerator(this, functionDescriptor)
|
||||||
|
|
||||||
|
class FunctionIrBuilder(context: IrLoweringContext, scope: Scope, startOffset: Int, endOffset: Int) :
|
||||||
|
IrBuilderWithScope(context, scope, startOffset, endOffset)
|
||||||
|
|
||||||
|
fun FunctionIrGenerator.createIrBuilder() = FunctionIrBuilder(context, scope, UNDEFINED_OFFSET, UNDEFINED_OFFSET)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Builds [IrBlock] to be used instead of given expression.
|
||||||
|
*/
|
||||||
|
inline fun FunctionIrGenerator.irBlock(expression: IrExpression, origin: IrStatementOrigin? = null,
|
||||||
|
resultType: KotlinType? = expression.type,
|
||||||
|
body: IrBlockBuilder.() -> Unit) =
|
||||||
|
this.irBlock(expression.startOffset, expression.endOffset, origin, resultType, body)
|
||||||
|
|
||||||
|
inline fun FunctionIrGenerator.irBlockBody(irElement: IrElement, body: IrBlockBodyBuilder.() -> Unit) =
|
||||||
|
this.irBlockBody(irElement.startOffset, irElement.endOffset, body)
|
||||||
+3
@@ -37,6 +37,9 @@ internal final class Context(val config: KonanConfig,
|
|||||||
|
|
||||||
lateinit var ir: Ir
|
lateinit var ir: Ir
|
||||||
|
|
||||||
|
override val irBuiltIns
|
||||||
|
get() = ir.irModule.irBuiltins
|
||||||
|
|
||||||
var llvmModule: LLVMModuleRef? = null
|
var llvmModule: LLVMModuleRef? = null
|
||||||
set(module: LLVMModuleRef?) {
|
set(module: LLVMModuleRef?) {
|
||||||
if (field != null) {
|
if (field != null) {
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ import org.jetbrains.kotlin.backend.common.BackendContext
|
|||||||
import org.jetbrains.kotlin.backend.konan.descriptors.KonanSharedVariablesManager
|
import org.jetbrains.kotlin.backend.konan.descriptors.KonanSharedVariablesManager
|
||||||
import org.jetbrains.kotlin.backend.konan.KonanPlatform
|
import org.jetbrains.kotlin.backend.konan.KonanPlatform
|
||||||
|
|
||||||
open internal class KonanBackendContext : BackendContext {
|
abstract internal class KonanBackendContext : BackendContext {
|
||||||
override val builtIns = KonanPlatform.builtIns
|
override val builtIns = KonanPlatform.builtIns
|
||||||
|
|
||||||
override val sharedVariablesManager by lazy {
|
override val sharedVariablesManager by lazy {
|
||||||
|
|||||||
Reference in New Issue
Block a user