12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- discard """
- output: '''works'''
- """
- # bug #11095
- type
- MyVal[T] = object
- f: ptr T
- proc `=destroy`[T](x: var MyVal[T]) =
- if x.f != nil:
- dealloc(x.f)
- proc `=sink`[T](x1: var MyVal[T], x2: MyVal[T]) =
- if x1.f != x2.f:
- `=destroy`(x1)
- x1.f = x2.f
- proc `=`[T](x1: var MyVal[T], x2: MyVal[T]) {.error.}
- proc newVal[T](x: sink T): MyVal[T] =
- result.f = create(T)
- result.f[] = x
- proc set[T](x: var MyVal[T], val: T) =
- x.f[] = val
- proc sinkMe[T](x: sink MyVal[T]) =
- discard
- var flag = false
- proc main =
- var y = case flag
- of true:
- var x1 = newVal[float](1.0)
- var x2 = newVal[float](2.0)
- (newVal(x1), newVal(x2))
- of false:
- var x1 = newVal[float](1.0)
- var x2 = newVal[float](2.0)
- (newVal(x1), newVal(x2))
- sinkMe y[0]
- sinkMe y[1]
- echo "works"
- main()
|