- );
-
- (* Default endianness, signedness, type. *)
- let endian =
- match endian with None -> ConstantEndian BigEndian | Some e -> e in
- let signed = match signed with None -> false | Some s -> s in
- let t = match t with None -> Int | Some t -> t in
-
- {
- field = field;
- flen = flen;
- endian = endian;
- signed = signed;
- t = t;
- _loc = _loc;
- printer = printer;
- }
-
-let string_of_t = function
- | Int -> "int"
- | String -> "string"
- | Bitstring -> "bitstring"
-
-let patt_printer = function
- | <:patt< $lid:id$ >> -> id
- | _ -> "[pattern]"
-
-let expr_printer = function
- | <:expr< $lid:id$ >> -> id
- | _ -> "[expression]"
-
-let string_of_field { field = field; flen = flen;
- endian = endian; signed = signed; t = t;
- _loc = _loc;
- printer = printer} =
- let flen =
- match expr_is_constant flen with
- | Some i -> string_of_int i
- | None -> "[non-const-len]" in
- let endian =
- match endian with
- | ConstantEndian endian -> string_of_endian endian
- | EndianExpr _ -> "endian [expr]" in
- let signed = if signed then "signed" else "unsigned" in
- let t = string_of_t t in
- let loc_fname = Loc.file_name _loc in
- let loc_line = Loc.start_line _loc in
- let loc_char = Loc.start_off _loc - Loc.start_bol _loc in