|
|
@ -208,6 +208,7 @@ constexpr auto initialize()
|
|
|
|
, S{"dp" }, [](auto) { fthp->push(std::bit_cast<cell>(fthp) + 4 * sizeof(cell)); }, 0
|
|
|
|
, S{"dp" }, [](auto) { fthp->push(std::bit_cast<cell>(fthp) + 4 * sizeof(cell)); }, 0
|
|
|
|
, S{"state"}, [](auto) { fthp->push(std::bit_cast<cell>(fthp) + 7 * sizeof(cell)); }, 0
|
|
|
|
, S{"state"}, [](auto) { fthp->push(std::bit_cast<cell>(fthp) + 7 * sizeof(cell)); }, 0
|
|
|
|
, S{"base" }, [](auto) { fthp->push(std::bit_cast<cell>(fthp) + 8 * sizeof(cell)); }, 0
|
|
|
|
, S{"base" }, [](auto) { fthp->push(std::bit_cast<cell>(fthp) + 8 * sizeof(cell)); }, 0
|
|
|
|
|
|
|
|
, S{"depth"}, [](auto) { fthp->push(std::distance(fthp->sp, fthp->dstack.end())); }, 0
|
|
|
|
, S{"unused"}, [](auto) { fthp->push(sizeof(cell) * std::distance(fthp->here, fthp->dict.end())); }, 0
|
|
|
|
, S{"unused"}, [](auto) { fthp->push(sizeof(cell) * std::distance(fthp->here, fthp->dict.end())); }, 0
|
|
|
|
, S{"_lit" }, lit_impl, 0
|
|
|
|
, S{"_lit" }, lit_impl, 0
|
|
|
|
, S{"swap" }, [](auto) { auto a = fthp->pop(); auto b = fthp->pop(); fthp->push(a, b); }, 0
|
|
|
|
, S{"swap" }, [](auto) { auto a = fthp->pop(); auto b = fthp->pop(); fthp->push(a, b); }, 0
|
|
|
@ -264,6 +265,13 @@ constexpr auto initialize()
|
|
|
|
auto g = fthp->get(w);
|
|
|
|
auto g = fthp->get(w);
|
|
|
|
assert<error::word_not_found>(g.has_value());
|
|
|
|
assert<error::word_not_found>(g.has_value());
|
|
|
|
*fthp->here++ = std::bit_cast<cell>((*g)->body()); }, word_base::immediate
|
|
|
|
*fthp->here++ = std::bit_cast<cell>((*g)->body()); }, word_base::immediate
|
|
|
|
|
|
|
|
, S{"source"}, [](auto) {
|
|
|
|
|
|
|
|
auto len = 0u;
|
|
|
|
|
|
|
|
while (fthp->source[len])
|
|
|
|
|
|
|
|
len++;
|
|
|
|
|
|
|
|
fthp->push(std::bit_cast<cell>(fthp->source));
|
|
|
|
|
|
|
|
fthp->push(len); }, 0
|
|
|
|
|
|
|
|
, S{">in"}, [](auto) { fthp->push(std::bit_cast<cell>(&fthp->sourcei)); }, 0
|
|
|
|
>::word;
|
|
|
|
>::word;
|
|
|
|
constexpr static auto& dict2 = comp_dict<prologue, &dict1
|
|
|
|
constexpr static auto& dict2 = comp_dict<prologue, &dict1
|
|
|
|
, S{"align" }, S{"here dup aligned swap - allot"}, 0
|
|
|
|
, S{"align" }, S{"here dup aligned swap - allot"}, 0
|
|
|
@ -303,6 +311,8 @@ constexpr auto initialize()
|
|
|
|
, S{"negate"}, S{"-1 *"}, 0
|
|
|
|
, S{"negate"}, S{"-1 *"}, 0
|
|
|
|
, S{"2*" }, S{"2 *"}, 0
|
|
|
|
, S{"2*" }, S{"2 *"}, 0
|
|
|
|
, S{"bl" }, S{"32"}, 0
|
|
|
|
, S{"bl" }, S{"32"}, 0
|
|
|
|
|
|
|
|
, S{"false" }, S{"0"}, 0
|
|
|
|
|
|
|
|
, S{"true" }, S{"-1"}, 0
|
|
|
|
>::word;
|
|
|
|
>::word;
|
|
|
|
|
|
|
|
|
|
|
|
return &dict2;
|
|
|
|
return &dict2;
|
|
|
|