1 #ifndef OBERON_INTERNALS_H
2 #define OBERON_INTERNALS_H
7 typedef struct gen_module_t gen_module_t
;
8 typedef struct gen_proc_t gen_proc_t
;
9 typedef struct gen_type_t gen_type_t
;
10 typedef struct gen_var_t gen_var_t
;
11 typedef struct gen_label_t gen_label_t
;
12 typedef struct gen_context_t gen_context_t
;
14 typedef struct oberon_type_t oberon_type_t
;
15 typedef struct oberon_object_t oberon_object_t
;
16 typedef struct oberon_module_t oberon_module_t
;
17 typedef struct oberon_context_t oberon_context_t
;
18 typedef struct oberon_scope_t oberon_scope_t
;
20 typedef struct oberon_item_t oberon_item_t
;
21 typedef struct oberon_oper_t oberon_oper_t
;
22 typedef union oberon_expr_t oberon_expr_t
;
26 oberon_context_t
* ctx
;
27 oberon_object_t
* list
;
31 oberon_object_t
* parent
;
32 oberon_type_t
* parent_type
;
34 gen_label_t
* exit_label
;
42 OBERON_TYPE_PROCEDURE
,
53 typedef oberon_expr_t
* (*GenerateFuncCallback
)(oberon_context_t
*, int, oberon_expr_t
*);
54 typedef void (*GenerateProcCallback
)(oberon_context_t
*, int, oberon_expr_t
*);
58 enum oberon_type_kind
class;
63 oberon_object_t
* decl
;
64 oberon_scope_t
* scope
;
67 GenerateFuncCallback genfunc
;
68 GenerateProcCallback genproc
;
70 oberon_module_t
* module
;
74 gen_type_t
* gen_type
;
77 enum oberon_object_kind
83 OBERON_CLASS_VAR_PARAM
,
89 struct oberon_object_t
92 enum oberon_object_kind
class;
100 oberon_object_t
* parent
;
101 oberon_type_t
* parent_type
;
103 oberon_scope_t
* scope
; // for proc
104 int has_return
; // for proc
106 oberon_type_t
* type
;
107 oberon_item_t
* value
;
108 oberon_object_t
* next
;
110 oberon_module_t
* module
;
113 gen_proc_t
* gen_proc
;
116 struct oberon_module_t
121 oberon_scope_t
* decl
;
123 oberon_module_t
* next
;
125 gen_module_t
* gen_mod
;
128 typedef const char * (*ModuleImportCallback
)(const char * name
);
130 struct oberon_context_t
132 /*** SCANER DATA ***/
142 /*** END SCANER DATA ***/
144 /*** PARSER DATA ***/
145 oberon_scope_t
* decl
;
146 oberon_module_t
* mod
;
147 /*** END PARSER DATA ***/
149 oberon_type_t
* notype_type
;
150 oberon_type_t
* nil_type
;
151 oberon_type_t
* bool_type
;
152 oberon_type_t
* byte_type
;
153 oberon_type_t
* shortint_type
;
154 oberon_type_t
* int_type
;
155 oberon_type_t
* longint_type
;
156 oberon_type_t
* real_type
;
157 oberon_type_t
* longreal_type
;
158 oberon_type_t
* char_type
;
159 oberon_type_t
* string_type
;
160 oberon_type_t
* set_type
;
162 oberon_scope_t
* world_scope
;
163 oberon_module_t
* module_list
;
164 ModuleImportCallback import_module
;
165 gen_context_t
* gen_context
;
168 enum oberon_mode_kind
186 enum oberon_operator_kind
224 bool is_item
; // == 1
225 oberon_type_t
* result
;
226 oberon_expr_t
* next
;
229 enum oberon_mode_kind mode
;
233 oberon_object_t
* var
;
235 oberon_item_t
* parent
;
238 oberon_expr_t
* args
;
243 bool is_item
; // == 0
244 oberon_type_t
* result
;
245 oberon_expr_t
* next
;
248 enum oberon_operator_kind op
;
249 oberon_expr_t
* left
;
250 oberon_expr_t
* right
;
257 oberon_type_t
* result
;
258 oberon_expr_t
* next
;
266 #endif // OBERON_INTERNALS_H