diff options
author | Clyne Sullivan <clyne@bitgloo.com> | 2024-12-19 17:29:23 -0500 |
---|---|---|
committer | Clyne Sullivan <clyne@bitgloo.com> | 2024-12-19 17:29:23 -0500 |
commit | ff4e488ca0fd012a4b632bf2f9a775a601c09f67 (patch) | |
tree | f5bbfa2eae01dd53371d6dac42114b7c6cd719d5 | |
parent | 3246deb437054ff67e600a95d05535251642ad76 (diff) |
define type in forth
-rw-r--r-- | core.fth | 22 | ||||
-rw-r--r-- | main.cpp | 7 |
2 files changed, 13 insertions, 16 deletions
@@ -65,18 +65,20 @@ dup cell+ allot rot here swap ! swap postpone literal postpone literal then ; immediate -: ." postpone s" state @ if postpone type else type then ; immediate +: type ?dup if 0 do dup c@ emit 1+ loop then drop ; +: ." postpone s" state @ if postpone type else type then ; immediate : ( begin [char] ) key = until ; immediate : execute [ here 3 cells + ] literal ! [ ' _jmp , 0 , ] ; -: move dup 0 <= if drop 2drop exit then - >r 2dup < r> swap if - 1- 0 swap do over i + c@ over i + c! -1 +loop - else - 0 do over i + c@ over i + c! loop - then 2drop ; -: fill -rot begin dup 0 > while - >r 2dup c! char+ r> 1- repeat - 2drop drop ; +: move dup 0 <= if drop 2drop exit then + >r 2dup < r> swap if + 1- 0 swap do over i + c@ over i + c! -1 +loop + else + 0 do over i + c@ over i + c! loop + then 2drop ; +: fill -rot begin dup 0 > while + >r 2dup c! char+ r> 1- repeat + 2drop drop ; + @@ -40,17 +40,12 @@ constinit static sforth::native_word<"U.", [](auto) { constinit static sforth::native_word<"EMIT", [](auto) { std::cout << static_cast<char>(forth.pop()); }, &udot> emit; -constinit static sforth::native_word<"TYPE", [](auto) { - const unsigned u = forth.pop(); - const auto caddr = reinterpret_cast<const char *>(forth.pop()); - std::cout << std::string_view{caddr, u}; -}, &emit> type; constinit static sforth::native_word<"INCLUDE", [](auto) { const auto w = forth.parse(); std::string s {w.begin(), w.end()}; std::ifstream file {s}; parse_stream(forth, file); -}, &type> incl; +}, &emit> incl; int main(int argc, const char *argv[]) { |