FIR2IR: eliminate hacky replacement for invoke() & next() calls
At this moment the generic logic for fake override calls replacement is in use.
This commit is contained in:
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression
|
|||||||
import org.jetbrains.kotlin.fir.references.FirReference
|
import org.jetbrains.kotlin.fir.references.FirReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||||
import org.jetbrains.kotlin.fir.references.FirSuperReference
|
import org.jetbrains.kotlin.fir.references.FirSuperReference
|
||||||
import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference
|
|
||||||
import org.jetbrains.kotlin.fir.references.impl.FirPropertyFromParameterResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.impl.FirPropertyFromParameterResolvedNamedReference
|
||||||
import org.jetbrains.kotlin.fir.resolve.*
|
import org.jetbrains.kotlin.fir.resolve.*
|
||||||
import org.jetbrains.kotlin.fir.resolve.calls.SyntheticPropertySymbol
|
import org.jetbrains.kotlin.fir.resolve.calls.SyntheticPropertySymbol
|
||||||
@@ -687,12 +686,7 @@ class Fir2IrVisitor(
|
|||||||
val convertibleCall = if (functionCall.toResolvedCallableSymbol()?.fir is FirIntegerOperator) {
|
val convertibleCall = if (functionCall.toResolvedCallableSymbol()?.fir is FirIntegerOperator) {
|
||||||
functionCall.copy().transformSingle(integerApproximator, null)
|
functionCall.copy().transformSingle(integerApproximator, null)
|
||||||
} else {
|
} else {
|
||||||
val resolvedSymbol = functionCall.resolvedNamedFunctionSymbol()
|
functionCall
|
||||||
if (resolvedSymbol != null) {
|
|
||||||
functionCall.replaceCalleeReferenceWithOverridden(resolvedSymbol)
|
|
||||||
} else {
|
|
||||||
functionCall
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return convertibleCall.toIrExpression(convertibleCall.typeRef)
|
return convertibleCall.toIrExpression(convertibleCall.typeRef)
|
||||||
.applyCallArguments(convertibleCall).applyTypeArguments(convertibleCall).applyReceivers(convertibleCall)
|
.applyCallArguments(convertibleCall).applyTypeArguments(convertibleCall).applyReceivers(convertibleCall)
|
||||||
@@ -703,21 +697,6 @@ class Fir2IrVisitor(
|
|||||||
return calleeReference.resolvedSymbol as? FirNamedFunctionSymbol
|
return calleeReference.resolvedSymbol as? FirNamedFunctionSymbol
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use the generic invoke & next methods to match bridges generated by the backend.
|
|
||||||
private fun FirFunctionCall.replaceCalleeReferenceWithOverridden(resolvedSymbol: FirNamedFunctionSymbol): FirFunctionCall {
|
|
||||||
val overriddenSymbol = resolvedSymbol.overriddenSymbol ?: return this
|
|
||||||
if (resolvedSymbol.callableId.isInvoke() || resolvedSymbol.callableId.isIteratorNext()) {
|
|
||||||
return copy(
|
|
||||||
calleeReference = buildResolvedNamedReference {
|
|
||||||
source = calleeReference.source
|
|
||||||
name = calleeReference.name
|
|
||||||
this.resolvedSymbol = overriddenSymbol
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
return this
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: Any?): IrElement {
|
override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: Any?): IrElement {
|
||||||
return annotationCall.toIrExpression().applyCallArguments(annotationCall)
|
return annotationCall.toIrExpression().applyCallArguments(annotationCall)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user