static void generate_if(struct vec *v,OBJ ast) { char* label1; char* label2; generate_r(v,obj_if_test(ast)); emit(v,JUMP_UNLESS); label1 = declare_label(v); generate_r(v,obj_if_consequent(ast)); emit(v,JUMP); label2 = declare_label(v); make_label(v,label1); generate_r(v,obj_if_alternate(ast)); make_label(v,label2); }
/* * Define a special backend label */ void backend_label(const char *label, int32_t segment, int64_t offset) { if (!declare_label(label, LBL_BACKEND, NULL)) return; define_label(label, segment, offset, false); }