e1f6c19c83
- Mangle names for extension receivers in lambdas - Correctly mark anonymous variables and variables for arguments for destructuring declaration. There is one failure remaining which is cause by lambda type inference differences that leads to FIR having an explicit return from the lambda whereas old frontend leads to an implicit return. This difference is visible in debug stepping that the local variables tests do because the implicit return has the line number of the closing brace of the lambda. This change adds an IrText test to make the difference clear.
47 lines
768 B
Plaintext
Vendored
47 lines
768 B
Plaintext
Vendored
object A {
|
|
private constructor() /* primary */ {
|
|
super/*Any*/()
|
|
/* <init>() */
|
|
|
|
}
|
|
|
|
}
|
|
|
|
object B {
|
|
private constructor() /* primary */ {
|
|
super/*Any*/()
|
|
/* <init>() */
|
|
|
|
}
|
|
|
|
}
|
|
|
|
interface IFoo {
|
|
val A.foo: B
|
|
get(): B {
|
|
return B
|
|
}
|
|
|
|
}
|
|
|
|
interface IInvoke {
|
|
operator fun B.invoke(): Int {
|
|
return 42
|
|
}
|
|
|
|
}
|
|
|
|
fun test(fooImpl: IFoo, invokeImpl: IInvoke) {
|
|
with<A, Int>(receiver = A, block = local fun A.<anonymous>(): Int {
|
|
return with<IFoo, Int>(receiver = fooImpl, block = local fun IFoo.<anonymous>(): Int {
|
|
return with<IInvoke, Int>(receiver = invokeImpl, block = local fun IInvoke.<anonymous>(): Int {
|
|
return ($this$with, ($this$with, $this$with).<get-foo>()).invoke()
|
|
}
|
|
)
|
|
}
|
|
)
|
|
}
|
|
) /*~> Unit */
|
|
}
|
|
|