X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=generator-lib%2Fwrappi_accumulator.ml;h=237bb0b79606ba2cf3e7190eba2be18f5f5e7756;hb=00e9ee626a00324c1808ab860f00f1a07c88ade8;hp=12549792adb24ffdf162ae5327c1450ba740484c;hpb=6964a24290a2d645b3155353e08750f37930146a;p=wrappi.git diff --git a/generator-lib/wrappi_accumulator.ml b/generator-lib/wrappi_accumulator.ml index 1254979..237bb0b 100644 --- a/generator-lib/wrappi_accumulator.ml +++ b/generator-lib/wrappi_accumulator.ml @@ -26,12 +26,12 @@ open Printf let check_not_defined name new_ map thing get_loc = try let old = StringMap.find name map in - eprintf "generator: %s %s redefined\n" thing name; + eprintf "generator: error: %s %s redefined\n" thing name; let old_loc = get_loc old in let new_loc = get_loc new_ in - eprintf " first definition at %s:%d\n" + eprintf " first definition at %s line %d\n" (Loc.file_name old_loc) (Loc.start_line old_loc); - eprintf " second definition at %s:%d\n" + eprintf " second definition at %s line %d\n" (Loc.file_name new_loc) (Loc.start_line new_loc); exit 1 with @@ -86,15 +86,23 @@ let rec resolve_typedefs thing name loc = function | TNullable t -> TNullable (resolve_typedefs thing name loc t) | TTypedef tname -> - try (StringMap.find tname !tds).td_type + try + let td = StringMap.find tname !tds in + let t = td.td_type in + (* The typedef may be a typedef, so we need to recursively + * resolve the type. + *) + resolve_typedefs "typedef" td.td_name td.td_loc t with Not_found -> - eprintf "generator: could not resolve typedef %s\n" tname; - eprintf " in definition of %s %s at %s:%d\n" + eprintf "generator: error: could not resolve typedef %s to a basic type\n" + tname; + eprintf " in definition of %s %s at %s line %d\n" thing name (Loc.file_name loc) (Loc.start_line loc); exit 1 let resolve_typedefs_in_ret thing name loc = function - | RErr as t -> t + | (RVoid + | RStaticString) as t -> t | Return t -> Return (resolve_typedefs thing name loc t) let get_api () = @@ -109,7 +117,11 @@ let get_api () = fun sd -> let fields = sd.sd_fields in let fields = - Array.map (resolve_typedefs "enum" sd.sd_name sd.sd_loc) fields in + Array.map ( + fun (name, t) -> + let t = resolve_typedefs "enum" sd.sd_name sd.sd_loc t in + (name, t) + ) fields in { sd with sd_fields = fields } ) sds in @@ -117,7 +129,11 @@ let get_api () = fun un -> let fields = un.un_fields in let fields = - Array.map (resolve_typedefs "union" un.un_name un.un_loc) fields in + Array.map ( + fun (name, t) -> + let t = resolve_typedefs "union" un.un_name un.un_loc t in + (name, t) + ) fields in { un with un_fields = fields } ) uns in