mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-09 14:32:53 +00:00
* implement `ensureMove` * use an additional flag * improve some logics * progress: fixes discard ensureMove * forbids nested expressions * improve error messages * checkpoint * fixes cursor * ADD MORE TESTS * fixes cursorinference again * tiny cleanup * improve error messages * fixes docs * implement comments add more tests * fixes js
28 lines
524 B
Nim
28 lines
524 B
Nim
discard """
|
|
errormsg: "cannot move 'x', passing 'x' to a sink parameter introduces an implicit copy"
|
|
matrix: "--cursorinference:on; --cursorinference:off"
|
|
"""
|
|
|
|
block:
|
|
type
|
|
X = object
|
|
s: string
|
|
|
|
proc `=copy`(x: var X, y: X) =
|
|
x.s = "copied " & y.s
|
|
|
|
proc `=sink`(x: var X, y: X) =
|
|
`=destroy`(x)
|
|
wasMoved(x)
|
|
x.s = "moved " & y.s
|
|
|
|
proc consume(x: sink X) =
|
|
discard x.s
|
|
|
|
proc main =
|
|
var s = "abcdefg"
|
|
var x = X(s: ensureMove s)
|
|
consume(ensureMove x)
|
|
discard x
|
|
|
|
main() |