< { assembler -01 . } ":" deff { assemblerLibrary -01 . } "::" deff assembler .|label "@" deff "%" _ : -01 deff < [ /0 /1 /2 /3 /4 /5 /6 /7 /8 /9 ] ==digits { 0 ==result { "(.)(.*)" regex } { { eq }_ digits -01 index result 10 mul add =result } loop result } > -- /base10decode deff { .value base10decode ==v v 4294967296 lt { [ # load value v /rdx :movqImmReg 63 /rdx :btsqImm8Reg /rdx :pushqReg ] :execute } { [ # allocate int ::internalAllocateInteger /rax :movqImmReg /rax :callqReg # push int address on program stack /rax :pushqReg # type zero does not need to be changed # load value 8 /rax :addqImm8Reg v /rdx :movqImmReg /rdx /rax :movqRegMem ] :execute } ? * } /TOKINT { .value ::constStringCode :execute } /TOKSTR { .value ::constStringCode [ global .internalExecuteIdentifier /rax :movqImmReg /rax :callqReg ] cat :execute } /TOKID { "floats not supported during initial compilation stage" die } /TOKFLOAT > -- 4 |defv rep { /input defv "" { 4096 input .read cat _ "" eq not } { { _ "([^\\n]*)\\n(.*)" regex } { -102 -- TOKFLOAT TOKINT TOKSTR TOKID elymas .tokenize { _ .handle # assemblerLibrary .stackDump # assemblerLibrary .globalScopeDump } each } loop } loop -- } /executeFile deff # vim: syn=elymas