113 {
114 return return_stree_stack;
115 }
116
117 static void free_resources(struct symbol *sym)
118 {
119 struct stree *tmp;
120
121 free_stree(&all_return_states);
122
123 FOR_EACH_PTR(return_stree_stack, tmp) {
124 free_stree(&tmp);
125 } END_FOR_EACH_PTR(tmp);
126 free_stree_stack(&return_stree_stack);
127 }
128
129 void register_returns_early(int id)
130 {
131 RETURN_ID = id;
132
133 add_split_return_callback(match_return);
134 }
135
136 void register_returns(int id)
137 {
138 add_hook(&match_end_func, END_FUNC_HOOK);
139 add_hook(&match_save_states, INLINE_FN_START);
140 add_hook(&match_restore_states, INLINE_FN_END);
141 add_hook(&free_resources, AFTER_FUNC_HOOK);
142 }
|
113 {
114 return return_stree_stack;
115 }
116
117 static void free_resources(struct symbol *sym)
118 {
119 struct stree *tmp;
120
121 free_stree(&all_return_states);
122
123 FOR_EACH_PTR(return_stree_stack, tmp) {
124 free_stree(&tmp);
125 } END_FOR_EACH_PTR(tmp);
126 free_stree_stack(&return_stree_stack);
127 }
128
129 void register_returns_early(int id)
130 {
131 RETURN_ID = id;
132
133 set_dynamic_states(RETURN_ID);
134 add_split_return_callback(match_return);
135 }
136
137 void register_returns(int id)
138 {
139 add_hook(&match_end_func, END_FUNC_HOOK);
140 add_hook(&match_save_states, INLINE_FN_START);
141 add_hook(&match_restore_states, INLINE_FN_END);
142 add_hook(&free_resources, AFTER_FUNC_HOOK);
143 }
|