2002-01-04 Daniel Jacobowitz <drow@mvista.com>
authorDaniel Jacobowitz <drow@false.org>
Fri, 4 Jan 2002 17:51:38 +0000 (17:51 +0000)
committerDaniel Jacobowitz <drow@false.org>
Fri, 4 Jan 2002 17:51:38 +0000 (17:51 +0000)
        * valops.c (find_overload_match): Accept obj as a
        reference parameter.  Update it before returning.
        * value.h (find_overload_match): Update prototype.
        * eval.c (evaluate_subexp_standard): Pass object to
        find_overload_match by reference.

gdb/ChangeLog
gdb/eval.c
gdb/valops.c
gdb/value.h

index c7539f8..0f2c835 100644 (file)
@@ -1,3 +1,11 @@
+2002-01-04  Daniel Jacobowitz  <drow@mvista.com>
+
+       * valops.c (find_overload_match): Accept obj as a
+       reference parameter.  Update it before returning.
+       * value.h (find_overload_match): Update prototype.
+       * eval.c (evaluate_subexp_standard): Pass object to
+       find_overload_match by reference.
+
 2002-01-03  Andrew Cagney  <ac131313@redhat.com>
 
        * valarith.c: Replace value_ptr with struct value pointer.  Remove
index a56ed84..3f5aca3 100644 (file)
@@ -845,7 +845,7 @@ evaluate_subexp_standard (struct type *expect_type,
 
              (void) find_overload_match (arg_types, nargs, tstr,
                                     1 /* method */ , 0 /* strict match */ ,
-                                         arg2 /* the object */ , NULL,
+                                         &arg2 /* the object */ , NULL,
                                          &valp, NULL, &static_memfuncp);
 
 
index cfc6937..dfef113 100644 (file)
@@ -2636,12 +2636,13 @@ value_find_oload_method_list (struct value **argp, char *method, int offset,
 
 int
 find_overload_match (struct type **arg_types, int nargs, char *name, int method,
-                    int lax, struct value *obj, struct symbol *fsym,
+                    int lax, struct value **objp, struct symbol *fsym,
                     struct value **valp, struct symbol **symp, int *staticp)
 {
   int nparms;
   struct type **parm_types;
   int champ_nparms = 0;
+  struct value *obj = (objp ? *objp : NULL);
 
   short oload_champ = -1;      /* Index of best overloaded function */
   short oload_ambiguous = 0;   /* Current ambiguity state for overload resolution */
@@ -2865,6 +2866,15 @@ find_overload_match (struct type **arg_types, int nargs, char *name, int method,
       xfree (func_name);
     }
 
+  if (objp)
+    {
+      if (TYPE_CODE (VALUE_TYPE (temp)) != TYPE_CODE_PTR
+         && TYPE_CODE (VALUE_TYPE (*objp)) == TYPE_CODE_PTR)
+       {
+         temp = value_addr (temp);
+       }
+      *objp = temp;
+    }
   return oload_incompatible ? 100 : (oload_non_standard ? 10 : 0);
 }
 
index 006ec11..a6a517c 100644 (file)
@@ -388,7 +388,7 @@ extern struct fn_field *value_find_oload_method_list (struct value **, char *,
 
 extern int find_overload_match (struct type **arg_types, int nargs,
                                char *name, int method, int lax,
-                               struct value *obj, struct symbol *fsym,
+                               struct value **objp, struct symbol *fsym,
                                struct value **valp, struct symbol **symp,
                                int *staticp);