aboutsummaryrefslogtreecommitdiff
path: root/gdb/values.c
diff options
context:
space:
mode:
authorPer Bothner <per@bothner.com>1991-11-12 22:20:02 +0000
committerPer Bothner <per@bothner.com>1991-11-12 22:20:02 +0000
commit0e2a896cf5a7231fe300fe0918a38f87bc9ee0ec (patch)
tree3ba6589b103df25eeaab1de54754fbe0f5cbea36 /gdb/values.c
parent5f12485297f7f829c0c035657197ce1de09a10cd (diff)
downloadfsf-binutils-gdb-0e2a896cf5a7231fe300fe0918a38f87bc9ee0ec.zip
fsf-binutils-gdb-0e2a896cf5a7231fe300fe0918a38f87bc9ee0ec.tar.gz
fsf-binutils-gdb-0e2a896cf5a7231fe300fe0918a38f87bc9ee0ec.tar.bz2
Fixes related to handling of C++ methods (handle destructors
and parameters that are functions).
Diffstat (limited to 'gdb/values.c')
-rw-r--r--gdb/values.c23
1 files changed, 9 insertions, 14 deletions
diff --git a/gdb/values.c b/gdb/values.c
index eac4d59..810e00b 100644
--- a/gdb/values.c
+++ b/gdb/values.c
@@ -1284,27 +1284,22 @@ check_stub_method (type, i, j)
if (*p != ')') /* () means no args, skip while */
{
+ depth = 0;
while (*p)
{
- if (*p == '(')
- depth += 1;
- else if (*p == ')')
- depth -= 1;
-
if (depth <= 0 && (*p == ',' || *p == ')'))
{
- char *tmp = (char *)alloca (p - argtypetext + 4);
- value val;
- tmp[0] = '(';
- bcopy (argtypetext, tmp+1, p - argtypetext);
- tmp[p-argtypetext+1] = ')';
- tmp[p-argtypetext+2] = '0';
- tmp[p-argtypetext+3] = '\0';
- val = parse_and_eval (tmp);
- argtypes[argcount] = VALUE_TYPE (val);
+ argtypes[argcount] =
+ parse_and_eval_type (argtypetext, p - argtypetext);
argcount += 1;
argtypetext = p + 1;
}
+
+ if (*p == '(')
+ depth += 1;
+ else if (*p == ')')
+ depth -= 1;
+
p += 1;
}
}