mirror of
https://github.com/catseye/SixtyPical.git
synced 2025-02-19 20:30:45 +00:00
Add three more tests. Ensure they pass.
This commit is contained in:
parent
68b46c7be7
commit
b91c3ed2f1
@ -658,6 +658,7 @@ class Analyzer(object):
|
||||
|
||||
def analyze_for(self, instr, context):
|
||||
context.assert_meaningful(instr.dest)
|
||||
context.assert_writeable(instr.dest)
|
||||
|
||||
bottom, top = context.get_range(instr.dest)
|
||||
final = instr.final.value
|
||||
|
@ -1708,6 +1708,52 @@ You cannot modify the loop variable in a "for" loop.
|
||||
| }
|
||||
? ForbiddenWriteError
|
||||
|
||||
This includes nesting a loop on the same variable.
|
||||
|
||||
| byte table[16] tab
|
||||
|
|
||||
| define foo routine inputs tab trashes a, x, c, z, v, n {
|
||||
| ld x, 0
|
||||
| for x up to 8 {
|
||||
| for x up to 15 {
|
||||
| ld a, 0
|
||||
| }
|
||||
| }
|
||||
| }
|
||||
? ForbiddenWriteError
|
||||
|
||||
But nesting with two different variables is okay.
|
||||
|
||||
| byte table[16] tab
|
||||
|
|
||||
| define foo routine inputs tab trashes a, x, y, c, z, v, n {
|
||||
| ld x, 0
|
||||
| for x up to 8 {
|
||||
| ld a, x
|
||||
| ld y, a
|
||||
| for y up to 15 {
|
||||
| ld a, 0
|
||||
| }
|
||||
| }
|
||||
| }
|
||||
= ok
|
||||
|
||||
Inside the inner loop, the outer variable is still not writeable.
|
||||
|
||||
| byte table[16] tab
|
||||
|
|
||||
| define foo routine inputs tab trashes a, x, y, c, z, v, n {
|
||||
| ld x, 0
|
||||
| for x up to 8 {
|
||||
| ld a, x
|
||||
| ld y, a
|
||||
| for y up to 15 {
|
||||
| ld x, 0
|
||||
| }
|
||||
| }
|
||||
| }
|
||||
? ForbiddenWriteError
|
||||
|
||||
If the range isn't known to be smaller than the final value, you can't go up to it.
|
||||
|
||||
| byte table[32] tab
|
||||
|
Loading…
x
Reference in New Issue
Block a user