backend: Generalize createFunctionIrBuilder function.

This commit is contained in:
Ilya Matveev
2017-02-06 11:54:03 +03:00
committed by ilmat192
parent 395b49e62b
commit e0a1536c9b
6 changed files with 21 additions and 14 deletions
@@ -18,16 +18,22 @@ import org.jetbrains.kotlin.utils.Printer
class IrLoweringContext(backendContext: BackendContext) : IrGeneratorContext(backendContext.irBuiltIns)
class FunctionIrBuilder(backendContext: BackendContext, functionDescriptor: FunctionDescriptor) :
class DeclarationIrBuilder(backendContext: BackendContext,
declarationDescriptor: DeclarationDescriptor,
startOffset : Int = UNDEFINED_OFFSET,
endOffset : Int = UNDEFINED_OFFSET) :
IrBuilderWithScope(
IrLoweringContext(backendContext),
Scope(functionDescriptor),
UNDEFINED_OFFSET,
UNDEFINED_OFFSET
Scope(declarationDescriptor),
startOffset,
endOffset
)
fun BackendContext.createFunctionIrBuilder(functionDescriptor: FunctionDescriptor) =
FunctionIrBuilder(this, functionDescriptor)
fun BackendContext.createIrBuilder(declarationDescriptor: DeclarationDescriptor,
startOffset : Int = UNDEFINED_OFFSET,
endOffset : Int = UNDEFINED_OFFSET) =
DeclarationIrBuilder(this, declarationDescriptor, startOffset, endOffset)
fun <T : IrBuilder> T.at(element: IrElement) = this.at(element.startOffset, element.endOffset)
@@ -1,7 +1,7 @@
package org.jetbrains.kotlin.backend.konan.lower
import org.jetbrains.kotlin.backend.common.DeclarationContainerLoweringPass
import org.jetbrains.kotlin.backend.common.lower.createFunctionIrBuilder
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.konan.*
import org.jetbrains.kotlin.backend.konan.descriptors.*
import org.jetbrains.kotlin.backend.konan.ir.*
@@ -136,7 +136,7 @@ private class CallableReferencesUnbinder(val lower: CallableReferenceLowering,
// Create new function descriptor:
val newDescriptor = createSimpleFunctionImplTargetDescriptor(descriptor, unboundParams)
val builder = lower.context.createFunctionIrBuilder(newDescriptor)
val builder = lower.context.createIrBuilder(newDescriptor)
val blockBody = builder.irBlockBody(startOffset, endOffset) {
val boundArgsGet = irCall(simpleFunctionImplBoundArgsGetter).apply {
dispatchReceiver = irGet(newDescriptor.valueParameters[0])
@@ -2,7 +2,7 @@ package org.jetbrains.kotlin.backend.konan.lower
import org.jetbrains.kotlin.backend.common.BodyLoweringPass
import org.jetbrains.kotlin.backend.common.DeclarationContainerLoweringPass
import org.jetbrains.kotlin.backend.common.lower.createFunctionIrBuilder
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.common.lower.irBlockBody
import org.jetbrains.kotlin.backend.konan.Context
import org.jetbrains.kotlin.backend.konan.KonanPlatform
@@ -70,7 +70,7 @@ class DefaultParameterStubGenerator internal constructor(val context: Context):
functionDescriptor.overriddenDescriptors.forEach { context.log("DEFAULT-REPLACER: $it") }
if (bodies.isNotEmpty()) {
val description = functionDescriptor.getOrCreateDefaultsDescription(context)
val builder = context.createFunctionIrBuilder(description.function)
val builder = context.createIrBuilder(description.function)
val body = builder.irBlockBody(irFunction) {
val params = mutableListOf<VariableDescriptor>()
val variables = mutableMapOf<VariableDescriptor, VariableDescriptor>()
@@ -2,7 +2,7 @@ package org.jetbrains.kotlin.backend.konan.lower
import org.jetbrains.kotlin.backend.common.FunctionLoweringPass
import org.jetbrains.kotlin.backend.common.lower.at
import org.jetbrains.kotlin.backend.common.lower.createFunctionIrBuilder
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.konan.Context
import org.jetbrains.kotlin.backend.konan.ValueType
import org.jetbrains.kotlin.backend.konan.isRepresentedAs
@@ -38,7 +38,7 @@ internal class InteropLowering(val context: Context) : FunctionLoweringPass {
private class InteropTransformer(val context: Context, val function: FunctionDescriptor) : IrElementTransformerVoid() {
val builder = context.createFunctionIrBuilder(function)
val builder = context.createIrBuilder(function)
val interop = context.interopBuiltIns
private fun MemberScope.getSingleContributedFunction(name: String,
@@ -1,6 +1,7 @@
package org.jetbrains.kotlin.backend.konan.lower
import org.jetbrains.kotlin.backend.common.FileLoweringPass
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.konan.Context
import org.jetbrains.kotlin.backend.konan.descriptors.signature2Descriptor
import org.jetbrains.kotlin.backend.konan.ir.irLetSequence
@@ -92,7 +93,7 @@ private class StringConcatenationTransformer(val lower: StringConcatenationLower
override fun visitDeclaration(declaration: IrDeclaration): IrStatement {
with(declaration) {
buildersStack.add(
IrBlockBuilder(IrGeneratorContext(context.irBuiltIns), Scope(descriptor), startOffset, endOffset)
context.createIrBuilder(declaration.descriptor, startOffset, endOffset)
)
transformChildrenVoid(this@StringConcatenationTransformer)
buildersStack.removeAt(buildersStack.lastIndex)
@@ -34,7 +34,7 @@ internal class TypeOperatorLowering(val context: Context) : FunctionLoweringPass
private class TypeOperatorTransformer(val context: Context, val function: FunctionDescriptor) : IrElementTransformerVoid() {
private val builder = context.createFunctionIrBuilder(function)
private val builder = context.createIrBuilder(function)
val throwClassCastException by lazy {
context.builtIns.getKonanInternalFunctions("ThrowClassCastException").single()