Print this page
12166 resync smatch to 0.6.1-rc1-il-3

@@ -31,58 +31,10 @@
 
 #include "smatch.h"
 
 static int my_id;
 
-STATE(argument);
-
-static struct symbol *func_sym;
-
-static void delete(struct sm_state *sm, struct expression *mod_expr)
-{
-        set_state(my_id, sm->name, sm->sym, &undefined);
-}
-
-static void match_function_def(struct symbol *sym)
-{
-        struct symbol *arg;
-
-        func_sym = sym;
-        FOR_EACH_PTR(func_sym->ctype.base_type->arguments, arg) {
-                if (!arg->ident) {
-                        continue;
-                }
-                set_state(my_id, arg->ident->name, arg, &argument);
-        } END_FOR_EACH_PTR(arg);
-}
-
-static int get_arg_num(struct expression *expr)
-{
-        struct smatch_state *state;
-        struct symbol *arg;
-        struct symbol *this_arg;
-        int i;
-
-        expr = strip_expr(expr);
-        if (expr->type != EXPR_SYMBOL)
-                return -1;
-        this_arg = expr->symbol;
-
-        state = get_state_expr(my_id, expr);
-        if (!state || state != &argument)
-                return -1;
-        
-        i = 0;
-        FOR_EACH_PTR(func_sym->ctype.base_type->arguments, arg) {
-                if (arg == this_arg)
-                        return i;
-                i++;
-        } END_FOR_EACH_PTR(arg);
-
-        return -1;
-}
-
 static void match_call(struct expression *expr)
 {
         struct expression *tmp;
         char *func;
         int arg_num;

@@ -91,24 +43,27 @@
         if (expr->fn->type != EXPR_SYMBOL)
                 return;
 
         func = expr->fn->symbol_name->name;
 
-        i = 0;
+        i = -1;
         FOR_EACH_PTR(expr->args, tmp) {
+                i++;
                 tmp = strip_expr(tmp);
-                arg_num = get_arg_num(tmp);
-                if (arg_num >= 0)
+                if (tmp->type != EXPR_SYMBOL)
+                        continue;
+                if (param_was_set(tmp))
+                        continue;
+                arg_num = get_param_num_from_sym(tmp->symbol);
+                if (arg_num < 0)
+                        continue;
                         sm_msg("info: param_mapper %d => %s %d", arg_num, func, i);
-                i++;
         } END_FOR_EACH_PTR(tmp);
 }
 
 void check_param_mapper(int id)
 {
-        if (!option_param_mapper)
+        if (!option_info)
                 return;
         my_id = id;
-        add_modification_hook(my_id, &delete);
-        add_hook(&match_function_def, FUNC_DEF_HOOK);
         add_hook(&match_call, FUNCTION_CALL_HOOK);
 }