Skip to content

Commit 3b86748

Browse files
authored
Literals substring optimization (#130)
1 parent e1e2658 commit 3b86748

File tree

7 files changed

+374
-80
lines changed

7 files changed

+374
-80
lines changed

bench/bench.nim

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,66 @@ benchRelative(regex_ip_find_all, m):
163163
doAssert d == 5
164164
doNotOptimizeAway(d)
165165

166+
var sql_find_all_re = re.re"mysql://[^/\s?#]+[^\s?#]+(?:\?[^\s#]*)?(?:#[^\s]*)?"
167+
168+
bench(re_sql_find_all, m):
169+
var d = 0
170+
for i in 0 ..< m:
171+
for _ in re.findAll(bench_text, sql_find_all_re):
172+
d += 1
173+
doAssert d == 4
174+
doNotOptimizeAway(d)
175+
176+
const sql_find_all = regex.re2"mysql://[^/\s?#]+[^\s?#]+(?:\?[^\s#]*)?(?:#[^\s]*)?"
177+
178+
benchRelative(regex_sql_find_all, m):
179+
var d = 0
180+
for i in 0 ..< m:
181+
for _ in regex.findAll(bench_text, sql_find_all):
182+
d += 1
183+
doAssert d == 4
184+
doNotOptimizeAway(d)
185+
186+
var url_find_all_re = re.re"https?://[^/\s?#]+[^\s?#]+(?:\?[^\s#]*)?(?:#[^\s]*)?"
187+
188+
bench(re_url_find_all, m):
189+
var d = 0
190+
for i in 0 ..< m:
191+
for _ in re.findAll(bench_text, url_find_all_re):
192+
d += 1
193+
doAssert d == 5295
194+
doNotOptimizeAway(d)
195+
196+
const url_find_all = regex.re2"https?://[^/\s?#]+[^\s?#]+(?:\?[^\s#]*)?(?:#[^\s]*)?"
197+
198+
benchRelative(regex_url_find_all, m):
199+
var d = 0
200+
for i in 0 ..< m:
201+
for _ in regex.findAll(bench_text, url_find_all):
202+
d += 1
203+
doAssert d == 5295
204+
doNotOptimizeAway(d)
205+
206+
var unicode_find_all_re = re.re"\smůžete\s"
207+
208+
bench(re_unicode_find_all, m):
209+
var d = 0
210+
for i in 0 ..< m:
211+
for _ in re.findAll(bench_text, unicode_find_all_re):
212+
d += 1
213+
doAssert d == 25
214+
doNotOptimizeAway(d)
215+
216+
const unicode_find_all = regex.re2"\smůžete\s"
217+
218+
benchRelative(regex_unicode_find_all, m):
219+
var d = 0
220+
for i in 0 ..< m:
221+
for _ in regex.findAll(bench_text, unicode_find_all):
222+
d += 1
223+
doAssert d == 25
224+
doNotOptimizeAway(d)
225+
166226
when true:
167227
bench(runes, m):
168228
var d = 0

src/regex/compiler.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ func reImpl*(s: string): Regex {.inline.} =
1313
.parse
1414
.transformExp(groups)
1515
let nfa = rpn.nfa2()
16-
let opt = rpn.litopt2()
16+
let opt = rpn.litopt3()
1717
result = Regex(
1818
nfa: nfa,
1919
groupsCount: groups.count,

0 commit comments

Comments
 (0)