mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-17 21:12:42 +00:00
* fixes #17173 * add testcase (#17214) * Apply suggestions from code review * fix for newruntime * Apply suggestions from code review * Update lib/system.nim * Update lib/system.nim * Update lib/system.nim Co-authored-by: Danil Yarantsev <tiberiumk12@gmail.com> Co-authored-by: flywind <xzsflywind@gmail.com> Co-authored-by: Danil Yarantsev <tiberiumk12@gmail.com>
This commit is contained in:
@@ -80,11 +80,13 @@ func setSlice*(s: var string, slice: Slice[int]) =
|
||||
when not declared(moveMem):
|
||||
impl()
|
||||
else:
|
||||
when defined(nimSeqsV2):
|
||||
prepareStrMutation(s)
|
||||
moveMem(addr s[0], addr s[first], last - first + 1)
|
||||
s.setLen(last - first + 1)
|
||||
|
||||
func strip*(a: var string, leading = true, trailing = true, chars: set[char] = whitespaces) {.inline.} =
|
||||
## Inplace version of `strip`. Strips leading or
|
||||
## Inplace version of `strip`. Strips leading or
|
||||
## trailing `chars` (default: whitespace characters).
|
||||
##
|
||||
## If `leading` is true (default), leading `chars` are stripped.
|
||||
|
||||
@@ -3127,3 +3127,9 @@ export io
|
||||
|
||||
when not defined(createNimHcr) and not defined(nimscript):
|
||||
include nimhcr
|
||||
|
||||
when notJSnotNims and not defined(nimSeqsV2):
|
||||
proc prepareStrMutation*(s: var string) {.inline.} =
|
||||
## String literals (e.g. "abc", etc) in the ARC/ORC mode are "copy on write",
|
||||
## therefore you should call `prepareStrMutation` before modifying the strings.
|
||||
discard
|
||||
|
||||
@@ -168,3 +168,10 @@ proc nimPrepareStrMutationImpl(s: var NimStringV2) =
|
||||
proc nimPrepareStrMutationV2(s: var NimStringV2) {.compilerRtl, inline.} =
|
||||
if s.p != nil and (s.p.cap and strlitFlag) == strlitFlag:
|
||||
nimPrepareStrMutationImpl(s)
|
||||
|
||||
proc prepareStrMutation*(s: var string) {.inline.} =
|
||||
# string literals are "copy on write", so you need to call
|
||||
# `prepareStrMutation` before modifying the strings.
|
||||
{.cast(noSideEffect).}:
|
||||
let s = unsafeAddr s
|
||||
nimPrepareStrMutationV2(cast[ptr NimStringV2](s)[])
|
||||
|
||||
Reference in New Issue
Block a user