我正在使用llvmlite与Pyvex结合使用我的项目。我在llvmlite中定义了一些函数,如下所示:
def int32(val):
return ir.Constant(ir.IntType(32), val)
def put64(putoffset, val):
llvmtmp = builder.gep(regtag, (int32(0), int32(putoffset)), True)
return builder.store(val, llvmtmp)
但是,当我想使用以下代码调用此函数时:
for stmt in irsb.statements:
if isinstance(stmt, pyvex.IRStmt.Put):
putoffset = stmt.offset
put64("t3", putoffset)
我遇到错误:AttributeError:' int'对象没有属性'键入'
有谁知道如何解决这个问题?
答案 0 :(得分:1)
我做了一点挖掘。问题出现在这一行
您return ir.Constant(ir.IntType(32), val)
函数中的 int32()
。
常量在llvmlite中定义:
Constant(typ, constant)
typ 是所表示的值的类型
(a:class:~llvmlite.ir.Type
实例)。 常量是Python
要表示的价值。 常量允许使用哪些Python类型
常量允许哪些Python类型取决于typ。
您只需将int
和string
作为val
传递,而不是传入Python类型。试着把type()
放在它周围。
return ir.Constant(ir.IntType(32), type(val))
希望这有帮助
答案 1 :(得分:0)
我理解这个问题。实际上问题是我们将字符串传递给函数但它需要是一个llvmlite对象。因此python抱怨字符串没有属性类型。传递llvmlite对象,问题就解决了。