/** * Forth stack operations * * Created on 2021/11/13. */ #ifndef FORTH_FH_STACK_H #define FORTH_FH_STACK_H enum fh_error ds_roll(struct fh_thread_s *fh, int n); /** Peek n-th element of data stack, 0=topmost */ enum fh_error ds_peek_n(struct fh_thread_s *fh, uint32_t *out, int n); /** Peek n-th element of return stack, 0=topmost */ enum fh_error rs_peek_n(struct fh_thread_s *fh, uint32_t *out, int n); /** Peek n-th element of control stack, 0=topmost */ static inline enum fh_error cs_peek_n(struct fh_thread_s *fh, uint32_t *out, int n) { return ds_peek_n(fh, out, n); } enum fh_error ds_push_dw(struct fh_thread_s *fh, uint64_t in); enum fh_error ds_pop_dw(struct fh_thread_s *fh, uint64_t *out); enum fh_error rs_poke_n(struct fh_thread_s *fh, uint32_t value, int n); /** Peek top of data stack */ static inline enum fh_error ds_peek(struct fh_thread_s *fh, uint32_t *out) { return ds_peek_n(fh, out, 0); } /** Peek top of return stack */ static inline enum fh_error rs_peek(struct fh_thread_s *fh, uint32_t *out) { return rs_peek_n(fh, out, 0); } /** Peek top of control stack */ static inline enum fh_error cs_peek(struct fh_thread_s *fh, uint32_t *out) { return cs_peek_n(fh, out, 0); } enum fh_error ds_pop(struct fh_thread_s *fh, uint32_t *out); enum fh_error rs_pop(struct fh_thread_s *fh, uint32_t *out); static inline enum fh_error cs_pop(struct fh_thread_s *fh, uint32_t *out) { return ds_pop(fh, out); } enum fh_error ds_push(struct fh_thread_s *fh, uint32_t in); enum fh_error rs_push(struct fh_thread_s *fh, uint32_t in); static inline enum fh_error cs_push(struct fh_thread_s *fh, uint32_t in) { return ds_push(fh, in); } #endif //FORTH_FH_STACK_H