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
;
20 let_callback
*callback
;
26 unsigned is_reference
:1;
32 static inline let_val
*init_let_val(enum let_val_kind kind
, void *data
) {
33 let_val
*let
= calloc(1, sizeof(*let
));
34 switch (let
->kind
= kind
) {
41 let
->data
.alloc
= data
;
43 case PSI_LET_CALLBACK
:
44 let
->data
.callback
= data
;
47 let
->data
.func
= data
;
52 EMPTY_SWITCH_DEFAULT_CASE();
57 static inline void free_let_val(let_val
*let
) {
62 free_num_exp(let
->data
.num
);
65 free_let_calloc(let
->data
.alloc
);
67 case PSI_LET_CALLBACK
:
68 free_let_callback(let
->data
.callback
);
71 free_let_func(let
->data
.func
);
74 free_decl_var(let
->data
.var
);
76 EMPTY_SWITCH_DEFAULT_CASE();