diff options
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/ada-lang.c | 26 |
2 files changed, 21 insertions, 10 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6dd38b8103b..cf6379078fa 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2007-12-28 Joel Brobecker <brobecker@adacore.com> + + * ada-lang.c (ada_evaluate_subexp): Break two large expressions + using temporary variables. + 2007-12-27 Joel Brobecker <brobecker@adacore.com> * ada-lang.c (ada_value_cast): New function, extracted out from diff --git a/gdb/ada-lang.c b/gdb/ada-lang.c index 1a0422e7f81..93b5dec67ff 100644 --- a/gdb/ada-lang.c +++ b/gdb/ada-lang.c @@ -8163,20 +8163,26 @@ ada_evaluate_subexp (struct type *expect_type, struct expression *exp, case BINOP_LOGICAL_AND: case BINOP_LOGICAL_OR: case UNOP_LOGICAL_NOT: - *pos -= 1; - return value_cast (LA_BOOL_TYPE, - evaluate_subexp_standard (expect_type, exp, - pos, noside)); + { + struct value *val; + + *pos -= 1; + val = evaluate_subexp_standard (expect_type, exp, pos, noside); + return value_cast (LA_BOOL_TYPE, val); + } case BINOP_BITWISE_AND: case BINOP_BITWISE_IOR: case BINOP_BITWISE_XOR: - arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS); - *pos = pc; - return value_cast (value_type (arg1), - evaluate_subexp_standard (expect_type, exp, - pos, noside)); - + { + struct value *val; + + arg1 = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS); + *pos = pc; + val = evaluate_subexp_standard (expect_type, exp, pos, noside); + + return value_cast (value_type (arg1), val); + } case OP_VAR_VALUE: *pos -= 1; |