From c082a518d77b767f57ef7f88d4123f42cbbee220 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Fri, 2 Nov 2012 13:44:14 +0300 Subject: [PATCH] sval: make sval versions of smatch_estate.c functions The plan is to move smatch_extra.c to use svals. Create a bunch of helper functions to do this. Estates will still hold a range list internally but I'll convert it to range_list_sval at the boundaries. Signed-off-by: Dan Carpenter --- smatch_estate.c | 21 +++++++++++++++++++++ smatch_extra.h | 2 ++ 2 files changed, 23 insertions(+) diff --git a/smatch_estate.c b/smatch_estate.c index 5b57dd7c..d1339486 100644 --- a/smatch_estate.c +++ b/smatch_estate.c @@ -205,6 +205,15 @@ struct smatch_state *alloc_estate(long long val) return state; } +struct smatch_state *alloc_estate_sval(sval_t sval) +{ + struct smatch_state *state; + + state = alloc_estate_no_name(sval.value); + state->name = show_ranges(get_dinfo(state)->value_ranges); + return state; +} + struct smatch_state *alloc_estate_range(long long min, long long max) { struct smatch_state *state; @@ -217,6 +226,18 @@ struct smatch_state *alloc_estate_range(long long min, long long max) return state; } +struct smatch_state *alloc_estate_range_sval(sval_t min, sval_t max) +{ + struct smatch_state *state; + + if (sval_is_min(min) && sval_is_max(max)) + return extra_undefined(); + state = __alloc_smatch_state(0); + state->data = (void *)alloc_dinfo_range(min.value, max.value); + state->name = show_ranges(get_dinfo(state)->value_ranges); + return state; +} + struct smatch_state *alloc_estate_range_list(struct range_list *rl) { struct smatch_state *state; diff --git a/smatch_extra.h b/smatch_extra.h index 3a40f15d..1f763b01 100644 --- a/smatch_extra.h +++ b/smatch_extra.h @@ -101,6 +101,7 @@ struct sm_state *set_extra_expr_mod(struct expression *expr, struct smatch_state void set_extra_expr_nomod(struct expression *expr, struct smatch_state *state); struct smatch_state *alloc_estate_empty(void); struct smatch_state *alloc_estate(long long val); +struct smatch_state *alloc_estate_sval(sval_t sval); struct smatch_state *alloc_estate_range_list(struct range_list *rl); struct smatch_state *alloc_estate_range_list_sval(struct range_list_sval *rl); struct data_info *get_dinfo(struct smatch_state *state); @@ -137,6 +138,7 @@ void tack_on(struct range_list **list, struct data_range *drange); void tack_on_sval(struct range_list_sval **list, struct data_range_sval *drange); struct smatch_state *alloc_estate_range(long long min, long long max); +struct smatch_state *alloc_estate_range_sval(sval_t min, sval_t max); void push_range_list(struct range_list_stack **rl_stack, struct range_list *rl); struct range_list *pop_range_list(struct range_list_stack **rl_stack); -- 2.11.4.GIT