[FIR2IR] Intercept exceptions in convertToIrCall to provide more info
This commit is contained in:
@@ -24,6 +24,8 @@ class Fir2IrConversionScope {
|
|||||||
return parent
|
return parent
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun containingFileIfAny(): IrFile? = parentStack.getOrNull(0) as? IrFile
|
||||||
|
|
||||||
fun withContainingFirClass(containingFirClass: FirClass<*>, f: () -> Unit) {
|
fun withContainingFirClass(containingFirClass: FirClass<*>, f: () -> Unit) {
|
||||||
containingFirClassStack += containingFirClass
|
containingFirClassStack += containingFirClass
|
||||||
f()
|
f()
|
||||||
|
|||||||
+5
@@ -460,6 +460,7 @@ class CallAndReferenceGenerator(
|
|||||||
explicitReceiverExpression: IrExpression?,
|
explicitReceiverExpression: IrExpression?,
|
||||||
annotationMode: Boolean = false
|
annotationMode: Boolean = false
|
||||||
): IrExpression {
|
): IrExpression {
|
||||||
|
try {
|
||||||
val type = typeRef.toIrType()
|
val type = typeRef.toIrType()
|
||||||
val samConstructorCall = qualifiedAccess.tryConvertToSamConstructorCall(type)
|
val samConstructorCall = qualifiedAccess.tryConvertToSamConstructorCall(type)
|
||||||
if (samConstructorCall != null) return samConstructorCall
|
if (samConstructorCall != null) return samConstructorCall
|
||||||
@@ -523,6 +524,10 @@ class CallAndReferenceGenerator(
|
|||||||
}
|
}
|
||||||
}.applyCallArguments(qualifiedAccess as? FirCall, annotationMode)
|
}.applyCallArguments(qualifiedAccess as? FirCall, annotationMode)
|
||||||
.applyTypeArguments(qualifiedAccess).applyReceivers(qualifiedAccess, explicitReceiverExpression)
|
.applyTypeArguments(qualifiedAccess).applyReceivers(qualifiedAccess, explicitReceiverExpression)
|
||||||
|
} catch (e: Throwable) {
|
||||||
|
throw IllegalStateException("Error while translating ${qualifiedAccess.render()} " +
|
||||||
|
"from file ${conversionScope.containingFileIfAny()?.name ?: "???"} to BE IR", e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun convertToIrSetCall(variableAssignment: FirVariableAssignment, explicitReceiverExpression: IrExpression?): IrExpression {
|
fun convertToIrSetCall(variableAssignment: FirVariableAssignment, explicitReceiverExpression: IrExpression?): IrExpression {
|
||||||
|
|||||||
Reference in New Issue
Block a user