Rename test programs so the name is a valid OCaml module name.
[ocaml-bitstring.git] / bitstring_persistent.ml
index c848e36..032b2d8 100644 (file)
@@ -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;