将字符串转换为 lltype 以便利用 struct_set_body?

Converting string to lltype in order to utilize struct_set_body?

我正在尝试生成 LLVM ir,目前有这个

let fill_structs = StringMap.iter (fun k v -> L.struct_set_body k v false ) structs 
(* more let...in statements *)

我收到的错误消息是关于我传递给 L.struct_set_body

的 'k'
StringMap.key
This expression has type string but an expression was expected of type
  L.lltype

我对ocaml的理解很薄弱,所以我从here看到struct_set_body是这样做的

lltype -> lltype array -> bool -> unit

我假设这意味着它需要一个 lltype 数组和一个布尔值,以及 returns 单位?我不知道,我在考虑 C 或 Java 中的函数签名的方式,但我认为我不应该这样考虑。

另一件事是我不知道如何将我的字符串 'k' 变成一个 lltype 来完成我想做的事情。

Which I assume means it takes a lltype array and a boolean, and returns unit?

关闭,但需要另一个参数。它采用的第一个参数是 Llvm.lltype 类型。 Stringmap.iter 的签名意味着 kstring,但将其传递给 Llvm.struct_set_body 会导致类型不匹配。

您需要将 string 值映射到 Llvm.lltype 值的东西。

正如@glennsl 在评论中建议的那样,执行此操作的最佳人选是 named_struct_type,其类型为 llcontext -> string -> lltype.

您一直在问很多关于 OCaml 的非常基本的问题,这表明您需要做一些更多的介绍性工作。这里没有人会怀疑您正在投入的精力,但您的学习过程几乎可以肯定是“运行 才能走路”让您真正成功。当您尝试使用复杂模块时,无法正确读取 OCaml 类型等问题只会让您感到沮丧。