* fixes #11095
This commit is contained in:
Andreas Rumpf 2019-04-25 07:59:34 +02:00 • committed by GitHub
commit eb9043c0e9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 61 additions and 24 deletions

View file

@ -2,30 +2,46 @@ discard """
output: '''works'''
"""
type
MyVal = object
f: ptr float
# bug #11095
proc `=destroy`(x: var MyVal) =
type
MyVal[T] = object
f: ptr T
proc `=destroy`[T](x: var MyVal[T]) =
if x.f != nil:
dealloc(x.f)
proc `=sink`(x1: var MyVal, x2: Myval) =
proc `=sink`[T](x1: var MyVal[T], x2: MyVal[T]) =
if x1.f != x2.f:
`=destroy`(x1)
x1.f = x2.f
proc `=`(x1: var MyVal, x2: Myval) {.error.}
proc `=`[T](x1: var MyVal[T], x2: MyVal[T]) {.error.}
proc newVal(x: float): MyVal =
result.f = create(float)
proc newVal[T](x: sink T): MyVal[T] =
result.f = create(T)
result.f[] = x
proc sinkMe(x: sink MyVal) =
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 = (newVal(3.0), newVal(4.0))
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]