1 #ifndef OBERON_INTERNALS_H
2 #define OBERON_INTERNALS_H
4 #include <stdint.h>
5 #include <stdbool.h>
26 struct oberon_scope_t
27 {
37 };
39 enum oberon_type_kind
40 {
41 OBERON_TYPE_NOTYPE,
42 OBERON_TYPE_INTEGER,
43 OBERON_TYPE_BOOLEAN,
44 OBERON_TYPE_PROCEDURE,
45 OBERON_TYPE_ARRAY,
46 OBERON_TYPE_RECORD,
47 OBERON_TYPE_POINTER,
48 OBERON_TYPE_REAL,
49 OBERON_TYPE_CHAR,
50 OBERON_TYPE_STRING,
51 OBERON_TYPE_SET,
52 OBERON_TYPE_NIL,
53 OBERON_TYPE_SYSTEM_BYTE,
54 OBERON_TYPE_SYSTEM_PTR
55 };
60 struct oberon_type_t
61 {
73 GenerateFuncCallback genfunc;
74 GenerateProcCallback genproc;
81 };
83 enum oberon_object_kind
84 {
85 OBERON_CLASS_VAR,
86 OBERON_CLASS_TYPE,
87 OBERON_CLASS_PROC,
88 OBERON_CLASS_PARAM,
89 OBERON_CLASS_VAR_PARAM,
90 OBERON_CLASS_CONST,
91 OBERON_CLASS_FIELD,
92 OBERON_CLASS_MODULE
93 };
95 struct oberon_object_t
96 {
120 };
122 struct oberon_module_t
123 {
133 };
135 struct oberon_location_t
136 {
140 };
142 struct oberon_scanner_t
143 {
146 };
150 struct oberon_context_t
151 {
152 /*** SCANER DATA ***/
155 oberon_location_t loc;
156 oberon_location_t xloc;
164 /*** END SCANER DATA ***/
166 /*** PARSER DATA ***/
169 /*** END PARSER DATA ***/
190 ModuleImportCallback import_module;
192 };
194 enum oberon_mode_kind
195 {
196 MODE_VAR,
197 MODE_INTEGER,
198 MODE_BOOLEAN,
199 MODE_CALL,
200 MODE_INDEX,
201 MODE_FIELD,
202 MODE_DEREF,
203 MODE_NIL,
204 MODE_NEW,
205 MODE_REAL,
206 MODE_CHAR,
207 MODE_STRING,
208 MODE_TYPE,
209 MODE_SET,
210 MODE_LEN,
211 MODE_SYSBYTE
212 };
214 enum oberon_operator_kind
215 {
216 OP_UNARY_MINUS,
217 OP_LOGIC_NOT,
218 OP_ABS,
219 OP_CAP,
220 OP_ENTIER,
222 OP_ADD,
223 OP_SUB,
224 OP_MUL,
225 OP_DIV,
226 OP_MOD,
227 OP_LOGIC_AND,
228 OP_LOGIC_OR,
230 OP_EQ,
231 OP_NEQ,
232 OP_LSS,
233 OP_LEQ,
234 OP_GRT,
235 OP_GEQ,
237 OP_CAST,
238 OP_HARDCAST,
239 OP_IS,
241 OP_RANGE,
242 OP_UNION,
243 OP_INTERSECTION,
244 OP_DIFFERENCE,
245 OP_SYM_DIFFERENCE,
246 OP_COMPLEMENTATION,
247 OP_IN,
249 OP_ASH,
250 OP_LSH,
251 OP_ROT
252 };
254 struct oberon_item_t
255 {
271 };
273 struct oberon_oper_t
274 {
283 };
285 union oberon_expr_t
286 {
292 };
294 oberon_item_t item;
295 oberon_oper_t oper;
296 };