1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- discard """
- output: '''abcsuffix
- xyzsuffix
- destroy foo 2
- destroy foo 1
- '''
- cmd: '''nim c --gc:arc $file'''
- """
- proc select(cond: bool; a, b: sink string): string =
- if cond:
- result = a # moves a into result
- else:
- result = b # moves b into result
- proc test(param: string; cond: bool) =
- var x = "abc" & param
- var y = "xyz" & param
- # possible self-assignment:
- x = select(cond, x, y)
- echo x
- # 'select' must communicate what parameter has been
- # consumed. We cannot simply generate:
- # (select(...); wasMoved(x); wasMoved(y))
- test("suffix", true)
- test("suffix", false)
- #--------------------------------------------------------------------
- # issue #13659
- type
- Foo = ref object
- data: int
- parent: Foo
- proc `=destroy`(self: var type(Foo()[])) =
- echo "destroy foo ", self.data
- for i in self.fields: i.reset
- proc getParent(self: Foo): Foo = self.parent
- var foo1 = Foo(data: 1)
- var foo2 = Foo(data: 2, parent: foo1)
- foo2.getParent.data = 1
|