diff options
author | ringabout <43030857+ringabout@users.noreply.github.com> | 2023-06-09 21:53:12 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-06-09 15:53:12 +0200 |
commit | 64b27edd3aa6035bfc5f4e1d83237283bd3b7c2b (patch) | |
tree | 05e3a82adf3252b56eb8508d25d1dfcb0e3faa8e /lib | |
parent | 49e11d9dcc00d4c758b754e7a89f9d0253d25ea0 (diff) | |
download | Nim-64b27edd3aa6035bfc5f4e1d83237283bd3b7c2b.tar.gz |
make `move` use `=wasMoved` internally (#22032)
* make `move` use `=wasMoved` internally * fixes tests * fixes spawn finally * fixes views * rename to internalMove * add a test case
Diffstat (limited to 'lib')
-rw-r--r-- | lib/system.nim | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/lib/system.nim b/lib/system.nim index 3a39da32e..949d717b0 100644 --- a/lib/system.nim +++ b/lib/system.nim @@ -147,10 +147,26 @@ proc wasMoved*[T](obj: var T) {.inline, noSideEffect.} = {.cast(raises: []), cast(tags: []).}: `=wasMoved`(obj) -proc move*[T](x: var T): T {.magic: "Move", noSideEffect.} = - result = x - {.cast(raises: []), cast(tags: []).}: - `=wasMoved`(x) +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) type range*[T]{.magic: "Range".} ## Generic type to construct range types. @@ -415,7 +431,6 @@ 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 |