/** * Forth built-ins * * Created on 2021/11/13. */ #ifndef FORTH_FH_BUILTINS_H #define FORTH_FH_BUILTINS_H struct name_and_handler { const char *name; word_exec_t handler; bool immediate; uint32_t param; }; enum fh_error fh_register_words_from_array(struct fh_thread_s *fh, const struct name_and_handler *p); enum fh_error register_builtin_words(struct fh_thread_s *fh); #define TOBOOL(a) ((a) == 0 ? 0 : 0xFFFFFFFF) #define ENSURE_STATE(__state) do { \ if (fh->state != (__state)) { \ LOGE("Invalid state %d, expected %d in file " __FILE__ " line %d", fh->state, (__state), __LINE__); \ return FH_ERR_INVALID_STATE; \ } \ } while (0) extern const struct name_and_handler fh_builtins_control[]; extern const struct name_and_handler fh_builtins_arith[]; extern const struct name_and_handler fh_builtins_stack[]; extern const struct name_and_handler fh_builtins_mem[]; extern const struct name_and_handler fh_builtins_meta[]; extern const struct name_and_handler fh_builtins_text[]; extern const struct name_and_handler fh_builtins_system[]; extern const struct name_and_handler fh_builtins_stdin[]; enum fh_error ds_pop_addr_len(struct fh_thread_s *fh, uint32_t *addr, uint32_t *len); enum fh_error wp_const(struct fh_thread_s *fh, const struct fh_word_s *w); enum fh_error wp_mul(struct fh_thread_s *fh, const struct fh_word_s *w); enum fh_error wp_add(struct fh_thread_s *fh, const struct fh_word_s *w); #endif //FORTH_FH_BUILTINS_H