Ejemplo n.º 1
0
void flow_fold(stmt_flow *flow, symtable **pstab)
{
	if(flow){
		decl **i;

		*pstab = flow->for_init_symtab;

		fold_shadow_dup_check_block_decls(*pstab);

		/* sanity check on _flow_ vars only */
		for(i = symtab_decls(*pstab); i && *i; i++){
			decl *const d = *i;

			switch((enum decl_storage)(d->store & STORE_MASK_STORE)){
				case store_auto:
				case store_default:
				case store_register:
					break;
				default:
					die_at(&d->where, "%s variable in statement-initialisation",
							decl_store_to_str(d->store));
			}

			/* block decls/for-init decls must be complete */
			fold_check_decl_complete(d);

			if(d->bits.var.init.expr)
				FOLD_EXPR(d->bits.var.init.expr, *pstab);
		}
	}
}
Ejemplo n.º 2
0
void gen_dump(symtable_global *globs)
{
	dump dump = { 0 };
	symtable_gasm **iasm = globs->gasms;
	decl **diter;

	dump.fout = stdout;

	for(diter = symtab_decls(&globs->stab); diter && *diter; diter++){
		decl *d = *diter;

		while(iasm && d == (*iasm)->before){
			dump_gasm(*iasm, &dump);

			if(!*++iasm)
				iasm = NULL;
		}

		dump_decl(d, &dump, NULL);
	}
}