2 * Функции инициализации контекста и объектов
5 void oberon_generator_init_context(oberon_context_t
* ctx
);
6 void oberon_generator_init_type(oberon_context_t
* ctx
, oberon_type_t
* type
);
7 void oberon_generator_init_record(oberon_context_t
* ctx
, oberon_type_t
* type
);
8 void oberon_generator_init_var(oberon_context_t
* ctx
, oberon_object_t
* var
);
9 void oberon_generator_init_temp_var(oberon_context_t
* ctx
, oberon_object_t
* var
);
10 void oberon_generator_init_proc(oberon_context_t
* ctx
, oberon_object_t
* proc
);
11 void oberon_generator_destroy_context(oberon_context_t
* ctx
);
13 void oberon_generator_init_module(oberon_context_t
* ctx
, oberon_module_t
* mod
);
14 void oberon_generator_fini_module(oberon_module_t
* mod
);
17 * Функции генерации тела модуля
20 void oberon_generate_begin_module(oberon_context_t
* ctx
);
21 void oberon_generate_end_module(oberon_context_t
* ctx
);
24 * Функции генерации и вызова процедур
27 void oberon_generate_begin_proc(oberon_context_t
* ctx
, oberon_object_t
* proc
);
28 void oberon_generate_end_proc(oberon_context_t
* ctx
);
29 void oberon_generate_call_proc(oberon_context_t
* ctx
, oberon_expr_t
* desig
);
31 gen_label_t
* oberon_generator_reserve_label(oberon_context_t
* ctx
);
32 void oberon_generate_label(oberon_context_t
* ctx
, gen_label_t
* l
);
33 void oberon_generate_branch(oberon_context_t
* ctx
, oberon_expr_t
* cond
, bool gotoif
, gen_label_t
* l
);
34 void oberon_generate_goto(oberon_context_t
* ctx
, gen_label_t
* l
);
37 * Функции генерации операторов
40 void oberon_generate_assign(oberon_context_t
* ctx
, oberon_expr_t
* src
, oberon_expr_t
* dst
);
41 void oberon_generate_copy(oberon_context_t
* ctx
, oberon_expr_t
* src
, oberon_expr_t
* dst
);
42 void oberon_generate_assert_n(oberon_context_t
* ctx
, oberon_expr_t
* cond
, int64_t n
);
43 void oberon_generate_assert(oberon_context_t
* ctx
, oberon_expr_t
* cond
);
44 void oberon_generate_trap(oberon_context_t
* ctx
, int64_t n
);
45 void oberon_generate_halt(oberon_context_t
* ctx
, int64_t n
);
46 void oberon_generate_return(oberon_context_t
* ctx
, oberon_expr_t
* expr
);
48 void oberon_set_out_directory(oberon_context_t
* ctx
, const char * path
);