Skip to content

Commit e82052e

Browse files
committed
Remove scanner rdOffset
This actually slows this down for a tiiiny bit because of the extra addition in `next` and `peek`... but not significant regression
1 parent 29418f0 commit e82052e

File tree

5 files changed

+10
-23
lines changed

5 files changed

+10
-23
lines changed

syntax/src/res_core.ml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2381,7 +2381,6 @@ and parseAttributesAndBinding (p : Parser.t) =
23812381
let err = p.scanner.err in
23822382
let ch = p.scanner.ch in
23832383
let offset = p.scanner.offset in
2384-
let rdOffset = p.scanner.rdOffset in
23852384
let lineOffset = p.scanner.lineOffset in
23862385
let lnum = p.scanner.lnum in
23872386
let mode = p.scanner.mode in
@@ -2404,7 +2403,6 @@ and parseAttributesAndBinding (p : Parser.t) =
24042403
p.scanner.err <- err;
24052404
p.scanner.ch <- ch;
24062405
p.scanner.offset <- offset;
2407-
p.scanner.rdOffset <- rdOffset;
24082406
p.scanner.lineOffset <- lineOffset;
24092407
p.scanner.lnum <- lnum;
24102408
p.scanner.mode <- mode;

syntax/src/res_parser.ml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,6 @@ let lookahead p callback =
128128
let err = p.scanner.err in
129129
let ch = p.scanner.ch in
130130
let offset = p.scanner.offset in
131-
let rdOffset = p.scanner.rdOffset in
132131
let lineOffset = p.scanner.lineOffset in
133132
let lnum = p.scanner.lnum in
134133
let mode = p.scanner.mode in
@@ -146,7 +145,6 @@ let lookahead p callback =
146145
p.scanner.err <- err;
147146
p.scanner.ch <- ch;
148147
p.scanner.offset <- offset;
149-
p.scanner.rdOffset <- rdOffset;
150148
p.scanner.lineOffset <- lineOffset;
151149
p.scanner.lnum <- lnum;
152150
p.scanner.mode <- mode;

syntax/src/res_scanner.ml

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ type t = {
2121
-> unit;
2222
mutable ch: charEncoding; (* current character *)
2323
mutable offset: int; (* character offset *)
24-
mutable rdOffset: int; (* reading offset (position after current character) *)
2524
mutable lineOffset: int; (* current line offset *)
2625
mutable lnum: int; (* current line number *)
2726
mutable mode: mode list;
@@ -84,11 +83,9 @@ let _printDebug ~startPos scanner token =
8483
[@@live]
8584

8685
let next scanner =
87-
if scanner.rdOffset < String.length scanner.src then (
88-
scanner.offset <- scanner.rdOffset;
89-
let ch = String.unsafe_get scanner.src scanner.rdOffset in
90-
scanner.rdOffset <- scanner.rdOffset + 1;
91-
scanner.ch <- ch
86+
if scanner.offset + 1 < String.length scanner.src then (
87+
scanner.offset <- scanner.offset + 1;
88+
scanner.ch <- String.unsafe_get scanner.src scanner.offset
9289
) else (
9390
scanner.offset <- String.length scanner.src;
9491
scanner.ch <- hackyEOFChar
@@ -104,31 +101,28 @@ let next3 scanner =
104101
next scanner
105102

106103
let peek scanner =
107-
if scanner.rdOffset < String.length scanner.src then
108-
String.unsafe_get scanner.src scanner.rdOffset
104+
if scanner.offset + 1 < String.length scanner.src then
105+
String.unsafe_get scanner.src (scanner.offset + 1)
109106
else
110107
hackyEOFChar
111108

112109
let peek2 scanner =
113-
if scanner.rdOffset + 1 < String.length scanner.src then
114-
String.unsafe_get scanner.src (scanner.rdOffset + 1)
110+
if scanner.offset + 2 < String.length scanner.src then
111+
String.unsafe_get scanner.src (scanner.offset + 2)
115112
else
116113
hackyEOFChar
117114

118115
let make ?(line=1) ~filename src =
119-
let scanner = {
116+
{
120117
filename;
121118
src = src;
122119
err = (fun ~startPos:_ ~endPos:_ _ -> ());
123-
ch = ' ';
120+
ch = if src = "" then hackyEOFChar else String.unsafe_get src 0;
124121
offset = 0;
125-
rdOffset = 0;
126122
lineOffset = 0;
127123
lnum = line;
128124
mode = [];
129-
} in
130-
next scanner;
131-
scanner
125+
}
132126

133127
let skipWhitespace scanner =
134128
let rec scan () =

syntax/src/res_scanner.mli

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ type t = {
1212
-> unit;
1313
mutable ch: charEncoding; (* current character *)
1414
mutable offset: int; (* character offset *)
15-
mutable rdOffset: int; (* reading offset (position after current character) *)
1615
mutable lineOffset: int; (* current line offset *)
1716
mutable lnum: int; (* current line number *)
1817
mutable mode: mode list;

syntax/tests/res_test.ml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,6 @@ module ParserApiTest = struct
183183
assert (parser.scanner.lnum == 1);
184184
assert (parser.scanner.lineOffset == 0);
185185
assert (parser.scanner.offset == 6);
186-
assert (parser.scanner.rdOffset == 7);
187186
assert (parser.token = Res_token.Let);
188187
print_endline "✅ Parser make: initializes parser defaulting to line 1 "
189188

@@ -193,7 +192,6 @@ module ParserApiTest = struct
193192
assert (parser.scanner.lnum == 2);
194193
assert (parser.scanner.lineOffset == 0);
195194
assert (parser.scanner.offset == 3);
196-
assert (parser.scanner.rdOffset == 4);
197195
assert (parser.token = Res_token.Let);
198196
print_endline "✅ Parser make: initializes parser with line set to 2"
199197

0 commit comments

Comments
 (0)