1 struct stree;
   2 
   3 extern int unfree_stree;
   4 
   5 DECLARE_PTR_LIST(state_list, struct sm_state);
   6 DECLARE_PTR_LIST(state_list_stack, struct state_list);
   7 
   8 struct named_stree {
   9         char *name;
  10         struct symbol *sym;
  11         struct stree *stree;
  12 };
  13 DECLARE_ALLOCATOR(named_stree);
  14 DECLARE_PTR_LIST(named_stree_stack, struct named_stree);
  15 
  16 
  17 extern struct state_list_stack *implied_pools;
  18 extern int __stree_id;
  19 extern int sm_state_counter;
  20 
  21 const char *show_sm(struct sm_state *sm);
  22 void __print_stree(struct stree *stree);
  23 void add_history(struct sm_state *sm);
  24 int cmp_tracker(const struct sm_state *a, const struct sm_state *b);
  25 char *alloc_sname(const char *str);
  26 struct sm_state *alloc_sm_state(int owner, const char *name,
  27                                 struct symbol *sym, struct smatch_state *state);
  28 
  29 void free_every_single_sm_state(void);
  30 struct sm_state *clone_sm(struct sm_state *s);
  31 int is_merged(struct sm_state *sm);
  32 int is_leaf(struct sm_state *sm);
  33 struct state_list *clone_slist(struct state_list *from_slist);
  34 
  35 int slist_has_state(struct state_list *slist, struct smatch_state *state);
  36 
  37 int too_many_possible(struct sm_state *sm);
  38 void add_possible_sm(struct sm_state *to, struct sm_state *new);
  39 struct sm_state *merge_sm_states(struct sm_state *one, struct sm_state *two);
  40 struct smatch_state *get_state_stree(struct stree *stree, int owner, const char *name,
  41                     struct symbol *sym);
  42 
  43 struct sm_state *get_sm_state_stree(struct stree *stree, int owner, const char *name,
  44                     struct symbol *sym);
  45 
  46 void overwrite_sm_state_stree(struct stree **stree, struct sm_state *sm);
  47 void overwrite_sm_state_stree_stack(struct stree_stack **stack, struct sm_state *sm);
  48 struct sm_state *set_state_stree(struct stree **stree, int owner, const char *name,
  49                      struct symbol *sym, struct smatch_state *state);
  50 void set_state_stree_perm(struct stree **stree, int owner, const char *name,
  51                      struct symbol *sym, struct smatch_state *state);
  52 void delete_state_stree(struct stree **stree, int owner, const char *name,
  53                         struct symbol *sym);
  54 
  55 void delete_state_stree_stack(struct stree_stack **stack, int owner, const char *name,
  56                         struct symbol *sym);
  57 
  58 void push_stree(struct stree_stack **list_stack, struct stree *stree);
  59 struct stree *pop_stree(struct stree_stack **list_stack);
  60 struct stree *top_stree(struct stree_stack *stack);
  61 
  62 void free_slist(struct state_list **slist);
  63 void free_stree_stack(struct stree_stack **stack);
  64 void free_stack_and_strees(struct stree_stack **stree_stack);
  65 unsigned long get_pool_count(void);
  66 
  67 struct sm_state *set_state_stree_stack(struct stree_stack **stack, int owner, const char *name,
  68                                 struct symbol *sym, struct smatch_state *state);
  69 
  70 struct sm_state *get_sm_state_stree_stack(struct stree_stack *stack,
  71                                 int owner, const char *name,
  72                                 struct symbol *sym);
  73 struct smatch_state *get_state_stree_stack(struct stree_stack *stack, int owner,
  74                                 const char *name, struct symbol *sym);
  75 
  76 int out_of_memory(void);
  77 int low_on_memory(void);
  78 void merge_stree(struct stree **to, struct stree *stree);
  79 void merge_stree_no_pools(struct stree **to, struct stree *stree);
  80 void merge_stree(struct stree **to, struct stree *right);
  81 void merge_fake_stree(struct stree **to, struct stree *stree);
  82 void filter_stree(struct stree **stree, struct stree *filter);
  83 void and_stree_stack(struct stree_stack **stree_stack);
  84 
  85 void or_stree_stack(struct stree_stack **pre_conds,
  86                     struct stree *cur_stree,
  87                     struct stree_stack **stack);
  88 
  89 struct stree **get_named_stree(struct named_stree_stack *stack,
  90                                const char *name,
  91                                struct symbol *sym);
  92 
  93 void overwrite_stree(struct stree *from, struct stree **to);
  94 
  95 /* add stuff smatch_returns.c here */
  96 
  97 void all_return_states_hook(void (*callback)(void));
  98