stmt *stmt_new( func_fold_stmt *f_fold, func_gen_stmt *f_gen, func_gen_stmt *f_gen_style, func_str_stmt *f_str, void (*init)(stmt *), symtable *stab) { stmt *s = umalloc(sizeof *s); where_cc1_current(&s->where); UCC_ASSERT(stab, "no symtable for statement"); s->symtab = stab; s->f_fold = f_fold; switch(cc1_backend){ case BACKEND_ASM: s->f_gen = f_gen; break; case BACKEND_PRINT: case BACKEND_STYLE: s->f_gen = f_gen_style; break; default: ICE("bad backend"); } s->f_str = f_str; init(s); s->kills_below_code = stmt_kind(s, break) || stmt_kind(s, return) || stmt_kind(s, goto) || stmt_kind(s, continue); return s; }
decl *decl_new() { where wtmp; where_cc1_current(&wtmp); return decl_new_w(&wtmp); }