CallableReferenceLowering
This commit is contained in:
committed by
Anton Bannykh
parent
9812291364
commit
09a2c145a9
+8
-6
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.backend.js.lower
|
package org.jetbrains.kotlin.ir.backend.js.lower
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.FileLoweringPass
|
import org.jetbrains.kotlin.backend.common.BodyLoweringPass
|
||||||
import org.jetbrains.kotlin.backend.common.lower.BOUND_VALUE_PARAMETER
|
import org.jetbrains.kotlin.backend.common.lower.BOUND_VALUE_PARAMETER
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.ir.IrStatement
|
import org.jetbrains.kotlin.ir.IrStatement
|
||||||
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.ir.types.IrType
|
|||||||
import org.jetbrains.kotlin.ir.types.IrTypeProjection
|
import org.jetbrains.kotlin.ir.types.IrTypeProjection
|
||||||
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
||||||
import org.jetbrains.kotlin.ir.types.makeNullable
|
import org.jetbrains.kotlin.ir.types.makeNullable
|
||||||
|
import org.jetbrains.kotlin.ir.util.file
|
||||||
import org.jetbrains.kotlin.ir.util.isInlined
|
import org.jetbrains.kotlin.ir.util.isInlined
|
||||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||||
@@ -42,14 +43,15 @@ data class CallableReferenceKey(
|
|||||||
)
|
)
|
||||||
|
|
||||||
// TODO: generate $metadata$ property and fill it with corresponding KFunction/KProperty interface
|
// TODO: generate $metadata$ property and fill it with corresponding KFunction/KProperty interface
|
||||||
class CallableReferenceLowering(val context: JsIrBackendContext) : FileLoweringPass {
|
class CallableReferenceLowering(val context: JsIrBackendContext) : BodyLoweringPass {
|
||||||
private val callableToFactoryFunction = context.callableReferencesCache
|
private val callableToFactoryFunction = context.callableReferencesCache
|
||||||
private val newDeclarations = mutableListOf<IrDeclaration>()
|
private val newDeclarations = mutableListOf<IrDeclaration>()
|
||||||
private val implicitDeclarationFile = context.implicitDeclarationFile
|
private lateinit var implicitDeclarationFile: IrFile //= context.implicitDeclarationFile
|
||||||
|
|
||||||
override fun lower(irFile: IrFile) {
|
override fun lower(irBody: IrBody, container: IrDeclaration) {
|
||||||
newDeclarations.clear()
|
newDeclarations.clear()
|
||||||
irFile.transformChildrenVoid(CallableReferenceLowerTransformer())
|
implicitDeclarationFile = container.file // TODO
|
||||||
|
irBody.transformChildrenVoid(CallableReferenceLowerTransformer())
|
||||||
implicitDeclarationFile.declarations += newDeclarations
|
implicitDeclarationFile.declarations += newDeclarations
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -496,7 +498,7 @@ class CallableReferenceLowering(val context: JsIrBackendContext) : FileLoweringP
|
|||||||
|
|
||||||
closureFunction.valueParameters += unboundParamDeclarations
|
closureFunction.valueParameters += unboundParamDeclarations
|
||||||
|
|
||||||
val callTarget = context.mapping.defaultArgumentsDispatchFunction[declaration] ?: declaration
|
val callTarget = declaration
|
||||||
|
|
||||||
val target = callTarget.symbol
|
val target = callTarget.symbol
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user