[IR] Reorder parameters in IrFactory#createFunction
This is to prepare for IrFactory auto-generation (KT-59308).
This commit is contained in:
committed by
teamcity
parent
650b00e1b2
commit
7b77ec9930
+16
-6
@@ -679,12 +679,22 @@ class Fir2IrClassifierStorage(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val temporaryParent by lazy {
|
private val temporaryParent by lazy {
|
||||||
irFactory.createFunction(
|
irFactory.createSimpleFunction(
|
||||||
startOffset = UNDEFINED_OFFSET, endOffset = UNDEFINED_OFFSET,
|
startOffset = UNDEFINED_OFFSET,
|
||||||
IrDeclarationOrigin.DEFINED, IrSimpleFunctionSymbolImpl(),
|
endOffset = UNDEFINED_OFFSET,
|
||||||
Name.special("<stub>"), DescriptorVisibilities.PRIVATE, Modality.FINAL, irBuiltIns.unitType,
|
origin = IrDeclarationOrigin.DEFINED,
|
||||||
isInline = false, isExternal = false, isTailrec = false,
|
name = Name.special("<stub>"),
|
||||||
isSuspend = false, isOperator = false, isInfix = false, isExpect = false
|
visibility = DescriptorVisibilities.PRIVATE,
|
||||||
|
isInline = false,
|
||||||
|
isExpect = false,
|
||||||
|
returnType = irBuiltIns.unitType,
|
||||||
|
modality = Modality.FINAL,
|
||||||
|
symbol = IrSimpleFunctionSymbolImpl(),
|
||||||
|
isTailrec = false,
|
||||||
|
isSuspend = false,
|
||||||
|
isOperator = false,
|
||||||
|
isInfix = false,
|
||||||
|
isExternal = false,
|
||||||
).apply {
|
).apply {
|
||||||
parent = IrExternalPackageFragmentImpl(IrExternalPackageFragmentSymbolImpl(), FqName.ROOT)
|
parent = IrExternalPackageFragmentImpl(IrExternalPackageFragmentSymbolImpl(), FqName.ROOT)
|
||||||
}
|
}
|
||||||
|
|||||||
+25
-18
@@ -568,21 +568,22 @@ class Fir2IrDeclarationStorage(
|
|||||||
val created = function.convertWithOffsets { startOffset, endOffset ->
|
val created = function.convertWithOffsets { startOffset, endOffset ->
|
||||||
val result = declareIrSimpleFunction(signature) { symbol ->
|
val result = declareIrSimpleFunction(signature) { symbol ->
|
||||||
classifierStorage.preCacheTypeParameters(function, symbol)
|
classifierStorage.preCacheTypeParameters(function, symbol)
|
||||||
irFactory.createFunction(
|
irFactory.createSimpleFunction(
|
||||||
if (updatedOrigin == IrDeclarationOrigin.DELEGATED_MEMBER) SYNTHETIC_OFFSET else startOffset,
|
startOffset = if (updatedOrigin == IrDeclarationOrigin.DELEGATED_MEMBER) SYNTHETIC_OFFSET else startOffset,
|
||||||
if (updatedOrigin == IrDeclarationOrigin.DELEGATED_MEMBER) SYNTHETIC_OFFSET else endOffset,
|
endOffset = if (updatedOrigin == IrDeclarationOrigin.DELEGATED_MEMBER) SYNTHETIC_OFFSET else endOffset,
|
||||||
updatedOrigin, symbol,
|
origin = updatedOrigin,
|
||||||
name, components.visibilityConverter.convertToDescriptorVisibility(visibility),
|
name = name,
|
||||||
simpleFunction?.modality ?: Modality.FINAL,
|
visibility = components.visibilityConverter.convertToDescriptorVisibility(visibility),
|
||||||
function.returnTypeRef.toIrType(),
|
|
||||||
isInline = simpleFunction?.isInline == true,
|
isInline = simpleFunction?.isInline == true,
|
||||||
isExternal = simpleFunction?.isExternal == true,
|
isExpect = simpleFunction?.isExpect == true,
|
||||||
|
returnType = function.returnTypeRef.toIrType(),
|
||||||
|
modality = simpleFunction?.modality ?: Modality.FINAL,
|
||||||
|
symbol = symbol,
|
||||||
isTailrec = simpleFunction?.isTailRec == true,
|
isTailrec = simpleFunction?.isTailRec == true,
|
||||||
isSuspend = isSuspend,
|
isSuspend = isSuspend,
|
||||||
isExpect = simpleFunction?.isExpect == true,
|
|
||||||
isFakeOverride = updatedOrigin == IrDeclarationOrigin.FAKE_OVERRIDE,
|
|
||||||
isOperator = simpleFunction?.isOperator == true,
|
isOperator = simpleFunction?.isOperator == true,
|
||||||
isInfix = simpleFunction?.isInfix == true,
|
isInfix = simpleFunction?.isInfix == true,
|
||||||
|
isExternal = simpleFunction?.isExternal == true,
|
||||||
containerSource = simpleFunction?.containerSource,
|
containerSource = simpleFunction?.containerSource,
|
||||||
).apply {
|
).apply {
|
||||||
metadata = FirMetadataSource.Function(function)
|
metadata = FirMetadataSource.Function(function)
|
||||||
@@ -738,16 +739,22 @@ class Fir2IrDeclarationStorage(
|
|||||||
val visibility = propertyAccessor?.visibility?.let {
|
val visibility = propertyAccessor?.visibility?.let {
|
||||||
components.visibilityConverter.convertToDescriptorVisibility(it)
|
components.visibilityConverter.convertToDescriptorVisibility(it)
|
||||||
}
|
}
|
||||||
irFactory.createFunction(
|
irFactory.createSimpleFunction(
|
||||||
startOffset, endOffset, origin, symbol,
|
startOffset = startOffset,
|
||||||
Name.special("<$prefix-${correspondingProperty.name}>"),
|
endOffset = endOffset,
|
||||||
visibility ?: (correspondingProperty as IrDeclarationWithVisibility).visibility,
|
origin = origin,
|
||||||
(correspondingProperty as? IrOverridableMember)?.modality ?: Modality.FINAL, accessorReturnType,
|
name = Name.special("<$prefix-${correspondingProperty.name}>"),
|
||||||
|
visibility = visibility ?: (correspondingProperty as IrDeclarationWithVisibility).visibility,
|
||||||
isInline = propertyAccessor?.isInline == true,
|
isInline = propertyAccessor?.isInline == true,
|
||||||
isExternal = propertyAccessor?.isExternal == true,
|
isExpect = false,
|
||||||
isTailrec = false, isSuspend = false, isOperator = false,
|
returnType = accessorReturnType,
|
||||||
|
modality = (correspondingProperty as? IrOverridableMember)?.modality ?: Modality.FINAL,
|
||||||
|
symbol = symbol,
|
||||||
|
isTailrec = false,
|
||||||
|
isSuspend = false,
|
||||||
|
isOperator = false,
|
||||||
isInfix = false,
|
isInfix = false,
|
||||||
isExpect = false, isFakeOverride = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
|
isExternal = propertyAccessor?.isExternal == true,
|
||||||
containerSource = containerSource,
|
containerSource = containerSource,
|
||||||
).apply {
|
).apply {
|
||||||
correspondingPropertySymbol = (correspondingProperty as? IrProperty)?.symbol
|
correspondingPropertySymbol = (correspondingProperty as? IrProperty)?.symbol
|
||||||
|
|||||||
@@ -943,12 +943,24 @@ class IrBuiltInsOverFir(
|
|||||||
this.isOperator = isOperator
|
this.isOperator = isOperator
|
||||||
this.isInfix = isInfix
|
this.isInfix = isInfix
|
||||||
build()
|
build()
|
||||||
irFactory.createFunction(
|
irFactory.createSimpleFunction(
|
||||||
startOffset, endOffset, this.origin,
|
startOffset = startOffset,
|
||||||
symbol,
|
endOffset = endOffset,
|
||||||
this.name, visibility, this.modality, this.returnType,
|
origin = this.origin,
|
||||||
isInline, isExternal, isTailrec, isSuspend, this.isOperator, this.isInfix, isExpect, isFakeOverride,
|
name = this.name,
|
||||||
containerSource,
|
visibility = visibility,
|
||||||
|
isInline = isInline,
|
||||||
|
isExpect = isExpect,
|
||||||
|
returnType = this.returnType,
|
||||||
|
modality = this.modality,
|
||||||
|
symbol = symbol,
|
||||||
|
isTailrec = isTailrec,
|
||||||
|
isSuspend = isSuspend,
|
||||||
|
isOperator = this.isOperator,
|
||||||
|
isInfix = this.isInfix,
|
||||||
|
isExternal = isExternal,
|
||||||
|
containerSource = containerSource,
|
||||||
|
isFakeOverride = isFakeOverride,
|
||||||
)
|
)
|
||||||
}.also { fn ->
|
}.also { fn ->
|
||||||
valueParameterTypes.forEachIndexed { index, (pName, irType) ->
|
valueParameterTypes.forEachIndexed { index, (pName, irType) ->
|
||||||
|
|||||||
+33
-33
@@ -204,22 +204,22 @@ internal class AdapterGenerator(
|
|||||||
val returnType = type.arguments.last().typeOrNull!!
|
val returnType = type.arguments.last().typeOrNull!!
|
||||||
val parameterTypes = type.arguments.dropLast(1).map { it.typeOrNull!! }
|
val parameterTypes = type.arguments.dropLast(1).map { it.typeOrNull!! }
|
||||||
val firMemberAdaptee = firAdaptee as FirMemberDeclaration
|
val firMemberAdaptee = firAdaptee as FirMemberDeclaration
|
||||||
return irFactory.createFunction(
|
return irFactory.createSimpleFunction(
|
||||||
startOffset, endOffset,
|
startOffset = startOffset,
|
||||||
IrDeclarationOrigin.ADAPTER_FOR_CALLABLE_REFERENCE,
|
endOffset = endOffset,
|
||||||
IrSimpleFunctionSymbolImpl(),
|
origin = IrDeclarationOrigin.ADAPTER_FOR_CALLABLE_REFERENCE,
|
||||||
adaptee.name,
|
name = adaptee.name,
|
||||||
DescriptorVisibilities.LOCAL,
|
visibility = DescriptorVisibilities.LOCAL,
|
||||||
Modality.FINAL,
|
|
||||||
returnType,
|
|
||||||
isInline = firMemberAdaptee.isInline,
|
isInline = firMemberAdaptee.isInline,
|
||||||
isExternal = false,
|
isExpect = false,
|
||||||
|
returnType = returnType,
|
||||||
|
modality = Modality.FINAL,
|
||||||
|
symbol = IrSimpleFunctionSymbolImpl(),
|
||||||
isTailrec = false,
|
isTailrec = false,
|
||||||
isSuspend = firMemberAdaptee.isSuspend || type.isSuspendFunction(),
|
isSuspend = firMemberAdaptee.isSuspend || type.isSuspendFunction(),
|
||||||
isOperator = firMemberAdaptee.isOperator,
|
isOperator = firMemberAdaptee.isOperator,
|
||||||
isInfix = firMemberAdaptee.isInfix,
|
isInfix = firMemberAdaptee.isInfix,
|
||||||
isExpect = false,
|
isExternal = false,
|
||||||
isFakeOverride = false
|
|
||||||
).also { irAdapterFunction ->
|
).also { irAdapterFunction ->
|
||||||
symbolTable.enterScope(irAdapterFunction)
|
symbolTable.enterScope(irAdapterFunction)
|
||||||
irAdapterFunction.dispatchReceiverParameter = null
|
irAdapterFunction.dispatchReceiverParameter = null
|
||||||
@@ -649,23 +649,23 @@ internal class AdapterGenerator(
|
|||||||
): IrSimpleFunction {
|
): IrSimpleFunction {
|
||||||
val returnType = type.arguments.last().typeOrNull!!
|
val returnType = type.arguments.last().typeOrNull!!
|
||||||
val parameterTypes = type.arguments.dropLast(1).map { it.typeOrNull!! }
|
val parameterTypes = type.arguments.dropLast(1).map { it.typeOrNull!! }
|
||||||
return irFactory.createFunction(
|
return irFactory.createSimpleFunction(
|
||||||
startOffset, endOffset,
|
startOffset = startOffset,
|
||||||
IrDeclarationOrigin.ADAPTER_FOR_SUSPEND_CONVERSION,
|
endOffset = endOffset,
|
||||||
IrSimpleFunctionSymbolImpl(),
|
origin = IrDeclarationOrigin.ADAPTER_FOR_SUSPEND_CONVERSION,
|
||||||
// TODO: need a better way to avoid name clash
|
// TODO: need a better way to avoid name clash
|
||||||
Name.identifier("suspendConversion"),
|
name = Name.identifier("suspendConversion"),
|
||||||
DescriptorVisibilities.LOCAL,
|
visibility = DescriptorVisibilities.LOCAL,
|
||||||
Modality.FINAL,
|
|
||||||
returnType,
|
|
||||||
isInline = false,
|
isInline = false,
|
||||||
isExternal = false,
|
isExpect = false,
|
||||||
|
returnType = returnType,
|
||||||
|
modality = Modality.FINAL,
|
||||||
|
symbol = IrSimpleFunctionSymbolImpl(),
|
||||||
isTailrec = false,
|
isTailrec = false,
|
||||||
isSuspend = true,
|
isSuspend = true,
|
||||||
isOperator = false,
|
isOperator = false,
|
||||||
isInfix = false,
|
isInfix = false,
|
||||||
isExpect = false,
|
isExternal = false,
|
||||||
isFakeOverride = false
|
|
||||||
).also { irAdapterFunction ->
|
).also { irAdapterFunction ->
|
||||||
symbolTable.enterScope(irAdapterFunction)
|
symbolTable.enterScope(irAdapterFunction)
|
||||||
irAdapterFunction.extensionReceiverParameter = createAdapterParameter(
|
irAdapterFunction.extensionReceiverParameter = createAdapterParameter(
|
||||||
@@ -773,22 +773,22 @@ internal class AdapterGenerator(
|
|||||||
val functionParameter = callableSymbol.valueParameterSymbols.singleOrNull()
|
val functionParameter = callableSymbol.valueParameterSymbols.singleOrNull()
|
||||||
?: throw AssertionError("Single value parameter expected: ${callableSymbol.valueParameterSymbols}")
|
?: throw AssertionError("Single value parameter expected: ${callableSymbol.valueParameterSymbols}")
|
||||||
|
|
||||||
return irFactory.createFunction(
|
return irFactory.createSimpleFunction(
|
||||||
startOffset, endOffset,
|
startOffset = startOffset,
|
||||||
IrDeclarationOrigin.ADAPTER_FOR_FUN_INTERFACE_CONSTRUCTOR,
|
endOffset = endOffset,
|
||||||
IrSimpleFunctionSymbolImpl(),
|
origin = IrDeclarationOrigin.ADAPTER_FOR_FUN_INTERFACE_CONSTRUCTOR,
|
||||||
callableSymbol.name,
|
name = callableSymbol.name,
|
||||||
DescriptorVisibilities.LOCAL,
|
visibility = DescriptorVisibilities.LOCAL,
|
||||||
Modality.FINAL,
|
|
||||||
irSamType,
|
|
||||||
isInline = false,
|
isInline = false,
|
||||||
isExternal = false,
|
isExpect = false,
|
||||||
|
returnType = irSamType,
|
||||||
|
modality = Modality.FINAL,
|
||||||
|
symbol = IrSimpleFunctionSymbolImpl(),
|
||||||
isTailrec = false,
|
isTailrec = false,
|
||||||
isSuspend = false,
|
isSuspend = false,
|
||||||
isOperator = false,
|
isOperator = false,
|
||||||
isInfix = false,
|
isInfix = false,
|
||||||
isExpect = false,
|
isExternal = false,
|
||||||
isFakeOverride = false
|
|
||||||
).also { irAdapterFunction ->
|
).also { irAdapterFunction ->
|
||||||
symbolTable.enterScope(irAdapterFunction)
|
symbolTable.enterScope(irAdapterFunction)
|
||||||
irAdapterFunction.dispatchReceiverParameter = null
|
irAdapterFunction.dispatchReceiverParameter = null
|
||||||
|
|||||||
+17
-4
@@ -237,10 +237,23 @@ class DataClassMembersGenerator(val components: Fir2IrComponents) : Fir2IrCompon
|
|||||||
): IrFunction {
|
): IrFunction {
|
||||||
val signature = if (lookupTag.classId.isLocal) null else components.signatureComposer.composeSignature(syntheticCounterpart)
|
val signature = if (lookupTag.classId.isLocal) null else components.signatureComposer.composeSignature(syntheticCounterpart)
|
||||||
return components.declarationStorage.declareIrSimpleFunction(signature) { symbol ->
|
return components.declarationStorage.declareIrSimpleFunction(signature) { symbol ->
|
||||||
components.irFactory.createFunction(
|
components.irFactory.createSimpleFunction(
|
||||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, symbol, name, DescriptorVisibilities.PUBLIC, Modality.OPEN, returnType,
|
startOffset = UNDEFINED_OFFSET,
|
||||||
isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isOperator = isOperator,
|
endOffset = UNDEFINED_OFFSET,
|
||||||
isInfix = false, isExpect = false, isFakeOverride = false,
|
origin = origin,
|
||||||
|
name = name,
|
||||||
|
visibility = DescriptorVisibilities.PUBLIC,
|
||||||
|
isInline = false,
|
||||||
|
isExpect = false,
|
||||||
|
returnType = returnType,
|
||||||
|
modality = Modality.OPEN,
|
||||||
|
symbol = symbol,
|
||||||
|
isTailrec = false,
|
||||||
|
isSuspend = false,
|
||||||
|
isOperator = isOperator,
|
||||||
|
isInfix = false,
|
||||||
|
isExternal = false,
|
||||||
|
isFakeOverride = false,
|
||||||
).apply {
|
).apply {
|
||||||
if (otherParameterNeeded) {
|
if (otherParameterNeeded) {
|
||||||
val irValueParameter = createSyntheticIrParameter(
|
val irValueParameter = createSyntheticIrParameter(
|
||||||
|
|||||||
+12
-11
@@ -88,23 +88,24 @@ class SyntheticAccessorLowering(private val context: CommonBackendContext) : Bod
|
|||||||
private val copier = object : DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper) {
|
private val copier = object : DeepCopyIrTreeWithSymbols(symbolRemapper, typeRemapper) {
|
||||||
override fun visitSimpleFunction(declaration: IrSimpleFunction): IrSimpleFunction {
|
override fun visitSimpleFunction(declaration: IrSimpleFunction): IrSimpleFunction {
|
||||||
val newName = Name.identifier("${declaration.name.asString()}\$accessor\$$fileHash")
|
val newName = Name.identifier("${declaration.name.asString()}\$accessor\$$fileHash")
|
||||||
return declaration.factory.createFunction(
|
return declaration.factory.createSimpleFunction(
|
||||||
declaration.startOffset, declaration.endOffset,
|
startOffset = declaration.startOffset,
|
||||||
mapDeclarationOrigin(declaration.origin),
|
endOffset = declaration.endOffset,
|
||||||
symbolRemapper.getDeclaredFunction(declaration.symbol),
|
origin = mapDeclarationOrigin(declaration.origin),
|
||||||
newName,
|
name = newName,
|
||||||
DescriptorVisibilities.INTERNAL,
|
visibility = DescriptorVisibilities.INTERNAL,
|
||||||
declaration.modality,
|
|
||||||
IrUninitializedType,
|
|
||||||
isInline = declaration.isInline,
|
isInline = declaration.isInline,
|
||||||
isExternal = declaration.isExternal,
|
isExpect = declaration.isExpect,
|
||||||
|
returnType = IrUninitializedType,
|
||||||
|
modality = declaration.modality,
|
||||||
|
symbol = symbolRemapper.getDeclaredFunction(declaration.symbol),
|
||||||
isTailrec = declaration.isTailrec,
|
isTailrec = declaration.isTailrec,
|
||||||
isSuspend = declaration.isSuspend,
|
isSuspend = declaration.isSuspend,
|
||||||
isOperator = declaration.isOperator,
|
isOperator = declaration.isOperator,
|
||||||
isInfix = declaration.isInfix,
|
isInfix = declaration.isInfix,
|
||||||
isExpect = declaration.isExpect,
|
isExternal = declaration.isExternal,
|
||||||
isFakeOverride = declaration.isFakeOverride,
|
|
||||||
containerSource = declaration.containerSource,
|
containerSource = declaration.containerSource,
|
||||||
|
isFakeOverride = declaration.isFakeOverride,
|
||||||
).apply {
|
).apply {
|
||||||
assert(declaration.overriddenSymbols.isEmpty()) { "Top level function overrides nothing" }
|
assert(declaration.overriddenSymbols.isEmpty()) { "Top level function overrides nothing" }
|
||||||
transformFunctionChildren(declaration)
|
transformFunctionChildren(declaration)
|
||||||
|
|||||||
+16
-3
@@ -96,9 +96,22 @@ internal fun createTempFunction(
|
|||||||
origin: IrDeclarationOrigin = TEMP_FUNCTION_FOR_INTERPRETER,
|
origin: IrDeclarationOrigin = TEMP_FUNCTION_FOR_INTERPRETER,
|
||||||
visibility: DescriptorVisibility = DescriptorVisibilities.PUBLIC
|
visibility: DescriptorVisibility = DescriptorVisibilities.PUBLIC
|
||||||
): IrSimpleFunction {
|
): IrSimpleFunction {
|
||||||
return IrFactoryImpl.createFunction(
|
return IrFactoryImpl.createSimpleFunction(
|
||||||
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, origin, IrSimpleFunctionSymbolImpl(), name, visibility, Modality.FINAL, type,
|
startOffset = SYNTHETIC_OFFSET,
|
||||||
isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isOperator = true, isInfix = false, isExpect = false
|
endOffset = SYNTHETIC_OFFSET,
|
||||||
|
origin = origin,
|
||||||
|
name = name,
|
||||||
|
visibility = visibility,
|
||||||
|
isInline = false,
|
||||||
|
isExpect = false,
|
||||||
|
returnType = type,
|
||||||
|
modality = Modality.FINAL,
|
||||||
|
symbol = IrSimpleFunctionSymbolImpl(),
|
||||||
|
isTailrec = false,
|
||||||
|
isSuspend = false,
|
||||||
|
isOperator = true,
|
||||||
|
isInfix = false,
|
||||||
|
isExternal = false,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+27
-19
@@ -103,23 +103,22 @@ class IrBuiltInsOverDescriptors(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val symbol = symbolTable.declareSimpleFunctionIfNotExists(operatorDescriptor) {
|
val symbol = symbolTable.declareSimpleFunctionIfNotExists(operatorDescriptor) {
|
||||||
val operator = irFactory.createFunction(
|
val operator = irFactory.createSimpleFunction(
|
||||||
UNDEFINED_OFFSET,
|
startOffset = UNDEFINED_OFFSET,
|
||||||
UNDEFINED_OFFSET,
|
endOffset = UNDEFINED_OFFSET,
|
||||||
BUILTIN_OPERATOR,
|
origin = BUILTIN_OPERATOR,
|
||||||
it,
|
name = Name.identifier(name),
|
||||||
Name.identifier(name),
|
visibility = DescriptorVisibilities.PUBLIC,
|
||||||
DescriptorVisibilities.PUBLIC,
|
|
||||||
Modality.FINAL,
|
|
||||||
returnType,
|
|
||||||
isInline = false,
|
isInline = false,
|
||||||
isExternal = false,
|
isExpect = false,
|
||||||
|
returnType = returnType,
|
||||||
|
modality = Modality.FINAL,
|
||||||
|
symbol = it,
|
||||||
isTailrec = false,
|
isTailrec = false,
|
||||||
isSuspend = false,
|
isSuspend = false,
|
||||||
isOperator = false,
|
isOperator = false,
|
||||||
isInfix = false,
|
isInfix = false,
|
||||||
isExpect = false,
|
isExternal = false,
|
||||||
isFakeOverride = false
|
|
||||||
)
|
)
|
||||||
operator.parent = operatorsPackageFragment
|
operator.parent = operatorsPackageFragment
|
||||||
operatorsPackageFragment.declarations += operator
|
operatorsPackageFragment.declarations += operator
|
||||||
@@ -211,13 +210,22 @@ class IrBuiltInsOverDescriptors(
|
|||||||
buildSimpleType()
|
buildSimpleType()
|
||||||
}
|
}
|
||||||
|
|
||||||
irFactory.createFunction(
|
irFactory.createSimpleFunction(
|
||||||
UNDEFINED_OFFSET, UNDEFINED_OFFSET, BUILTIN_OPERATOR,
|
startOffset = UNDEFINED_OFFSET,
|
||||||
operatorSymbol, name,
|
endOffset = UNDEFINED_OFFSET,
|
||||||
DescriptorVisibilities.PUBLIC, Modality.FINAL,
|
origin = BUILTIN_OPERATOR,
|
||||||
returnIrType,
|
name = name,
|
||||||
isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isOperator = false, isInfix = false,
|
visibility = DescriptorVisibilities.PUBLIC,
|
||||||
isExpect = false, isFakeOverride = false
|
isInline = false,
|
||||||
|
isExpect = false,
|
||||||
|
returnType = returnIrType,
|
||||||
|
modality = Modality.FINAL,
|
||||||
|
symbol = operatorSymbol,
|
||||||
|
isTailrec = false,
|
||||||
|
isSuspend = false,
|
||||||
|
isOperator = false,
|
||||||
|
isInfix = false,
|
||||||
|
isExternal = false,
|
||||||
).also { operator ->
|
).also { operator ->
|
||||||
operator.parent = operatorsPackageFragment
|
operator.parent = operatorsPackageFragment
|
||||||
operatorsPackageFragment.declarations += operator
|
operatorsPackageFragment.declarations += operator
|
||||||
|
|||||||
+28
-8
@@ -296,16 +296,22 @@ class IrDescriptorBasedFunctionFactory(
|
|||||||
buildSimpleType()
|
buildSimpleType()
|
||||||
}
|
}
|
||||||
|
|
||||||
irFactory.createFunction(
|
irFactory.createSimpleFunction(
|
||||||
offset, offset, memberOrigin, it, Name.identifier("invoke"), DescriptorVisibilities.PUBLIC, Modality.ABSTRACT,
|
startOffset = offset,
|
||||||
returnType,
|
endOffset = offset,
|
||||||
|
origin = memberOrigin,
|
||||||
|
name = Name.identifier("invoke"),
|
||||||
|
visibility = DescriptorVisibilities.PUBLIC,
|
||||||
isInline = false,
|
isInline = false,
|
||||||
isExternal = false,
|
isExpect = false,
|
||||||
|
returnType = returnType,
|
||||||
|
modality = Modality.ABSTRACT,
|
||||||
|
symbol = it,
|
||||||
isTailrec = false,
|
isTailrec = false,
|
||||||
isSuspend = isSuspend,
|
isSuspend = isSuspend,
|
||||||
isOperator = true,
|
isOperator = true,
|
||||||
isInfix = false,
|
isInfix = false,
|
||||||
isExpect = false,
|
isExternal = false,
|
||||||
isFakeOverride = false
|
isFakeOverride = false
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -378,9 +384,23 @@ class IrDescriptorBasedFunctionFactory(
|
|||||||
val returnType = descriptor.returnType?.let { toIrType(it) } ?: error("No return type for $descriptor")
|
val returnType = descriptor.returnType?.let { toIrType(it) } ?: error("No return type for $descriptor")
|
||||||
val newFunction = symbolTable.declareSimpleFunction(descriptor) {
|
val newFunction = symbolTable.declareSimpleFunction(descriptor) {
|
||||||
descriptor.run {
|
descriptor.run {
|
||||||
irFactory.createFunction(
|
irFactory.createSimpleFunction(
|
||||||
offset, offset, memberOrigin, it, name, visibility, modality, returnType,
|
startOffset = offset,
|
||||||
isInline, isEffectivelyExternal(), isTailrec, isSuspend, isOperator, isInfix, isExpect, true
|
endOffset = offset,
|
||||||
|
origin = memberOrigin,
|
||||||
|
name = name,
|
||||||
|
visibility = visibility,
|
||||||
|
isInline = isInline,
|
||||||
|
isExpect = isExpect,
|
||||||
|
returnType = returnType,
|
||||||
|
modality = modality,
|
||||||
|
symbol = it,
|
||||||
|
isTailrec = isTailrec,
|
||||||
|
isSuspend = isSuspend,
|
||||||
|
isOperator = isOperator,
|
||||||
|
isInfix = isInfix,
|
||||||
|
isExternal = isEffectivelyExternal(),
|
||||||
|
isFakeOverride = true,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+15
-9
@@ -427,16 +427,22 @@ private fun StatementGenerator.createFunctionForSuspendConversion(
|
|||||||
val irFunReturnType = funType.arguments.last().type.toIrType()
|
val irFunReturnType = funType.arguments.last().type.toIrType()
|
||||||
val irSuspendFunReturnType = suspendFunType.arguments.last().type.toIrType()
|
val irSuspendFunReturnType = suspendFunType.arguments.last().type.toIrType()
|
||||||
|
|
||||||
val irAdapterFun = context.irFactory.createFunction(
|
val irAdapterFun = context.irFactory.createSimpleFunction(
|
||||||
startOffset, endOffset,
|
startOffset = startOffset,
|
||||||
IrDeclarationOrigin.ADAPTER_FOR_SUSPEND_CONVERSION,
|
endOffset = endOffset,
|
||||||
IrSimpleFunctionSymbolImpl(),
|
origin = IrDeclarationOrigin.ADAPTER_FOR_SUSPEND_CONVERSION,
|
||||||
Name.identifier(scope.inventNameForTemporary("suspendConversion")),
|
name = Name.identifier(scope.inventNameForTemporary("suspendConversion")),
|
||||||
DescriptorVisibilities.LOCAL, Modality.FINAL,
|
visibility = DescriptorVisibilities.LOCAL,
|
||||||
irSuspendFunReturnType,
|
isInline = false,
|
||||||
isInline = false, isExternal = false, isTailrec = false,
|
isExpect = false,
|
||||||
|
returnType = irSuspendFunReturnType,
|
||||||
|
modality = Modality.FINAL,
|
||||||
|
symbol = IrSimpleFunctionSymbolImpl(),
|
||||||
|
isTailrec = false,
|
||||||
isSuspend = true,
|
isSuspend = true,
|
||||||
isOperator = false, isInfix = false, isExpect = false, isFakeOverride = false
|
isOperator = false,
|
||||||
|
isInfix = false,
|
||||||
|
isExternal = false,
|
||||||
)
|
)
|
||||||
|
|
||||||
context.symbolTable.enterScope(irAdapterFun)
|
context.symbolTable.enterScope(irAdapterFun)
|
||||||
|
|||||||
+24
-18
@@ -166,16 +166,22 @@ internal class ReflectionReferencesGenerator(statementGenerator: StatementGenera
|
|||||||
val functionParameter = descriptor.valueParameters.singleOrNull()
|
val functionParameter = descriptor.valueParameters.singleOrNull()
|
||||||
?: throw AssertionError("Single value parameter expected: $descriptor")
|
?: throw AssertionError("Single value parameter expected: $descriptor")
|
||||||
|
|
||||||
return context.irFactory.createFunction(
|
return context.irFactory.createSimpleFunction(
|
||||||
startOffset, endOffset,
|
startOffset = startOffset,
|
||||||
IrDeclarationOrigin.ADAPTER_FOR_FUN_INTERFACE_CONSTRUCTOR,
|
endOffset = endOffset,
|
||||||
IrSimpleFunctionSymbolImpl(),
|
origin = IrDeclarationOrigin.ADAPTER_FOR_FUN_INTERFACE_CONSTRUCTOR,
|
||||||
name = samClassDescriptor.name,
|
name = samClassDescriptor.name,
|
||||||
visibility = DescriptorVisibilities.LOCAL,
|
visibility = DescriptorVisibilities.LOCAL,
|
||||||
modality = Modality.FINAL,
|
isInline = false,
|
||||||
|
isExpect = false,
|
||||||
returnType = irSamType,
|
returnType = irSamType,
|
||||||
isInline = false, isExternal = false, isTailrec = false, isSuspend = false, isOperator = false, isInfix = false,
|
modality = Modality.FINAL,
|
||||||
isExpect = false, isFakeOverride = false
|
symbol = IrSimpleFunctionSymbolImpl(),
|
||||||
|
isTailrec = false,
|
||||||
|
isSuspend = false,
|
||||||
|
isOperator = false,
|
||||||
|
isInfix = false,
|
||||||
|
isExternal = false,
|
||||||
).also { irAdapterFun ->
|
).also { irAdapterFun ->
|
||||||
context.symbolTable.withScope(irAdapterFun) {
|
context.symbolTable.withScope(irAdapterFun) {
|
||||||
irAdapterFun.metadata = null
|
irAdapterFun.metadata = null
|
||||||
@@ -437,22 +443,22 @@ internal class ReflectionReferencesGenerator(statementGenerator: StatementGenera
|
|||||||
val hasSuspendConversion = !adapteeDescriptor.isSuspend &&
|
val hasSuspendConversion = !adapteeDescriptor.isSuspend &&
|
||||||
callableReferenceType.isKSuspendFunctionType
|
callableReferenceType.isKSuspendFunctionType
|
||||||
|
|
||||||
return context.irFactory.createFunction(
|
return context.irFactory.createSimpleFunction(
|
||||||
startOffset, endOffset,
|
startOffset = startOffset,
|
||||||
IrDeclarationOrigin.ADAPTER_FOR_CALLABLE_REFERENCE,
|
endOffset = endOffset,
|
||||||
IrSimpleFunctionSymbolImpl(),
|
origin = IrDeclarationOrigin.ADAPTER_FOR_CALLABLE_REFERENCE,
|
||||||
adapteeDescriptor.name,
|
name = adapteeDescriptor.name,
|
||||||
DescriptorVisibilities.LOCAL,
|
visibility = DescriptorVisibilities.LOCAL,
|
||||||
Modality.FINAL,
|
|
||||||
ktExpectedReturnType.toIrType(),
|
|
||||||
isInline = adapteeDescriptor.isInline, // TODO ?
|
isInline = adapteeDescriptor.isInline, // TODO ?
|
||||||
isExternal = false,
|
isExpect = false,
|
||||||
|
returnType = ktExpectedReturnType.toIrType(),
|
||||||
|
modality = Modality.FINAL,
|
||||||
|
symbol = IrSimpleFunctionSymbolImpl(),
|
||||||
isTailrec = false,
|
isTailrec = false,
|
||||||
isSuspend = adapteeDescriptor.isSuspend || hasSuspendConversion,
|
isSuspend = adapteeDescriptor.isSuspend || hasSuspendConversion,
|
||||||
isOperator = adapteeDescriptor.isOperator, // TODO ?
|
isOperator = adapteeDescriptor.isOperator, // TODO ?
|
||||||
isInfix = adapteeDescriptor.isInfix,
|
isInfix = adapteeDescriptor.isInfix,
|
||||||
isExpect = false,
|
isExternal = false,
|
||||||
isFakeOverride = false
|
|
||||||
).also { irAdapterFun ->
|
).also { irAdapterFun ->
|
||||||
context.symbolTable.withScope(irAdapterFun) {
|
context.symbolTable.withScope(irAdapterFun) {
|
||||||
irAdapterFun.metadata = DescriptorMetadataSource.Function(adapteeDescriptor)
|
irAdapterFun.metadata = DescriptorMetadataSource.Function(adapteeDescriptor)
|
||||||
|
|||||||
+16
-3
@@ -208,9 +208,22 @@ internal class StandaloneDeclarationGenerator(private val context: GeneratorCont
|
|||||||
defaultArgumentFactory: IrFunction.(IrValueParameter) -> IrExpressionBody? = { null }
|
defaultArgumentFactory: IrFunction.(IrValueParameter) -> IrExpressionBody? = { null }
|
||||||
): IrSimpleFunction {
|
): IrSimpleFunction {
|
||||||
val irFunction = with(descriptor) {
|
val irFunction = with(descriptor) {
|
||||||
irFactory.createFunction(
|
irFactory.createSimpleFunction(
|
||||||
startOffset, endOffset, origin, symbol, name, visibility, modality, IrUninitializedType,
|
startOffset = startOffset,
|
||||||
isInline, isEffectivelyExternal(), isTailrec, isSuspend, isOperator, isInfix, isExpect
|
endOffset = endOffset,
|
||||||
|
origin = origin,
|
||||||
|
name = name,
|
||||||
|
visibility = visibility,
|
||||||
|
isInline = isInline,
|
||||||
|
isExpect = isExpect,
|
||||||
|
returnType = IrUninitializedType,
|
||||||
|
modality = modality,
|
||||||
|
symbol = symbol,
|
||||||
|
isTailrec = isTailrec,
|
||||||
|
isSuspend = isSuspend,
|
||||||
|
isOperator = isOperator,
|
||||||
|
isInfix = isInfix,
|
||||||
|
isExternal = isEffectivelyExternal(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
irFunction.metadata = DescriptorMetadataSource.Function(descriptor)
|
irFunction.metadata = DescriptorMetadataSource.Function(descriptor)
|
||||||
|
|||||||
+18
-6
@@ -172,12 +172,24 @@ inline fun IrProperty.addBackingField(builder: IrFieldBuilder.() -> Unit = {}):
|
|||||||
|
|
||||||
@PublishedApi
|
@PublishedApi
|
||||||
internal fun IrFactory.buildFunction(builder: IrFunctionBuilder): IrSimpleFunction = with(builder) {
|
internal fun IrFactory.buildFunction(builder: IrFunctionBuilder): IrSimpleFunction = with(builder) {
|
||||||
createFunction(
|
createSimpleFunction(
|
||||||
startOffset, endOffset, origin,
|
startOffset = startOffset,
|
||||||
IrSimpleFunctionSymbolImpl(),
|
endOffset = endOffset,
|
||||||
name, visibility, modality, returnType,
|
origin = origin,
|
||||||
isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, isFakeOverride,
|
name = name,
|
||||||
containerSource,
|
visibility = visibility,
|
||||||
|
isInline = isInline,
|
||||||
|
isExpect = isExpect,
|
||||||
|
returnType = returnType,
|
||||||
|
modality = modality,
|
||||||
|
symbol = IrSimpleFunctionSymbolImpl(),
|
||||||
|
isTailrec = isTailrec,
|
||||||
|
isSuspend = isSuspend,
|
||||||
|
isOperator = isOperator,
|
||||||
|
isInfix = isInfix,
|
||||||
|
isExternal = isExternal,
|
||||||
|
containerSource = containerSource,
|
||||||
|
isFakeOverride = isFakeOverride,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -88,24 +88,24 @@ interface IrFactory {
|
|||||||
isExternal: Boolean,
|
isExternal: Boolean,
|
||||||
): IrField
|
): IrField
|
||||||
|
|
||||||
fun createFunction(
|
fun createSimpleFunction(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
origin: IrDeclarationOrigin,
|
||||||
symbol: IrSimpleFunctionSymbol,
|
|
||||||
name: Name,
|
name: Name,
|
||||||
visibility: DescriptorVisibility,
|
visibility: DescriptorVisibility,
|
||||||
modality: Modality,
|
|
||||||
returnType: IrType,
|
|
||||||
isInline: Boolean,
|
isInline: Boolean,
|
||||||
isExternal: Boolean,
|
isExpect: Boolean,
|
||||||
|
returnType: IrType,
|
||||||
|
modality: Modality,
|
||||||
|
symbol: IrSimpleFunctionSymbol,
|
||||||
isTailrec: Boolean,
|
isTailrec: Boolean,
|
||||||
isSuspend: Boolean,
|
isSuspend: Boolean,
|
||||||
isOperator: Boolean,
|
isOperator: Boolean,
|
||||||
isInfix: Boolean,
|
isInfix: Boolean,
|
||||||
isExpect: Boolean,
|
isExternal: Boolean,
|
||||||
isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
|
|
||||||
containerSource: DeserializedContainerSource? = null,
|
containerSource: DeserializedContainerSource? = null,
|
||||||
|
isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE,
|
||||||
): IrSimpleFunction
|
): IrSimpleFunction
|
||||||
|
|
||||||
fun createFunctionWithLateBinding(
|
fun createFunctionWithLateBinding(
|
||||||
|
|||||||
@@ -107,24 +107,24 @@ abstract class AbstractIrFactoryImpl : IrFactory {
|
|||||||
): IrField =
|
): IrField =
|
||||||
IrFieldImpl(startOffset, endOffset, origin, symbol, name, type, visibility, isFinal, isExternal, isStatic, factory = this)
|
IrFieldImpl(startOffset, endOffset, origin, symbol, name, type, visibility, isFinal, isExternal, isStatic, factory = this)
|
||||||
|
|
||||||
override fun createFunction(
|
override fun createSimpleFunction(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
origin: IrDeclarationOrigin,
|
||||||
symbol: IrSimpleFunctionSymbol,
|
|
||||||
name: Name,
|
name: Name,
|
||||||
visibility: DescriptorVisibility,
|
visibility: DescriptorVisibility,
|
||||||
modality: Modality,
|
|
||||||
returnType: IrType,
|
|
||||||
isInline: Boolean,
|
isInline: Boolean,
|
||||||
isExternal: Boolean,
|
isExpect: Boolean,
|
||||||
|
returnType: IrType,
|
||||||
|
modality: Modality,
|
||||||
|
symbol: IrSimpleFunctionSymbol,
|
||||||
isTailrec: Boolean,
|
isTailrec: Boolean,
|
||||||
isSuspend: Boolean,
|
isSuspend: Boolean,
|
||||||
isOperator: Boolean,
|
isOperator: Boolean,
|
||||||
isInfix: Boolean,
|
isInfix: Boolean,
|
||||||
isExpect: Boolean,
|
isExternal: Boolean,
|
||||||
isFakeOverride: Boolean,
|
|
||||||
containerSource: DeserializedContainerSource?,
|
containerSource: DeserializedContainerSource?,
|
||||||
|
isFakeOverride: Boolean,
|
||||||
): IrSimpleFunction =
|
): IrSimpleFunction =
|
||||||
IrFunctionImpl(
|
IrFunctionImpl(
|
||||||
startOffset, endOffset, origin, symbol, name, visibility, modality, returnType,
|
startOffset, endOffset, origin, symbol, name, visibility, modality, returnType,
|
||||||
|
|||||||
+15
-15
@@ -160,43 +160,43 @@ class IrFactoryImplForJsIC(override val stageController: StageController) : Abst
|
|||||||
).register()
|
).register()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun createFunction(
|
override fun createSimpleFunction(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
origin: IrDeclarationOrigin,
|
||||||
symbol: IrSimpleFunctionSymbol,
|
|
||||||
name: Name,
|
name: Name,
|
||||||
visibility: DescriptorVisibility,
|
visibility: DescriptorVisibility,
|
||||||
modality: Modality,
|
|
||||||
returnType: IrType,
|
|
||||||
isInline: Boolean,
|
isInline: Boolean,
|
||||||
isExternal: Boolean,
|
isExpect: Boolean,
|
||||||
|
returnType: IrType,
|
||||||
|
modality: Modality,
|
||||||
|
symbol: IrSimpleFunctionSymbol,
|
||||||
isTailrec: Boolean,
|
isTailrec: Boolean,
|
||||||
isSuspend: Boolean,
|
isSuspend: Boolean,
|
||||||
isOperator: Boolean,
|
isOperator: Boolean,
|
||||||
isInfix: Boolean,
|
isInfix: Boolean,
|
||||||
isExpect: Boolean,
|
isExternal: Boolean,
|
||||||
isFakeOverride: Boolean,
|
containerSource: DeserializedContainerSource?,
|
||||||
containerSource: DeserializedContainerSource?
|
isFakeOverride: Boolean
|
||||||
): IrSimpleFunction {
|
): IrSimpleFunction {
|
||||||
return super.createFunction(
|
return super.createSimpleFunction(
|
||||||
startOffset,
|
startOffset,
|
||||||
endOffset,
|
endOffset,
|
||||||
origin,
|
origin,
|
||||||
symbol,
|
|
||||||
name,
|
name,
|
||||||
visibility,
|
visibility,
|
||||||
modality,
|
|
||||||
returnType,
|
|
||||||
isInline,
|
isInline,
|
||||||
isExternal,
|
isExpect,
|
||||||
|
returnType,
|
||||||
|
modality,
|
||||||
|
symbol,
|
||||||
isTailrec,
|
isTailrec,
|
||||||
isSuspend,
|
isSuspend,
|
||||||
isOperator,
|
isOperator,
|
||||||
isInfix,
|
isInfix,
|
||||||
isExpect,
|
isExternal,
|
||||||
isFakeOverride,
|
|
||||||
containerSource,
|
containerSource,
|
||||||
|
isFakeOverride,
|
||||||
).register()
|
).register()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+11
-11
@@ -117,30 +117,30 @@ class LazyIrFactory(
|
|||||||
else
|
else
|
||||||
delegate.createField(startOffset, endOffset, origin, name, visibility, symbol, type, isFinal, isStatic, isExternal)
|
delegate.createField(startOffset, endOffset, origin, name, visibility, symbol, type, isFinal, isStatic, isExternal)
|
||||||
|
|
||||||
override fun createFunction(
|
override fun createSimpleFunction(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
origin: IrDeclarationOrigin,
|
||||||
symbol: IrSimpleFunctionSymbol,
|
|
||||||
name: Name,
|
name: Name,
|
||||||
visibility: DescriptorVisibility,
|
visibility: DescriptorVisibility,
|
||||||
modality: Modality,
|
|
||||||
returnType: IrType,
|
|
||||||
isInline: Boolean,
|
isInline: Boolean,
|
||||||
isExternal: Boolean,
|
isExpect: Boolean,
|
||||||
|
returnType: IrType,
|
||||||
|
modality: Modality,
|
||||||
|
symbol: IrSimpleFunctionSymbol,
|
||||||
isTailrec: Boolean,
|
isTailrec: Boolean,
|
||||||
isSuspend: Boolean,
|
isSuspend: Boolean,
|
||||||
isOperator: Boolean,
|
isOperator: Boolean,
|
||||||
isInfix: Boolean,
|
isInfix: Boolean,
|
||||||
isExpect: Boolean,
|
isExternal: Boolean,
|
||||||
isFakeOverride: Boolean,
|
containerSource: DeserializedContainerSource?,
|
||||||
containerSource: DeserializedContainerSource?
|
isFakeOverride: Boolean
|
||||||
): IrSimpleFunction = if (symbol.isBound)
|
): IrSimpleFunction = if (symbol.isBound)
|
||||||
symbol.owner
|
symbol.owner
|
||||||
else
|
else
|
||||||
delegate.createFunction(
|
delegate.createSimpleFunction(
|
||||||
startOffset, endOffset, origin, symbol, name, visibility, modality, returnType,
|
startOffset, endOffset, origin, name, visibility, isInline, isExpect, returnType,
|
||||||
isInline, isExternal, isTailrec, isSuspend, isOperator, isInfix, isExpect, isFakeOverride, containerSource
|
modality, symbol, isTailrec, isSuspend, isOperator, isInfix, isExternal, containerSource, isFakeOverride
|
||||||
)
|
)
|
||||||
|
|
||||||
override fun createProperty(
|
override fun createProperty(
|
||||||
|
|||||||
@@ -171,23 +171,24 @@ open class DeepCopyIrTreeWithSymbols(
|
|||||||
}.copyAttributes(declaration)
|
}.copyAttributes(declaration)
|
||||||
|
|
||||||
override fun visitSimpleFunction(declaration: IrSimpleFunction): IrSimpleFunction =
|
override fun visitSimpleFunction(declaration: IrSimpleFunction): IrSimpleFunction =
|
||||||
declaration.factory.createFunction(
|
declaration.factory.createSimpleFunction(
|
||||||
declaration.startOffset, declaration.endOffset,
|
startOffset = declaration.startOffset,
|
||||||
mapDeclarationOrigin(declaration.origin),
|
endOffset = declaration.endOffset,
|
||||||
symbolRemapper.getDeclaredFunction(declaration.symbol),
|
origin = mapDeclarationOrigin(declaration.origin),
|
||||||
symbolRenamer.getFunctionName(declaration.symbol),
|
name = symbolRenamer.getFunctionName(declaration.symbol),
|
||||||
declaration.visibility,
|
visibility = declaration.visibility,
|
||||||
declaration.modality,
|
|
||||||
declaration.returnType,
|
|
||||||
isInline = declaration.isInline,
|
isInline = declaration.isInline,
|
||||||
isExternal = declaration.isExternal,
|
isExpect = declaration.isExpect,
|
||||||
|
returnType = declaration.returnType,
|
||||||
|
modality = declaration.modality,
|
||||||
|
symbol = symbolRemapper.getDeclaredFunction(declaration.symbol),
|
||||||
isTailrec = declaration.isTailrec,
|
isTailrec = declaration.isTailrec,
|
||||||
isSuspend = declaration.isSuspend,
|
isSuspend = declaration.isSuspend,
|
||||||
isOperator = declaration.isOperator,
|
isOperator = declaration.isOperator,
|
||||||
isInfix = declaration.isInfix,
|
isInfix = declaration.isInfix,
|
||||||
isExpect = declaration.isExpect,
|
isExternal = declaration.isExternal,
|
||||||
isFakeOverride = declaration.isFakeOverride,
|
|
||||||
containerSource = declaration.containerSource,
|
containerSource = declaration.containerSource,
|
||||||
|
isFakeOverride = declaration.isFakeOverride,
|
||||||
).apply {
|
).apply {
|
||||||
overriddenSymbols = declaration.overriddenSymbols.memoryOptimizedMap {
|
overriddenSymbols = declaration.overriddenSymbols.memoryOptimizedMap {
|
||||||
symbolRemapper.getReferencedFunction(it) as IrSimpleFunctionSymbol
|
symbolRemapper.getReferencedFunction(it) as IrSimpleFunctionSymbol
|
||||||
|
|||||||
@@ -1188,23 +1188,24 @@ fun IrFactory.createStaticFunctionWithReceivers(
|
|||||||
typeParametersFromContext: List<IrTypeParameter> = listOf(),
|
typeParametersFromContext: List<IrTypeParameter> = listOf(),
|
||||||
remapMultiFieldValueClassStructure: (IrFunction, IrFunction, Map<IrValueParameter, IrValueParameter>?) -> Unit
|
remapMultiFieldValueClassStructure: (IrFunction, IrFunction, Map<IrValueParameter, IrValueParameter>?) -> Unit
|
||||||
): IrSimpleFunction {
|
): IrSimpleFunction {
|
||||||
return createFunction(
|
return createSimpleFunction(
|
||||||
oldFunction.startOffset, oldFunction.endOffset,
|
startOffset = oldFunction.startOffset,
|
||||||
origin,
|
endOffset = oldFunction.endOffset,
|
||||||
IrSimpleFunctionSymbolImpl(),
|
origin = origin,
|
||||||
name,
|
name = name,
|
||||||
visibility,
|
visibility = visibility,
|
||||||
modality,
|
|
||||||
oldFunction.returnType,
|
|
||||||
isInline = oldFunction.isInline,
|
isInline = oldFunction.isInline,
|
||||||
isExternal = false,
|
isExpect = oldFunction.isExpect,
|
||||||
|
returnType = oldFunction.returnType,
|
||||||
|
modality = modality,
|
||||||
|
symbol = IrSimpleFunctionSymbolImpl(),
|
||||||
isTailrec = false,
|
isTailrec = false,
|
||||||
isSuspend = oldFunction.isSuspend,
|
isSuspend = oldFunction.isSuspend,
|
||||||
isExpect = oldFunction.isExpect,
|
|
||||||
isFakeOverride = isFakeOverride,
|
|
||||||
isOperator = oldFunction is IrSimpleFunction && oldFunction.isOperator,
|
isOperator = oldFunction is IrSimpleFunction && oldFunction.isOperator,
|
||||||
isInfix = oldFunction is IrSimpleFunction && oldFunction.isInfix,
|
isInfix = oldFunction is IrSimpleFunction && oldFunction.isInfix,
|
||||||
|
isExternal = false,
|
||||||
containerSource = oldFunction.containerSource,
|
containerSource = oldFunction.containerSource,
|
||||||
|
isFakeOverride = isFakeOverride,
|
||||||
).apply {
|
).apply {
|
||||||
parent = irParent
|
parent = irParent
|
||||||
|
|
||||||
|
|||||||
@@ -24,18 +24,22 @@ fun SymbolTable.declareSimpleFunctionWithOverrides(
|
|||||||
) =
|
) =
|
||||||
declareSimpleFunction(descriptor) {
|
declareSimpleFunction(descriptor) {
|
||||||
with(descriptor) {
|
with(descriptor) {
|
||||||
irFactory.createFunction(
|
irFactory.createSimpleFunction(
|
||||||
startOffset, endOffset, origin, it, nameProvider.nameForDeclaration(this),
|
startOffset = startOffset,
|
||||||
visibility,
|
endOffset = endOffset,
|
||||||
modality,
|
origin = origin,
|
||||||
IrUninitializedType,
|
name = nameProvider.nameForDeclaration(this),
|
||||||
isInline,
|
visibility = visibility,
|
||||||
isEffectivelyExternal(),
|
isInline = isInline,
|
||||||
isTailrec,
|
isExpect = isExpect,
|
||||||
isSuspend,
|
returnType = IrUninitializedType,
|
||||||
isOperator,
|
modality = modality,
|
||||||
isInfix,
|
symbol = it,
|
||||||
isExpect,
|
isTailrec = isTailrec,
|
||||||
|
isSuspend = isSuspend,
|
||||||
|
isOperator = isOperator,
|
||||||
|
isInfix = isInfix,
|
||||||
|
isExternal = isEffectivelyExternal(),
|
||||||
isFakeOverride = descriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE
|
isFakeOverride = descriptor.kind == CallableMemberDescriptor.Kind.FAKE_OVERRIDE
|
||||||
).also { declaration ->
|
).also { declaration ->
|
||||||
declaration.metadata = DescriptorMetadataSource.Function(this)
|
declaration.metadata = DescriptorMetadataSource.Function(this)
|
||||||
|
|||||||
+6
-6
@@ -81,22 +81,22 @@ internal class MissingDeclarationStubGenerator(private val builtIns: IrBuiltIns)
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun generateSimpleFunction(symbol: IrSimpleFunctionSymbol): IrSimpleFunction {
|
private fun generateSimpleFunction(symbol: IrSimpleFunctionSymbol): IrSimpleFunction {
|
||||||
return builtIns.irFactory.createFunction(
|
return builtIns.irFactory.createSimpleFunction(
|
||||||
startOffset = UNDEFINED_OFFSET,
|
startOffset = UNDEFINED_OFFSET,
|
||||||
endOffset = UNDEFINED_OFFSET,
|
endOffset = UNDEFINED_OFFSET,
|
||||||
origin = PartiallyLinkedDeclarationOrigin.MISSING_DECLARATION,
|
origin = PartiallyLinkedDeclarationOrigin.MISSING_DECLARATION,
|
||||||
symbol = symbol,
|
|
||||||
name = symbol.guessName(),
|
name = symbol.guessName(),
|
||||||
visibility = DescriptorVisibilities.DEFAULT_VISIBILITY,
|
visibility = DescriptorVisibilities.DEFAULT_VISIBILITY,
|
||||||
modality = Modality.FINAL,
|
|
||||||
returnType = builtIns.nothingType,
|
|
||||||
isInline = false,
|
isInline = false,
|
||||||
isExternal = false,
|
isExpect = false,
|
||||||
|
returnType = builtIns.nothingType,
|
||||||
|
modality = Modality.FINAL,
|
||||||
|
symbol = symbol,
|
||||||
isTailrec = false,
|
isTailrec = false,
|
||||||
isSuspend = false,
|
isSuspend = false,
|
||||||
isOperator = false,
|
isOperator = false,
|
||||||
isInfix = false,
|
isInfix = false,
|
||||||
isExpect = false
|
isExternal = false
|
||||||
).setCommonParent()
|
).setCommonParent()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+17
-15
@@ -599,21 +599,23 @@ class IrDeclarationDeserializer(
|
|||||||
val flags = FunctionFlags.decode(fcode)
|
val flags = FunctionFlags.decode(fcode)
|
||||||
symbolTable.declareSimpleFunction(idSig, { symbol }) {
|
symbolTable.declareSimpleFunction(idSig, { symbol }) {
|
||||||
val nameType = BinaryNameAndType.decode(proto.base.nameType)
|
val nameType = BinaryNameAndType.decode(proto.base.nameType)
|
||||||
irFactory.createFunction(
|
irFactory.createSimpleFunction(
|
||||||
startOffset, endOffset, origin,
|
startOffset = startOffset,
|
||||||
it,
|
endOffset = endOffset,
|
||||||
deserializeName(nameType.nameIndex),
|
origin = origin,
|
||||||
flags.visibility,
|
name = deserializeName(nameType.nameIndex),
|
||||||
flags.modality,
|
visibility = flags.visibility,
|
||||||
IrUninitializedType,
|
isInline = flags.isInline,
|
||||||
flags.isInline,
|
isExpect = flags.isExpect,
|
||||||
flags.isExternal || isEffectivelyExternal,
|
returnType = IrUninitializedType,
|
||||||
flags.isTailrec,
|
modality = flags.modality,
|
||||||
flags.isSuspend,
|
symbol = it,
|
||||||
flags.isOperator,
|
isTailrec = flags.isTailrec,
|
||||||
flags.isInfix,
|
isSuspend = flags.isSuspend,
|
||||||
flags.isExpect,
|
isOperator = flags.isOperator,
|
||||||
flags.isFakeOverride
|
isInfix = flags.isInfix,
|
||||||
|
isExternal = flags.isExternal || isEffectivelyExternal,
|
||||||
|
isFakeOverride = flags.isFakeOverride,
|
||||||
)
|
)
|
||||||
}.apply {
|
}.apply {
|
||||||
overriddenSymbols = proto.overriddenList.memoryOptimizedMap { deserializeIrSymbolAndRemap(it).checkSymbolType(FUNCTION_SYMBOL) }
|
overriddenSymbols = proto.overriddenList.memoryOptimizedMap { deserializeIrSymbolAndRemap(it).checkSymbolType(FUNCTION_SYMBOL) }
|
||||||
|
|||||||
+12
-12
@@ -29,22 +29,22 @@ internal class FunctionsWithoutBoundCheckGenerator(val context: KonanBackendCont
|
|||||||
private val symbols = context.ir.symbols
|
private val symbols = context.ir.symbols
|
||||||
|
|
||||||
private fun generateFunction(baseFunction: IrSimpleFunction, delegatingToFunction: IrSimpleFunction?, functionName: Name) =
|
private fun generateFunction(baseFunction: IrSimpleFunction, delegatingToFunction: IrSimpleFunction?, functionName: Name) =
|
||||||
context.irFactory.createFunction(
|
context.irFactory.createSimpleFunction(
|
||||||
baseFunction.startOffset, baseFunction.endOffset,
|
startOffset = baseFunction.startOffset,
|
||||||
IrDeclarationOrigin.GENERATED_SETTER_GETTER,
|
endOffset = baseFunction.endOffset,
|
||||||
IrSimpleFunctionSymbolImpl(),
|
origin = IrDeclarationOrigin.GENERATED_SETTER_GETTER,
|
||||||
functionName,
|
name = functionName,
|
||||||
DescriptorVisibilities.PUBLIC,
|
visibility = DescriptorVisibilities.PUBLIC,
|
||||||
Modality.FINAL,
|
|
||||||
baseFunction.returnType,
|
|
||||||
isInline = false,
|
isInline = false,
|
||||||
isExternal = true,
|
isExpect = false,
|
||||||
|
returnType = baseFunction.returnType,
|
||||||
|
modality = Modality.FINAL,
|
||||||
|
symbol = IrSimpleFunctionSymbolImpl(),
|
||||||
isTailrec = false,
|
isTailrec = false,
|
||||||
isSuspend = false,
|
isSuspend = false,
|
||||||
isExpect = false,
|
|
||||||
isFakeOverride = false,
|
|
||||||
isOperator = false,
|
isOperator = false,
|
||||||
isInfix = false
|
isInfix = false,
|
||||||
|
isExternal = true,
|
||||||
).also { function ->
|
).also { function ->
|
||||||
function.parent = baseFunction.parent
|
function.parent = baseFunction.parent
|
||||||
function.createDispatchReceiverParameter()
|
function.createDispatchReceiverParameter()
|
||||||
|
|||||||
Reference in New Issue
Block a user