packed literals again

llvm
Clyne 2 years ago
parent 76dfbba524
commit c5e10679c7

@ -189,7 +189,7 @@
: compile, postpone literal postpone execute ; : compile, postpone literal postpone execute ;
: buffer: create allot ; : buffer: create allot ;
: variable create 1 cells allot ; : variable 1 cells buffer: ;
: constant create , does> @ ; : constant create , does> @ ;
: value constant ; : value constant ;
: to ' 4 cells + state @ if postpone literal ['] ! , else ! then ; imm : to ' 4 cells + state @ if postpone literal ['] ! , else ! then ; imm

@ -60,14 +60,14 @@ void CoreWords::run(unsigned int index, State& state)
DoubleCell dcell; DoubleCell dcell;
execute: execute:
if (/*(index & 1) == 0 &&*/ index >= WordCount) { if (index >= Dictionary::Begin) {
// must be calling a defined subroutine // must be calling a defined subroutine
state.pushr(state.ip); state.pushr(state.ip);
state.ip = index; state.ip = index;
return; return;
} else switch (index & 0x1F) { } else switch (index) {
case 0: // _lit case 0: // _lit
state.push(/*(index & 0xFF00) ? ((Addr)index >> 8u) - 1 :*/ state.beyondip()); state.push(state.beyondip());
break; break;
case 1: // drop case 1: // drop
state.pop(); state.pop();
@ -206,6 +206,9 @@ execute:
case 31: // _in case 31: // _in
state.input(state); state.input(state);
break; break;
default:
state.push(index - WordCount);
break;
} }
state.ip += sizeof(Cell); state.ip += sizeof(Cell);

@ -111,12 +111,12 @@ int Parser::parseNumber(State& state, Word word)
if (state.compiling()) { if (state.compiling()) {
auto ins = CoreWords::findi("_lit"); auto ins = CoreWords::findi("_lit");
//if (l >= 0 && l < 0xFF) { if (value >= 0 && value < static_cast<Cell>(Dictionary::Begin - CoreWords::WordCount)) {
// state.dict.add(ins | ((l + 1) << 8)); state.dict.add(value + CoreWords::WordCount);
//} else { } else {
state.dict.add(ins); state.dict.add(ins);
state.dict.add(value); state.dict.add(value);
//} }
} else { } else {
state.push(value); state.push(value);
} }

Loading…
Cancel
Save