diff options
Diffstat (limited to 'gdb/valops.c')
-rw-r--r-- | gdb/valops.c | 61 |
1 files changed, 19 insertions, 42 deletions
diff --git a/gdb/valops.c b/gdb/valops.c index 3de3409..eaf4295 100644 --- a/gdb/valops.c +++ b/gdb/valops.c @@ -48,8 +48,10 @@ extern int overload_debug; static int typecmp (int staticp, int varargs, int nargs, struct field t1[], struct value *t2[]); +static CORE_ADDR find_function_addr (struct value *, struct type **); static struct value *value_arg_coerce (struct value *, struct type *, int); + static CORE_ADDR value_push (CORE_ADDR, struct value *); static struct value *search_struct_field (char *, struct value *, int, @@ -89,6 +91,7 @@ int overload_resolution = 0; int unwind_on_signal_p = 0; + /* Find the address of function name NAME in the inferior. */ struct value * @@ -1216,7 +1219,7 @@ value_arg_coerce (struct value *arg, struct type *param_type, /* Determine a function's address and its return type from its value. Calls error() if the function is not valid for calling. */ -CORE_ADDR +static CORE_ADDR find_function_addr (struct value *function, struct type **retval_type) { register struct type *ftype = check_typedef (VALUE_TYPE (function)); @@ -1886,23 +1889,6 @@ call_function_by_hand (struct value *function, int nargs, struct value **args) error ("Cannot invoke functions on this machine."); } } - -struct value * -call_function_by_hand_expecting_type (struct value *function, - struct type *expect_type, - int nargs, struct value **args, - int restore_frame) -{ - if (CALL_DUMMY_P) - { - /* FIXME: Changes to func not implemented yet */ - return hand_function_call (function, nargs, args); - } - else - { - error ("Cannot invoke functions on this machine."); - } -} @@ -3317,17 +3303,21 @@ value_full_object (struct value *argp, struct type *rtype, int xfull, int xtop, return new_val; } -/* Return the value of the local variable, if one exists. + + + +/* C++: return the value of the class instance variable, if one exists. Flag COMPLAIN signals an error if the request is made in an inappropriate context. */ struct value * -value_of_local (const char *name, int complain) +value_of_this (int complain) { struct symbol *func, *sym; struct block *b; int i; - struct value * ret; + static const char funny_this[] = "this"; + struct value *this; if (selected_frame == 0) { @@ -3341,7 +3331,7 @@ value_of_local (const char *name, int complain) if (!func) { if (complain) - error ("no %s in nameless context", name); + error ("no `this' in nameless context"); else return 0; } @@ -3351,39 +3341,26 @@ value_of_local (const char *name, int complain) if (i <= 0) { if (complain) - error ("no args, no %s", name); + error ("no args, no `this'"); else return 0; } /* Calling lookup_block_symbol is necessary to get the LOC_REGISTER symbol instead of the LOC_ARG one (if both exist). */ - sym = lookup_block_symbol (b, name, NULL, VAR_NAMESPACE); + sym = lookup_block_symbol (b, funny_this, NULL, VAR_NAMESPACE); if (sym == NULL) { if (complain) - error ("current stack frame does not contain a variable named \"%s\"", name); + error ("current stack frame not in method"); else return NULL; } - ret = read_var_value (sym, selected_frame); - if (ret == 0 && complain) - error ("%s argument unreadable", name); - return ret; -} - -/* C++/Objective-C: return the value of the class instance variable, - if one exists. Flag COMPLAIN signals an error if the request is - made in an inappropriate context. */ - -struct value * -value_of_this (int complain) -{ - if (current_language->la_language == language_objc) - return value_of_local ("self", complain); - else - return value_of_local ("this", complain); + this = read_var_value (sym, selected_frame); + if (this == 0 && complain) + error ("`this' argument at unknown address"); + return this; } /* Create a slice (sub-string, sub-array) of ARRAY, that is LENGTH elements |