mirror of
https://github.com/catseye/SixtyPical.git
synced 2025-02-21 04:29:14 +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):
|
def analyze_for(self, instr, context):
|
||||||
context.assert_meaningful(instr.dest)
|
context.assert_meaningful(instr.dest)
|
||||||
|
context.assert_writeable(instr.dest)
|
||||||
|
|
||||||
bottom, top = context.get_range(instr.dest)
|
bottom, top = context.get_range(instr.dest)
|
||||||
final = instr.final.value
|
final = instr.final.value
|
||||||
|
@ -1708,6 +1708,52 @@ You cannot modify the loop variable in a "for" loop.
|
|||||||
| }
|
| }
|
||||||
? ForbiddenWriteError
|
? 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.
|
If the range isn't known to be smaller than the final value, you can't go up to it.
|
||||||
|
|
||||||
| byte table[32] tab
|
| byte table[32] tab
|
||||||
|
Loading…
x
Reference in New Issue
Block a user