Skip to content

Commit f3e8b62

Browse files
committed
Tidy up StringScanner
1 parent d4a257e commit f3e8b62

File tree

1 file changed

+38
-45
lines changed

1 file changed

+38
-45
lines changed

lib/truffle/strscan.rb

Lines changed: 38 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -35,14 +35,25 @@
3535
# GNU Lesser General Public License version 2.1.
3636

3737

38-
class ScanError < StandardError; end
38+
class ScanError < StandardError
39+
end
3940

4041
class StringScanner
41-
Id = 'None$Id'.freeze
42-
Version = '1.0.0'.freeze
4342

4443
attr_reader :pos, :match, :prev_pos
4544

45+
def initialize(string, dup=false)
46+
if string.instance_of? String
47+
@original = string
48+
@string = string
49+
else
50+
@original = StringValue(string)
51+
@string = String.new @original
52+
end
53+
54+
reset_state
55+
end
56+
4657
def pos=(n)
4758
n = Integer(n)
4859

@@ -78,11 +89,11 @@ def charpos
7889
end
7990

8091
def check(pattern)
81-
_scan pattern, false, true, true
92+
scan_internal pattern, false, true, true
8293
end
8394

8495
def check_until(pattern)
85-
_scan pattern, false, true, false
96+
scan_internal pattern, false, true, false
8697
end
8798

8899
def clear
@@ -107,11 +118,22 @@ def eos?
107118
end
108119

109120
def exist?(pattern)
110-
_scan pattern, false, false, false
121+
scan_internal pattern, false, false, false
111122
end
112123

113124
def get_byte
114-
_get_byte
125+
if eos?
126+
@match = nil
127+
return nil
128+
end
129+
130+
# We need to match one byte, regardless of the string encoding
131+
@match = Truffle.invoke_primitive :regexp_search_from_binary, /./mn, @string, pos
132+
133+
@prev_pos = @pos
134+
@pos += 1
135+
136+
@string.byteslice(@prev_pos, 1)
115137
end
116138

117139
def getbyte
@@ -123,18 +145,6 @@ def getch
123145
scan(/./m)
124146
end
125147

126-
def initialize(string, dup=false)
127-
if string.instance_of? String
128-
@original = string
129-
@string = string
130-
else
131-
@original = StringValue(string)
132-
@string = String.new @original
133-
end
134-
135-
reset_state
136-
end
137-
138148
def inspect
139149
if defined? @string
140150
if eos?
@@ -167,7 +177,7 @@ def inspect
167177
end
168178

169179
def match?(pattern)
170-
_scan pattern, false, false, true
180+
scan_internal pattern, false, false, true
171181
end
172182

173183
def matched
@@ -228,31 +238,31 @@ def restsize
228238
end
229239

230240
def scan(pattern)
231-
_scan pattern, true, true, true
241+
scan_internal pattern, true, true, true
232242
end
233243

234244
def scan_until(pattern)
235-
_scan pattern, true, true, false
245+
scan_internal pattern, true, true, false
236246
end
237247

238248
def scan_full(pattern, advance_pos, getstr)
239-
_scan pattern, advance_pos, getstr, true
249+
scan_internal pattern, advance_pos, getstr, true
240250
end
241251

242252
def search_full(pattern, advance_pos, getstr)
243-
_scan pattern, advance_pos, getstr, false
253+
scan_internal pattern, advance_pos, getstr, false
244254
end
245255

246256
def self.must_C_version
247257
self
248258
end
249259

250260
def skip(pattern)
251-
_scan pattern, true, false, true
261+
scan_internal pattern, true, false, true
252262
end
253263

254264
def skip_until(pattern)
255-
_scan pattern, true, false, false
265+
scan_internal pattern, true, false, false
256266
end
257267

258268
def string
@@ -296,7 +306,7 @@ def peep(len)
296306
peek len
297307
end
298308

299-
def _scan(pattern, advance_pos, getstr, headonly)
309+
def scan_internal(pattern, advance_pos, getstr, headonly)
300310
unless pattern.kind_of? Regexp
301311
raise TypeError, "bad pattern argument: #{pattern.inspect}"
302312
end
@@ -319,30 +329,13 @@ def _scan(pattern, advance_pos, getstr, headonly)
319329
fin = @match.byte_end(0)
320330

321331
@prev_pos = @pos
322-
323332
@pos = fin if advance_pos
324333

325334
width = fin - @prev_pos
326-
327335
return width unless getstr
328336

329337
@string.byteslice(@prev_pos, width)
330338
end
331-
private :_scan
339+
private :scan_internal
332340

333-
def _get_byte
334-
if eos?
335-
@match = nil
336-
return nil
337-
end
338-
339-
# We need to match one byte, regardless of the string encoding
340-
@match = Truffle.invoke_primitive :regexp_search_from_binary, /./mn, @string, pos
341-
342-
@prev_pos = @pos
343-
@pos += 1
344-
345-
@string.byteslice(@prev_pos, 1)
346-
end
347-
private :_get_byte
348341
end

0 commit comments

Comments
 (0)