From 98d309d03bc575ded3d6bbc218c36d84e85a6049 Mon Sep 17 00:00:00 2001 From: Georgy Bronnikov Date: Mon, 15 Apr 2019 00:59:15 +0300 Subject: [PATCH] IR: declaration builders for receiver parameters --- .../declarations/declarationBuilders.kt | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt index 07849547d11..c59cffe6a21 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/ir/builders/declarations/declarationBuilders.kt @@ -81,6 +81,26 @@ inline fun IrDeclarationContainer.addProperty(b: IrPropertyBuilder.() -> Unit): property.parent = this@addProperty } +inline fun IrProperty.addGetter(b: IrFunctionBuilder.() -> Unit = {}): IrSimpleFunction = + IrFunctionBuilder().run { + name = Name.special("") + b() + buildFun().also { getter -> + this@addGetter.getter = getter + getter.parent = this@addGetter.parent + } + } + +inline fun IrProperty.addSetter(b: IrFunctionBuilder.() -> Unit = {}): IrSimpleFunction = + IrFunctionBuilder().run { + name = Name.special("") + b() + buildFun().also { setter -> + this@addSetter.setter = setter + setter.parent = this@addSetter.parent + } + } + fun IrFunctionBuilder.buildFun(): IrSimpleFunction { val wrappedDescriptor = WrappedSimpleFunctionDescriptor() return IrFunctionImpl( @@ -185,6 +205,34 @@ fun IrFunction.addValueParameter(name: String, type: IrType, origin: IrDeclarati this.origin = origin } +inline fun IrSimpleFunction.addDispatchReceiver(b: IrValueParameterBuilder.() -> Unit): IrValueParameter = + IrValueParameterBuilder().run { + b() + index = -1 + name = "this".synthesizedName + build().also { receiver -> + dispatchReceiverParameter = receiver + receiver.parent = this@addDispatchReceiver + } + } + +inline fun IrSimpleFunction.addExtensionReceiver(b: IrValueParameterBuilder.() -> Unit): IrValueParameter = + IrValueParameterBuilder().run { + b() + index = -1 + name = "receiver".synthesizedName + build().also { receiver -> + extensionReceiverParameter = receiver + receiver.parent = this@addExtensionReceiver + } + } + +fun IrSimpleFunction.addExtensionReceiver(type: IrType, origin: IrDeclarationOrigin = IrDeclarationOrigin.DEFINED ): IrValueParameter = + addExtensionReceiver { + this.type = type + this.origin = origin + } + fun IrTypeParameterBuilder.build(): IrTypeParameter { val wrappedDescriptor = WrappedTypeParameterDescriptor() return IrTypeParameterImpl(