Wrong treatment of 3 chars long patterns, when a range is specified.

git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@6373 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
master
Pierre Weis 2004-06-04 13:27:24 +00:00
parent e13fbb44fc
commit d29a2ec4df
1 changed files with 8 additions and 5 deletions

View File

@ -265,8 +265,9 @@ let check_char_in range ib =
(* Checking that [c] is indeed in the input, then skip it. *)
let check_char ib c =
let ci = Scanning.checked_peek_char ib in
if ci == c then Scanning.next_char ib else
bad_input (Printf.sprintf "looking for %C, found %C" c ci);;
if ci != c
then bad_input (Printf.sprintf "looking for %C, found %C" c ci)
else Scanning.next_char ib;;
(* Extracting tokens from ouput token buffer. *)
@ -662,7 +663,7 @@ let make_bv bit set =
if i <= lim then
match set.[i] with
| '-' when rp ->
(* if i = 0 then rp is false (since the initial call is loop false 0)
(* if i = 0 then rp is false (since the initial call is loop bit false 0)
hence i >= 1 and the following is safe. *)
let c1 = set.[i - 1] in
let i = i + 1 in
@ -697,6 +698,7 @@ let make_setp stp char_set =
(fun c -> if c == p1 || c == p2 then 1 else 0)
| 3 ->
let p1 = set.[0] and p2 = set.[1] and p3 = set.[2] in
if p2 = '-' then make_pred 1 set stp else
(fun c -> if c == p1 || c == p2 || c == p3 then 1 else 0)
| n -> make_pred 1 set stp
end
@ -711,6 +713,7 @@ let make_setp stp char_set =
(fun c -> if c != p1 && c != p2 then 1 else 0)
| 3 ->
let p1 = set.[0] and p2 = set.[1] and p3 = set.[2] in
if p2 = '-' then make_pred 0 set stp else
(fun c -> if c != p1 && c != p2 && c != p3 then 1 else 0)
| n -> make_pred 0 set stp
end;;
@ -783,14 +786,14 @@ let scan_chars_in_char_set stp char_set max ib =
| 0 -> loop (fun c -> 0) max
| 1 -> loop_pos1 set.[0] max
| 2 -> loop_pos2 set.[0] set.[1] max
| 3 -> loop_pos3 set.[0] set.[1] set.[2] max
| 3 when set.[1] != '-' -> loop_pos3 set.[0] set.[1] set.[2] max
| n -> loop (find_setp stp char_set) max end
| Neg_set set ->
begin match String.length set with
| 0 -> loop (fun c -> 1) max
| 1 -> loop_neg1 set.[0] max
| 2 -> loop_neg2 set.[0] set.[1] max
| 3 -> loop_neg3 set.[0] set.[1] set.[2] max
| 3 when set.[1] != '-' -> loop_neg3 set.[0] set.[1] set.[2] max
| n -> loop (find_setp stp char_set) max end in
if stp != [] then check_char_in stp ib;
max;;