IR: declaration builders for receiver parameters

This commit is contained in:
Georgy Bronnikov
2019-04-15 00:59:15 +03:00
parent ad70a68671
commit 98d309d03b
@@ -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(