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 MODE_AS
213 };
215 enum oberon_operator_kind
216 {
217 OP_UNARY_MINUS,
218 OP_LOGIC_NOT,
219 OP_ABS,
220 OP_CAP,
221 OP_ENTIER,
223 OP_ADD,
224 OP_SUB,
225 OP_MUL,
226 OP_DIV,
227 OP_MOD,
228 OP_LOGIC_AND,
229 OP_LOGIC_OR,
231 OP_EQ,
232 OP_NEQ,
233 OP_LSS,
234 OP_LEQ,
235 OP_GRT,
236 OP_GEQ,
238 OP_CAST,
239 OP_HARDCAST,
240 OP_IS,
242 OP_RANGE,
243 OP_UNION,
244 OP_INTERSECTION,
245 OP_DIFFERENCE,
246 OP_SYM_DIFFERENCE,
247 OP_COMPLEMENTATION,
248 OP_IN,
250 OP_ASH,
251 OP_LSH,
252 OP_ROT
253 };
255 struct oberon_item_t
256 {
272 };
274 struct oberon_oper_t
275 {
284 };
286 union oberon_expr_t
287 {
293 };
295 oberon_item_t item;
296 oberon_oper_t oper;
297 };