X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=bitstring_persistent.ml;h=032b2d82d7d2a3a52083d70a0b2c3e2a9138e5c6;hb=c5fb6aaecc4cc7fae8267123451b88fecaacc666;hp=c848e36a17e1f7e3541638b4c43f5dc43a4b5b3d;hpb=46d02767bf223661c05127d86878a74be0bda712;p=ocaml-bitstring.git diff --git a/bitstring_persistent.ml b/bitstring_persistent.ml index c848e36..032b2d8 100644 --- a/bitstring_persistent.ml +++ b/bitstring_persistent.ml @@ -1,4 +1,4 @@ -(* Bitmatch persistent patterns. +(* Bitstring persistent patterns. * Copyright (C) 2008 Red Hat Inc., Richard W.M. Jones * * This library is free software; you can redistribute it and/or @@ -46,7 +46,7 @@ type 'a field = { } and field_type = Int | String | Bitstring (* field type *) and endian_expr = - | ConstantEndian of Bitmatch.endian (* a constant little/big/nativeendian *) + | ConstantEndian of Bitstring.endian (* a constant little/big/nativeendian *) | EndianExpr of expr (* an endian expression *) type pattern = patt field list @@ -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 -> Bitmatch.string_of_endian endian - | EndianExpr _ -> "endian([expr])" in + | ConstantEndian endian -> Bitstring.string_of_endian endian + | 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 @@ -189,7 +185,7 @@ let create_pattern_field _loc = { field = <:patt< _ >>; flen = <:expr< 32 >>; - endian = ConstantEndian Bitmatch.BigEndian; + endian = ConstantEndian Bitstring.BigEndian; signed = false; t = Int; _loc = _loc; @@ -242,7 +238,7 @@ let create_constructor_field _loc = { field = <:expr< 0 >>; flen = <:expr< 32 >>; - endian = ConstantEndian Bitmatch.BigEndian; + endian = ConstantEndian Bitstring.BigEndian; signed = false; t = Int; _loc = _loc;