diff options
Diffstat (limited to 'source/executor.hpp')
-rw-r--r-- | source/executor.hpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/source/executor.hpp b/source/executor.hpp new file mode 100644 index 0000000..2029080 --- /dev/null +++ b/source/executor.hpp @@ -0,0 +1,53 @@ +// sprit-forth: A portable subroutine-threaded Forth. +// Copyright (C) 2024 Clyne Sullivan <clyne@bitgloo.com> +// +// This library is free software; you can redistribute it and/or modify it +// under the terms of the GNU Library General Public License as published by +// the Free Software Foundation; either version 2 of the License, or (at your +// option) any later version. +// +// This library is distributed in the hope that it will be useful, but WITHOUT +// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +// FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for +// more details. +// +// You should have received a copy of the GNU Library General Public License +// along with this library; if not, write to the Free Software Foundation, Inc., +// 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + +#ifndef EXECUTOR_HPP +#define EXECUTOR_HPP + +#include "types.hpp" + +#include <csetjmp> + +class Executor +{ + std::jmp_buf jmpbuf; + +public: + FuncList ip = nullptr; + + /** + * Begins execution with the given function pointer list. + * @param list Function pointer list to execute + */ + [[nodiscard]] + Error executor(FuncList *list) noexcept; + + /** + * Executes the given word by calling executor on its definition. + * @param word The word to execute + */ + [[nodiscard]] + Error execute1(Word *word) noexcept; + + [[noreturn]] + void terminate(Error error) noexcept; +}; + +extern Executor Exec; + +#endif // EXECUTOR_HPP + |