summaryrefslogtreecommitdiff
path: root/mi
diff options
context:
space:
mode:
authorOri Bernstein <ori@eigenstate.org>2016-10-09 00:26:30 -0700
committerOri Bernstein <ori@eigenstate.org>2016-10-09 00:26:30 -0700
commit5d433bdf4af606e395b54aace8c0a27f745ae9ce (patch)
treeb8e3cd2a11cac4bae7880a61898a1a668c296a2a /mi
parenta2352649c2a8f5937335a8c791f3581f52cd8d6f (diff)
downloadmc-5d433bdf4af606e395b54aace8c0a27f745ae9ce.tar.gz
Fix bug with postinc returns.
We were draining the postinc queue before the rval. Oops.
Diffstat (limited to 'mi')
-rw-r--r--mi/flatten.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/mi/flatten.c b/mi/flatten.c
index 0df229e..25d35ed 100644
--- a/mi/flatten.c
+++ b/mi/flatten.c
@@ -468,10 +468,17 @@ static Node *rval(Flattenctx *s, Node *n)
break;;
case Oret:
/* drain the increment queue before we return */
- t = rval(s, args[0]);
- for (i = 0; i < s->nqueue; i++)
- append(s, s->incqueue[i]);
- lfree(&s->incqueue, &s->nqueue);
+ v = rval(s, args[0]);
+ if (!s->nqueue) {
+ t = v;
+ } else {
+ t = temp(s, v);
+ u = assign(s, t, v);
+ append(s, u);
+ for (i = 0; i < s->nqueue; i++)
+ append(s, s->incqueue[i]);
+ lfree(&s->incqueue, &s->nqueue);
+ }
append(s, mkexpr(n->loc, Oret, t, NULL));
break;
case Oasn: