ORC and stdlib optimizations (#15362)

This commit is contained in:
Andreas Rumpf 2020-09-19 00:27:43 +02:00 • committed by GitHub
commit 9a34009f00
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 45 additions and 29 deletions

View file

@ -310,6 +310,10 @@ proc skipWhile*(s: string, toSkip: set[char], start = 0): int {.inline.} =
result = 0
while start+result < s.len and s[result+start] in toSkip: inc(result)
proc fastSubstr(s: string; token: var string; start, length: int) =
token.setLen length
for i in 0 ..< length: token[i] = s[i+start]
proc parseUntil*(s: string, token: var string, until: set[char],
start = 0): int {.inline.} =
## Parses a token and stores it in ``token``. Returns
@ -326,7 +330,8 @@ proc parseUntil*(s: string, token: var string, until: set[char],
var i = start
while i < s.len and s[i] notin until: inc(i)
result = i-start
token = substr(s, start, i-1)
fastSubstr(s, token, start, result)
#token = substr(s, start, i-1)
proc parseUntil*(s: string, token: var string, until: char,
start = 0): int {.inline.} =
@ -344,7 +349,8 @@ proc parseUntil*(s: string, token: var string, until: char,
var i = start
while i < s.len and s[i] != until: inc(i)
result = i-start
token = substr(s, start, i-1)
fastSubstr(s, token, start, result)
#token = substr(s, start, i-1)
proc parseUntil*(s: string, token: var string, until: string,
start = 0): int {.inline.} =
@ -370,7 +376,8 @@ proc parseUntil*(s: string, token: var string, until: string,
if u >= until.len: break
inc(i)
result = i-start
token = substr(s, start, i-1)
fastSubstr(s, token, start, result)
#token = substr(s, start, i-1)
proc parseWhile*(s: string, token: var string, validChars: set[char],
start = 0): int {.inline.} =
@ -386,7 +393,8 @@ proc parseWhile*(s: string, token: var string, validChars: set[char],
var i = start
while i < s.len and s[i] in validChars: inc(i)
result = i-start
token = substr(s, start, i-1)
fastSubstr(s, token, start, result)
#token = substr(s, start, i-1)
proc captureBetween*(s: string, first: char, second = '\0', start = 0): string =
## Finds the first occurrence of ``first``, then returns everything from there