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