IR: use buildClass where possible
This commit is contained in:
+10
-19
@@ -7,24 +7,21 @@ package org.jetbrains.kotlin.backend.common.lower
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.*
|
||||
import org.jetbrains.kotlin.backend.common.ir.*
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
||||
import org.jetbrains.kotlin.ir.builders.*
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildFun
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl
|
||||
import org.jetbrains.kotlin.ir.descriptors.WrappedClassDescriptor
|
||||
import org.jetbrains.kotlin.ir.descriptors.WrappedFieldDescriptor
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.classifierOrFail
|
||||
@@ -271,31 +268,25 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
|
||||
)
|
||||
|
||||
private inner class CoroutineBuilder(val irFunction: IrFunction, val functionReference: IrFunctionReference?) {
|
||||
|
||||
private val startOffset = irFunction.startOffset
|
||||
private val endOffset = irFunction.endOffset
|
||||
private val functionParameters = irFunction.explicitParameters
|
||||
private val boundFunctionParameters = functionReference?.getArgumentsWithIr()?.map { it.first }
|
||||
private val unboundFunctionParameters = boundFunctionParameters?.let { functionParameters - it }
|
||||
|
||||
private val coroutineClass: IrClass = WrappedClassDescriptor().let { d ->
|
||||
IrClassImpl(
|
||||
startOffset, endOffset,
|
||||
DECLARATION_ORIGIN_COROUTINE_IMPL,
|
||||
IrClassSymbolImpl(d),
|
||||
nameForCoroutineClass(irFunction),
|
||||
ClassKind.CLASS,
|
||||
irFunction.visibility,
|
||||
Modality.FINAL
|
||||
).apply {
|
||||
d.bind(this)
|
||||
private val coroutineClass: IrClass =
|
||||
buildClass {
|
||||
startOffset = irFunction.startOffset
|
||||
endOffset = irFunction.endOffset
|
||||
origin = DECLARATION_ORIGIN_COROUTINE_IMPL
|
||||
name = nameForCoroutineClass(irFunction)
|
||||
visibility = irFunction.visibility
|
||||
}.apply {
|
||||
parent = irFunction.parent
|
||||
createParameterDeclarations()
|
||||
typeParameters = irFunction.typeParameters.map { typeParam ->
|
||||
typeParam.copyToWithoutSuperTypes(this).apply { superTypes += typeParam.superTypes }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private val coroutineClassThis = coroutineClass.thisReceiver!!
|
||||
|
||||
private val continuationType = continuationClassSymbol.typeWith(irFunction.returnType)
|
||||
|
||||
+3
-4
@@ -19,14 +19,14 @@ import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DescriptorWithContainerSource
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
|
||||
fun IrClassBuilder.buildClass(): IrClass {
|
||||
@PublishedApi
|
||||
internal fun IrClassBuilder.buildClass(): IrClass {
|
||||
val wrappedDescriptor = WrappedClassDescriptor()
|
||||
return IrClassImpl(
|
||||
startOffset, endOffset, origin,
|
||||
IrClassSymbolImpl(wrappedDescriptor),
|
||||
name, kind, visibility, modality,
|
||||
isCompanion = isCompanion, isInner = isInner, isData = isData, isExternal = isExternal,
|
||||
isInline = isInline, isExpect = isExpect, isFun = isFun
|
||||
isCompanion, isInner, isData, isExternal, isInline, isExpect, isFun
|
||||
).also {
|
||||
wrappedDescriptor.bind(it)
|
||||
}
|
||||
@@ -38,7 +38,6 @@ inline fun buildClass(builder: IrClassBuilder.() -> Unit) =
|
||||
buildClass()
|
||||
}
|
||||
|
||||
|
||||
fun IrFieldBuilder.buildField(): IrField {
|
||||
val wrappedDescriptor = WrappedFieldDescriptor()
|
||||
return IrFieldImpl(
|
||||
|
||||
+9
-16
@@ -8,24 +8,21 @@ package org.jetbrains.kotlin.ir.backend.js.lower.coroutines
|
||||
import org.jetbrains.kotlin.backend.common.*
|
||||
import org.jetbrains.kotlin.backend.common.ir.*
|
||||
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.backend.js.lower.CallableReferenceLowering
|
||||
import org.jetbrains.kotlin.ir.builders.*
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildClass
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildFun
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrFieldImpl
|
||||
import org.jetbrains.kotlin.ir.descriptors.WrappedClassDescriptor
|
||||
import org.jetbrains.kotlin.ir.descriptors.WrappedFieldDescriptor
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrFieldSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.types.classifierOrFail
|
||||
@@ -224,17 +221,14 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
|
||||
else buildNewCoroutineClass(function)
|
||||
}
|
||||
|
||||
private fun buildNewCoroutineClass(function: IrSimpleFunction): IrClass = WrappedClassDescriptor().let { d ->
|
||||
IrClassImpl(
|
||||
startOffset, endOffset,
|
||||
DECLARATION_ORIGIN_COROUTINE_IMPL,
|
||||
IrClassSymbolImpl(d),
|
||||
nameForCoroutineClass(function),
|
||||
ClassKind.CLASS,
|
||||
function.visibility,
|
||||
Modality.FINAL
|
||||
).apply {
|
||||
d.bind(this)
|
||||
private fun buildNewCoroutineClass(function: IrSimpleFunction): IrClass =
|
||||
buildClass {
|
||||
startOffset = function.startOffset
|
||||
endOffset = function.endOffset
|
||||
origin = DECLARATION_ORIGIN_COROUTINE_IMPL
|
||||
name = nameForCoroutineClass(function)
|
||||
visibility = function.visibility
|
||||
}.apply {
|
||||
parent = function.parent
|
||||
createParameterDeclarations()
|
||||
typeParameters = function.typeParameters.map { typeParam ->
|
||||
@@ -242,7 +236,6 @@ abstract class AbstractSuspendFunctionsLowering<C : CommonBackendContext>(val co
|
||||
typeParam.copyToWithoutSuperTypes(this).apply { superTypes += typeParam.superTypes }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun buildConstructor(): IrConstructor {
|
||||
if (isSuspendLambda) {
|
||||
|
||||
+7
-19
@@ -17,20 +17,13 @@ import org.jetbrains.kotlin.builtins.CompanionObjectMapping.isMappedIntrinsicCom
|
||||
import org.jetbrains.kotlin.codegen.AsmUtil
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildConstructor
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildField
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildFun
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildValueParameter
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.*
|
||||
import org.jetbrains.kotlin.ir.builders.irCall
|
||||
import org.jetbrains.kotlin.ir.builders.setSourceRange
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl
|
||||
import org.jetbrains.kotlin.ir.descriptors.WrappedClassDescriptor
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||
import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.load.java.JavaVisibilities
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||
@@ -245,17 +238,12 @@ class JvmDeclarationFactory(
|
||||
|
||||
fun getDefaultImplsClass(interfaceClass: IrClass): IrClass =
|
||||
defaultImplsClasses.getOrPut(interfaceClass) {
|
||||
val descriptor = WrappedClassDescriptor()
|
||||
IrClassImpl(
|
||||
interfaceClass.startOffset, interfaceClass.endOffset,
|
||||
JvmLoweredDeclarationOrigin.DEFAULT_IMPLS,
|
||||
IrClassSymbolImpl(descriptor),
|
||||
Name.identifier(JvmAbi.DEFAULT_IMPLS_CLASS_NAME),
|
||||
ClassKind.CLASS,
|
||||
Visibilities.PUBLIC,
|
||||
Modality.FINAL
|
||||
).apply {
|
||||
descriptor.bind(this)
|
||||
buildClass {
|
||||
startOffset = interfaceClass.startOffset
|
||||
endOffset = interfaceClass.endOffset
|
||||
origin = JvmLoweredDeclarationOrigin.DEFAULT_IMPLS
|
||||
name = Name.identifier(JvmAbi.DEFAULT_IMPLS_CLASS_NAME)
|
||||
}.apply {
|
||||
parent = interfaceClass
|
||||
createImplicitParameterDeclarationWithWrappedDescriptor()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user