mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-06 03:44:14 +00:00
fixes #8911
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user