f7b980df9ead5241130f276f50cebfaa80b0ddc9
1 #ifndef _PSI_TYPES_IMPL_STMTS_H
2 #define _PSI_TYPES_IMPL_STMTS_H
4 typedef struct impl_stmts
{
23 static inline void *add_impl_stmt_ex(void *list
, size_t count
, void *stmt
) {
24 list
= realloc(list
, count
* sizeof(list
));
25 ((void **)list
)[count
-1] = stmt
;
29 static inline impl_stmts
*add_impl_stmt(impl_stmts
*stmts
, impl_stmt
*stmt
) {
32 stmts
->ret
.list
= add_impl_stmt_ex(stmts
->ret
.list
, ++stmts
->ret
.count
, stmt
->s
.ret
);
35 stmts
->let
.list
= add_impl_stmt_ex(stmts
->let
.list
, ++stmts
->let
.count
, stmt
->s
.let
);
38 stmts
->set
.list
= add_impl_stmt_ex(stmts
->set
.list
, ++stmts
->set
.count
, stmt
->s
.set
);
41 stmts
->fre
.list
= add_impl_stmt_ex(stmts
->fre
.list
, ++stmts
->fre
.count
, stmt
->s
.fre
);
48 static inline impl_stmts
*init_impl_stmts(impl_stmt
*stmt
) {
49 impl_stmts
*stmts
= calloc(1, sizeof(*stmts
));
50 return add_impl_stmt(stmts
, stmt
);
53 static inline void free_impl_stmts(impl_stmts
*stmts
) {
56 for (i
= 0; i
< stmts
->let
.count
; ++i
) {
57 free_let_stmt(stmts
->let
.list
[i
]);
59 free(stmts
->let
.list
);
60 for (i
= 0; i
< stmts
->ret
.count
; ++i
) {
61 free_return_stmt(stmts
->ret
.list
[i
]);
63 free(stmts
->ret
.list
);
64 for (i
= 0; i
< stmts
->set
.count
; ++i
) {
65 free_set_stmt(stmts
->set
.list
[i
]);
67 free(stmts
->set
.list
);
68 for (i
= 0; i
< stmts
->fre
.count
; ++i
) {
69 free_free_stmt(stmts
->fre
.list
[i
]);
71 free(stmts
->fre
.list
);