IR: create IrBlockBody via IrFactory
This commit is contained in:
@@ -582,7 +582,7 @@ class Fir2IrVisitor(
|
|||||||
internal fun convertToIrBlockBody(block: FirBlock): IrBlockBody {
|
internal fun convertToIrBlockBody(block: FirBlock): IrBlockBody {
|
||||||
return block.convertWithOffsets { startOffset, endOffset ->
|
return block.convertWithOffsets { startOffset, endOffset ->
|
||||||
val irStatements = block.mapToIrStatements()
|
val irStatements = block.mapToIrStatements()
|
||||||
IrBlockBodyImpl(
|
irFactory.createBlockBody(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
if (irStatements.isNotEmpty()) {
|
if (irStatements.isNotEmpty()) {
|
||||||
irStatements.filterNotNull().takeIf { it.isNotEmpty() }
|
irStatements.filterNotNull().takeIf { it.isNotEmpty() }
|
||||||
|
|||||||
+2
-2
@@ -127,7 +127,7 @@ internal class ClassMemberGenerator(
|
|||||||
annotationGenerator.generate(irFunction, firFunction)
|
annotationGenerator.generate(irFunction, firFunction)
|
||||||
}
|
}
|
||||||
if (firFunction is FirConstructor && irFunction is IrConstructor && !parentAsClass.isAnnotationClass && !firFunction.isExpect) {
|
if (firFunction is FirConstructor && irFunction is IrConstructor && !parentAsClass.isAnnotationClass && !firFunction.isExpect) {
|
||||||
val body = IrBlockBodyImpl(startOffset, endOffset)
|
val body = factory.createBlockBody(startOffset, endOffset)
|
||||||
val delegatedConstructor = firFunction.delegatedConstructor
|
val delegatedConstructor = firFunction.delegatedConstructor
|
||||||
if (delegatedConstructor != null) {
|
if (delegatedConstructor != null) {
|
||||||
val irDelegatingConstructorCall = delegatedConstructor.toIrDelegatingConstructorCall()
|
val irDelegatingConstructorCall = delegatedConstructor.toIrDelegatingConstructorCall()
|
||||||
@@ -250,7 +250,7 @@ internal class ClassMemberGenerator(
|
|||||||
val fieldSymbol = backingField?.symbol
|
val fieldSymbol = backingField?.symbol
|
||||||
val declaration = this
|
val declaration = this
|
||||||
if (fieldSymbol != null) {
|
if (fieldSymbol != null) {
|
||||||
body = IrBlockBodyImpl(
|
body = factory.createBlockBody(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
listOf(
|
listOf(
|
||||||
if (isSetter) {
|
if (isSetter) {
|
||||||
|
|||||||
+5
-2
@@ -27,7 +27,10 @@ import org.jetbrains.kotlin.ir.descriptors.WrappedPropertyDescriptor
|
|||||||
import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor
|
import org.jetbrains.kotlin.ir.descriptors.WrappedSimpleFunctionDescriptor
|
||||||
import org.jetbrains.kotlin.ir.descriptors.WrappedTypeParameterDescriptor
|
import org.jetbrains.kotlin.ir.descriptors.WrappedTypeParameterDescriptor
|
||||||
import org.jetbrains.kotlin.ir.descriptors.WrappedValueParameterDescriptor
|
import org.jetbrains.kotlin.ir.descriptors.WrappedValueParameterDescriptor
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrTypeParameterSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.*
|
import org.jetbrains.kotlin.ir.types.*
|
||||||
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
||||||
@@ -212,7 +215,7 @@ internal class DelegatedMemberGenerator(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val body = IrBlockBodyImpl(startOffset, endOffset)
|
val body = irFactory.createBlockBody(startOffset, endOffset)
|
||||||
val irCall = IrCallImpl(
|
val irCall = IrCallImpl(
|
||||||
startOffset,
|
startOffset,
|
||||||
endOffset,
|
endOffset,
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildTypeParameter
|
|||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.descriptors.*
|
import org.jetbrains.kotlin.ir.descriptors.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl
|
||||||
@@ -66,7 +65,7 @@ fun IrClass.addSimpleDelegatingConstructor(
|
|||||||
parameter.copyTo(constructor, index = index)
|
parameter.copyTo(constructor, index = index)
|
||||||
}
|
}
|
||||||
|
|
||||||
constructor.body = IrBlockBodyImpl(
|
constructor.body = factory.createBlockBody(
|
||||||
startOffset, endOffset,
|
startOffset, endOffset,
|
||||||
listOf(
|
listOf(
|
||||||
IrDelegatingConstructorCallImpl(
|
IrDelegatingConstructorCallImpl(
|
||||||
|
|||||||
+1
-1
@@ -70,7 +70,7 @@ open class DefaultArgumentStubGenerator(
|
|||||||
log { "$irFunction -> $newIrFunction" }
|
log { "$irFunction -> $newIrFunction" }
|
||||||
val builder = context.createIrBuilder(newIrFunction.symbol)
|
val builder = context.createIrBuilder(newIrFunction.symbol)
|
||||||
|
|
||||||
newIrFunction.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
newIrFunction.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
||||||
statements += builder.irBlockBody(newIrFunction) {
|
statements += builder.irBlockBody(newIrFunction) {
|
||||||
val params = mutableListOf<IrValueDeclaration>()
|
val params = mutableListOf<IrValueDeclaration>()
|
||||||
val variables = mutableMapOf<IrValueDeclaration, IrValueDeclaration>()
|
val variables = mutableMapOf<IrValueDeclaration, IrValueDeclaration>()
|
||||||
|
|||||||
+3
-4
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
|||||||
import org.jetbrains.kotlin.ir.builders.*
|
import org.jetbrains.kotlin.ir.builders.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||||
@@ -73,7 +72,7 @@ class InlineClassLowering(val context: CommonBackendContext) {
|
|||||||
val irClass = irConstructor.parentAsClass
|
val irClass = irConstructor.parentAsClass
|
||||||
|
|
||||||
// Copied and adapted from Kotlin/Native InlineClassTransformer
|
// Copied and adapted from Kotlin/Native InlineClassTransformer
|
||||||
staticMethod.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
staticMethod.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
||||||
statements += context.createIrBuilder(staticMethod.symbol).irBlockBody(staticMethod) {
|
statements += context.createIrBuilder(staticMethod.symbol).irBlockBody(staticMethod) {
|
||||||
|
|
||||||
// Secondary ctors of inline class must delegate to some other constructors.
|
// Secondary ctors of inline class must delegate to some other constructors.
|
||||||
@@ -139,7 +138,7 @@ class InlineClassLowering(val context: CommonBackendContext) {
|
|||||||
val functionBody = function.body
|
val functionBody = function.body
|
||||||
|
|
||||||
// Move function body to static method, transforming value parameters and nested declarations
|
// Move function body to static method, transforming value parameters and nested declarations
|
||||||
staticMethod.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
staticMethod.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
||||||
statements.addAll((functionBody as IrBlockBody).statements)
|
statements.addAll((functionBody as IrBlockBody).statements)
|
||||||
|
|
||||||
transformChildrenVoid(object : IrElementTransformerVoid() {
|
transformChildrenVoid(object : IrElementTransformerVoid() {
|
||||||
@@ -177,7 +176,7 @@ class InlineClassLowering(val context: CommonBackendContext) {
|
|||||||
|
|
||||||
private fun delegateToStaticMethod(function: IrSimpleFunction, staticMethod: IrSimpleFunction): IrBlockBody {
|
private fun delegateToStaticMethod(function: IrSimpleFunction, staticMethod: IrSimpleFunction): IrBlockBody {
|
||||||
// Delegate original function to static implementation
|
// Delegate original function to static implementation
|
||||||
return IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
return context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
||||||
statements += context.createIrBuilder(function.symbol).irBlockBody {
|
statements += context.createIrBuilder(function.symbol).irBlockBody {
|
||||||
+irReturn(
|
+irReturn(
|
||||||
irCall(staticMethod).apply {
|
irCall(staticMethod).apply {
|
||||||
|
|||||||
+1
-1
@@ -69,7 +69,7 @@ class InnerClassesLowering(val context: BackendContext, private val innerClasses
|
|||||||
|
|
||||||
val blockBody = irConstructor.body as? IrBlockBody ?: throw AssertionError("Unexpected constructor body: ${irConstructor.body}")
|
val blockBody = irConstructor.body as? IrBlockBody ?: throw AssertionError("Unexpected constructor body: ${irConstructor.body}")
|
||||||
|
|
||||||
loweredConstructor.body = IrBlockBodyImpl(blockBody.startOffset, blockBody.endOffset) {
|
loweredConstructor.body = context.irFactory.createBlockBody(blockBody.startOffset, blockBody.endOffset) {
|
||||||
context.createIrBuilder(irConstructor.symbol, irConstructor.startOffset, irConstructor.endOffset).apply {
|
context.createIrBuilder(irConstructor.symbol, irConstructor.startOffset, irConstructor.endOffset).apply {
|
||||||
statements.add(0, irSetField(irGet(irClass.thisReceiver!!), parentThisField, irGet(outerThisParameter)))
|
statements.add(0, irSetField(irGet(irClass.thisReceiver!!), parentThisField, irGet(outerThisParameter)))
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-2
@@ -24,7 +24,10 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildField
|
|||||||
import org.jetbrains.kotlin.ir.builders.declarations.buildVariable
|
import org.jetbrains.kotlin.ir.builders.declarations.buildVariable
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrSetVariableImpl
|
||||||
import org.jetbrains.kotlin.ir.types.isMarkedNullable
|
import org.jetbrains.kotlin.ir.types.isMarkedNullable
|
||||||
import org.jetbrains.kotlin.ir.types.isPrimitiveType
|
import org.jetbrains.kotlin.ir.types.isPrimitiveType
|
||||||
import org.jetbrains.kotlin.ir.types.makeNullable
|
import org.jetbrains.kotlin.ir.types.makeNullable
|
||||||
@@ -84,7 +87,7 @@ class NullableFieldsDeclarationLowering(val backendContext: CommonBackendContext
|
|||||||
assert(!type.isPrimitiveType()) { "'lateinit' modifier is not allowed on primitive types" }
|
assert(!type.isPrimitiveType()) { "'lateinit' modifier is not allowed on primitive types" }
|
||||||
val startOffset = getter.startOffset
|
val startOffset = getter.startOffset
|
||||||
val endOffset = getter.endOffset
|
val endOffset = getter.endOffset
|
||||||
getter.body = IrBlockBodyImpl(startOffset, endOffset) {
|
getter.body = backendContext.irFactory.createBlockBody(startOffset, endOffset) {
|
||||||
val irBuilder = backendContext.createIrBuilder(getter.symbol, startOffset, endOffset)
|
val irBuilder = backendContext.createIrBuilder(getter.symbol, startOffset, endOffset)
|
||||||
irBuilder.run {
|
irBuilder.run {
|
||||||
val resultVar = scope.createTmpVariable(
|
val resultVar = scope.createTmpVariable(
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import org.jetbrains.kotlin.descriptors.*
|
|||||||
import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor
|
import org.jetbrains.kotlin.descriptors.impl.EmptyPackageFragmentDescriptor
|
||||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
import org.jetbrains.kotlin.ir.*
|
import org.jetbrains.kotlin.ir.*
|
||||||
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
|
||||||
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrDeclarationBuilder
|
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrDeclarationBuilder
|
||||||
import org.jetbrains.kotlin.ir.backend.js.lower.JsInnerClassesSupport
|
import org.jetbrains.kotlin.ir.backend.js.lower.JsInnerClassesSupport
|
||||||
import org.jetbrains.kotlin.ir.backend.js.utils.OperatorNames
|
import org.jetbrains.kotlin.ir.backend.js.utils.OperatorNames
|
||||||
@@ -129,7 +128,7 @@ class JsIrBackendContext(
|
|||||||
return testContainerFuns.getOrPut(module) {
|
return testContainerFuns.getOrPut(module) {
|
||||||
val file = syntheticFile("tests", module)
|
val file = syntheticFile("tests", module)
|
||||||
jsIrDeclarationBuilder.buildFunction("test fun", irBuiltIns.unitType, file).apply {
|
jsIrDeclarationBuilder.buildFunction("test fun", irBuiltIns.unitType, file).apply {
|
||||||
body = JsIrBuilder.buildBlockBody(emptyList())
|
body = irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET, emptyList())
|
||||||
file.declarations += this
|
file.declarations += this
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,8 +75,6 @@ object JsIrBuilder {
|
|||||||
) =
|
) =
|
||||||
IrSetFieldImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, symbol, receiver, value, type, SYNTHESIZED_STATEMENT, superQualifierSymbol)
|
IrSetFieldImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, symbol, receiver, value, type, SYNTHESIZED_STATEMENT, superQualifierSymbol)
|
||||||
|
|
||||||
fun buildBlockBody(statements: List<IrStatement>) = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, statements)
|
|
||||||
|
|
||||||
fun buildBlock(type: IrType) = IrBlockImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, SYNTHESIZED_STATEMENT)
|
fun buildBlock(type: IrType) = IrBlockImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, SYNTHESIZED_STATEMENT)
|
||||||
fun buildBlock(type: IrType, statements: List<IrStatement>) =
|
fun buildBlock(type: IrType, statements: List<IrStatement>) =
|
||||||
IrBlockImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, SYNTHESIZED_STATEMENT, statements)
|
IrBlockImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, SYNTHESIZED_STATEMENT, statements)
|
||||||
|
|||||||
+1
-2
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.backend.common.DeclarationTransformer
|
|||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl
|
||||||
import org.jetbrains.kotlin.ir.util.parentAsClass
|
import org.jetbrains.kotlin.ir.util.parentAsClass
|
||||||
|
|
||||||
@@ -27,7 +26,7 @@ class AnnotationConstructorLowering(context: CommonBackendContext) : Declaration
|
|||||||
|
|
||||||
// put empty body to make sure proper initializer is generated
|
// put empty body to make sure proper initializer is generated
|
||||||
// TODO what about its previous body?
|
// TODO what about its previous body?
|
||||||
declaration.body = IrBlockBodyImpl(declaration.startOffset, declaration.endOffset) {
|
declaration.body = declaration.factory.createBlockBody(declaration.startOffset, declaration.endOffset) {
|
||||||
statements += IrInstanceInitializerCallImpl(startOffset, endOffset, irClass.symbol, unitType)
|
statements += IrInstanceInitializerCallImpl(startOffset, endOffset, irClass.symbol, unitType)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -82,7 +82,7 @@ abstract class AbstractBlockDecomposerLowering(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun IrExpressionBody.toBlockBody(containingFunction: IrFunction): IrBlockBody {
|
private fun IrExpressionBody.toBlockBody(containingFunction: IrFunction): IrBlockBody {
|
||||||
return IrBlockBodyImpl(startOffset, endOffset) {
|
return context.irFactory.createBlockBody(startOffset, endOffset) {
|
||||||
expression.patchDeclarationParents(containingFunction)
|
expression.patchDeclarationParents(containingFunction)
|
||||||
val returnStatement = JsIrBuilder.buildReturn(containingFunction.symbol, expression, nothingType)
|
val returnStatement = JsIrBuilder.buildReturn(containingFunction.symbol, expression, nothingType)
|
||||||
statements += returnStatement
|
statements += returnStatement
|
||||||
|
|||||||
+1
-2
@@ -20,7 +20,6 @@ import org.jetbrains.kotlin.ir.backend.js.utils.getJsName
|
|||||||
import org.jetbrains.kotlin.ir.builders.*
|
import org.jetbrains.kotlin.ir.builders.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.types.classifierOrNull
|
import org.jetbrains.kotlin.ir.types.classifierOrNull
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
@@ -140,7 +139,7 @@ class BridgesConstruction(val context: JsCommonBackendContext) : DeclarationTran
|
|||||||
overriddenSymbols += bridge.symbol
|
overriddenSymbols += bridge.symbol
|
||||||
}
|
}
|
||||||
|
|
||||||
irFunction.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
irFunction.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
||||||
statements += context.createIrBuilder(irFunction.symbol).irBlockBody(irFunction) {
|
statements += context.createIrBuilder(irFunction.symbol).irBlockBody(irFunction) {
|
||||||
if (specialMethodInfo != null) {
|
if (specialMethodInfo != null) {
|
||||||
irFunction.valueParameters.take(specialMethodInfo.argumentsToCheck).forEach {
|
irFunction.valueParameters.take(specialMethodInfo.argumentsToCheck).forEach {
|
||||||
|
|||||||
+2
-2
@@ -293,7 +293,7 @@ class CallableReferenceLowering(private val context: CommonBackendContext) : Bod
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
body = IrBlockBodyImpl(reference.startOffset, reference.endOffset, listOf(reference.run {
|
body = factory.createBlockBody(reference.startOffset, reference.endOffset, listOf(reference.run {
|
||||||
IrReturnImpl(
|
IrReturnImpl(
|
||||||
startOffset,
|
startOffset,
|
||||||
endOffset, nothingType,
|
endOffset, nothingType,
|
||||||
@@ -324,7 +324,7 @@ class CallableReferenceLowering(private val context: CommonBackendContext) : Bod
|
|||||||
type = clazz.defaultType
|
type = clazz.defaultType
|
||||||
}
|
}
|
||||||
|
|
||||||
getter.body = IrBlockBodyImpl(
|
getter.body = context.irFactory.createBlockBody(
|
||||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, listOf(
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET, listOf(
|
||||||
IrReturnImpl(
|
IrReturnImpl(
|
||||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, nothingType, getter.symbol, IrConstImpl.string(
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET, nothingType, getter.symbol, IrConstImpl.string(
|
||||||
|
|||||||
+2
-3
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.ir.declarations.*
|
|||||||
import org.jetbrains.kotlin.ir.expressions.IrCall
|
import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrSetField
|
import org.jetbrains.kotlin.ir.expressions.IrSetField
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl
|
||||||
@@ -45,7 +44,7 @@ class CreateScriptFunctionsPhase(val context: CommonBackendContext) : FileLoweri
|
|||||||
initializeStatements.forEach { it.first.initializer = null }
|
initializeStatements.forEach { it.first.initializer = null }
|
||||||
|
|
||||||
val initializeScriptFunction = createFunction(irScript, "\$initializeScript\$", context.irBuiltIns.unitType).also {
|
val initializeScriptFunction = createFunction(irScript, "\$initializeScript\$", context.irBuiltIns.unitType).also {
|
||||||
it.body = IrBlockBodyImpl(
|
it.body = it.factory.createBlockBody(
|
||||||
startOffset,
|
startOffset,
|
||||||
endOffset,
|
endOffset,
|
||||||
initializeStatements.map { (field, expression) -> createIrSetField(field, expression) }
|
initializeStatements.map { (field, expression) -> createIrSetField(field, expression) }
|
||||||
@@ -53,7 +52,7 @@ class CreateScriptFunctionsPhase(val context: CommonBackendContext) : FileLoweri
|
|||||||
}
|
}
|
||||||
|
|
||||||
val evaluateScriptFunction = createFunction(irScript, "\$evaluateScript\$", getReturnType(irScript)).also {
|
val evaluateScriptFunction = createFunction(irScript, "\$evaluateScript\$", getReturnType(irScript)).also {
|
||||||
it.body = IrBlockBodyImpl(
|
it.body = it.factory.createBlockBody(
|
||||||
startOffset,
|
startOffset,
|
||||||
endOffset,
|
endOffset,
|
||||||
irScript.statements.prepareForEvaluateScriptFunction(it)
|
irScript.statements.prepareForEvaluateScriptFunction(it)
|
||||||
|
|||||||
+2
-1
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.BodyLoweringPass
|
|||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.ir.IrStatement
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
||||||
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
||||||
import org.jetbrains.kotlin.ir.backend.js.lower.PrimaryConstructorLowering.SYNTHETIC_PRIMARY_CONSTRUCTOR
|
import org.jetbrains.kotlin.ir.backend.js.lower.PrimaryConstructorLowering.SYNTHETIC_PRIMARY_CONSTRUCTOR
|
||||||
@@ -115,7 +116,7 @@ class ES6AddInternalParametersToConstructorPhase(val context: JsIrBackendContext
|
|||||||
).apply {
|
).apply {
|
||||||
addValueParameter("\$this\$", context.dynamicType)
|
addValueParameter("\$this\$", context.dynamicType)
|
||||||
|
|
||||||
body = JsIrBuilder.buildBlockBody(constructor.body?.statements ?: emptyList())
|
body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET, constructor.body?.statements.orEmpty())
|
||||||
|
|
||||||
transformChildren(object : IrElementTransformerVoid() {
|
transformChildren(object : IrElementTransformerVoid() {
|
||||||
override fun visitGetValue(expression: IrGetValue): IrExpression {
|
override fun visitGetValue(expression: IrGetValue): IrExpression {
|
||||||
|
|||||||
+4
-5
@@ -26,7 +26,6 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor
|
|||||||
import org.jetbrains.kotlin.ir.builders.declarations.buildField
|
import org.jetbrains.kotlin.ir.builders.declarations.buildField
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrVarargImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrVarargImpl
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
@@ -129,7 +128,7 @@ class EnumClassConstructorLowering(val context: JsCommonBackendContext) : Declar
|
|||||||
enumConstructor.newConstructor = this
|
enumConstructor.newConstructor = this
|
||||||
|
|
||||||
enumConstructor.body?.let { oldBody ->
|
enumConstructor.body?.let { oldBody ->
|
||||||
body = IrBlockBodyImpl(oldBody.startOffset, oldBody.endOffset) {
|
body = context.irFactory.createBlockBody(oldBody.startOffset, oldBody.endOffset) {
|
||||||
statements += (oldBody as IrBlockBody).statements
|
statements += (oldBody as IrBlockBody).statements
|
||||||
|
|
||||||
context.fixReferencesToConstructorParameters(enumClass, this)
|
context.fixReferencesToConstructorParameters(enumClass, this)
|
||||||
@@ -400,7 +399,7 @@ class EnumClassCreateInitializerLowering(val context: JsIrBackendContext) : Decl
|
|||||||
|
|
||||||
private fun createInitEntryInstancesFun(irClass: IrClass, entryInstancesInitializedField: IrField): IrSimpleFunction =
|
private fun createInitEntryInstancesFun(irClass: IrClass, entryInstancesInitializedField: IrField): IrSimpleFunction =
|
||||||
context.jsIrDeclarationBuilder.buildFunction(irClass, "${irClass.name.identifier}_initEntries", context.irBuiltIns.unitType).also {
|
context.jsIrDeclarationBuilder.buildFunction(irClass, "${irClass.name.identifier}_initEntries", context.irBuiltIns.unitType).also {
|
||||||
it.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
it.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
||||||
statements += context.createIrBuilder(it.symbol).irBlockBody(it) {
|
statements += context.createIrBuilder(it.symbol).irBlockBody(it) {
|
||||||
+irIfThen(irGetField(null, entryInstancesInitializedField), irReturnUnit())
|
+irIfThen(irGetField(null, entryInstancesInitializedField), irReturnUnit())
|
||||||
+irSetField(null, entryInstancesInitializedField, irBoolean(true))
|
+irSetField(null, entryInstancesInitializedField, irBoolean(true))
|
||||||
@@ -456,7 +455,7 @@ class EnumEntryCreateGetInstancesFunsLowering(val context: JsIrBackendContext):
|
|||||||
enumEntry.getType(irClass)
|
enumEntry.getType(irClass)
|
||||||
)
|
)
|
||||||
}.also {
|
}.also {
|
||||||
it.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
it.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
||||||
statements += context.createIrBuilder(it.symbol).irBlockBody(it) {
|
statements += context.createIrBuilder(it.symbol).irBlockBody(it) {
|
||||||
+irCall(initEntryInstancesFun)
|
+irCall(initEntryInstancesFun)
|
||||||
+irReturn(irGetField(null, enumEntry.correspondingField!!))
|
+irReturn(irGetField(null, enumEntry.correspondingField!!))
|
||||||
@@ -475,7 +474,7 @@ class EnumSyntheticFunctionsLowering(val context: JsIrBackendContext): Declarati
|
|||||||
val kind = body.kind
|
val kind = body.kind
|
||||||
|
|
||||||
declaration.parents.filterIsInstance<IrClass>().firstOrNull { it.goodEnum }?.let { irClass ->
|
declaration.parents.filterIsInstance<IrClass>().firstOrNull { it.goodEnum }?.let { irClass ->
|
||||||
declaration.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
declaration.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
||||||
statements += when (kind) {
|
statements += when (kind) {
|
||||||
IrSyntheticBodyKind.ENUM_VALUES -> createEnumValuesBody(declaration, irClass)
|
IrSyntheticBodyKind.ENUM_VALUES -> createEnumValuesBody(declaration, irClass)
|
||||||
IrSyntheticBodyKind.ENUM_VALUEOF -> createEnumValueOfBody(declaration, irClass)
|
IrSyntheticBodyKind.ENUM_VALUEOF -> createEnumValueOfBody(declaration, irClass)
|
||||||
|
|||||||
+2
-4
@@ -87,7 +87,7 @@ class InteropCallableReferenceLowering(val context: JsIrBackendContext) : BodyLo
|
|||||||
invokeExpression.putValueArgument(i, getValue(vp))
|
invokeExpression.putValueArgument(i, getValue(vp))
|
||||||
}
|
}
|
||||||
|
|
||||||
return IrBlockBodyImpl(
|
return context.irFactory.createBlockBody(
|
||||||
UNDEFINED_OFFSET,
|
UNDEFINED_OFFSET,
|
||||||
UNDEFINED_OFFSET,
|
UNDEFINED_OFFSET,
|
||||||
listOf(
|
listOf(
|
||||||
@@ -188,9 +188,7 @@ class InteropCallableReferenceLowering(val context: JsIrBackendContext) : BodyLo
|
|||||||
statements.add(JsIrBuilder.buildReturn(factoryFunction.symbol, functionExpression, context.irBuiltIns.nothingType))
|
statements.add(JsIrBuilder.buildReturn(factoryFunction.symbol, functionExpression, context.irBuiltIns.nothingType))
|
||||||
}
|
}
|
||||||
|
|
||||||
return expression.run {
|
return context.irFactory.createBlockBody(expression.startOffset, expression.endOffset, statements)
|
||||||
IrBlockBodyImpl(startOffset, endOffset, statements)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun buildFactoryFunction(expression: IrConstructorCall): IrSimpleFunction {
|
private fun buildFactoryFunction(expression: IrConstructorCall): IrSimpleFunction {
|
||||||
|
|||||||
+1
-2
@@ -23,7 +23,6 @@ import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
|||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
|
||||||
import org.jetbrains.kotlin.ir.types.makeNullable
|
import org.jetbrains.kotlin.ir.types.makeNullable
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||||
@@ -56,7 +55,7 @@ class ObjectDeclarationLowering(
|
|||||||
|
|
||||||
val primaryConstructor = declaration.primaryConstructor ?: declaration.syntheticPrimaryConstructor!!
|
val primaryConstructor = declaration.primaryConstructor ?: declaration.syntheticPrimaryConstructor!!
|
||||||
|
|
||||||
getInstanceFun.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
getInstanceFun.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
||||||
statements += context.createIrBuilder(getInstanceFun.symbol).irBlockBody(getInstanceFun) {
|
statements += context.createIrBuilder(getInstanceFun.symbol).irBlockBody(getInstanceFun) {
|
||||||
+irIfThen(
|
+irIfThen(
|
||||||
irEqualsNull(irGetField(null, instanceField)),
|
irEqualsNull(irGetField(null, instanceField)),
|
||||||
|
|||||||
+1
-2
@@ -13,7 +13,6 @@ import org.jetbrains.kotlin.ir.builders.declarations.addConstructor
|
|||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBody
|
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrInstanceInitializerCall
|
import org.jetbrains.kotlin.ir.expressions.IrInstanceInitializerCall
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl
|
||||||
import org.jetbrains.kotlin.ir.util.constructors
|
import org.jetbrains.kotlin.ir.util.constructors
|
||||||
@@ -53,7 +52,7 @@ class PrimaryConstructorLowering(context: JsCommonBackendContext) : DeclarationT
|
|||||||
}
|
}
|
||||||
|
|
||||||
declaration.body = irClass.run {
|
declaration.body = irClass.run {
|
||||||
IrBlockBodyImpl(startOffset, endOffset, listOf(IrInstanceInitializerCallImpl(startOffset, endOffset, symbol, unitType)))
|
factory.createBlockBody(startOffset, endOffset, listOf(IrInstanceInitializerCallImpl(startOffset, endOffset, symbol, unitType)))
|
||||||
}
|
}
|
||||||
|
|
||||||
return declaration
|
return declaration
|
||||||
|
|||||||
+5
-2
@@ -14,7 +14,10 @@ import org.jetbrains.kotlin.ir.builders.declarations.buildFun
|
|||||||
import org.jetbrains.kotlin.ir.builders.declarations.buildValueParameter
|
import org.jetbrains.kotlin.ir.builders.declarations.buildValueParameter
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrPropertyReferenceImpl
|
||||||
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
|
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
@@ -105,7 +108,7 @@ class PrivateMembersLowering(val context: JsIrBackendContext) : DeclarationTrans
|
|||||||
|
|
||||||
function.body?.let {
|
function.body?.let {
|
||||||
staticFunction.body = when (it) {
|
staticFunction.body = when (it) {
|
||||||
is IrBlockBody -> IrBlockBodyImpl(it.startOffset, it.endOffset) {
|
is IrBlockBody -> context.irFactory.createBlockBody(it.startOffset, it.endOffset) {
|
||||||
statements += (it.copyWithParameters() as IrBlockBody).statements
|
statements += (it.copyWithParameters() as IrBlockBody).statements
|
||||||
}
|
}
|
||||||
is IrExpressionBody -> context.irFactory.createExpressionBody(it.startOffset, it.endOffset) {
|
is IrExpressionBody -> context.irFactory.createExpressionBody(it.startOffset, it.endOffset) {
|
||||||
|
|||||||
+6
-3
@@ -19,7 +19,10 @@ import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
|||||||
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrRawFunctionReferenceImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
||||||
@@ -81,7 +84,7 @@ class SecondaryConstructorLowering(val context: JsIrBackendContext) : Declaratio
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun generateFactoryBody(constructor: IrConstructor, irClass: IrClass, stub: IrSimpleFunction, delegate: IrSimpleFunction) {
|
private fun generateFactoryBody(constructor: IrConstructor, irClass: IrClass, stub: IrSimpleFunction, delegate: IrSimpleFunction) {
|
||||||
stub.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
stub.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
||||||
val type = irClass.defaultType
|
val type = irClass.defaultType
|
||||||
val createFunctionIntrinsic = context.intrinsics.jsObjectCreate
|
val createFunctionIntrinsic = context.intrinsics.jsObjectCreate
|
||||||
val irCreateCall = JsIrBuilder.buildCall(createFunctionIntrinsic.symbol, type, listOf(type))
|
val irCreateCall = JsIrBuilder.buildCall(createFunctionIntrinsic.symbol, type, listOf(type))
|
||||||
@@ -128,7 +131,7 @@ class SecondaryConstructorLowering(val context: JsIrBackendContext) : Declaratio
|
|||||||
val oldValueParameters = constructor.valueParameters + oldThisReceiver
|
val oldValueParameters = constructor.valueParameters + oldThisReceiver
|
||||||
|
|
||||||
// TODO: replace parameters as well
|
// TODO: replace parameters as well
|
||||||
delegate.body = IrBlockBodyImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
delegate.body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET) {
|
||||||
statements += (constructorBody.deepCopyWithSymbols(delegate) as IrStatementContainer).statements
|
statements += (constructorBody.deepCopyWithSymbols(delegate) as IrStatementContainer).statements
|
||||||
statements += JsIrBuilder.buildReturn(delegate.symbol, JsIrBuilder.buildGetValue(thisParam.symbol), context.irBuiltIns.nothingType)
|
statements += JsIrBuilder.buildReturn(delegate.symbol, JsIrBuilder.buildGetValue(thisParam.symbol), context.irBuiltIns.nothingType)
|
||||||
transformChildrenVoid(ThisUsageReplaceTransformer(delegate.symbol, oldValueParameters.zip(delegate.valueParameters).toMap()))
|
transformChildrenVoid(ThisUsageReplaceTransformer(delegate.symbol, oldValueParameters.zip(delegate.valueParameters).toMap()))
|
||||||
|
|||||||
+2
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower
|
|||||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
|
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
||||||
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
import org.jetbrains.kotlin.ir.backend.js.JsIrBackendContext
|
||||||
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
@@ -54,7 +55,7 @@ class TestGenerator(val context: JsIrBackendContext, val testContainerFactory: (
|
|||||||
parentFunction: IrSimpleFunction,
|
parentFunction: IrSimpleFunction,
|
||||||
ignored: Boolean = false
|
ignored: Boolean = false
|
||||||
): FunctionWithBody {
|
): FunctionWithBody {
|
||||||
val body = JsIrBuilder.buildBlockBody(emptyList())
|
val body = context.irFactory.createBlockBody(UNDEFINED_OFFSET, UNDEFINED_OFFSET, emptyList())
|
||||||
|
|
||||||
val function = context.jsIrDeclarationBuilder.buildFunction("$name test fun", context.irBuiltIns.anyNType, parentFunction)
|
val function = context.jsIrDeclarationBuilder.buildFunction("$name test fun", context.irBuiltIns.anyNType, parentFunction)
|
||||||
function.body = body
|
function.body = body
|
||||||
|
|||||||
+7
-3
@@ -15,7 +15,10 @@ import org.jetbrains.kotlin.ir.builders.*
|
|||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||||
import org.jetbrains.kotlin.ir.symbols.*
|
import org.jetbrains.kotlin.ir.symbols.IrFieldSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrVariableSymbol
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.util.explicitParameters
|
import org.jetbrains.kotlin.ir.util.explicitParameters
|
||||||
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
import org.jetbrains.kotlin.ir.util.patchDeclarationParents
|
||||||
@@ -135,8 +138,9 @@ class JsSuspendFunctionsLowering(ctx: JsIrBackendContext) : AbstractSuspendFunct
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
val functionBody =
|
val functionBody = context.irFactory.createBlockBody(
|
||||||
IrBlockBodyImpl(stateMachineFunction.startOffset, stateMachineFunction.endOffset, listOf(suspendResult, rootLoop))
|
stateMachineFunction.startOffset, stateMachineFunction.endOffset, listOf(suspendResult, rootLoop)
|
||||||
|
)
|
||||||
|
|
||||||
stateMachineFunction.body = functionBody
|
stateMachineFunction.body = functionBody
|
||||||
|
|
||||||
|
|||||||
+1
-2
@@ -11,7 +11,6 @@ import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
|||||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
|
||||||
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
|
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
|
||||||
|
|
||||||
class RemoveInlineFunctionsWithReifiedTypeParametersLowering: DeclarationTransformer {
|
class RemoveInlineFunctionsWithReifiedTypeParametersLowering: DeclarationTransformer {
|
||||||
@@ -30,7 +29,7 @@ class CopyInlineFunctionBodyLowering(val context: JsIrBackendContext) : Declarat
|
|||||||
override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? {
|
override fun transformFlat(declaration: IrDeclaration): List<IrDeclaration>? {
|
||||||
if (declaration is IrFunction && declaration.isInline) {
|
if (declaration is IrFunction && declaration.isInline) {
|
||||||
declaration.body?.let { originalBody ->
|
declaration.body?.let { originalBody ->
|
||||||
declaration.body = IrBlockBodyImpl(originalBody.startOffset, originalBody.endOffset) {
|
declaration.body = context.irFactory.createBlockBody(originalBody.startOffset, originalBody.endOffset) {
|
||||||
statements += (originalBody.deepCopyWithSymbols(declaration) as IrBlockBody).statements
|
statements += (originalBody.deepCopyWithSymbols(declaration) as IrBlockBody).statements
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -131,7 +131,7 @@ fun breakCrossModuleFieldAccess(
|
|||||||
name = Name.identifier("get-$fieldName")
|
name = Name.identifier("get-$fieldName")
|
||||||
returnType = type
|
returnType = type
|
||||||
}
|
}
|
||||||
getter.body = IrBlockBodyImpl(
|
getter.body = factory.createBlockBody(
|
||||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, listOf(
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET, listOf(
|
||||||
IrReturnImpl(
|
IrReturnImpl(
|
||||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, getter.symbol,
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET, type, getter.symbol,
|
||||||
@@ -158,7 +158,7 @@ fun breakCrossModuleFieldAccess(
|
|||||||
|
|
||||||
val param = setter.addValueParameter("value", type)
|
val param = setter.addValueParameter("value", type)
|
||||||
|
|
||||||
setter.body = IrBlockBodyImpl(
|
setter.body = factory.createBlockBody(
|
||||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, listOf(
|
UNDEFINED_OFFSET, UNDEFINED_OFFSET, listOf(
|
||||||
IrSetFieldImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, symbol, type).apply {
|
IrSetFieldImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, symbol, type).apply {
|
||||||
value = IrGetValueImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, param.symbol)
|
value = IrGetValueImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, param.symbol)
|
||||||
|
|||||||
+1
-2
@@ -19,7 +19,6 @@ package org.jetbrains.kotlin.psi2ir.generators
|
|||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
import org.jetbrains.kotlin.ir.declarations.IrDeclaration
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
|
||||||
import org.jetbrains.kotlin.psi.KtAnonymousInitializer
|
import org.jetbrains.kotlin.psi.KtAnonymousInitializer
|
||||||
import org.jetbrains.kotlin.psi.KtBlockExpression
|
import org.jetbrains.kotlin.psi.KtBlockExpression
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||||
@@ -41,7 +40,7 @@ class AnonymousInitializerGenerator(
|
|||||||
val bodyGenerator = createBodyGenerator(irAnonymousInitializer.symbol)
|
val bodyGenerator = createBodyGenerator(irAnonymousInitializer.symbol)
|
||||||
val statementGenerator = bodyGenerator.createStatementGenerator()
|
val statementGenerator = bodyGenerator.createStatementGenerator()
|
||||||
val ktBody = ktAnonymousInitializer.body!!
|
val ktBody = ktAnonymousInitializer.body!!
|
||||||
val irBlockBody = IrBlockBodyImpl(ktBody.startOffsetSkippingComments, ktBody.endOffset)
|
val irBlockBody = context.irFactory.createBlockBody(ktBody.startOffsetSkippingComments, ktBody.endOffset)
|
||||||
if (ktBody is KtBlockExpression) {
|
if (ktBody is KtBlockExpression) {
|
||||||
statementGenerator.generateStatements(ktBody.statements, irBlockBody)
|
statementGenerator.generateStatements(ktBody.statements, irBlockBody)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ class BodyGenerator(
|
|||||||
fun generateFunctionBody(ktBody: KtExpression): IrBody {
|
fun generateFunctionBody(ktBody: KtExpression): IrBody {
|
||||||
val statementGenerator = createStatementGenerator()
|
val statementGenerator = createStatementGenerator()
|
||||||
|
|
||||||
val irBlockBody = IrBlockBodyImpl(ktBody.startOffsetSkippingComments, ktBody.endOffset)
|
val irBlockBody = context.irFactory.createBlockBody(ktBody.startOffsetSkippingComments, ktBody.endOffset)
|
||||||
if (ktBody is KtBlockExpression) {
|
if (ktBody is KtBlockExpression) {
|
||||||
statementGenerator.generateStatements(ktBody.statements, irBlockBody)
|
statementGenerator.generateStatements(ktBody.statements, irBlockBody)
|
||||||
} else {
|
} else {
|
||||||
@@ -77,7 +77,7 @@ class BodyGenerator(
|
|||||||
val statementGenerator = createStatementGenerator()
|
val statementGenerator = createStatementGenerator()
|
||||||
|
|
||||||
val ktBody = ktFun.bodyExpression!!
|
val ktBody = ktFun.bodyExpression!!
|
||||||
val irBlockBody = IrBlockBodyImpl(ktBody.startOffsetSkippingComments, ktBody.endOffset)
|
val irBlockBody = context.irFactory.createBlockBody(ktBody.startOffsetSkippingComments, ktBody.endOffset)
|
||||||
|
|
||||||
for (ktParameter in ktFun.valueParameters) {
|
for (ktParameter in ktFun.valueParameters) {
|
||||||
val ktDestructuringDeclaration = ktParameter.destructuringDeclaration ?: continue
|
val ktDestructuringDeclaration = ktParameter.destructuringDeclaration ?: continue
|
||||||
@@ -131,7 +131,7 @@ class BodyGenerator(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun generateSecondaryConstructorBody(ktConstructor: KtSecondaryConstructor): IrBody {
|
fun generateSecondaryConstructorBody(ktConstructor: KtSecondaryConstructor): IrBody {
|
||||||
val irBlockBody = IrBlockBodyImpl(ktConstructor.startOffsetSkippingComments, ktConstructor.endOffset)
|
val irBlockBody = context.irFactory.createBlockBody(ktConstructor.startOffsetSkippingComments, ktConstructor.endOffset)
|
||||||
|
|
||||||
generateDelegatingConstructorCall(irBlockBody, ktConstructor)
|
generateDelegatingConstructorCall(irBlockBody, ktConstructor)
|
||||||
|
|
||||||
@@ -177,7 +177,7 @@ class BodyGenerator(
|
|||||||
loopTable[expression]
|
loopTable[expression]
|
||||||
|
|
||||||
fun generatePrimaryConstructorBody(ktClassOrObject: KtPureClassOrObject): IrBody {
|
fun generatePrimaryConstructorBody(ktClassOrObject: KtPureClassOrObject): IrBody {
|
||||||
val irBlockBody = IrBlockBodyImpl(ktClassOrObject.pureStartOffset, ktClassOrObject.pureEndOffset)
|
val irBlockBody = context.irFactory.createBlockBody(ktClassOrObject.pureStartOffset, ktClassOrObject.pureEndOffset)
|
||||||
|
|
||||||
generateSuperConstructorCall(irBlockBody, ktClassOrObject)
|
generateSuperConstructorCall(irBlockBody, ktClassOrObject)
|
||||||
|
|
||||||
@@ -194,7 +194,7 @@ class BodyGenerator(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun generateSecondaryConstructorBodyWithNestedInitializers(ktConstructor: KtSecondaryConstructor): IrBody {
|
fun generateSecondaryConstructorBodyWithNestedInitializers(ktConstructor: KtSecondaryConstructor): IrBody {
|
||||||
val irBlockBody = IrBlockBodyImpl(ktConstructor.startOffsetSkippingComments, ktConstructor.endOffset)
|
val irBlockBody = context.irFactory.createBlockBody(ktConstructor.startOffsetSkippingComments, ktConstructor.endOffset)
|
||||||
|
|
||||||
generateDelegatingConstructorCall(irBlockBody, ktConstructor)
|
generateDelegatingConstructorCall(irBlockBody, ktConstructor)
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,10 @@ import org.jetbrains.kotlin.descriptors.*
|
|||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrImplementingDelegateDescriptorImpl
|
import org.jetbrains.kotlin.ir.descriptors.IrImplementingDelegateDescriptorImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.mapValueParameters
|
import org.jetbrains.kotlin.ir.expressions.mapValueParameters
|
||||||
import org.jetbrains.kotlin.ir.expressions.putTypeArguments
|
import org.jetbrains.kotlin.ir.expressions.putTypeArguments
|
||||||
import org.jetbrains.kotlin.ir.expressions.typeParametersCount
|
import org.jetbrains.kotlin.ir.expressions.typeParametersCount
|
||||||
@@ -324,7 +327,7 @@ class ClassGenerator(
|
|||||||
val startOffset = irDelegate.startOffset
|
val startOffset = irDelegate.startOffset
|
||||||
val endOffset = irDelegate.endOffset
|
val endOffset = irDelegate.endOffset
|
||||||
|
|
||||||
val irBlockBody = IrBlockBodyImpl(startOffset, endOffset)
|
val irBlockBody = context.irFactory.createBlockBody(startOffset, endOffset)
|
||||||
|
|
||||||
val substitutedDelegateTo = substituteDelegateToDescriptor(delegatedDescriptor, delegateToDescriptor)
|
val substitutedDelegateTo = substituteDelegateToDescriptor(delegatedDescriptor, delegateToDescriptor)
|
||||||
val returnType = substitutedDelegateTo.returnType!!
|
val returnType = substitutedDelegateTo.returnType!!
|
||||||
|
|||||||
+6
-3
@@ -13,7 +13,10 @@ import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
|||||||
import org.jetbrains.kotlin.ir.expressions.IrBody
|
import org.jetbrains.kotlin.ir.expressions.IrBody
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetFieldImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl
|
||||||
import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType
|
import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType
|
||||||
import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides
|
import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
@@ -148,7 +151,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
|||||||
|
|
||||||
val startOffset = irAccessor.startOffset
|
val startOffset = irAccessor.startOffset
|
||||||
val endOffset = irAccessor.endOffset
|
val endOffset = irAccessor.endOffset
|
||||||
val irBody = IrBlockBodyImpl(startOffset, endOffset)
|
val irBody = context.irFactory.createBlockBody(startOffset, endOffset)
|
||||||
|
|
||||||
val receiver = generateReceiverExpressionForDefaultPropertyAccessor(property, irAccessor)
|
val receiver = generateReceiverExpressionForDefaultPropertyAccessor(property, irAccessor)
|
||||||
|
|
||||||
@@ -175,7 +178,7 @@ class FunctionGenerator(declarationGenerator: DeclarationGenerator) : Declaratio
|
|||||||
|
|
||||||
val startOffset = irAccessor.startOffset
|
val startOffset = irAccessor.startOffset
|
||||||
val endOffset = irAccessor.endOffset
|
val endOffset = irAccessor.endOffset
|
||||||
val irBody = IrBlockBodyImpl(startOffset, endOffset)
|
val irBody = context.irFactory.createBlockBody(startOffset, endOffset)
|
||||||
|
|
||||||
val receiver = generateReceiverExpressionForDefaultPropertyAccessor(property, irAccessor)
|
val receiver = generateReceiverExpressionForDefaultPropertyAccessor(property, irAccessor)
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -141,7 +141,7 @@ class ReflectionReferencesGenerator(statementGenerator: StatementGenerator) : St
|
|||||||
createAdapterFun(startOffset, endOffset, adapteeDescriptor, ktExpectedParameterTypes, ktExpectedReturnType, callBuilder, callableReferenceType)
|
createAdapterFun(startOffset, endOffset, adapteeDescriptor, ktExpectedParameterTypes, ktExpectedReturnType, callBuilder, callableReferenceType)
|
||||||
val irCall = createAdapteeCall(startOffset, endOffset, adapteeSymbol, callBuilder, irAdapterFun)
|
val irCall = createAdapteeCall(startOffset, endOffset, adapteeSymbol, callBuilder, irAdapterFun)
|
||||||
|
|
||||||
irAdapterFun.body = IrBlockBodyImpl(startOffset, endOffset).apply {
|
irAdapterFun.body = context.irFactory.createBlockBody(startOffset, endOffset).apply {
|
||||||
if (KotlinBuiltIns.isUnit(ktExpectedReturnType))
|
if (KotlinBuiltIns.isUnit(ktExpectedReturnType))
|
||||||
statements.add(irCall)
|
statements.add(irCall)
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -18,12 +18,10 @@ package org.jetbrains.kotlin.ir.builders
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.ir.IrElement
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
import org.jetbrains.kotlin.ir.IrStatement
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrContainerExpression
|
import org.jetbrains.kotlin.ir.expressions.IrContainerExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrCompositeImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrCompositeImpl
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
@@ -63,7 +61,7 @@ open class IrBlockBodyBuilder(
|
|||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int
|
endOffset: Int
|
||||||
) : IrStatementsBuilder<IrBlockBody>(context, scope, startOffset, endOffset) {
|
) : IrStatementsBuilder<IrBlockBody>(context, scope, startOffset, endOffset) {
|
||||||
private val irBlockBody = IrBlockBodyImpl(startOffset, endOffset)
|
private val irBlockBody = context.irFactory.createBlockBody(startOffset, endOffset)
|
||||||
|
|
||||||
inline fun blockBody(body: IrBlockBodyBuilder.() -> Unit): IrBlockBody {
|
inline fun blockBody(body: IrBlockBodyBuilder.() -> Unit): IrBlockBody {
|
||||||
body()
|
body()
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
package org.jetbrains.kotlin.ir.declarations
|
package org.jetbrains.kotlin.ir.declarations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||||
import org.jetbrains.kotlin.ir.symbols.*
|
import org.jetbrains.kotlin.ir.symbols.*
|
||||||
@@ -212,4 +214,21 @@ interface IrFactory {
|
|||||||
fun createExpressionBody(
|
fun createExpressionBody(
|
||||||
expression: IrExpression,
|
expression: IrExpression,
|
||||||
): IrExpressionBody
|
): IrExpressionBody
|
||||||
|
|
||||||
|
fun createBlockBody(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int,
|
||||||
|
): IrBlockBody
|
||||||
|
|
||||||
|
fun createBlockBody(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int,
|
||||||
|
statements: List<IrStatement>,
|
||||||
|
): IrBlockBody
|
||||||
|
|
||||||
|
fun createBlockBody(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int,
|
||||||
|
initializer: IrBlockBody.() -> Unit,
|
||||||
|
): IrBlockBody
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,9 +6,12 @@
|
|||||||
package org.jetbrains.kotlin.ir.declarations.impl
|
package org.jetbrains.kotlin.ir.declarations.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||||
|
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrExpressionBodyImpl
|
||||||
import org.jetbrains.kotlin.ir.symbols.*
|
import org.jetbrains.kotlin.ir.symbols.*
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
@@ -244,4 +247,24 @@ object IrFactoryImpl : IrFactory {
|
|||||||
expression: IrExpression,
|
expression: IrExpression,
|
||||||
): IrExpressionBody =
|
): IrExpressionBody =
|
||||||
IrExpressionBodyImpl(expression)
|
IrExpressionBodyImpl(expression)
|
||||||
|
|
||||||
|
override fun createBlockBody(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int,
|
||||||
|
): IrBlockBody =
|
||||||
|
IrBlockBodyImpl(startOffset, endOffset, null)
|
||||||
|
|
||||||
|
override fun createBlockBody(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int,
|
||||||
|
statements: List<IrStatement>,
|
||||||
|
): IrBlockBody =
|
||||||
|
IrBlockBodyImpl(startOffset, endOffset, statements)
|
||||||
|
|
||||||
|
override fun createBlockBody(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int,
|
||||||
|
initializer: IrBlockBody.() -> Unit,
|
||||||
|
): IrBlockBody =
|
||||||
|
IrBlockBodyImpl(startOffset, endOffset, initializer)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,9 @@ interface IrExpressionBody : IrBody {
|
|||||||
accept(transformer, data) as IrExpressionBody
|
accept(transformer, data) as IrExpressionBody
|
||||||
}
|
}
|
||||||
|
|
||||||
interface IrBlockBody : IrBody, IrStatementContainer
|
interface IrBlockBody : IrBody, IrStatementContainer {
|
||||||
|
val factory: IrFactory
|
||||||
|
}
|
||||||
|
|
||||||
interface IrSyntheticBody : IrBody {
|
interface IrSyntheticBody : IrBody {
|
||||||
val kind: IrSyntheticBodyKind
|
val kind: IrSyntheticBodyKind
|
||||||
|
|||||||
@@ -17,11 +17,12 @@
|
|||||||
package org.jetbrains.kotlin.ir.expressions.impl
|
package org.jetbrains.kotlin.ir.expressions.impl
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.IrStatement
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.IrFactory
|
||||||
import org.jetbrains.kotlin.ir.declarations.impl.IrBodyBase
|
import org.jetbrains.kotlin.ir.declarations.impl.IrBodyBase
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
import org.jetbrains.kotlin.ir.expressions.IrBlockBody
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class IrBlockBodyImpl(
|
class IrBlockBodyImpl(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
@@ -40,6 +41,9 @@ class IrBlockBodyImpl(
|
|||||||
override val statements: MutableList<IrStatement>
|
override val statements: MutableList<IrStatement>
|
||||||
get() = checkEnabled { statementsField }
|
get() = checkEnabled { statementsField }
|
||||||
|
|
||||||
|
override val factory: IrFactory
|
||||||
|
get() = IrFactoryImpl
|
||||||
|
|
||||||
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R {
|
||||||
return visitor.visitBlockBody(this, data)
|
return visitor.visitBlockBody(this, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -372,7 +372,7 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
body.factory.createExpressionBody(body.expression.transform())
|
body.factory.createExpressionBody(body.expression.transform())
|
||||||
|
|
||||||
override fun visitBlockBody(body: IrBlockBody): IrBlockBody =
|
override fun visitBlockBody(body: IrBlockBody): IrBlockBody =
|
||||||
IrBlockBodyImpl(
|
body.factory.createBlockBody(
|
||||||
body.startOffset, body.endOffset,
|
body.startOffset, body.endOffset,
|
||||||
body.statements.map { it.transform() }
|
body.statements.map { it.transform() }
|
||||||
)
|
)
|
||||||
|
|||||||
+2
-2
@@ -113,7 +113,7 @@ abstract class IrFileDeserializer(
|
|||||||
private val deserializeFakeOverrides: Boolean,
|
private val deserializeFakeOverrides: Boolean,
|
||||||
private val fakeOverrideQueue: MutableList<IrClass>
|
private val fakeOverrideQueue: MutableList<IrClass>
|
||||||
) {
|
) {
|
||||||
private val irFactory: IrFactory get() = symbolTable.irFactory
|
protected val irFactory: IrFactory get() = symbolTable.irFactory
|
||||||
|
|
||||||
abstract fun deserializeIrSymbolToDeclare(code: Long): Pair<IrSymbol, IdSignature>
|
abstract fun deserializeIrSymbolToDeclare(code: Long): Pair<IrSymbol, IdSignature>
|
||||||
abstract fun deserializeIrSymbol(code: Long): IrSymbol
|
abstract fun deserializeIrSymbol(code: Long): IrSymbol
|
||||||
@@ -269,7 +269,7 @@ abstract class IrFileDeserializer(
|
|||||||
statements.add(deserializeStatement(it) as IrStatement)
|
statements.add(deserializeStatement(it) as IrStatement)
|
||||||
}
|
}
|
||||||
|
|
||||||
return IrBlockBodyImpl(start, end, statements)
|
return irFactory.createBlockBody(start, end, statements)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun deserializeBranch(proto: ProtoBranch, start: Int, end: Int): IrBranch {
|
private fun deserializeBranch(proto: ProtoBranch, start: Int, end: Int): IrBranch {
|
||||||
|
|||||||
+3
-3
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.backend.common.serialization
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.LoggingContext
|
import org.jetbrains.kotlin.backend.common.LoggingContext
|
||||||
import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideBuilder
|
import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideBuilder
|
||||||
import org.jetbrains.kotlin.backend.common.overrides.FakeOverrideControl
|
|
||||||
import org.jetbrains.kotlin.backend.common.serialization.encodings.BinarySymbolData
|
import org.jetbrains.kotlin.backend.common.serialization.encodings.BinarySymbolData
|
||||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
@@ -23,7 +22,6 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrModuleFragmentImpl
|
|||||||
import org.jetbrains.kotlin.ir.descriptors.*
|
import org.jetbrains.kotlin.ir.descriptors.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrLoop
|
import org.jetbrains.kotlin.ir.expressions.IrLoop
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockBodyImpl
|
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrErrorExpressionImpl
|
||||||
import org.jetbrains.kotlin.ir.linkage.IrDeserializer
|
import org.jetbrains.kotlin.ir.linkage.IrDeserializer
|
||||||
import org.jetbrains.kotlin.ir.symbols.*
|
import org.jetbrains.kotlin.ir.symbols.*
|
||||||
@@ -417,7 +415,9 @@ abstract class KotlinIrLinker(
|
|||||||
deserializeStatement(bodyData)
|
deserializeStatement(bodyData)
|
||||||
} else {
|
} else {
|
||||||
val errorType = IrErrorTypeImpl(null, emptyList(), Variance.INVARIANT)
|
val errorType = IrErrorTypeImpl(null, emptyList(), Variance.INVARIANT)
|
||||||
IrBlockBodyImpl(-1, -1, listOf(IrErrorExpressionImpl(-1, -1, errorType, "Statement body is not deserialized yet")))
|
irFactory.createBlockBody(
|
||||||
|
-1, -1, listOf(IrErrorExpressionImpl(-1, -1, errorType, "Statement body is not deserialized yet"))
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user