diff --git a/test-regex.tal b/test-regex.tal index e78d829..f1bd414 100644 --- a/test-regex.tal +++ b/test-regex.tal @@ -71,7 +71,7 @@ SWP emit-byte emit-byte JMP2r @emit-byte ( byte^ -- ) - DUP #04 SFT ,&hex JSR #0f AND ,&hex JMP + DUP #04 SFT ,&hex JSR #0f AND !&hex &hex #30 ADD DUP #39 GTH #27 MUL ADD emit JMP2r @@ -83,32 +83,32 @@ sp LIT "n emit LIT "= emit ;stack-pos LDA2 ;stack-bot SUB2 #0004 DIV2 emit-short LIT ": emit ;stack-bot &loop - DUP2 ;stack-pos LDA2 LTH2 ,&ok JCN + DUP2 ;stack-pos LDA2 LTH2 ?&ok POP2 nl JMP2r &ok sp LDA2k emit-short - #0002 ADD2 ,&loop JMP + #0002 ADD2 !&loop ( emit n bytes from the given address ) @emit-n ( addr* count^ -> addr2* ) - DUP #00 GTH ( addr count count>0? ) ,&ok JCN ( addr count ) POP nl JMP2r + DUP #00 GTH ( addr count count>0? ) ?&ok ( addr count ) POP nl JMP2r &ok STH ( addr [count] ) sp LDAk emit-byte INC2 ( addr+1 [count] ) STHr #01 SUB ( addr+1 count-1 ) - ;emit-n JMP2 + !emit-n ( emit the arena, with one line per node ) ( parses node type, since node size is dynamic (3-5). ) @emit-arena ( -> ) ;arena-bot &loop - DUP2 ;arena-pos LDA2 LTH2 ,&ok JCN POP2 JMP2r + DUP2 ;arena-pos LDA2 LTH2 ?&ok POP2 JMP2r &ok DUP2 emit-short LIT ": emit sp - LDAk #01 NEQ ,&!1 JCN #03 emit-n ,&loop JMP - &!1 LDAk #02 NEQ ,&!2 JCN #03 emit-n ,&loop JMP - &!2 LDAk #03 NEQ ,&!3 JCN #04 emit-n ,&loop JMP - &!3 LDAk #04 NEQ ,&!4 JCN #05 emit-n ,&loop JMP - &!4 LDAk #05 NEQ ,&!5 JCN #05 emit-n ,&loop JMP - &!5 ;unknown-node-type errorm + LDAk #01 NEQ ?&c1 #03 emit-n !&loop + &c1 LDAk #02 NEQ ?&c2 #03 emit-n !&loop + &c2 LDAk #03 NEQ ?&c3 #04 emit-n !&loop + &c3 LDAk #04 NEQ ?&c4 #05 emit-n !&loop + &c4 LDAk #05 NEQ ?&c5 #05 emit-n !&loop + &c5 ;unknown-node-type errorm