main
Clyne 3 weeks ago
parent 2820ff4559
commit b40fba6baf
Signed by: clyne
GPG Key ID: 1B74EE6C49C96795

@ -16,6 +16,7 @@
: ip [ _d cell+ cell+ ] literal ;
: here dp @ ;
: unused [ _d 8 cells + ] literal @ here - ;
: base [ _d 9 cells + ] literal ;
: latest [ _d 4 cells + ] literal @ ;
\ : dup sp@ @ ;
@ -43,3 +44,6 @@
: then here swap ! ; immediate
: else ['] _jmp , here 0 , swap here swap ! ; immediate
: decimal 10 base ! ;
: hex 16 base ! ;

@ -172,7 +172,8 @@ struct forth
if (auto ent = get(word); !ent) {
cell n;
const auto [p, e] = std::from_chars(word.cbegin(), word.cend(), n);
const auto [p, e] = std::from_chars(word.cbegin(), word.cend(),
n, base);
assert<error::word_not_found>(e == std::errc() && p == word.cend());
@ -356,6 +357,7 @@ struct forth
std::size_t sourcei = npos;
cell compiling = false;
cell *end = nullptr;
cell base = 10;
std::array<cell, data_size> dstack;
std::array<cell, return_size> rstack;
};
@ -369,6 +371,7 @@ static_assert(offsetof(forth, source) == 5 * sizeof(forth::cell));
static_assert(offsetof(forth, sourcei) == 6 * sizeof(forth::cell));
static_assert(offsetof(forth, compiling) == 7 * sizeof(forth::cell));
static_assert(offsetof(forth, end) == 8 * sizeof(forth::cell));
static_assert(offsetof(forth, base) == 9 * sizeof(forth::cell));
#endif // SFORTH_HPP

@ -32,7 +32,11 @@ int main(int argc, const char *argv[])
std::span args (argv + 1, argc - 1);
forth::initialize<&fth>(dict.end());
fth->add(".", [](auto) { std::cout << fth->pop() << ' '; });
fth->add(".", [](auto) {
char buf[32];
std::to_chars(buf, buf + sizeof(buf), fth->pop(), fth->base);
std::cout << buf << ' ';
});
fth->add("emit", [](auto) { std::cout << static_cast<char>(fth->pop()); });
for (auto arg : args) {

Loading…
Cancel
Save