[FIR2IR] Intercept exceptions in convertToIrCall to provide more info

This commit is contained in:
Mikhail Glukhikh
2020-09-02 10:18:54 +03:00
parent 23e83e8933
commit 9e38e6d051
2 changed files with 67 additions and 60 deletions
@@ -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()
@@ -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 {