diff --git a/core.fth b/core.fth index c5b80b6..7807489 100644 --- a/core.fth +++ b/core.fth @@ -189,7 +189,7 @@ : compile, postpone literal postpone execute ; : buffer: create allot ; -: variable create 1 cells allot ; +: variable 1 cells buffer: ; : constant create , does> @ ; : value constant ; : to ' 4 cells + state @ if postpone literal ['] ! , else ! then ; imm diff --git a/libalee/corewords.cpp b/libalee/corewords.cpp index 4de9413..d981098 100644 --- a/libalee/corewords.cpp +++ b/libalee/corewords.cpp @@ -60,14 +60,14 @@ void CoreWords::run(unsigned int index, State& state) DoubleCell dcell; execute: - if (/*(index & 1) == 0 &&*/ index >= WordCount) { + if (index >= Dictionary::Begin) { // must be calling a defined subroutine state.pushr(state.ip); state.ip = index; return; - } else switch (index & 0x1F) { + } else switch (index) { case 0: // _lit - state.push(/*(index & 0xFF00) ? ((Addr)index >> 8u) - 1 :*/ state.beyondip()); + state.push(state.beyondip()); break; case 1: // drop state.pop(); @@ -206,6 +206,9 @@ execute: case 31: // _in state.input(state); break; + default: + state.push(index - WordCount); + break; } state.ip += sizeof(Cell); diff --git a/libalee/parser.cpp b/libalee/parser.cpp index d709d45..a9c9aaa 100644 --- a/libalee/parser.cpp +++ b/libalee/parser.cpp @@ -111,12 +111,12 @@ int Parser::parseNumber(State& state, Word word) if (state.compiling()) { auto ins = CoreWords::findi("_lit"); - //if (l >= 0 && l < 0xFF) { - // state.dict.add(ins | ((l + 1) << 8)); - //} else { + if (value >= 0 && value < static_cast(Dictionary::Begin - CoreWords::WordCount)) { + state.dict.add(value + CoreWords::WordCount); + } else { state.dict.add(ins); state.dict.add(value); - //} + } } else { state.push(value); }