| THEN |
THEN |
| THEN |
THEN |
| Debug? |
Debug? |
| IF dup @ + |
IF @ \ !!! cross-interacts with debugger !!! |
| ELSE cell+ |
ELSE cell+ |
| THEN ; |
THEN ; |
| |
|
| : DebugBranch |
: DebugBranch |
| Debug? |
Debug? |
| IF dup @ over + swap THEN ; \ return 2 different addresses |
IF dup @ swap THEN ; \ return 2 different addresses |
| |
|
| : c-?branch |
: c-?branch |
| Scan? |
Scan? |
| Display? IF nl S" FOR" .struc level+ THEN ; |
Display? IF nl S" FOR" .struc level+ THEN ; |
| |
|
| : c-loop |
: c-loop |
| Display? IF level- nl .name-without bl cemit nl THEN |
Display? IF level- nl .name-without nl bl cemit THEN |
| DebugBranch cell+ |
DebugBranch cell+ |
| Scan? |
Scan? |
| IF dup BranchAddr? |
IF dup BranchAddr? |
| THEN |
THEN |
| DebugBranch cell+ ; |
DebugBranch cell+ ; |
| |
|
| : c-exit dup 1 cells - |
: c-exit ( addr1 -- addr2 ) |
| |
dup 1 cells - |
| CheckEnd |
CheckEnd |
| IF Display? IF nlflag off S" ;" Com# .string THEN |
IF |
| |
Display? IF nlflag off S" ;" Com# .string THEN |
| C-Stop on |
C-Stop on |
| ELSE Display? IF S" EXIT " .struc THEN |
ELSE |
| |
Display? IF S" EXIT " .struc THEN |
| THEN |
THEN |
| Debug? IF drop THEN ; |
Debug? IF drop THEN ; \ !!! cross-interacts with debugger !!! |
| |
|
| : c-abort" |
: c-abort" |
| count 2dup + aligned -rot |
count 2dup + aligned -rot |