diff options
author | cooldome <ariabushenko@bk.ru> | 2020-05-12 12:45:34 +0100 |
---|---|---|
committer | cooldome <ariabushenko@bk.ru> | 2020-05-12 12:45:34 +0100 |
commit | 4277ab470a20f429605fbf238e485ea24b01706a (patch) | |
tree | 748b108c9d9ebcf3674ba60365f5bfc8fa39cffa | |
parent | dfae796ac3e0db69af40bec11a7d7ad7c4d00b4b (diff) | |
download | Nim-4277ab470a20f429605fbf238e485ea24b01706a.tar.gz |
fix one motr dicriminator bug
-rw-r--r-- | compiler/liftdestructors.nim | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/compiler/liftdestructors.nim b/compiler/liftdestructors.nim index 6f7b285ed..5faba79f9 100644 --- a/compiler/liftdestructors.nim +++ b/compiler/liftdestructors.nim @@ -154,8 +154,9 @@ proc fillBodyObj(c: var TLiftCtx; n, body, x, y: PNode; enforceDefaultOp: bool) c.kind = prevKind localEnforceDefaultOp = true - # copy the selector: - fillBodyObj(c, n[0], body, x, y, enforceDefaultOp = false) + if c.kind != attachedDestructor: + # copy the selector before case stmt, but destroy after case stmt + fillBodyObj(c, n[0], body, x, y, enforceDefaultOp = false) let oldfilterDiscriminator = c.filterDiscriminator if c.filterDiscriminator == n[0].sym: @@ -179,6 +180,10 @@ proc fillBodyObj(c: var TLiftCtx; n, body, x, y: PNode; enforceDefaultOp: bool) caseStmt.add(branch) if emptyBranches != n.len-1: body.add(caseStmt) + + if c.kind == attachedDestructor: + # destructor for selector is done after case stmt + fillBodyObj(c, n[0], body, x, y, enforceDefaultOp = false) c.filterDiscriminator = oldfilterDiscriminator of nkRecList: for t in items(n): fillBodyObj(c, t, body, x, y, enforceDefaultOp) |