backend: Generalize createFunctionIrBuilder function.
This commit is contained in:
+12
-6
@@ -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)
|
||||
|
||||
|
||||
+2
-2
@@ -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
-2
@@ -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
-2
@@ -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,
|
||||
|
||||
+2
-1
@@ -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)
|
||||
|
||||
+1
-1
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user