diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2023-07-19 18:57:58 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-19 12:57:58 +0200 |
commit | 7d9fe106ecd70bf99b9f3224430debfe10060ce1 (patch) | |
tree | 205e2cf8c9bd6ede085537e5e8f279bf88908945 /lib | |
parent | 1aff402998e6c17a3d72a8dc23fb655208d93fcb (diff) | |
download | Nim-7d9fe106ecd70bf99b9f3224430debfe10060ce1.tar.gz |
fixes #22268; fixes `move` codegen (#22288)
Diffstat (limited to 'lib')
-rw-r--r-- | lib/system.nim | 28 |
1 files changed, 8 insertions, 20 deletions
diff --git a/lib/system.nim b/lib/system.nim index 50debcc89..858571d61 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -151,26 +151,10 @@ proc wasMoved*[T](obj: var T) {.inline, noSideEffect.} = {.cast(raises: []), cast(tags: []).}: `=wasMoved`(obj) -const notJSnotNims = not defined(js) and not defined(nimscript) -const arcLikeMem = defined(gcArc) or defined(gcAtomicArc) or defined(gcOrc) - -when notJSnotNims and arcLikeMem: - proc internalMove[T](x: var T): T {.magic: "Move", noSideEffect, compilerproc.} = - result = x - - proc move*[T](x: var T): T {.noSideEffect, nodestroy.} = - {.cast(noSideEffect).}: - when nimvm: - result = internalMove(x) - else: - result = internalMove(x) - {.cast(raises: []), cast(tags: []).}: - `=wasMoved`(x) -else: - proc move*[T](x: var T): T {.magic: "Move", noSideEffect.} = - result = x - {.cast(raises: []), cast(tags: []).}: - `=wasMoved`(x) +proc move*[T](x: var T): T {.magic: "Move", noSideEffect.} = + result = x + {.cast(raises: []), cast(tags: []).}: + `=wasMoved`(x) type range*[T]{.magic: "Range".} ## Generic type to construct range types. @@ -369,6 +353,9 @@ proc arrGet[I: Ordinal;T](a: T; i: I): T {. proc arrPut[I: Ordinal;T,S](a: T; i: I; x: S) {.noSideEffect, magic: "ArrPut".} +const arcLikeMem = defined(gcArc) or defined(gcAtomicArc) or defined(gcOrc) + + when defined(nimAllowNonVarDestructor) and arcLikeMem: proc `=destroy`*(x: string) {.inline, magic: "Destroy".} = discard @@ -445,6 +432,7 @@ include "system/inclrtl" const NoFakeVars = defined(nimscript) ## `true` if the backend doesn't support \ ## "fake variables" like `var EBADF {.importc.}: cint`. +const notJSnotNims = not defined(js) and not defined(nimscript) when not defined(js) and not defined(nimSeqsV2): type |