backend: connect lowering with IR generators

This commit is contained in:
Svyatoslav Scherbina
2016-12-23 16:47:58 +07:00
committed by SvyatoslavScherbina
parent 96611c1222
commit 008b8ec031
4 changed files with 45 additions and 1 deletions
@@ -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
}
@@ -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)
@@ -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) {
@@ -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 {