diff --git a/libalee/corewords.cpp b/libalee/corewords.cpp index d47e092..8ff7ac6 100644 --- a/libalee/corewords.cpp +++ b/libalee/corewords.cpp @@ -241,7 +241,7 @@ void CoreWords::word_semic(State& state) { // Concludes word definition. dcell = Dictionary::MaxDistance; } state.dict.write(cell, - (state.dict.read(cell) & 0x1F) | static_cast(dcell << 6)); + (state.dict.read(cell) & 0x1F) | static_cast(dcell << Dictionary::DistancePos)); state.dict.latest(cell); } void CoreWords::word_jmp0(State& state) { // Jump if popped value equals zero. diff --git a/libalee/dictionary.cpp b/libalee/dictionary.cpp index b1cbc5f..0abc038 100644 --- a/libalee/dictionary.cpp +++ b/libalee/dictionary.cpp @@ -91,14 +91,14 @@ Addr Dictionary::find(Word word) noexcept const Addr len = l & 0x1F; Word lw; - if ((l >> 6) < MaxDistance) { + if ((l >> Dictionary::DistancePos) < MaxDistance) { lw = Word::fromLength(lt + sizeof(Cell), len); if (equal(word, lw)) return lt; else if (lt == Begin) break; else - lt -= l >> 6; + lt -= l >> Dictionary::DistancePos; } else { lw = Word::fromLength(lt + 2 * sizeof(Cell), len); if (equal(word, lw)) @@ -120,7 +120,7 @@ Addr Dictionary::getexec(Addr addr) noexcept const Addr len = l & 0x1Fu; addr += sizeof(Cell); - if ((l >> 6) == MaxDistance) + if ((l >> Dictionary::DistancePos) == MaxDistance) addr += sizeof(Cell); addr += len; diff --git a/libalee/dictionary.hpp b/libalee/dictionary.hpp index ad1ee02..78bc19d 100644 --- a/libalee/dictionary.hpp +++ b/libalee/dictionary.hpp @@ -73,8 +73,10 @@ public: /** "Immediate" marker bit for a word's definition. */ constexpr static Cell Immediate = (1 << 5); + + constexpr static Cell DistancePos = 6; /** Maximum "short" distance between two definitions. */ - constexpr static Cell MaxDistance = (1 << (sizeof(Cell) * 8 - 6)) - 1; + constexpr static Cell MaxDistance = (1 << (sizeof(Cell) * 8 - DistancePos)) - 1; /** Returns the value of the cell at the given address. */ virtual Cell read(Addr) const noexcept = 0;