我正在尝试将全局变量作为参数传递给函数,并在函数内部修改此变量
我的IR代码如下
interface Control {
var id: String?
var width: Number?
var height: Number?
fun toMap() = mutableMapOf("id" to id, "width" to width, "height" to height) as MutableMap<String, Any>
}
class ControlImpl() : Control {
override var id: String? = "Hello World!"
override var width: Number? = 314159
override var height: Number? = 271
}
class TextBoxControl {
var id: String? = null
var width: Number? = null
var height: Number? = null
var text: String? = null
// this could also be a static function called `createTextBoxControlFromMap`, non-static function, or thrown into an apply block or generic extension function
operator fun invoke(map: Map<String, Any>) : TextBoxControl {
for((k, v) in map) {
val f = this::class.java.getDeclaredField(k)
f.setAccessible(true)
f.set(this, v)
}
return this;
}
}
fun buildTextBoxControl(dataFromDb: String, options: Control) : TextBoxControl {
return TextBoxControl()(options.toMap().apply {
put("text", dataFromDb)
})
}
fun main() {
var control = buildTextBoxControl("String", ControlImpl().apply {
id = "id"
width = 42
height = 42
})
println(control)
}
readln在单独的模块中定义为C函数
@n = common global i32 0
declare i32 @readln(i32)
declare i32 @writeln(i32)
define i32 @main() {
entry:
%n = load i32, i32* @n, align 4
%calltmp = call i32 @readln(i32 %n)
%n1 = load i32, i32* @n, align 4
%calltmp2 = call i32 @writeln(i32 %n1)
ret i32 0
}
运行时,我得到int readln(int * x) {
return scanf("%d", x);
}
我在做什么错了?
答案 0 :(得分:0)
评论正确。以此为灵感
Builder.CreateLoad(Builder.CreateIntToPtr(Value,Type::getInt32PtrTy(TheContext)), "ptr");
Builder.CreateIntToPtr(Value,Type::getInt32PtrTy(TheContext));