maug
Quick and dirty C mini-augmentation library.
Loading...
Searching...
No Matches
mlisps.h
Go to the documentation of this file.
1
2#ifndef MLISPS_H
3#define MLISPS_H
4
12
13#ifndef MLISP_TRACE_LVL
14# define MLISP_TRACE_LVL 0
15#endif /* !MLISP_TRACE_LVL */
16
17#ifndef MLISP_TRACE_SIGIL
18# define MLISP_TRACE_SIGIL "TRACE"
19#endif /* !MLISP_TRACE_SIGIL */
20
21#ifndef MLISP_AST_IDX_CHILDREN_MAX
22# define MLISP_AST_IDX_CHILDREN_MAX 10
23#endif /* !MLISP_AST_IDX_CHILDREN_MAX */
24
30#define MLISP_EXEC_FLAG_TRANSIENT_MASK 0x0f
31
37#define MLISP_EXEC_FLAG_DEF_TERM 0x20
38
47#define MLISP_EXEC_FLAG_SHARED_ENV 0x40
48
49#define MLISP_EXEC_FLAG_INITIALIZED 0x08
50
55
56typedef ssize_t mlisp_lambda_t;
57
58typedef mlisp_lambda_t mlisp_args_t;
59typedef mlisp_lambda_t mlisp_arge_t;
60typedef mlisp_lambda_t mlisp_if_t;
61typedef mlisp_lambda_t mlisp_begin_t;
62
63typedef uint8_t mlisp_bool_t;
64
70#define MLISP_NUM_TYPE_TABLE( f ) \
71 f( 1, int16_t, integer, INT, "%d" ) \
72 f( 2, float, floating, FLOAT, "%f" ) \
73 f( 3, mlisp_bool_t, boolean, BOOLEAN, "%u" )
74
80#define MLISP_TYPE_TABLE( f ) \
81 MLISP_NUM_TYPE_TABLE( f ) \
82 f( 4, mdata_strpool_idx_t, strpool_idx, STR, SSIZE_T_FMT ) \
83 f( 5, mlisp_env_cb_t, cb, CB, "%p" ) \
84 f( 6, mlisp_lambda_t, lambda, LAMBDA, SSIZE_T_FMT ) \
85 f( 7, mlisp_args_t, args_start, ARGS_S, SSIZE_T_FMT ) \
86 f( 8, mlisp_arge_t, args_end, ARGS_E, SSIZE_T_FMT ) \
87 f(10, mlisp_begin_t, begin, BEGIN, SSIZE_T_FMT )
88 /* mlisp_types */
90
91struct MLISP_PARSER;
92struct MLISP_EXEC_STATE;
93
101 struct MLISP_PARSER* parser, struct MLISP_EXEC_STATE* exec, size_t n_idx,
102 size_t args_c, void* cb_data, uint8_t flags );
103
104#define _MLISP_TYPE_TABLE_FIELDS( idx, ctype, name, const_name, fmt ) \
105 ctype name;
106
108 MLISP_TYPE_TABLE( _MLISP_TYPE_TABLE_FIELDS )
109};
110
112 uint8_t flags;
113 uint8_t type;
114 mdata_strpool_idx_t name_strpool_idx;
115 size_t name_strpool_sz;
116 union MLISP_VAL value;
117 void* cb_data;
118};
119
121 uint8_t type;
122 union MLISP_VAL value;
123};
124
126 uint8_t flags;
127 mdata_strpool_idx_t token_idx;
128 size_t token_sz;
129 ssize_t ast_idx_parent;
130 ssize_t env_idx_op;
131 ssize_t ast_idx_children[MLISP_AST_IDX_CHILDREN_MAX];
134};
135
144 uint16_t uid;
146 uint8_t flags;
165 struct MDATA_VECTOR* global_env;
171 void* cb_attachment;
172#ifdef MLISP_DEBUG_TRACE
173 size_t trace[MLISP_DEBUG_TRACE];
174 size_t trace_depth;
175#endif /* MLISP_DEBUG_TRACE */
176};
177
179 struct MPARSER base;
180 struct MDATA_STRPOOL strpool;
181 struct MDATA_VECTOR ast;
187 ssize_t ast_node_iter;
188};
189 /* mlisp */
191
192#endif /* !MLISPS_H */
193
int MERROR_RETVAL
Return type indicating function returns a value from this list.
Definition merror.h:19
#define MLISP_TYPE_TABLE(f)
Table of other types.
Definition mlisps.h:80
MERROR_RETVAL(* mlisp_env_cb_t)(struct MLISP_PARSER *parser, struct MLISP_EXEC_STATE *exec, size_t n_idx, size_t args_c, void *cb_data, uint8_t flags)
A callback to attach to an mlisp command with mlisp_env_set() with MLISP_TYPE_CB.
Definition mlisps.h:100
A pool of immutable text strings. Deduplicates strings to save memory.
Definition mdata.h:60
A vector of uniformly-sized objects, stored contiguously.
Definition mdata.h:85
Definition mlisps.h:125
size_t ast_idx_children_sz
Number of children in MLISP_AST_NODE::ast_idx_children.
Definition mlisps.h:133
Definition mlisps.h:111
Current execution state to associate with a MLISP_PARSER.
Definition mlisps.h:143
struct MDATA_VECTOR lambda_trace
Path through any lambdas the execution has entered during this heartbeat cycle. Used to detect tail c...
Definition mlisps.h:170
struct MDATA_VECTOR per_node_child_idx
The hild index that will be visited on next visit of each node.
Definition mlisps.h:155
struct MDATA_VECTOR per_node_visit_ct
The number of times each node has been visited ever.
Definition mlisps.h:148
struct MDATA_VECTOR stack
A stack of data values resulting from evaluating statements.
Definition mlisps.h:157
uint8_t flags
Flags which dictate the behavior of this object.
Definition mlisps.h:146
struct MDATA_VECTOR env
Environment in which statements are defined if ::MLISP_.
Definition mlisps.h:164
Definition mlisps.h:178
struct MDATA_VECTOR env
Definitions to use if ::MLISP_EXEC_FLAG_DEF_TERM is defined on the accompanying MLISP_EXEC_STATE::fla...
Definition mlisps.h:186
Definition mlisps.h:120
Definition mlisps.h:107