\ Constants optimizer - Copyright 2007,2009 J.L. Bezemer \ You can redistribute this file and/or modify it under \ the terms of the GNU General Public License \ Typical use: \ 4th cdq myprogram.4th | 4th cxq optconst.4th include lib/leading.4th include lib/row.4th 0 enum literal enum operator constant other create operator? ," literal" literal , ," negate" operator , ," *" operator , ," +" operator , ," -" operator , ," /" operator , null , :this operator? does> 2 string-key row if nip nip cell+ @c else drop 2drop other then ; : none 0 dup other ; ( -- line count command) : ?line if ." Optimize LITERAL sequence at word " . cr else drop then ; : word> bl parse-word operator? ; ( -- n) : line> [char] ] parse chop -leading number ; : validate over (error) <> over literal = and ; : valid >r >r literal = if 1+ r> drop r> else drop drop r> 1 r> then ; : invalid nip operator = rot 1- 0> rot literal = and and ?line none ; : valid? line> word> validate if valid else invalid then ; : literals none begin refill while valid? repeat drop drop drop ; literals