str strlen
v}
+ or:
+
+{v
+(* Load a persistent pattern from a file. *)
+open bitmatch "pascal.bmpp"
+
+let is_pascal_string bits =
+ bitmatch bits with
+ | \{ :pascal_string } ->
+ printf "matches a Pascal string %s, len %d bytes\n"
+ str strlen
+v}
+
{3 Important notes}
There are some important things you should know about
[bitmatch bits with { :name } -> ...]
- You can use named patterns within named patterns.
+ You can nest named patterns within named patterns to any depth.
Currently the use of named patterns is somewhat limited.
The restrictions are:
val string_of_pattern : pattern -> string
val string_of_constructor : constructor -> string
-val string_of_field : 'a field -> string
+val string_of_pattern_field : patt field -> string
+val string_of_constructor_field : expr field -> string
(** Convert patterns, constructors or individual fields
into printable strings for debugging purposes.
The pattern is unbound, the type is set to [int], bit length to [32],
endianness to [BigEndian], signedness to unsigned ([false]),
- and source code location to the [_loc] parameter.
+ source code location to the [_loc] parameter, and no offset expression.
To create a complete field you need to call the [set_*]
functions. For example, to create [{ len : 8 : int }]
(** Sets the source code location of a field. This is used when
pa_bitmatch displays error messages. *)
+val set_offset_int : 'a field -> int -> 'a field
+(** Set the offset expression for a field to the given number.
+
+ The effect is that the field [{ _ : 8 : offset(160) }] could
+ be created by calling [set_offset_int field 160]. *)
+
+val set_offset : 'a field -> expr -> 'a field
+(** Set the offset expression for a field to the given expression.
+
+ The effect is that the field [{ _ : 8 : offset(160) }] could
+ be created by calling [set_offset_int field <:expr< 160 >>]. *)
+
+val set_no_offset : 'a field -> 'a field
+(** Remove the offset expression from a field. The field will
+ follow the previous field, or if it is the first field will
+ be at offset zero. *)
+
(** {3 Create constructor fields}
These fields are used in constructors ([BITSTRING]). *)
val get_location : 'a field -> loc_t
(** Get the source code location of a field. *)
+
+val get_offset : 'a field -> expr option
+(** Get the offset expression of a field, or [None] if there is none. *)