diff options
author | Araq <rumpf_a@web.de> | 2019-04-15 17:57:59 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2019-04-16 10:35:43 +0200 |
commit | 045e026d0ee4e6decc4f22f1f9cbb0bdd8bc3b45 (patch) | |
tree | 50b70427b53bc39ce6df075eaccbfebd74663122 /tests/destructor/tobjfield_analysis.nim | |
parent | 01f09567c43031d3d35a54c8856d79f6cd1d4bf7 (diff) | |
download | Nim-045e026d0ee4e6decc4f22f1f9cbb0bdd8bc3b45.tar.gz |
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
Diffstat (limited to 'tests/destructor/tobjfield_analysis.nim')
-rw-r--r-- | tests/destructor/tobjfield_analysis.nim | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tests/destructor/tobjfield_analysis.nim b/tests/destructor/tobjfield_analysis.nim new file mode 100644 index 000000000..24cf02aee --- /dev/null +++ b/tests/destructor/tobjfield_analysis.nim @@ -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() + |