dfa.nim: track object/tuple field accesses more precisely; sink(o.x); sink(o.y) needs to compile; activate the tuple unpacking transf.nim bugfix

This commit is contained in:
Araq 2019-04-15 17:57:59 +02:00
commit 045e026d0e
8 changed files with 135 additions and 47 deletions

View file

@ -0,0 +1,35 @@
discard """
output: '''works'''
"""
type
MyVal = object
f: ptr float
proc `=destroy`(x: var MyVal) =
if x.f != nil:
dealloc(x.f)
proc `=sink`(x1: var MyVal, x2: Myval) =
if x1.f != x2.f:
`=destroy`(x1)
x1.f = x2.f
proc `=`(x1: var MyVal, x2: Myval) {.error.}
proc newVal(x: float): MyVal =
result.f = create(float)
result.f[] = x
proc sinkMe(x: sink MyVal) =
discard
proc main =
var y = (newVal(3.0), newVal(4.0))
sinkMe y[0]
sinkMe y[1]
echo "works"
main()