Raw FIR: make component call a function call, its argument -> receiver

This commit is contained in:
Mikhail Glukhikh
2019-04-02 15:27:04 +03:00
parent 30697787a0
commit a0fa9e6b48
11 changed files with 56 additions and 29 deletions
@@ -354,9 +354,7 @@ internal fun generateDestructuringBlock(
statements += FirVariableImpl(
session, entry, entry.nameAsSafeName,
entry.typeReference.toFirOrImplicitTypeRef(), isVar,
FirComponentCallImpl(session, entry, index + 1).apply {
arguments += generateAccessExpression(session, entry, container.name)
},
FirComponentCallImpl(session, entry, index + 1, generateAccessExpression(session, entry, container.name)),
FirVariableSymbol(entry.nameAsSafeName) // TODO?
).apply {
entry.extractAnnotationsTo(this)
@@ -28,6 +28,6 @@ FILE: annotated.kt
}
public? final? fun bar(two: Two): kotlin/Unit {
lval <destruct>: <implicit> = two#
@Ann() lval x: <implicit> = component1(<destruct>#)
@Ann() lval y: <implicit> = component2(<destruct>#)
@Ann() lval x: <implicit> = <destruct>#.component1()
@Ann() lval y: <implicit> = <destruct>#.component2()
}
@@ -14,9 +14,9 @@ FILE: destructuring.kt
}
public? final? fun foo(some: Some): kotlin/Unit {
lval <destruct>: <implicit> = some#
lvar x: <implicit> = component1(<destruct>#)
lvar y: <implicit> = component2(<destruct>#)
lvar z: String = component3(<destruct>#)
lvar x: <implicit> = <destruct>#.component1()
lvar y: <implicit> = <destruct>#.component2()
lvar z: String = <destruct>#.component3()
lval <unary>: <implicit> = x#
x# = inc#(<unary>#)
<unary>#
@@ -39,8 +39,8 @@ FILE: for.kt
lval <iterator>: <implicit> = <range>#.iterator#()
while(<iterator>#.hasNext#()) {
lval <destruct>: <implicit> = <iterator>#.next#()
lval x: <implicit> = component1(<destruct>#)
lval y: <implicit> = component2(<destruct>#)
lval x: <implicit> = <destruct>#.component1()
lval y: <implicit> = <destruct>#.component2()
println#(plus#(String(x = ), x#, String( y = ), y#))
}
@@ -24,8 +24,8 @@ FILE: lambda.kt
use#(use@fun <implicit>.<anonymous>(<destruct>: <implicit>): <implicit> {
^ {
lval x: <implicit> = component1(<destruct>#)
lval y: <implicit> = component2(<destruct>#)
lval x: <implicit> = <destruct>#.component1()
lval y: <implicit> = <destruct>#.component2()
plus#(x#, y#)
}