1 #ifndef OBERON_INTERNALS_H
2 #define OBERON_INTERNALS_H
4 #include <stdint.h>
5 #include <stdbool.h>
24 struct oberon_scope_t
25 {
35 };
37 enum oberon_type_kind
38 {
39 OBERON_TYPE_NOTYPE,
40 OBERON_TYPE_INTEGER,
41 OBERON_TYPE_BOOLEAN,
42 OBERON_TYPE_PROCEDURE,
43 OBERON_TYPE_ARRAY,
44 OBERON_TYPE_RECORD,
45 OBERON_TYPE_POINTER,
46 OBERON_TYPE_REAL,
47 OBERON_TYPE_CHAR,
48 OBERON_TYPE_STRING,
49 OBERON_TYPE_SET,
50 OBERON_TYPE_NIL
51 };
56 struct oberon_type_t
57 {
69 GenerateFuncCallback genfunc;
70 GenerateProcCallback genproc;
77 };
79 enum oberon_object_kind
80 {
81 OBERON_CLASS_VAR,
82 OBERON_CLASS_TYPE,
83 OBERON_CLASS_PROC,
84 OBERON_CLASS_PARAM,
85 OBERON_CLASS_VAR_PARAM,
86 OBERON_CLASS_CONST,
87 OBERON_CLASS_FIELD,
88 OBERON_CLASS_MODULE
89 };
91 struct oberon_object_t
92 {
116 };
118 struct oberon_module_t
119 {
128 };
132 struct oberon_context_t
133 {
134 /*** SCANER DATA ***/
144 /*** END SCANER DATA ***/
146 /*** PARSER DATA ***/
149 /*** END PARSER DATA ***/
166 ModuleImportCallback import_module;
168 };
170 enum oberon_mode_kind
171 {
172 MODE_VAR,
173 MODE_INTEGER,
174 MODE_BOOLEAN,
175 MODE_CALL,
176 MODE_INDEX,
177 MODE_FIELD,
178 MODE_DEREF,
179 MODE_NIL,
180 MODE_NEW,
181 MODE_REAL,
182 MODE_CHAR,
183 MODE_STRING,
184 MODE_TYPE,
185 MODE_SET,
186 MODE_LEN
187 };
189 enum oberon_operator_kind
190 {
191 OP_UNARY_MINUS,
192 OP_LOGIC_NOT,
193 OP_ABS,
194 OP_CAP,
195 OP_ENTIER,
197 OP_ADD,
198 OP_SUB,
199 OP_MUL,
200 OP_DIV,
201 OP_MOD,
202 OP_LOGIC_AND,
203 OP_LOGIC_OR,
205 OP_EQ,
206 OP_NEQ,
207 OP_LSS,
208 OP_LEQ,
209 OP_GRT,
210 OP_GEQ,
212 OP_CAST,
213 OP_IS,
215 OP_RANGE,
216 OP_UNION,
217 OP_INTERSECTION,
218 OP_DIFFERENCE,
219 OP_SYM_DIFFERENCE,
220 OP_COMPLEMENTATION,
221 OP_IN,
223 OP_ASH
224 };
226 struct oberon_item_t
227 {
243 };
245 struct oberon_oper_t
246 {
255 };
257 union oberon_expr_t
258 {
264 };
266 oberon_item_t item;
267 oberon_oper_t oper;
268 };