]> code.bitgloo.com Git - clyne/sforth.git/commitdiff
include, test.fth
authorClyne Sullivan <clyne@bitgloo.com>
Thu, 19 Dec 2024 22:18:08 +0000 (17:18 -0500)
committerClyne Sullivan <clyne@bitgloo.com>
Thu, 19 Dec 2024 22:18:08 +0000 (17:18 -0500)
main.cpp
test.fth [new file with mode: 0644]

index 83c3a81a16c744193454d24c1c83c00566409bd4..ec2e02c289e99e9b448aa6f9981b5f5985b08fb8 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -25,6 +25,8 @@
 
 constinit static sforth::forth<4096> forth {sforth::initialize<&forth>()};
 
+static bool parse_stream(auto&, std::istream&, bool say_okay = false);
+
 constinit static sforth::native_word<".", [](auto) {
     char buf[8 * sizeof(sforth::cell) + 1] = {};
     std::to_chars(buf, buf + sizeof(buf), forth.pop(), forth.base);
@@ -43,14 +45,18 @@ constinit static sforth::native_word<"TYPE", [](auto) {
     const auto caddr = reinterpret_cast<const char *>(forth.pop());
     std::cout << std::string_view{caddr, u};
 }, &emit> type;
-
-static bool parse_stream(auto&, std::istream&, bool say_okay = false);
+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;
 
 int main(int argc, const char *argv[])
 {
     std::span args (argv + 1, argc - 1);
 
-    dot.next = std::exchange(forth.next, &type);
+    dot.next = std::exchange(forth.next, &incl);
 
     for (auto arg : args) {
         if (std::ifstream file {arg}; parse_stream(forth, file))
diff --git a/test.fth b/test.fth
new file mode 100644 (file)
index 0000000..0a3bc1a
--- /dev/null
+++ b/test.fth
@@ -0,0 +1,5 @@
+include core.fth
+include forth2012-test-suite/src/tester.fr
+include forth2012-test-suite/src/core.fr
+cr
+bye