fix one motr dicriminator bug
This commit is contained in:
parent
dfae796ac3
commit
4277ab470a
1 changed files with 7 additions and 2 deletions
|
|
@ -154,8 +154,9 @@ proc fillBodyObj(c: var TLiftCtx; n, body, x, y: PNode; enforceDefaultOp: bool)
|
||||||
c.kind = prevKind
|
c.kind = prevKind
|
||||||
localEnforceDefaultOp = true
|
localEnforceDefaultOp = true
|
||||||
|
|
||||||
# copy the selector:
|
if c.kind != attachedDestructor:
|
||||||
fillBodyObj(c, n[0], body, x, y, enforceDefaultOp = false)
|
# copy the selector before case stmt, but destroy after case stmt
|
||||||
|
fillBodyObj(c, n[0], body, x, y, enforceDefaultOp = false)
|
||||||
|
|
||||||
let oldfilterDiscriminator = c.filterDiscriminator
|
let oldfilterDiscriminator = c.filterDiscriminator
|
||||||
if c.filterDiscriminator == n[0].sym:
|
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)
|
caseStmt.add(branch)
|
||||||
if emptyBranches != n.len-1:
|
if emptyBranches != n.len-1:
|
||||||
body.add(caseStmt)
|
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
|
c.filterDiscriminator = oldfilterDiscriminator
|
||||||
of nkRecList:
|
of nkRecList:
|
||||||
for t in items(n): fillBodyObj(c, t, body, x, y, enforceDefaultOp)
|
for t in items(n): fillBodyObj(c, t, body, x, y, enforceDefaultOp)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue