|
|
|
/**
|
|
|
|
* 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
|