about summary refs log tree commit diff stats
path: root/chessboard.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 /chessboard.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 'chessboard.mu')
-rw-r--r--chessboard.mu1
1 files changed, 0 insertions, 1 deletions
diff --git a/chessboard.mu b/chessboard.mu
index 3d6b93e2..9bd5adef 100644
--- a/chessboard.mu
+++ b/chessboard.mu
@@ -259,7 +259,6 @@ def read-move stdin:address:source:character, screen:address:screen -> result:ad
   *result <- put *result, to-rank:offset, to-rank
   error? <- expect-from-channel stdin, 10/newline, screen
   return-if error?, 0/dummy, 0/quit
-  return result  # BUG: why is this statement required?
 ]
 
 # valid values for file: 0-7