mirror of
https://github.com/catseye/SixtyPical.git
synced 2025-02-16 15:30:26 +00:00
Articulate the "union rule" for trashes in if, add failing tests.
This commit is contained in:
parent
69f69d35a4
commit
cde2824c44
@ -1232,6 +1232,21 @@ initialized, either because it was set previous to the `if`, or is an
|
|||||||
input to the routine, and it is initialized in one branch, it need not
|
input to the routine, and it is initialized in one branch, it need not
|
||||||
be initialized in the other.
|
be initialized in the other.
|
||||||
|
|
||||||
|
| routine foo
|
||||||
|
| outputs x
|
||||||
|
| trashes a, z, n, c
|
||||||
|
| {
|
||||||
|
| ld x, 0
|
||||||
|
| ld a, 0
|
||||||
|
| cmp a, 42
|
||||||
|
| if z {
|
||||||
|
| ld x, 7
|
||||||
|
| } else {
|
||||||
|
| ld a, 23
|
||||||
|
| }
|
||||||
|
| }
|
||||||
|
= ok
|
||||||
|
|
||||||
| routine foo
|
| routine foo
|
||||||
| inputs x
|
| inputs x
|
||||||
| outputs x
|
| outputs x
|
||||||
@ -1287,6 +1302,46 @@ An `if` with a single block is analyzed as if it had an empty `else` block.
|
|||||||
| }
|
| }
|
||||||
= ok
|
= ok
|
||||||
|
|
||||||
|
The cardinal rule for trashes in an `if` is the "union rule": if one branch
|
||||||
|
trashes {`a`} and the other branch trashes {`b`} then the whole `if` statement
|
||||||
|
trashes {`a`, `b`}.
|
||||||
|
|
||||||
|
| routine foo
|
||||||
|
| inputs a, x, z
|
||||||
|
| trashes a, x
|
||||||
|
| {
|
||||||
|
| if z {
|
||||||
|
| trash a
|
||||||
|
| } else {
|
||||||
|
| trash x
|
||||||
|
| }
|
||||||
|
| }
|
||||||
|
= ok
|
||||||
|
|
||||||
|
| routine foo
|
||||||
|
| inputs a, x, z
|
||||||
|
| trashes a
|
||||||
|
| {
|
||||||
|
| if z {
|
||||||
|
| trash a
|
||||||
|
| } else {
|
||||||
|
| trash x
|
||||||
|
| }
|
||||||
|
| }
|
||||||
|
? UnmeaningfulOutputError: x in foo
|
||||||
|
|
||||||
|
| routine foo
|
||||||
|
| inputs a, x, z
|
||||||
|
| trashes x
|
||||||
|
| {
|
||||||
|
| if z {
|
||||||
|
| trash a
|
||||||
|
| } else {
|
||||||
|
| trash x
|
||||||
|
| }
|
||||||
|
| }
|
||||||
|
? UnmeaningfulOutputError: a in foo
|
||||||
|
|
||||||
### repeat ###
|
### repeat ###
|
||||||
|
|
||||||
Repeat loop.
|
Repeat loop.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user