/* * Функции инициализации контекста и объектов */ void oberon_generator_init_context(oberon_context_t * ctx); void oberon_generator_init_type(oberon_context_t * ctx, oberon_type_t * type); void oberon_generator_init_record(oberon_context_t * ctx, oberon_type_t * type); void oberon_generator_init_var(oberon_context_t * ctx, oberon_object_t * var); void oberon_generator_init_temp_var(oberon_context_t * ctx, oberon_object_t * var); void oberon_generator_init_proc(oberon_context_t * ctx, oberon_object_t * proc); void oberon_generator_destroy_context(oberon_context_t * ctx); void oberon_generator_init_module(oberon_context_t * ctx, oberon_module_t * mod); void oberon_generator_fini_module(oberon_module_t * mod); void oberon_set_typecheck(oberon_object_t * var, bool enable); /* * Функции генерации тела модуля */ void oberon_generate_begin_module(oberon_context_t * ctx); void oberon_generate_end_module(oberon_context_t * ctx); /* * Функции генерации и вызова процедур */ void oberon_generate_begin_proc(oberon_context_t * ctx, oberon_object_t * proc); void oberon_generate_end_proc(oberon_context_t * ctx); void oberon_generate_call_proc(oberon_context_t * ctx, oberon_expr_t * desig); gen_label_t * oberon_generator_reserve_label(oberon_context_t * ctx); void oberon_generate_label(oberon_context_t * ctx, gen_label_t * l); void oberon_generate_branch(oberon_context_t * ctx, oberon_expr_t * cond, bool gotoif, gen_label_t * l); void oberon_generate_goto(oberon_context_t * ctx, gen_label_t * l); /* * Функции генерации операторов */ void oberon_generate_assign(oberon_context_t * ctx, oberon_expr_t * src, oberon_expr_t * dst); void oberon_generate_copy(oberon_context_t * ctx, oberon_expr_t * src, oberon_expr_t * dst); void oberon_generate_assert_n(oberon_context_t * ctx, oberon_expr_t * cond, int64_t n); void oberon_generate_assert(oberon_context_t * ctx, oberon_expr_t * cond); void oberon_generate_trap(oberon_context_t * ctx, int64_t n); void oberon_generate_halt(oberon_context_t * ctx, int64_t n); void oberon_generate_return(oberon_context_t * ctx, oberon_expr_t * expr); void oberon_set_out_directory(oberon_context_t * ctx, const char * path); void oberon_set_line(oberon_context_t * ctx, int line);