Example #1
0
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)");
}
Example #2
0
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);
}
Example #3
0
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));
	}
}
Example #4
0
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);
}
Example #5
0
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);
	}
}
Example #6
0
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);
	}
}