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 {
67 GenerateFuncCallback genfunc;
68 GenerateProcCallback genproc;
75 };
77 enum oberon_object_kind
78 {
79 OBERON_CLASS_VAR,
80 OBERON_CLASS_TYPE,
81 OBERON_CLASS_PROC,
82 OBERON_CLASS_PARAM,
83 OBERON_CLASS_VAR_PARAM,
84 OBERON_CLASS_CONST,
85 OBERON_CLASS_FIELD,
86 OBERON_CLASS_MODULE
87 };
89 struct oberon_object_t
90 {
114 };
116 struct oberon_module_t
117 {
126 };
130 struct oberon_context_t
131 {
132 /*** SCANER DATA ***/
142 /*** END SCANER DATA ***/
144 /*** PARSER DATA ***/
147 /*** END PARSER DATA ***/
164 ModuleImportCallback import_module;
166 };
168 enum oberon_mode_kind
169 {
170 MODE_VAR,
171 MODE_INTEGER,
172 MODE_BOOLEAN,
173 MODE_CALL,
174 MODE_INDEX,
175 MODE_FIELD,
176 MODE_DEREF,
177 MODE_NIL,
178 MODE_NEW,
179 MODE_REAL,
180 MODE_CHAR,
181 MODE_STRING,
182 MODE_TYPE,
183 MODE_SET
184 };
186 enum oberon_operator_kind
187 {
188 OP_UNARY_MINUS,
189 OP_LOGIC_NOT,
190 OP_ABS,
191 OP_CAP,
193 OP_ADD,
194 OP_SUB,
195 OP_MUL,
196 OP_DIV,
197 OP_MOD,
198 OP_LOGIC_AND,
199 OP_LOGIC_OR,
201 OP_EQ,
202 OP_NEQ,
203 OP_LSS,
204 OP_LEQ,
205 OP_GRT,
206 OP_GEQ,
208 OP_CAST,
209 OP_IS,
211 OP_RANGE,
212 OP_UNION,
213 OP_INTERSECTION,
214 OP_DIFFERENCE,
215 OP_SYM_DIFFERENCE,
216 OP_COMPLEMENTATION,
217 OP_IN,
219 OP_ASH
220 };
222 struct oberon_item_t
223 {
239 };
241 struct oberon_oper_t
242 {
251 };
253 union oberon_expr_t
254 {
260 };
262 oberon_item_t item;
263 oberon_oper_t oper;
264 };