about summary refs log tree commit diff stats
path: root/fork.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2016-04-27 15:23:44 -0700
committerKartik K. Agaram <vc@akkartik.com>2016-04-27 15:23:44 -0700
commite765f9e74abc81b738e8670c6d77d363894107b1 (patch)
tree3decf1582c59e590e8d71f12963e06f487dd7d76 /fork.mu
parentb61557347aac31e6ba98dedbc16e49a69ff30912 (diff)
downloadmu-e765f9e74abc81b738e8670c6d77d363894107b1.tar.gz
2873 - fix a bug in converting conditional returns
This was an interaction between two transforms. The first turned:

  return-if ...

into:

  jump-unless ..., 1:offset  # skip next instruction
  return ...

The second added an unconditional return at the end of the recipe if it
didn't already exist (so that functions always end with a return).
However, it was getting confused by the return instructions generated
above, which look unconditional but sometimes get skipped.

To fix this, conditional returns are now transformed into this:

  {
    break-unless ...
    return ...
  }

Since the final instruction is now no longer a reply (but rather the '}'
label), the second transform triggers and adds the unconditional return
after it.

This commit removes the final place marked 'BUG:' in the codebase
yesterday (see commit 2870).
Diffstat (limited to 'fork.mu')
0 files changed, 0 insertions, 0 deletions