1
0
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:
Chris Pressey 2018-03-26 17:40:43 +01:00
parent 68b46c7be7
commit b91c3ed2f1
2 changed files with 47 additions and 0 deletions

View File

@ -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

View File

@ -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