7d5acfd7e4703b25ee8ce5ab10a4d33f91ba14a8
1 #ifndef _PSI_TYPES_LET_VAL_H
2 #define _PSI_TYPES_LET_VAL_H
13 #define PSI_LET_REFERENCE 0x1;
14 typedef struct let_val
{
15 enum let_val_kind kind
;
19 let_callback
*callback
;
25 unsigned is_reference
:1;
31 static inline let_val
*init_let_val(enum let_val_kind kind
, void *data
) {
32 let_val
*let
= calloc(1, sizeof(*let
));
33 switch (let
->kind
= kind
) {
40 let
->data
.alloc
= data
;
42 case PSI_LET_CALLBACK
:
43 let
->data
.callback
= data
;
46 let
->data
.func
= data
;
51 EMPTY_SWITCH_DEFAULT_CASE();
56 static inline void free_let_val(let_val
*let
) {
61 free_num_exp(let
->data
.num
);
64 free_let_calloc(let
->data
.alloc
);
66 case PSI_LET_CALLBACK
:
67 free_let_callback(let
->data
.callback
);
70 free_let_func(let
->data
.func
);
73 free_decl_var(let
->data
.var
);
75 EMPTY_SWITCH_DEFAULT_CASE();