-
-
-(*===-- Non-Externs -------------------------------------------------------===*)
-(* These functions are built using the externals, so must be declared late. *)
-
-let concat2 sep arr =
- let s = ref "" in
- if 0 < Array.length arr then begin
- s := !s ^ arr.(0);
- for i = 1 to (Array.length arr) - 1 do
- s := !s ^ sep ^ arr.(i)
- done
- end;
- !s
-
-let rec string_of_lltype ty =
- (* FIXME: stop infinite recursion! :) *)
- match classify_type ty with
- TypeKind.Integer -> "i" ^ string_of_int (integer_bitwidth ty)
- | TypeKind.Pointer ->
- (let ety = element_type ty in
- match classify_type ety with
- | TypeKind.Struct ->
- (match struct_name ety with
- | None -> (string_of_lltype ety)
- | Some s -> s) ^ "*"
- | _ -> (string_of_lltype (element_type ty)) ^ "*")
- | TypeKind.Struct ->
- let s = "{ " ^ (concat2 ", " (
- Array.map string_of_lltype (struct_element_types ty)
- )) ^ " }" in
- if is_packed ty
- then "<" ^ s ^ ">"
- else s
- | TypeKind.Array -> "[" ^ (string_of_int (array_length ty)) ^
- " x " ^ (string_of_lltype (element_type ty)) ^ "]"
- | TypeKind.Vector -> "<" ^ (string_of_int (vector_size ty)) ^
- " x " ^ (string_of_lltype (element_type ty)) ^ ">"
- | TypeKind.Function -> string_of_lltype (return_type ty) ^
- " (" ^ (concat2 ", " (
- Array.map string_of_lltype (param_types ty)
- )) ^ ")"
- | TypeKind.Label -> "label"
- | TypeKind.Ppc_fp128 -> "ppc_fp128"
- | TypeKind.Fp128 -> "fp128"
- | TypeKind.X86fp80 -> "x86_fp80"
- | TypeKind.Double -> "double"
- | TypeKind.Float -> "float"
- | TypeKind.Half -> "half"
- | TypeKind.Void -> "void"
- | TypeKind.Metadata -> "metadata"