fixes #8911
This commit is contained in:
parent
866d6d1891
commit
0330fb2e13
2 changed files with 22 additions and 7 deletions
|
|
@ -1325,7 +1325,7 @@ proc initSkipTable*(a: var SkipTable, sub: string)
|
|||
for i in 0 ..< m - 1:
|
||||
a[sub[i]] = m - 1 - i
|
||||
|
||||
proc find*(a: SkipTable, s, sub: string, start: Natural = 0, last: Natural = 0): int
|
||||
proc find*(a: SkipTable, s, sub: string, start: Natural = 0, last = 0): int
|
||||
{.noSideEffect, rtl, extern: "nsuFindStrA".} =
|
||||
## Searches for `sub` in `s` inside range `start`..`last` using preprocessed table `a`.
|
||||
## If `last` is unspecified, it defaults to `s.high`.
|
||||
|
|
@ -1363,7 +1363,7 @@ when not (defined(js) or defined(nimdoc) or defined(nimscript)):
|
|||
else:
|
||||
const hasCStringBuiltin = false
|
||||
|
||||
proc find*(s: string, sub: char, start: Natural = 0, last: Natural = 0): int {.noSideEffect,
|
||||
proc find*(s: string, sub: char, start: Natural = 0, last = 0): int {.noSideEffect,
|
||||
rtl, extern: "nsuFindChar".} =
|
||||
## Searches for `sub` in `s` inside range `start`..`last`.
|
||||
## If `last` is unspecified, it defaults to `s.high`.
|
||||
|
|
@ -1371,7 +1371,7 @@ proc find*(s: string, sub: char, start: Natural = 0, last: Natural = 0): int {.n
|
|||
## Searching is case-sensitive. If `sub` is not in `s`, -1 is returned.
|
||||
let last = if last==0: s.high else: last
|
||||
when nimvm:
|
||||
for i in start..last:
|
||||
for i in int(start)..last:
|
||||
if sub == s[i]: return i
|
||||
else:
|
||||
when hasCStringBuiltin:
|
||||
|
|
@ -1381,11 +1381,11 @@ proc find*(s: string, sub: char, start: Natural = 0, last: Natural = 0): int {.n
|
|||
if not found.isNil:
|
||||
return cast[ByteAddress](found) -% cast[ByteAddress](s.cstring)
|
||||
else:
|
||||
for i in start..last:
|
||||
for i in int(start)..last:
|
||||
if sub == s[i]: return i
|
||||
return -1
|
||||
|
||||
proc find*(s, sub: string, start: Natural = 0, last: Natural = 0): int {.noSideEffect,
|
||||
proc find*(s, sub: string, start: Natural = 0, last = 0): int {.noSideEffect,
|
||||
rtl, extern: "nsuFindStr".} =
|
||||
## Searches for `sub` in `s` inside range `start`..`last`.
|
||||
## If `last` is unspecified, it defaults to `s.high`.
|
||||
|
|
@ -1397,14 +1397,14 @@ proc find*(s, sub: string, start: Natural = 0, last: Natural = 0): int {.noSideE
|
|||
initSkipTable(a, sub)
|
||||
result = find(a, s, sub, start, last)
|
||||
|
||||
proc find*(s: string, chars: set[char], start: Natural = 0, last: Natural = 0): int {.noSideEffect,
|
||||
proc find*(s: string, chars: set[char], start: Natural = 0, last = 0): int {.noSideEffect,
|
||||
rtl, extern: "nsuFindCharSet".} =
|
||||
## Searches for `chars` in `s` inside range `start`..`last`.
|
||||
## If `last` is unspecified, it defaults to `s.high`.
|
||||
##
|
||||
## If `s` contains none of the characters in `chars`, -1 is returned.
|
||||
let last = if last==0: s.high else: last
|
||||
for i in start..last:
|
||||
for i in int(start)..last:
|
||||
if s[i] in chars: return i
|
||||
return -1
|
||||
|
||||
|
|
|
|||
|
|
@ -309,5 +309,20 @@ assert(' '.repeat(0) == "")
|
|||
assert(" ".repeat(0) == "")
|
||||
assert(spaces(0) == "")
|
||||
|
||||
# bug #8911
|
||||
when true:
|
||||
static:
|
||||
let a = ""
|
||||
let a2 = a.replace("\n", "\\n")
|
||||
|
||||
when true:
|
||||
static:
|
||||
let b = "b"
|
||||
let b2 = b.replace("\n", "\\n")
|
||||
|
||||
when true:
|
||||
let c = ""
|
||||
let c2 = c.replace("\n", "\\n")
|
||||
|
||||
main()
|
||||
#OUT ha/home/a1xyz/usr/bin
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue