Skip to content

Commit 9583287

Browse files
EmileTrotignonjonludlam
authored andcommitted
Lexer now in tail-rec style.
1 parent 27712c0 commit 9583287

File tree

2 files changed

+17
-16
lines changed

2 files changed

+17
-16
lines changed

src/lexer.mll

+11-13
Original file line numberDiff line numberDiff line change
@@ -293,13 +293,13 @@ rule reference_paren_content input start depth_paren depth_curly buffer = parse
293293
| ')'
294294
{
295295
buffer_add_lexeme buffer lexbuf ;
296-
if depth_paren = 0 then false
296+
if depth_paren = 0 then
297+
reference_content input start buffer lexbuf
297298
else
298-
( reference_paren_content input start (depth_paren - 1) depth_curly
299-
buffer lexbuf ) }
299+
reference_paren_content input start (depth_paren - 1) depth_curly
300+
buffer lexbuf }
300301
| '}'
301302
{
302-
buffer_add_lexeme buffer lexbuf ;
303303
if depth_curly = 0 then (
304304
warning
305305
input
@@ -308,13 +308,15 @@ rule reference_paren_content input start depth_paren depth_curly buffer = parse
308308
~what:"'}' (end of reference)"
309309
~in_what:(
310310
Printf.sprintf "'%s' (custom operator)"
311-
(Buffer.sub buffer 0 ((Buffer.length buffer) - 1)))) ;
312-
true )
311+
(Buffer.contents buffer ))) ;
312+
Buffer.contents buffer )
313313
else
314-
( reference_paren_content input start depth_paren (depth_curly - 1)
314+
(
315+
buffer_add_lexeme buffer lexbuf ;
316+
reference_paren_content input start depth_paren (depth_curly - 1)
315317
buffer lexbuf ) }
316318
| eof
317-
{ false }
319+
{ reference_content input start buffer lexbuf }
318320
| _
319321
{
320322
buffer_add_lexeme buffer lexbuf ;
@@ -328,11 +330,7 @@ and reference_content input start buffer = parse
328330
| '('
329331
{
330332
buffer_add_lexeme buffer lexbuf ;
331-
let ref_closed = reference_paren_content input start 0 0 buffer lexbuf in
332-
if ref_closed then
333-
Buffer.contents buffer
334-
else
335-
reference_content input start buffer lexbuf
333+
reference_paren_content input start 0 0 buffer lexbuf
336334
}
337335
| '"' [^ '"']* '"'
338336
{

test/test.ml

+6-3
Original file line numberDiff line numberDiff line change
@@ -1699,6 +1699,7 @@ let%expect_test _ =
16991699
(paragraph
17001700
(((f.ml (1 0) (1 9)) (simple ((f.ml (1 2) (1 9)) "(.*{})") ())))))))
17011701
(warnings ())) |}]
1702+
17021703
let quotes_with_dash =
17031704
test "{!\"my-name\"}";
17041705
[%expect
@@ -1726,13 +1727,15 @@ let%expect_test _ =
17261727
((output
17271728
(((f.ml (1 0) (1 8))
17281729
(paragraph
1729-
(((f.ml (1 0) (1 8)) (simple ((f.ml (1 2) (1 8)) "(.*()}") ())))))))
1730+
(((f.ml (1 0) (1 8)) (simple ((f.ml (1 2) (1 8)) "(.*()") ())))))))
17301731
(warnings
17311732
( "File \"f.ml\", line 1, characters 8-8:\
17321733
\n'}' (end of reference) is not allowed in '(.*()' (custom operator)."))) |}]
1734+
17331735
let operator_eof =
1734-
test "{!(.*()" ;
1735-
[%expect {|
1736+
test "{!(.*()";
1737+
[%expect
1738+
{|
17361739
((output
17371740
(((f.ml (1 0) (1 7))
17381741
(paragraph

0 commit comments

Comments
 (0)