make var string return var char w/ BackwardsIndex (#15461)

* make var string return var char w/ BackwardsIndex

fixes #14497

* work around VM bug
* properly workaround again
This commit is contained in:
hlaaftana 2020-11-12 13:44:21 +03:00 • committed by GitHub
commit 527e792827
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 3 deletions

View file

@ -69,7 +69,7 @@ proc addNormalizePath*(x: string; result: var string; state: var int;
while hasNext(it, x):
let b = next(it, x)
if (state shr 1 == 0) and isSlash(x, b):
if result.len == 0 or result[^1] notin {DirSep, AltSep}:
if result.len == 0 or result[result.len - 1] notin {DirSep, AltSep}:
result.add dirSep
state = state or 1
elif isDotDot(x, b):
@ -87,13 +87,13 @@ proc addNormalizePath*(x: string; result: var string; state: var int;
setLen(result, d-1)
dec state, 2
else:
if result.len > 0 and result[^1] notin {DirSep, AltSep}:
if result.len > 0 and result[result.len - 1] notin {DirSep, AltSep}:
result.add dirSep
result.add substr(x, b[0], b[1])
elif isDot(x, b):
discard "discard the dot"
elif b[1] >= b[0]:
if result.len > 0 and result[^1] notin {DirSep, AltSep}:
if result.len > 0 and result[result.len - 1] notin {DirSep, AltSep}:
result.add dirSep
result.add substr(x, b[0], b[1])
inc state, 2