DEADSOFTWARE

2618ec77e09b856c78a33a094effdc8306c7dd01
[dsw-obn.git] / src / generator.h
1 /*
2 * Функции инициализации контекста и объектов
3 */
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);
16 void oberon_set_typecheck(oberon_object_t * var, bool enable);
18 /*
19 * Функции генерации тела модуля
20 */
22 void oberon_generate_begin_module(oberon_context_t * ctx);
23 void oberon_generate_end_module(oberon_context_t * ctx);
25 /*
26 * Функции генерации и вызова процедур
27 */
29 void oberon_generate_begin_proc(oberon_context_t * ctx, oberon_object_t * proc);
30 void oberon_generate_end_proc(oberon_context_t * ctx);
31 void oberon_generate_call_proc(oberon_context_t * ctx, oberon_expr_t * desig);
33 gen_label_t * oberon_generator_reserve_label(oberon_context_t * ctx);
34 void oberon_generate_label(oberon_context_t * ctx, gen_label_t * l);
35 void oberon_generate_branch(oberon_context_t * ctx, oberon_expr_t * cond, bool gotoif, gen_label_t * l);
36 void oberon_generate_goto(oberon_context_t * ctx, gen_label_t * l);
38 /*
39 * Функции генерации операторов
40 */
42 void oberon_generate_assign(oberon_context_t * ctx, oberon_expr_t * src, oberon_expr_t * dst);
43 void oberon_generate_copy(oberon_context_t * ctx, oberon_expr_t * src, oberon_expr_t * dst);
44 void oberon_generate_assert_n(oberon_context_t * ctx, oberon_expr_t * cond, int64_t n);
45 void oberon_generate_assert(oberon_context_t * ctx, oberon_expr_t * cond);
46 void oberon_generate_trap(oberon_context_t * ctx, int64_t n);
47 void oberon_generate_halt(oberon_context_t * ctx, int64_t n);
48 void oberon_generate_return(oberon_context_t * ctx, oberon_expr_t * expr);
50 void oberon_set_out_directory(oberon_context_t * ctx, const char * path);