Optimization: make FIR expression an abstract class

NB: this commit does significant fir:tree refactoring.
It provides some boost due to faster abstract class dispatching in JVM.
This commit is contained in:
Mikhail Glukhikh
2019-06-11 12:11:18 +03:00
parent dab6fe29b1
commit 688c2cf74f
79 changed files with 839 additions and 463 deletions
@@ -474,7 +474,7 @@ internal fun generateTemporaryVariable(
session: FirSession, psi: PsiElement?, specialName: String, initializer: FirExpression
): FirVariable = generateTemporaryVariable(session, psi, Name.special("<$specialName>"), initializer)
private fun FirModifiableQualifiedAccess.initializeLValue(
private fun FirModifiableQualifiedAccess<*>.initializeLValue(
session: FirSession,
left: KtExpression?,
convertQualified: KtQualifiedExpression.() -> FirQualifiedAccess?
@@ -314,7 +314,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
}
}
private fun KtCallElement.extractArgumentsTo(container: FirAbstractCall) {
private fun KtCallElement.extractArgumentsTo(container: FirCallWithArgumentList) {
for (argument in this.valueArguments) {
val argumentExpression = argument.toFirExpression()
container.arguments += when (argument) {
@@ -1124,7 +1124,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
}
}
private fun FirAbstractLoopJump.bindLabel(expression: KtExpressionWithLabel): FirAbstractLoopJump {
private fun FirLoopJump.bindLabel(expression: KtExpressionWithLabel): FirLoopJump {
val labelName = expression.getLabelName()
target = FirLoopTarget(labelName)
val lastLoop = firLoops.lastOrNull()
@@ -1301,7 +1301,7 @@ class RawFirBuilder(val session: FirSession, val stubMode: Boolean) {
val selector = expression.selectorExpression
?: return FirErrorExpressionImpl(session, expression, "Qualified expression without selector")
val firSelector = selector.toFirExpression("Incorrect selector expression")
if (firSelector is FirModifiableQualifiedAccess) {
if (firSelector is FirModifiableQualifiedAccess<*>) {
firSelector.safe = expression is KtSafeQualifiedExpression
firSelector.explicitReceiver = expression.receiverExpression.toFirExpression("Incorrect receiver expression")
}