aboutsummaryrefslogtreecommitdiff
path: root/gdb/valarith.c
diff options
context:
space:
mode:
authorWu Zhou <woodzltc@cn.ibm.com>2005-07-06 06:52:25 +0000
committerWu Zhou <woodzltc@cn.ibm.com>2005-07-06 06:52:25 +0000
commitbd49c137fee8212c7e64ce62cc07d398b1278b14 (patch)
tree1e41f9c36b171df9b614b3e443aaee1fbbe020ab /gdb/valarith.c
parenta0c5fbcf0e1c6fdb3672d3bfc071b1a57a7b27bf (diff)
downloadfsf-binutils-gdb-bd49c137fee8212c7e64ce62cc07d398b1278b14.zip
fsf-binutils-gdb-bd49c137fee8212c7e64ce62cc07d398b1278b14.tar.gz
fsf-binutils-gdb-bd49c137fee8212c7e64ce62cc07d398b1278b14.tar.bz2
* f-exp.y (yyparse): Add code to support exponentiation expression.
(yylex): Add code to scan exponentiation operator. * eval.c (evaluate_subexp_standard): Add support for BINOP_EXP. * valarith.c (value_binop): Reset errno to 0 before calling pow to do exponentiation operation.
Diffstat (limited to 'gdb/valarith.c')
-rw-r--r--gdb/valarith.c31
1 files changed, 17 insertions, 14 deletions
diff --git a/gdb/valarith.c b/gdb/valarith.c
index 54a7fc6..ef03fb9 100644
--- a/gdb/valarith.c
+++ b/gdb/valarith.c
@@ -791,11 +791,12 @@ value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
v = v1 / v2;
break;
- case BINOP_EXP:
- v = pow (v1, v2);
- if (errno)
- error (_("Cannot perform exponentiation: %s"), safe_strerror (errno));
- break;
+ case BINOP_EXP:
+ errno = 0;
+ v = pow (v1, v2);
+ if (errno)
+ error (_("Cannot perform exponentiation: %s"), safe_strerror (errno));
+ break;
default:
error (_("Integer-only operation on floating point number."));
@@ -929,11 +930,12 @@ value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
v = v1 / v2;
break;
- case BINOP_EXP:
- v = pow (v1, v2);
- if (errno)
- error (_("Cannot perform exponentiation: %s"), safe_strerror (errno));
- break;
+ case BINOP_EXP:
+ errno = 0;
+ v = pow (v1, v2);
+ if (errno)
+ error (_("Cannot perform exponentiation: %s"), safe_strerror (errno));
+ break;
case BINOP_REM:
v = v1 % v2;
@@ -1050,10 +1052,11 @@ value_binop (struct value *arg1, struct value *arg2, enum exp_opcode op)
error (_("Division by zero"));
break;
- case BINOP_EXP:
- v = pow (v1, v2);
- if (errno)
- error (_("Cannot perform exponentiation: %s"), safe_strerror (errno));
+ case BINOP_EXP:
+ errno = 0;
+ v = pow (v1, v2);
+ if (errno)
+ error (_("Cannot perform exponentiation: %s"), safe_strerror (errno));
break;
case BINOP_REM: