Add signed int extract and construction functions, and test.
[ocaml-bitstring.git] / pa_bitstring.ml
index 58fe1ed..a5f7c46 100644 (file)
@@ -623,7 +623,7 @@ let output_bitmatch _loc bs cases =
             * be known at runtime) but we may be able to directly access
             * the bytes in the string.
             *)
-         | P.Int, Some 8, Some field_byte_offset, _, _ ->
+         | P.Int, Some 8, Some field_byte_offset, _, signed ->
              let extract_fn = int_extract_const 8 endian signed in
 
               (* The fast-path code when everything is aligned. *)
@@ -631,13 +631,13 @@ let output_bitmatch _loc bs cases =
                <:expr<
                   let o =
                    ($lid:original_off$ lsr 3) + $`int:field_byte_offset$ in
-                  Char.code (String.unsafe_get $lid:data$ o)              
+                  Bitstring.char_code (String.unsafe_get $lid:data$ o)              
                 >> in
 
               <:expr<
                if $lid:len$ >= 8 then (
                   let v =
-                    if $lid:off_aligned$ then
+                    if not $`bool:signed$ && $lid:off_aligned$ then
                       $fastpath$
                     else
                       $extract_fn$ $lid:data$ $lid:off$ $lid:len$ 8 in
@@ -668,7 +668,7 @@ let output_bitmatch _loc bs cases =
                  | 32 ->
                      <:expr<
                        (* must allocate a new zero each time *)
-                       let zero = Int32.of_int 0 in
+                       let zero = Bitstring.int32_of_int 0 in
                        Bitstring.$lid:name$ $lid:data$ o zero
                      >>
                  | 64 ->