[FIR] Desugar increment/decrement in body resolve phase

The expression needs to be resolved first to determine if there is a
receiver that needs to be extracted to a temporary variable. Also, the
special case for prefix increment/decrement on local variable without
delegates requires resolution to check if the variable is local.

^KT-56771 Fixed
^KT-56659 Fixed
This commit is contained in:
Kirill Rakhman
2023-02-21 16:24:34 +01:00
committed by Space Team
parent 5ecf9cce25
commit 3b9724d20e
77 changed files with 1171 additions and 553 deletions
@@ -104,6 +104,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val comparisonExpression by element(Expression, expression)
val typeOperatorCall by element(Expression, expression, call)
val assignmentOperatorStatement by element(Expression, statement)
val incrementDecrementExpression by element(Expression, expression)
val equalityOperatorCall by element(Expression, expression, call)
val whenExpression by element(Expression, expression, resolvable)
val whenBranch by element(Expression)
@@ -317,6 +317,8 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
impl(assignmentOperatorStatement)
impl(incrementDecrementExpression)
impl(equalityOperatorCall) {
default("typeRef", "FirImplicitBooleanTypeRef(null)")
useTypes(implicitBooleanTypeRefType)
@@ -254,6 +254,13 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+field("rightArgument", expression).withTransform()
}
incrementDecrementExpression.configure {
+booleanField("isPrefix")
+field("operationName", nameType)
+field("expression", expression)
+field("operationSource", sourceElementType, nullable = true)
}
equalityOperatorCall.configure {
+field("operation", operationType)
}