| 34 |
) r in |
) r in |
| 35 |
(code,ret) |
(code,ret) |
| 36 |
|
|
| 37 |
|
let tail_string i j s q = |
| 38 |
|
if i + 1 = j then q else String (i + 1,j,s,q) |
| 39 |
|
let make_result_string i j s q r1 r2 (code,r) = |
| 40 |
|
let ret = Array.map |
| 41 |
|
(function |
| 42 |
|
| Catch -> String (i,j,s,q) |
| 43 |
|
| Const c -> const c |
| 44 |
|
| Left n -> if (n < 0) then Char (Chars.mk_char s.[i]) else r1.(n) |
| 45 |
|
| Right m -> if (m < 0) then tail_string i j s q else r2.(m) |
| 46 |
|
| Recompose (n,m) -> |
| 47 |
|
Pair ((if (n < 0) then Char (Chars.mk_char s.[i]) else r1.(n)), |
| 48 |
|
(if (m < 0) then tail_string i j s q else r2.(m))) |
| 49 |
|
) r in |
| 50 |
|
(code,ret) |
| 51 |
|
|
| 52 |
|
|
| 53 |
let rec run_disp_basic v f = function |
let rec run_disp_basic v f = function |
| 54 |
| [(_,r)] -> make_result_basic v r |
| [(_,r)] -> make_result_basic v r |
| 55 |
| (t,r)::rem -> if f t then make_result_basic v r else run_disp_basic v f rem |
| (t,r)::rem -> if f t then make_result_basic v r else run_disp_basic v f rem |
| 169 |
and run_disp_string2 r1 i j s q = function |
and run_disp_string2 r1 i j s q = function |
| 170 |
| Impossible -> assert false |
| Impossible -> assert false |
| 171 |
| Ignore r -> |
| Ignore r -> |
| 172 |
make_result_prod Absent (* *) r1 Absent dummy_r Absent r |
make_result_string i j s q r1 dummy_r r |
| 173 |
| TailCall d2 -> run_disp_string_loop i j s q d2 |
| TailCall d2 -> run_disp_string_loop i j s q d2 |
| 174 |
| Dispatch (d2,b2) -> |
| Dispatch (d2,b2) -> |
| 175 |
let (code2,r2) = run_disp_string_loop i j s q d2 in |
let (code2,r2) = run_disp_string_loop i j s q d2 in |
| 176 |
make_result_prod Absent (* *) r1 Absent r2 Absent b2.(code2) |
make_result_string i j s q r1 r2 b2.(code2) |
| 177 |
and run_disp_string_loop i j s q d = |
and run_disp_string_loop i j s q d = |
| 178 |
match actions d with |
match actions d with |
| 179 |
| AIgnore r -> make_result_basic Absent r |
| AIgnore r -> make_result_basic Absent r |