1 #ifndef OBERON_INTERNALS_H
2 #define OBERON_INTERNALS_H
4 #include <stdint.h>
5 #include <stdbool.h>
24 struct oberon_scope_t
25 {
33 };
35 enum oberon_type_kind
36 {
37 OBERON_TYPE_VOID,
38 OBERON_TYPE_INTEGER,
39 OBERON_TYPE_BOOLEAN,
40 OBERON_TYPE_PROCEDURE,
41 OBERON_TYPE_ARRAY,
42 OBERON_TYPE_RECORD,
43 OBERON_TYPE_POINTER,
44 OBERON_TYPE_REAL,
45 OBERON_TYPE_CHAR
46 };
51 struct oberon_type_t
52 {
62 GenerateFuncCallback genfunc;
63 GenerateProcCallback genproc;
70 };
72 enum oberon_object_kind
73 {
74 OBERON_CLASS_VAR,
75 OBERON_CLASS_TYPE,
76 OBERON_CLASS_PROC,
77 OBERON_CLASS_PARAM,
78 OBERON_CLASS_VAR_PARAM,
79 OBERON_CLASS_CONST,
80 OBERON_CLASS_FIELD,
81 OBERON_CLASS_MODULE
82 };
84 struct oberon_object_t
85 {
109 };
111 struct oberon_module_t
112 {
121 };
125 struct oberon_context_t
126 {
127 /*** SCANER DATA ***/
137 /*** END SCANER DATA ***/
139 /*** PARSER DATA ***/
142 /*** END PARSER DATA ***/
157 ModuleImportCallback import_module;
159 };
161 enum oberon_mode_kind
162 {
163 MODE_VAR,
164 MODE_INTEGER,
165 MODE_BOOLEAN,
166 MODE_CALL,
167 MODE_INDEX,
168 MODE_FIELD,
169 MODE_DEREF,
170 MODE_NIL,
171 MODE_NEW,
172 MODE_REAL,
173 MODE_CHAR
174 };
176 enum oberon_operator_kind
177 {
178 OP_UNARY_MINUS,
179 OP_BITWISE_NOT,
180 OP_LOGIC_NOT,
181 OP_ABS,
183 OP_ADD,
184 OP_SUB,
185 OP_MUL,
186 OP_DIV,
187 OP_MOD,
188 OP_BITWISE_AND,
189 OP_BITWISE_XOR,
190 OP_BITWISE_OR,
191 OP_LOGIC_AND,
192 OP_LOGIC_OR,
194 OP_EQ,
195 OP_NEQ,
196 OP_LSS,
197 OP_LEQ,
198 OP_GRT,
199 OP_GEQ,
201 OP_CAST
202 };
204 struct oberon_item_t
205 {
221 };
223 struct oberon_oper_t
224 {
233 };
235 union oberon_expr_t
236 {
242 };
244 oberon_item_t item;
245 oberon_oper_t oper;
246 };