X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=bitstring_persistent.ml;h=032b2d82d7d2a3a52083d70a0b2c3e2a9138e5c6;hb=c5fb6aaecc4cc7fae8267123451b88fecaacc666;hp=6177b1d3d60542b09dbd915e25c92e51721dc8e6;hpb=0fb4b24ebe3b85c935786f8e3e472d0d2292744e;p=ocaml-bitstring.git diff --git a/bitstring_persistent.ml b/bitstring_persistent.ml index 6177b1d..032b2d8 100644 --- a/bitstring_persistent.ml +++ b/bitstring_persistent.ml @@ -104,44 +104,40 @@ let patt_printer = function | <:patt< _ >> -> "_" | _ -> "[pattern]" -let expr_printer = function +let rec expr_printer = function | <:expr< $lid:id$ >> -> id | <:expr< $int:i$ >> -> i - | _ -> "[expression]" + | <:expr< $lid:op$ $a$ $b$ >> -> + sprintf "%s %s %s" op (expr_printer a) (expr_printer b) + | _ -> "[expr]" let _string_of_field { flen = flen; endian = endian; signed = signed; t = t; _loc = _loc; offset = offset; check = check; bind = bind; save_offset_to = save_offset_to } = - let flen = - match expr_is_constant flen with - | Some i -> string_of_int i - | None -> "[non-const-len]" in + let flen = expr_printer flen in let endian = match endian with | ConstantEndian endian -> Bitstring.string_of_endian endian - | EndianExpr _ -> "endian([expr])" in + | EndianExpr expr -> sprintf "endian(%s)" (expr_printer expr) in let signed = if signed then "signed" else "unsigned" in let t = string_of_field_type t in let offset = match offset with | None -> "" - | Some expr -> - match expr_is_constant expr with - | Some i -> sprintf ", offset(%d)" i - | None -> sprintf ", offset([expr])" in + | Some expr -> sprintf ", offset(%s)" (expr_printer expr) in let check = match check with | None -> "" - | Some expr -> sprintf ", check([expr])" in + | Some expr -> sprintf ", check(%s)" (expr_printer expr) in let bind = match bind with | None -> "" - | Some expr -> sprintf ", bind([expr])" in + | Some expr -> sprintf ", bind(%s)" (expr_printer expr) in let save_offset_to = match save_offset_to with