impl->stmts.let = psi_plist_init((psi_plist_dtor) psi_let_stmt_free);
impl->stmts.set = psi_plist_init((psi_plist_dtor) psi_set_stmt_free);
impl->stmts.fre = psi_plist_init((psi_plist_dtor) psi_free_stmt_free);
+ impl->stmts.ass = psi_plist_init((psi_plist_dtor) psi_assert_stmt_free);
while (psi_plist_get(stmts, i++, &abstract_stmt)) {
switch ((*abstract_stmt)->type) {
case PSI_T_FREE:
impl->stmts.fre = psi_plist_add(impl->stmts.fre, &abstract_stmt);
break;
+ case PSI_T_PRE_ASSERT:
+ case PSI_T_POST_ASSERT:
+ impl->stmts.ass = psi_plist_add(impl->stmts.ass, &abstract_stmt);
+ break;
default:
assert(0);
}
psi_plist_free(impl->stmts.let);
psi_plist_free(impl->stmts.set);
psi_plist_free(impl->stmts.fre);
+ psi_plist_free(impl->stmts.ass);
free(impl);
}
}
struct psi_let_stmt *let;
struct psi_set_stmt *set;
struct psi_free_stmt *fre;
+ struct psi_assert_stmt *ass;
psi_impl_func_dump(fd, impl->func);
dprintf(fd, " {\n");
for (i = 0; psi_plist_get(impl->stmts.let, i, &let); ++i) {
psi_let_stmt_dump(fd, let);
}
+ for (i = 0; psi_plist_get(impl->stmts.ass, i, &ass); ++i) {
+ psi_assert_stmt_dump(fd, ass);
+ }
for (i = 0; psi_plist_get(impl->stmts.ret, i, &ret); ++i) {
psi_return_stmt_dump(fd, ret);
}
if (!psi_set_stmts_validate(data, impl)) {
return false;
}
+ if (!psi_assert_stmts_validate(data, impl)) {
+ return false;
+ }
if (!psi_free_stmts_validate(data, impl)) {
return false;
}
case PSI_T_FREE:
psi_free_stmt_free((void *) abstract_stmt);
break;
+ case PSI_T_PRE_ASSERT:
+ case PSI_T_POST_ASSERT:
+ psi_assert_stmt_free((void *) abstract_stmt);
+ break;
default:
assert(0);
}