| ... | ... |
@@ -1,5 +1,5 @@ |
| 1 | 1 |
;tree { search-key 2 max-key-len 1 }
|
| 2 |
-;assembler { pass 1 state 1 token 2 scope-len 1 scope 80 heap 2 addr 2 subtree 2 vartmp 2 }
|
|
| 2 |
+;assembler { pass 1 state 1 token 2 scope-len 1 scope 80 heap 2 addr 2 subtree 2 vartmp 2 field 2 }
|
|
| 3 | 3 |
|
| 4 | 4 |
%HCF { #0000 DIV }
|
| 5 | 5 |
%SHORT_FLAG { #20 }
|
| ... | ... |
@@ -281,11 +281,25 @@ |
| 281 | 281 |
|
| 282 | 282 |
@lookup-label ( string-ptr* -- address* node-type if found |
| 283 | 283 |
OR false-address* 00 if not found ) |
| 284 |
- ( FIXME deal with dotted labels ) |
|
| 284 |
+ DUP2 |
|
| 285 |
+ $loop |
|
| 286 |
+ DUP2 #0001 ADD2 SWP2 PEK2 |
|
| 287 |
+ DUP #2e EQU ^$dotted JNZ |
|
| 288 |
+ ^$loop JNZ |
|
| 289 |
+ DUP2 EOR2 ( faster than POP2 #0000 ) |
|
| 290 |
+ =assembler.field |
|
| 291 |
+ |
|
| 292 |
+ $main |
|
| 285 | 293 |
DUP2 ,label-tree SWP2 #ff ,traverse-tree JSR2 |
| 286 | 294 |
^$not-found JNZ |
| 287 | 295 |
|
| 288 | 296 |
SWP2 POP2 |
| 297 |
+ ~assembler.field #0000 EQU2 ^$end JNZ |
|
| 298 |
+ DUP2 PEK2 #80 LTH ^$not-found JNZ |
|
| 299 |
+ #0003 ADD2 ~assembler.field #ff ,traverse-tree JSR2 |
|
| 300 |
+ ^$not-found JNZ |
|
| 301 |
+ |
|
| 302 |
+ $end |
|
| 289 | 303 |
DUP2 #0001 ADD2 LDR2 SWP2 PEK2 |
| 290 | 304 |
JMP2r |
| 291 | 305 |
|
| ... | ... |
@@ -298,6 +312,11 @@ |
| 298 | 312 |
#00 |
| 299 | 313 |
JMP2r |
| 300 | 314 |
|
| 315 |
+ $dotted |
|
| 316 |
+ DUP OVR2 =assembler.field |
|
| 317 |
+ EOR ROT ROT #0001 SUB2 POK2 |
|
| 318 |
+ ^$main JMP |
|
| 319 |
+ |
|
| 301 | 320 |
@write-byte ( byte -- ) |
| 302 | 321 |
( FIXME ) =Console.byte |
| 303 | 322 |
~assembler.addr #0001 ADD2 =assembler.addr |