[Interop][Lowering] A bit more helpful error reporting

This commit is contained in:
Sergey Bogolepov
2020-07-09 13:08:42 +07:00
committed by Sergey Bogolepov
parent ba52a437b1
commit de9f1bf2bf
@@ -97,13 +97,13 @@ private fun InteropCallContext.findMemoryAccessFunction(isRead: Boolean, valueTy
.findAnnotation(RuntimeNames.typedIntrinsicAnnotation) .findAnnotation(RuntimeNames.typedIntrinsicAnnotation)
?.getAnnotationStringValue() ?.getAnnotationStringValue()
annotationArgument == requiredType.name annotationArgument == requiredType.name
}.first { }.firstOrNull {
if (isRead) { if (isRead) {
it.returnType.classOrNull == valueType.classOrNull it.returnType.classOrNull == valueType.classOrNull
} else { } else {
it.valueParameters.last().type.classOrNull == valueType.classOrNull it.valueParameters.last().type.classOrNull == valueType.classOrNull
} }
} } ?: error("No memory access function for ${valueType.classOrNull?.owner?.name}")
} }
private fun InteropCallContext.readValueFromMemory( private fun InteropCallContext.readValueFromMemory(
@@ -164,7 +164,8 @@ private fun InteropCallContext.castPrimitiveIfNeeded(
targetClass == irBuiltIns.booleanClass -> castToBoolean(sourceClass, value) targetClass == irBuiltIns.booleanClass -> castToBoolean(sourceClass, value)
sourceClass == irBuiltIns.booleanClass -> castFromBoolean(targetClass, value) sourceClass == irBuiltIns.booleanClass -> castFromBoolean(targetClass, value)
else -> { else -> {
val conversion = symbols.integerConversions.getValue(sourceClass to targetClass) val conversion = symbols.integerConversions[sourceClass to targetClass]
?: error("There is no conversion from ${sourceClass.owner.name} to ${targetClass.owner.name}")
builder.irCall(conversion.owner).apply { builder.irCall(conversion.owner).apply {
if (conversion.owner.dispatchReceiverParameter != null) { if (conversion.owner.dispatchReceiverParameter != null) {
dispatchReceiver = value dispatchReceiver = value