[FIR] Remove FirLambdaArgumentExpression

It's not really necessary if the information about if the lambda was a
trailing lambda can be directly saved in FirAnonymousFunctionExpression.

Removing the FIR node uncovered a couple of bugs
(UNINITIALIZED_ENUM_ENTRY, ERROR_IN_CONTRACT_DESCRIPTION) that were
caused by assuming that a lambda is always a trailing lambda.

#KT-66124
This commit is contained in:
Kirill Rakhman
2024-03-04 11:59:13 +01:00
committed by Space Team
parent 1a5fa8d3f6
commit 03fc0fd381
66 changed files with 302 additions and 351 deletions
@@ -143,7 +143,6 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val getClassCall by element(Expression, expression, call)
val wrappedExpression by element(Expression, expression)
val wrappedArgumentExpression by element(Expression, wrappedExpression)
val lambdaArgumentExpression by element(Expression, wrappedArgumentExpression)
val spreadArgumentExpression by element(Expression, wrappedArgumentExpression)
val namedArgumentExpression by element(Expression, wrappedArgumentExpression)
val varargArgumentsExpression by element(Expression, expression)
@@ -316,16 +316,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
}
}
impl(lambdaArgumentExpression) {
default("isSpread") {
value = "false"
withGetter = true
}
default("coneTypeOrNull") {
delegate = "expression"
}
}
impl(spreadArgumentExpression) {
default("isSpread") {
value = "true"
@@ -331,6 +331,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
anonymousFunctionExpression.configure {
+field(anonymousFunction).withTransform()
+booleanField("isTrailingLambda", withReplace = true)
}
typeParameter.configure {