@@ -36,6 +36,7 @@ type ecreader_r = {
3636 (* ---*) ecr_lexbuf : Lexing .lexbuf ;
3737 (* ---*) ecr_source : Buffer .t ;
3838 mutable ecr_atstart : bool ;
39+ mutable ecr_trim : int ;
3940 mutable ecr_tokens : EcParser .token list ;
4041}
4142
@@ -46,6 +47,7 @@ let ecreader_of_lexbuf (buffer : Buffer.t) (lexbuf : L.lexbuf) : ecreader_r =
4647 { ecr_lexbuf = lexbuf;
4748 ecr_source = buffer;
4849 ecr_atstart = true ;
50+ ecr_trim = 0 ;
4951 ecr_tokens = [] ; }
5052
5153(* -------------------------------------------------------------------- *)
@@ -102,8 +104,20 @@ let lexer ?(checkpoint : _ I.checkpoint option) (ecreader : ecreader_r) =
102104 | EcParser. FINAL _ -> true
103105 | _ -> false in
104106
105- if List. is_empty (ecreader.ecr_tokens) then
106- ecreader.ecr_tokens < - EcLexer. main lexbuf;
107+ if ecreader.ecr_atstart then
108+ ecreader.ecr_trim < - ecreader.ecr_lexbuf.Lexing. lex_curr_p.pos_cnum;
109+
110+ while List. is_empty (ecreader.ecr_tokens) do
111+ match EcLexer. main lexbuf with
112+ | [COMMENT ] ->
113+ if ecreader.ecr_atstart then
114+ ecreader.ecr_trim < - (Lexing. lexeme_end_p ecreader.ecr_lexbuf).pos_cnum
115+ | [DOCCOMMENT _] as tokens ->
116+ if ecreader.ecr_atstart then
117+ ecreader.ecr_tokens < - tokens
118+ | tokens ->
119+ ecreader.ecr_tokens < - tokens
120+ done ;
107121
108122 let token, queue = List. destruct ecreader.ecr_tokens in
109123
@@ -119,7 +133,16 @@ let lexer ?(checkpoint : _ I.checkpoint option) (ecreader : ecreader_r) =
119133 in
120134
121135 ecreader.ecr_tokens < - prequeue @ queue;
122- ecreader.ecr_atstart < - (isfinal token);
136+
137+ if isfinal token then
138+ ecreader.ecr_atstart < - true
139+ else
140+ ecreader.ecr_atstart < - ecreader.ecr_atstart && (
141+ match token with
142+ | P. DOCCOMMENT _ | P. COMMENT -> true
143+ | _ -> false
144+ );
145+
123146 (token, Lexing. lexeme_start_p lexbuf, Lexing. lexeme_end_p lexbuf)
124147
125148(* -------------------------------------------------------------------- *)
@@ -161,6 +184,7 @@ let xparse (ecreader : ecreader) : string * EcParsetree.prog =
161184 let p1 = ecr.ecr_lexbuf.Lexing. lex_curr_p.pos_cnum in
162185 let cd = parse ecreader in
163186 let p2 = ecr.ecr_lexbuf.Lexing. lex_curr_p.pos_cnum in
187+ let p1 = max p1 ecr.ecr_trim in
164188
165189 (Buffer. sub ecr.ecr_source p1 (p2 - p1), cd)
166190
0 commit comments