fix detection of eof reaching when using camlp4

This commit is contained in:
Jérémie Dimino 2013-03-09 19:15:14 +00:00
parent 5123624b63
commit 7e7116ca9d
1 changed files with 9 additions and 9 deletions

View File

@ -50,17 +50,17 @@ let parse_toplevel_phrase_camlp4 str eos_is_error =
Register.iter_and_take_callbacks (fun (_, f) -> f ()); Register.iter_and_take_callbacks (fun (_, f) -> f ());
let eof = ref false in let eof = ref false in
try try
let token_stream = Gram.filter (Gram.lex_string (Loc.mk UTop.input_name) str) in let len = String.length str in
let token_stream = let char_stream =
Stream.from Stream.from
(fun _ -> (fun i ->
match Stream.next token_stream with if i >= len then begin
| (EOI, _) as x -> eof := true;
eof := true; None
Some x end else
| x -> Some str.[i])
Some x)
in in
let token_stream = Gram.filter (Gram.lex (Loc.mk UTop.input_name) char_stream) in
match Gram.parse_tokens_after_filter Syntax.top_phrase token_stream with match Gram.parse_tokens_after_filter Syntax.top_phrase token_stream with
| Some ast -> | Some ast ->
let ast = AstFilters.fold_topphrase_filters (fun t filter -> filter t) ast in let ast = AstFilters.fold_topphrase_filters (fun t filter -> filter t) ast in