]> code.bitgloo.com Git - bitgloo/alee-forth.git/commitdiff
distancepos constant
authorClyne Sullivan <clyne@bitgloo.com>
Sun, 31 Dec 2023 19:50:46 +0000 (14:50 -0500)
committerClyne Sullivan <clyne@bitgloo.com>
Sun, 31 Dec 2023 19:50:46 +0000 (14:50 -0500)
libalee/corewords.cpp
libalee/dictionary.cpp
libalee/dictionary.hpp

index d47e0929408b7c64c82ac40ca8e09e4b14a80fac..8ff7ac6dc942ee756eadcfcd15e880b933d84775 100644 (file)
@@ -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<Cell>(dcell << 6));
+        (state.dict.read(cell) & 0x1F) | static_cast<Cell>(dcell << Dictionary::DistancePos));
     state.dict.latest(cell);
 }
 void CoreWords::word_jmp0(State& state) { // Jump if popped value equals zero.
index b1cbc5f17a3696c58a21c47bbdfa6fe671164b61..0abc03807913b7b22a9454cee8e802c8410bdcf8 100644 (file)
@@ -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;
index ad1ee02afd42f658a5dc602286d3cfd5ace88be4..78bc19dc8221c22f70ea652b52e9c1c920faf070 100644 (file)
@@ -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;