LLVM:通过OCaml绑定定义新类型

时间:2014-07-29 19:51:31

标签: ocaml llvm llvm-ir

我使用LLVM OCaml绑定为无类型语言构建编译器。不幸的是,我唯一的参考资料是llvm.mli来源。

所以,我尝试按如下方式声明value_t

let llar = [| i64_type;
              array_type i8_type 10;
              vector_type i64_type 10 |] in
let value_t = struct_type llar in
declare_global value_t "value_t" the_module

在我生成函数之前。发出的是:

@value_t = external global { i64, [10 x i8], <10 x i64> }

为了稍后引用它,我尝试使用type_by_name,但没有匹配;如果我使用lookup_global,我会得到llvalue而不是lltype(我该如何处理它?)。我想我真正想要的是:

@value_t = type { i64, [10 x i8], <10 x i64> }

希望我能够type_by_name使用此功能。关于如何生成这个的任何提示?

1 个答案:

答案 0 :(得分:0)

您需要的功能是named_struct_typestruct_set_body

let llvalue_t = named_struct_type context "value_t" in
struct_set_body llvalue_t llar false