JVM IR: minor, improve error messages for inline classes
It will help in diagnosing problems like KT-44723.
This commit is contained in:
+12
-6
@@ -57,10 +57,8 @@ object InlineClassAbi {
|
|||||||
* Looking for a backing field does not work for unsigned types, which don't
|
* Looking for a backing field does not work for unsigned types, which don't
|
||||||
* contain a field.
|
* contain a field.
|
||||||
*/
|
*/
|
||||||
fun getUnderlyingType(irClass: IrClass): IrType {
|
fun getUnderlyingType(irClass: IrClass): IrType =
|
||||||
require(irClass.isInline)
|
irClass.singlePrimaryConstructorParameter.type
|
||||||
return irClass.primaryConstructor!!.valueParameters[0].type
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a mangled name for a function taking inline class arguments
|
* Returns a mangled name for a function taking inline class arguments
|
||||||
@@ -158,8 +156,16 @@ internal val IrFunction.hasMangledParameters: Boolean
|
|||||||
internal val IrFunction.hasMangledReturnType: Boolean
|
internal val IrFunction.hasMangledReturnType: Boolean
|
||||||
get() = returnType.erasedUpperBound.isInline && parentClassOrNull?.isFileClass != true
|
get() = returnType.erasedUpperBound.isInline && parentClassOrNull?.isFileClass != true
|
||||||
|
|
||||||
|
private val IrClass.singlePrimaryConstructorParameter: IrValueParameter
|
||||||
|
get() {
|
||||||
|
require(isInline) { "Not an inline class: ${render()} "}
|
||||||
|
val primaryConstructor = primaryConstructor ?: error("Inline class has no primary constructor: ${render()}")
|
||||||
|
return primaryConstructor.valueParameters.singleOrNull()
|
||||||
|
?: error("Inline class primary constructor should have one parameter: ${primaryConstructor.render()}")
|
||||||
|
}
|
||||||
|
|
||||||
internal val IrClass.inlineClassFieldName: Name
|
internal val IrClass.inlineClassFieldName: Name
|
||||||
get() = primaryConstructor!!.valueParameters.single().name
|
get() = singlePrimaryConstructorParameter.name
|
||||||
|
|
||||||
val IrFunction.isInlineClassFieldGetter: Boolean
|
val IrFunction.isInlineClassFieldGetter: Boolean
|
||||||
get() = (parent as? IrClass)?.isInline == true && this is IrSimpleFunction && extensionReceiverParameter == null &&
|
get() = (parent as? IrClass)?.isInline == true && this is IrSimpleFunction && extensionReceiverParameter == null &&
|
||||||
@@ -174,4 +180,4 @@ val IrFunction.isInlineCallableReference: Boolean
|
|||||||
val IrType.isMappedToPrimitive: Boolean
|
val IrType.isMappedToPrimitive: Boolean
|
||||||
get() = erasedUpperBound.isInline &&
|
get() = erasedUpperBound.isInline &&
|
||||||
!(isNullable() && makeNotNull().unboxInlineClass().isNullable()) &&
|
!(isNullable() && makeNotNull().unboxInlineClass().isNullable()) &&
|
||||||
makeNotNull().unboxInlineClass().isPrimitiveType()
|
makeNotNull().unboxInlineClass().isPrimitiveType()
|
||||||
|
|||||||
Reference in New Issue
Block a user