IR: declaration builders for receiver parameters
This commit is contained in:
+48
@@ -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("<get-${this@addGetter.name}>")
|
||||
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("<set-${this@addSetter.name}>")
|
||||
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(
|
||||
|
||||
Reference in New Issue
Block a user