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