aboutsummaryrefslogtreecommitdiff
path: root/gdb/ch-lang.c
diff options
context:
space:
mode:
Diffstat (limited to 'gdb/ch-lang.c')
-rw-r--r--gdb/ch-lang.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/gdb/ch-lang.c b/gdb/ch-lang.c
index a76ae46..9988a3c 100644
--- a/gdb/ch-lang.c
+++ b/gdb/ch-lang.c
@@ -424,6 +424,17 @@ evaluate_subexp_chill (expect_type, exp, pos, noside)
argvec = (value_ptr *) alloca (sizeof (value_ptr) * (nargs + 2));
argvec[0] = arg1;
tem = 1;
+ if (type && TYPE_CODE (type) == TYPE_CODE_PTR)
+ type = check_typedef (TYPE_TARGET_TYPE (type));
+ if (type && TYPE_CODE (type) == TYPE_CODE_FUNC)
+ {
+ for (; tem <= nargs && tem <= TYPE_NFIELDS (type); tem++)
+ {
+ argvec[tem]
+ = evaluate_subexp_chill (TYPE_FIELD_TYPE (type, tem-1),
+ exp, pos, noside);
+ }
+ }
for (; tem <= nargs; tem++)
argvec[tem] = evaluate_subexp_with_coercion (exp, pos, noside);
argvec[tem] = 0; /* signal end of arglist */