parent
a644f443bc
commit
eb9043c0e9
3 changed files with 61 additions and 24 deletions
|
|
@ -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]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue