summaryrefslogtreecommitdiffstats
path: root/stdlib/lexing.ml
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/lexing.ml')
-rw-r--r--stdlib/lexing.ml24
1 files changed, 11 insertions, 13 deletions
diff --git a/stdlib/lexing.ml b/stdlib/lexing.ml
index b1c57db20..810022e27 100644
--- a/stdlib/lexing.ml
+++ b/stdlib/lexing.ml
@@ -33,15 +33,13 @@ type lex_tables =
external engine: lex_tables -> int -> lexbuf -> int = "lex_engine"
-let lex_aux_buffer = String.create 1024
-
-let lex_refill read_fun lexbuf =
+let lex_refill read_fun aux_buffer lexbuf =
let read =
- read_fun lex_aux_buffer 1024 in
+ read_fun aux_buffer (String.length aux_buffer) in
let n =
if read > 0
then read
- else (String.unsafe_set lex_aux_buffer 0 '\000'; 1) in
+ else (String.unsafe_set aux_buffer 0 '\000'; 1) in
if lexbuf.lex_start_pos < n then begin
let oldlen = lexbuf.lex_buffer_len in
let newlen = oldlen * 2 in
@@ -57,7 +55,7 @@ let lex_refill read_fun lexbuf =
String.unsafe_blit lexbuf.lex_buffer n
lexbuf.lex_buffer 0
(lexbuf.lex_buffer_len - n);
- String.unsafe_blit lex_aux_buffer 0
+ String.unsafe_blit aux_buffer 0
lexbuf.lex_buffer (lexbuf.lex_buffer_len - n)
n;
lexbuf.lex_abs_pos <- lexbuf.lex_abs_pos + n;
@@ -66,13 +64,13 @@ let lex_refill read_fun lexbuf =
lexbuf.lex_last_pos <- lexbuf.lex_last_pos - n
let from_function f =
- { refill_buff = lex_refill f;
- lex_buffer = String.create 2048;
- lex_buffer_len = 2048;
- lex_abs_pos = - 2048;
- lex_start_pos = 2048;
- lex_curr_pos = 2048;
- lex_last_pos = 2048;
+ { refill_buff = lex_refill f (String.create 512);
+ lex_buffer = String.create 1024;
+ lex_buffer_len = 1024;
+ lex_abs_pos = - 1024;
+ lex_start_pos = 1024;
+ lex_curr_pos = 1024;
+ lex_last_pos = 1024;
lex_saved_state = -1;
lex_last_action = 0 }