1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- discard """
- matrix: "--mm:arc"
- """
- type AnObject = object of RootObj
- value*: int
- proc mutate(shit: sink AnObject) =
- shit.value = 1
- proc foo = # bug #23359
- var bar = AnObject(value: 42)
- mutate(bar)
- doAssert bar.value == 42
- foo()
- block: # bug #23902
- proc foo(a: sink string): auto = (a, a)
- proc bar(a: sink int): auto = return a
- proc foo(a: sink string) =
- var x = (a, a)
- block: # bug #24175
- block:
- func mutate(o: sink string): string =
- o[1] = '1'
- result = o
- static:
- let s = "999"
- let m = mutate(s)
- doAssert s == "999"
- doAssert m == "919"
- func foo() =
- let s = "999"
- let m = mutate(s)
- doAssert s == "999"
- doAssert m == "919"
- static:
- foo()
- foo()
- block:
- type O = object
- a: int
- func mutate(o: sink O): O =
- o.a += 1
- o
- static:
- let x = O(a: 1)
- let y = mutate(x)
- doAssert x.a == 1
- doAssert y.a == 2
- proc foo() =
- let x = O(a: 1)
- let y = mutate(x)
- doAssert x.a == 1
- doAssert y.a == 2
- static:
- foo()
- foo()
|