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.builtins.KotlinBuiltIns
|
||||
import org.jetbrains.kotlin.ir.descriptors.IrBuiltIns
|
||||
|
||||
interface BackendContext {
|
||||
val builtIns: KotlinBuiltIns
|
||||
val irBuiltIns: IrBuiltIns
|
||||
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
|
||||
|
||||
override val irBuiltIns
|
||||
get() = ir.irModule.irBuiltins
|
||||
|
||||
var llvmModule: LLVMModuleRef? = null
|
||||
set(module: LLVMModuleRef?) {
|
||||
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.KonanPlatform
|
||||
|
||||
open internal class KonanBackendContext : BackendContext {
|
||||
abstract internal class KonanBackendContext : BackendContext {
|
||||
override val builtIns = KonanPlatform.builtIns
|
||||
|
||||
override val sharedVariablesManager by lazy {
|
||||
|
||||
Reference in New Issue
Block a user