static void dump_type(dump *ctx, type *ty) { struct_union_enum_st *sue; dump_printf_indent(ctx, 0, " %s'%s'%s", maybe_colour(ctx->fout, col_type), type_to_str(ty), maybe_colour(ctx->fout, col_off)); if((sue = type_is_s_or_u_or_e(ty)) && !sue_is_complete(sue)) dump_printf_indent(ctx, 0, " (incomplete)"); }
void dump_stmt_label(const stmt *s, dump *ctx) { dump_desc_stmt_newline(ctx, "label", s, 0); dump_printf_indent(ctx, 0, " %s\n", s->bits.lbl.spel); dump_inc(ctx); dump_stmt(s->lhs, ctx); dump_dec(ctx); }
static void dump_attributes(attribute *da, dump *ctx) { for(; da; da = da->next){ dump_desc_colour_newline(ctx, "attribute", da, &da->where, maybe_colour(ctx->fout, col_desc), 0); dump_printf_indent(ctx, 0, " %s\n", attribute_to_str(da)); } }
void dump_expr_assign_compound(const expr *e, dump *ctx) { dump_desc_expr_newline(ctx, "compound assignment", e, 0); dump_printf_indent(ctx, 0, " %s%s=", e->assign_is_post ? "post-assignment " : "", op_to_str(e->bits.compoundop.op)); if(e->bits.compoundop.upcast_ty){ dump_printf_indent(ctx, 0, " upcast='%s'", type_to_str(e->bits.compoundop.upcast_ty)); } dump_printf_indent(ctx, 0, "\n"); dump_inc(ctx); dump_expr(e->lhs, ctx); dump_expr(e->rhs, ctx); dump_dec(ctx); }
void dump_stmt_goto(const stmt *s, dump *ctx) { if(s->expr){ dump_desc_stmt(ctx, "computed-goto", s); dump_inc(ctx); dump_expr(s->expr, ctx); dump_dec(ctx); }else{ dump_desc_stmt_newline(ctx, "goto", s, 0); dump_printf_indent(ctx, 0, " %s\n", s->bits.lbl.spel); } }
void dump_decl(decl *d, dump *ctx, const char *desc) { const int is_func = !!type_is(d->ref, type_func); type *ty; if(!desc){ if(d->spel){ desc = is_func ? "function" : "variable"; }else{ desc = "type"; } } dump_desc_colour_newline(ctx, desc, d, &d->where, maybe_colour(ctx->fout, col_desc_decl), 0); if(d->proto) dump_printf_indent(ctx, 0, " prev %p", (void *)d->proto); if(d->spel) dump_printf_indent(ctx, 0, " %s", d->spel); dump_type(ctx, d->ref); if(d->store) dump_printf_indent(ctx, 0, " %s", decl_store_to_str(d->store)); dump_printf_indent(ctx, 0, "\n"); if(!is_func){ type *tof = type_skip_non_tdefs(d->ref); if(tof->type == type_tdef && !tof->bits.tdef.decl){ /* show typeof expr */ dump_inc(ctx); dump_expr(tof->bits.tdef.type_of, ctx); dump_dec(ctx); } if(d->bits.var.field_width){ dump_inc(ctx); dump_expr(d->bits.var.field_width, ctx); dump_dec(ctx); } if(!d->spel){ dump_sue(ctx, d->ref); }else if(d->bits.var.init.dinit){ dump_inc(ctx); dump_init(ctx, d->bits.var.init.dinit); dump_dec(ctx); } } dump_inc(ctx); dump_attributes(d->attr, ctx); ty = type_skip_non_attr(d->ref); if(ty && ty->type == type_attr) dump_attributes(ty->bits.attr, ctx); dump_dec(ctx); if(is_func && d->bits.func.code){ funcargs *fa = type_funcargs(d->ref); dump_inc(ctx); dump_args(fa, ctx); dump_stmt(d->bits.func.code, ctx); dump_dec(ctx); } }