diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2020-07-12 16:50:56 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-12 16:50:56 +0200 |
commit | 6cc0061a72826022991262eb8e31b97f6fdf37e9 (patch) | |
tree | eaf5b5f83029184025169f01e66e8c98c349b5bb /lib | |
parent | 124feb2af87dcbb44e25e7dd4303098ae5e9225d (diff) | |
download | Nim-6cc0061a72826022991262eb8e31b97f6fdf37e9.tar.gz |
optimize the new nimPrepareStrMutationV2 with inlining (#14969)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/system/strs_v2.nim | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/lib/system/strs_v2.nim b/lib/system/strs_v2.nim index aa644522f..85c0af190 100644 --- a/lib/system/strs_v2.nim +++ b/lib/system/strs_v2.nim @@ -132,10 +132,13 @@ proc nimAsgnStrV2(a: var NimStringV2, b: NimStringV2) {.compilerRtl.} = a.len = b.len copyMem(unsafeAddr a.p.data[0], unsafeAddr b.p.data[0], b.len+1) -proc nimPrepareStrMutationV2(s: var NimStringV2) {.compilerRtl.} = +proc nimPrepareStrMutationImpl(s: var NimStringV2) = + let oldP = s.p + # can't mutate a literal, so we need a fresh copy here: + s.p = cast[ptr NimStrPayload](allocShared0(contentSize(s.len))) + s.p.cap = s.len + copyMem(unsafeAddr s.p.data[0], unsafeAddr oldP.data[0], s.len+1) + +proc nimPrepareStrMutationV2(s: var NimStringV2) {.compilerRtl, inline.} = if s.p != nil and (s.p.cap and strlitFlag) == strlitFlag: - let oldP = s.p - # can't mutate a literal, so we need a fresh copy here: - s.p = cast[ptr NimStrPayload](allocShared0(contentSize(s.len))) - s.p.cap = s.len - copyMem(unsafeAddr s.p.data[0], unsafeAddr oldP.data[0], s.len+1) + nimPrepareStrMutationImpl(s) |