[FIR] Add desugaring of array assignments and resolve of it

#KT-37516 Fixed
This commit is contained in:
Dmitriy Novozhilov
2020-03-16 17:00:08 +03:00
parent 26f919df03
commit 2b986194fb
41 changed files with 608 additions and 233 deletions
@@ -112,9 +112,8 @@ object BuilderConfigurator : AbstractBuilderConfigurator<FirTreeBuilder>(FirTree
}
builder(arraySetCall) {
parents += qualifiedAccessBuilder
defaultFalse("safe")
defaultNoReceivers()
default("calleeReference", "FirStubReference")
useTypes(stubReferenceType)
}
builder(callableReferenceAccess) {
@@ -89,7 +89,7 @@ object FirTreeBuilder : AbstractFirTreeBuilder() {
val checkNotNullCall = element("CheckNotNullCall", Expression, expression, call, resolvable)
val arrayOfCall = element("ArrayOfCall", Expression, expression, call)
val arraySetCall = element("ArraySetCall", Expression, qualifiedAccess, call)
val arraySetCall = element("ArraySetCall", Expression, statement)
val classReferenceExpression = element("ClassReferenceExpression", Expression, expression)
val errorExpression = element("ErrorExpression", Expression, expression, diagnosticHolder)
val errorFunction = element("ErrorFunction", Declaration, function, diagnosticHolder)
@@ -86,14 +86,6 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
isMutable("safe")
}
impl(arraySetCall) {
parents += modifiableQualifiedAccess
default("lValue") {
value = "calleeReference"
customSetter = "calleeReference = value"
}
}
impl(callableReferenceAccess) {
parents += modifiableQualifiedAccess
}
@@ -396,10 +396,10 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
}
arraySetCall.configure {
+field("rValue", expression).withTransform()
+field("assignCall", functionCall)
+field("setGetBlock", block)
+field("operation", operationType)
+field("lValue", reference)
+fieldList("indexes", expression).withTransform()
+field("calleeReference", reference, withReplace = true)
}
classReferenceExpression.configure {