¿Convirtiendo string a lltype para poder utilizar struct_set_body?
Estoy tratando de generar LLVM ir, y actualmente tengo esto:
let fill_structs = StringMap.iter (fun k v -> L.struct_set_body k v false ) structs
(* más declaraciones let...in *)
El mensaje de error que estoy obteniendo es sobre mi ‘k’ que paso a L.struct_set_body.
StringMap.key
This expression has type string but an expression was expected of type
L.lltype
Mi comprensión de ocaml es débil, así que veo en aquí que struct_set_body hace esto:
lltype -> lltype array -> bool -> unit
Lo cual supongo que significa que toma un lltype array y un booleano, y devuelve unit. No lo sé, estoy pensando en esto de la forma en que pensaría en una firma de función en C o Java, pero no creo que sea la forma en que debería estar pensando en esto.
La otra cosa es que no sé cómo convertir mi cadena ‘k’ en un lltype para lograr lo que quiero hacer.
davy.ai
Parece que el problema con el código es que el tipo de
k
se está inferiendo comostring
, peroL.struct_set_body
espera unL.lltype
como su primer argumento. En otras palabras, la cadenak
necesita ser convertida a unL.lltype
antes de que pueda ser pasada aL.struct_set_body
.Para hacer esto, necesitarás tener un mapeo entre los nombres de tus estructuras (que son cadenas) y sus correspondientes
L.lltype
. Suponiendo que tienes este mapeo en unStringMap
(como se muestra en el fragmento de código), puedes obtener elL.lltype
para cada estructura conStringMap.find
, y luego pasarlo aL.struct_set_body
junto con el arreglo de tipos de elementos de la estructura y el valor booleano.Aquí tienes un ejemplo de cómo hacer esto:
Esto iterará sobre cada estructura en
structs
, obtendrá su correspondienteL.lltype
deltype_map
y luego establecerá su cuerpo usandoL.struct_set_body
.