|
|
|
@ -1,6 +1,6 @@ |
|
|
|
/* Evaluate expressions for GDB.
|
|
|
|
Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, |
|
|
|
1996, 1997, 1998, 1999, 2000, 2001 |
|
|
|
1996, 1997, 1998, 1999, 2000, 2001, 2002 |
|
|
|
Free Software Foundation, Inc. |
|
|
|
|
|
|
|
This file is part of GDB. |
|
|
|
@ -820,15 +820,10 @@ evaluate_subexp_standard (struct type *expect_type, |
|
|
|
if (op == STRUCTOP_STRUCT || op == STRUCTOP_PTR) |
|
|
|
{ |
|
|
|
int static_memfuncp; |
|
|
|
struct value *temp = arg2; |
|
|
|
char tstr[256]; |
|
|
|
|
|
|
|
/* Method invocation : stuff "this" as first parameter */ |
|
|
|
/* pai: this used to have lookup_pointer_type for some reason,
|
|
|
|
* but temp is already a pointer to the object */ |
|
|
|
argvec[1] |
|
|
|
= value_from_pointer (VALUE_TYPE (temp), |
|
|
|
VALUE_ADDRESS (temp) + VALUE_OFFSET (temp)); |
|
|
|
argvec[1] = arg2; |
|
|
|
/* Name of method from expression */ |
|
|
|
strcpy (tstr, &exp->elts[pc2 + 2].string); |
|
|
|
|
|
|
|
@ -854,11 +849,17 @@ evaluate_subexp_standard (struct type *expect_type, |
|
|
|
else |
|
|
|
/* Non-C++ case -- or no overload resolution */ |
|
|
|
{ |
|
|
|
temp = arg2; |
|
|
|
struct value *temp = arg2; |
|
|
|
argvec[0] = value_struct_elt (&temp, argvec + 1, tstr, |
|
|
|
&static_memfuncp, |
|
|
|
op == STRUCTOP_STRUCT |
|
|
|
? "structure" : "structure pointer"); |
|
|
|
/* value_struct_elt updates temp with the correct value
|
|
|
|
of the ``this'' pointer if necessary, so modify argvec[1] to |
|
|
|
reflect any ``this'' changes. */ |
|
|
|
arg2 = value_from_longest (lookup_pointer_type(VALUE_TYPE (temp)), |
|
|
|
VALUE_ADDRESS (temp) + VALUE_OFFSET (temp) |
|
|
|
+ VALUE_EMBEDDED_OFFSET (temp)); |
|
|
|
argvec[1] = arg2; /* the ``this'' pointer */ |
|
|
|
} |
|
|
|
|
|
|
|
|