aboutsummaryrefslogtreecommitdiff
path: root/gdb/eval.c
diff options
context:
space:
mode:
authorJohn Gilmore <gnu@cygnus>1991-09-19 07:40:51 +0000
committerJohn Gilmore <gnu@cygnus>1991-09-19 07:40:51 +0000
commit2ccb38371a20cb1cab35bc41cafc5d0b67589be8 (patch)
treed5970907e06d6d91cd8326c1474380fef47d7385 /gdb/eval.c
parentd8b3b00eb2cac140cf57b4a0705c672957cddcc5 (diff)
downloadgdb-2ccb38371a20cb1cab35bc41cafc5d0b67589be8.zip
gdb-2ccb38371a20cb1cab35bc41cafc5d0b67589be8.tar.gz
gdb-2ccb38371a20cb1cab35bc41cafc5d0b67589be8.tar.bz2
Use parse_expression and parse_exp_1 rather than
parse_c_expression and parse_c_1.
Diffstat (limited to 'gdb/eval.c')
-rw-r--r--gdb/eval.c125
1 files changed, 62 insertions, 63 deletions
diff --git a/gdb/eval.c b/gdb/eval.c
index 34196e2..0694d15 100644
--- a/gdb/eval.c
+++ b/gdb/eval.c
@@ -3,19 +3,19 @@
This file is part of GDB.
-GDB is free software; you can redistribute it and/or modify
+This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 1, or (at your option)
-any later version.
+the Free Software Foundation; either version 2 of the License, or
+(at your option) any later version.
-GDB is distributed in the hope that it will be useful,
+This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-along with GDB; see the file COPYING. If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+along with this program; if not, write to the Free Software
+Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include <stdio.h>
#include "defs.h"
@@ -24,6 +24,7 @@ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "value.h"
#include "expression.h"
#include "target.h"
+#include "frame.h"
#define NULL_TYPE ((struct type *)0)
@@ -35,12 +36,12 @@ CORE_ADDR
parse_and_eval_address (exp)
char *exp;
{
- struct expression *expr = parse_c_expression (exp);
+ struct expression *expr = parse_expression (exp);
register CORE_ADDR addr;
register struct cleanup *old_chain
= make_cleanup (free_current_contents, &expr);
- addr = (CORE_ADDR) value_as_long (evaluate_expression (expr));
+ addr = value_as_pointer (evaluate_expression (expr));
do_cleanups (old_chain);
return addr;
}
@@ -52,12 +53,12 @@ CORE_ADDR
parse_and_eval_address_1 (expptr)
char **expptr;
{
- struct expression *expr = parse_c_1 (expptr, 0, 0);
+ struct expression *expr = parse_exp_1 (expptr, (struct block *)0, 0);
register CORE_ADDR addr;
register struct cleanup *old_chain
= make_cleanup (free_current_contents, &expr);
- addr = (CORE_ADDR) value_as_long (evaluate_expression (expr));
+ addr = value_as_pointer (evaluate_expression (expr));
do_cleanups (old_chain);
return addr;
}
@@ -66,7 +67,7 @@ value
parse_and_eval (exp)
char *exp;
{
- struct expression *expr = parse_c_expression (exp);
+ struct expression *expr = parse_expression (exp);
register value val;
register struct cleanup *old_chain
= make_cleanup (free_current_contents, &expr);
@@ -84,7 +85,7 @@ value
parse_to_comma_and_eval (expp)
char **expp;
{
- struct expression *expr = parse_c_1 (expp, 0, 1);
+ struct expression *expr = parse_exp_1 (expp, (struct block *) 0, 1);
register value val;
register struct cleanup *old_chain
= make_cleanup (free_current_contents, &expr);
@@ -169,7 +170,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
case OP_LONG:
(*pos) += 3;
- return value_from_long (exp->elts[pc + 1].type,
+ return value_from_longest (exp->elts[pc + 1].type,
exp->elts[pc + 2].longconst);
case OP_DOUBLE:
@@ -211,11 +212,12 @@ evaluate_subexp (expect_type, exp, pos, noside)
case OP_LAST:
(*pos) += 2;
- return access_value_history ((int) exp->elts[pc + 1].longconst);
+ return
+ access_value_history (longest_to_int (exp->elts[pc + 1].longconst));
case OP_REGISTER:
(*pos) += 2;
- return value_of_register ((int) exp->elts[pc + 1].longconst);
+ return value_of_register (longest_to_int (exp->elts[pc + 1].longconst));
case OP_INTERNALVAR:
(*pos) += 2;
@@ -251,7 +253,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
{
int fnptr;
- nargs = (int) exp->elts[pc + 1].longconst + 1;
+ nargs = longest_to_int (exp->elts[pc + 1].longconst) + 1;
/* First, evaluate the structure into arg2 */
pc2 = (*pos)++;
@@ -275,7 +277,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
arg1 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
- fnptr = (int) value_as_long (arg1);
+ fnptr = longest_to_int (value_as_long (arg1));
/* FIXME-tiemann: this is way obsolete. */
if (fnptr < 128)
{
@@ -324,7 +326,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
/* Hair for method invocations */
int tem2;
- nargs = (int) exp->elts[pc + 1].longconst + 1;
+ nargs = longest_to_int (exp->elts[pc + 1].longconst) + 1;
/* First, evaluate the structure into arg2 */
pc2 = (*pos)++;
tem2 = strlen (&exp->elts[pc2 + 1].string);
@@ -345,7 +347,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
}
else
{
- nargs = (int) exp->elts[pc + 1].longconst;
+ nargs = longest_to_int (exp->elts[pc + 1].longconst);
tem = 0;
}
argvec = (value *) alloca (sizeof (value) * (nargs + 2));
@@ -369,9 +371,8 @@ evaluate_subexp (expect_type, exp, pos, noside)
? "structure" : "structure pointer");
if (VALUE_OFFSET (temp))
{
- arg2 = value_from_long (builtin_type_long,
+ arg2 = value_from_longest (lookup_pointer_type (VALUE_TYPE (temp)),
value_as_long (arg2)+VALUE_OFFSET (temp));
- VALUE_TYPE (arg2) = lookup_pointer_type (VALUE_TYPE (temp));
argvec[1] = arg2;
}
if (static_memfuncp)
@@ -458,10 +459,9 @@ evaluate_subexp (expect_type, exp, pos, noside)
&& (TYPE_CODE (TYPE_TARGET_TYPE (VALUE_TYPE (arg2)))
!= TYPE_CODE_METHOD)))
error ("non-pointer-to-member value used in pointer-to-member construct");
- arg3 = value_from_long (builtin_type_long,
+ arg3 = value_from_longest (
+ lookup_pointer_type (TYPE_TARGET_TYPE (TYPE_TARGET_TYPE (VALUE_TYPE (arg2)))),
value_as_long (arg1) + value_as_long (arg2));
- VALUE_TYPE (arg3) =
- lookup_pointer_type (TYPE_TARGET_TYPE (TYPE_TARGET_TYPE (VALUE_TYPE (arg2))));
return value_ind (arg3);
case STRUCTOP_MPTR:
@@ -474,10 +474,9 @@ evaluate_subexp (expect_type, exp, pos, noside)
|| (TYPE_CODE (TYPE_TARGET_TYPE (VALUE_TYPE (arg2))) != TYPE_CODE_MEMBER
&& TYPE_CODE (TYPE_TARGET_TYPE (VALUE_TYPE (arg2))) != TYPE_CODE_METHOD))
error ("non-pointer-to-member value used in pointer-to-member construct");
- arg3 = value_from_long (builtin_type_long,
+ arg3 = value_from_longest (
+ lookup_pointer_type (TYPE_TARGET_TYPE (TYPE_TARGET_TYPE (VALUE_TYPE (arg2)))),
value_as_long (arg1) + value_as_long (arg2));
- VALUE_TYPE (arg3) =
- lookup_pointer_type (TYPE_TARGET_TYPE (TYPE_TARGET_TYPE (VALUE_TYPE (arg2))));
return value_ind (arg3);
case BINOP_ASSIGN:
@@ -486,7 +485,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
if (noside == EVAL_SKIP || noside == EVAL_AVOID_SIDE_EFFECTS)
return arg1;
if (binop_user_defined_p (op, arg1, arg2))
- return value_x_binop (arg1, arg2, op, 0);
+ return value_x_binop (arg1, arg2, op, OP_NULL);
else
return value_assign (arg1, arg2);
@@ -513,7 +512,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
if (noside == EVAL_SKIP)
goto nosideret;
if (binop_user_defined_p (op, arg1, arg2))
- return value_x_binop (arg1, arg2, op, 0);
+ return value_x_binop (arg1, arg2, op, OP_NULL);
else
return value_add (arg1, arg2);
@@ -523,7 +522,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
if (noside == EVAL_SKIP)
goto nosideret;
if (binop_user_defined_p (op, arg1, arg2))
- return value_x_binop (arg1, arg2, op, 0);
+ return value_x_binop (arg1, arg2, op, OP_NULL);
else
return value_sub (arg1, arg2);
@@ -540,7 +539,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
if (noside == EVAL_SKIP)
goto nosideret;
if (binop_user_defined_p (op, arg1, arg2))
- return value_x_binop (arg1, arg2, op, 0);
+ return value_x_binop (arg1, arg2, op, OP_NULL);
else
if (noside == EVAL_AVOID_SIDE_EFFECTS
&& op == BINOP_DIV)
@@ -558,7 +557,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
VALUE_LVAL (arg1));
if (binop_user_defined_p (op, arg1, arg2))
- return value_x_binop (arg1, arg2, op, 0);
+ return value_x_binop (arg1, arg2, op, OP_NULL);
else
return value_subscript (arg1, arg2);
@@ -577,14 +576,14 @@ evaluate_subexp (expect_type, exp, pos, noside)
if (binop_user_defined_p (op, arg1, arg2))
{
arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
- return value_x_binop (arg1, arg2, op, 0);
+ return value_x_binop (arg1, arg2, op, OP_NULL);
}
else
{
tem = value_zerop (arg1);
arg2 = evaluate_subexp (NULL_TYPE, exp, pos,
(tem ? EVAL_SKIP : noside));
- return value_from_long (builtin_type_int,
+ return value_from_longest (builtin_type_int,
(LONGEST) (!tem && !value_zerop (arg2)));
}
@@ -603,14 +602,14 @@ evaluate_subexp (expect_type, exp, pos, noside)
if (binop_user_defined_p (op, arg1, arg2))
{
arg2 = evaluate_subexp (NULL_TYPE, exp, pos, noside);
- return value_x_binop (arg1, arg2, op, 0);
+ return value_x_binop (arg1, arg2, op, OP_NULL);
}
else
{
tem = value_zerop (arg1);
arg2 = evaluate_subexp (NULL_TYPE, exp, pos,
(!tem ? EVAL_SKIP : noside));
- return value_from_long (builtin_type_int,
+ return value_from_longest (builtin_type_int,
(LONGEST) (!tem || !value_zerop (arg2)));
}
@@ -621,12 +620,12 @@ evaluate_subexp (expect_type, exp, pos, noside)
goto nosideret;
if (binop_user_defined_p (op, arg1, arg2))
{
- return value_x_binop (arg1, arg2, op, 0);
+ return value_x_binop (arg1, arg2, op, OP_NULL);
}
else
{
tem = value_equal (arg1, arg2);
- return value_from_long (builtin_type_int, (LONGEST) tem);
+ return value_from_longest (builtin_type_int, (LONGEST) tem);
}
case BINOP_NOTEQUAL:
@@ -636,12 +635,12 @@ evaluate_subexp (expect_type, exp, pos, noside)
goto nosideret;
if (binop_user_defined_p (op, arg1, arg2))
{
- return value_x_binop (arg1, arg2, op, 0);
+ return value_x_binop (arg1, arg2, op, OP_NULL);
}
else
{
tem = value_equal (arg1, arg2);
- return value_from_long (builtin_type_int, (LONGEST) ! tem);
+ return value_from_longest (builtin_type_int, (LONGEST) ! tem);
}
case BINOP_LESS:
@@ -651,12 +650,12 @@ evaluate_subexp (expect_type, exp, pos, noside)
goto nosideret;
if (binop_user_defined_p (op, arg1, arg2))
{
- return value_x_binop (arg1, arg2, op, 0);
+ return value_x_binop (arg1, arg2, op, OP_NULL);
}
else
{
tem = value_less (arg1, arg2);
- return value_from_long (builtin_type_int, (LONGEST) tem);
+ return value_from_longest (builtin_type_int, (LONGEST) tem);
}
case BINOP_GTR:
@@ -666,12 +665,12 @@ evaluate_subexp (expect_type, exp, pos, noside)
goto nosideret;
if (binop_user_defined_p (op, arg1, arg2))
{
- return value_x_binop (arg1, arg2, op, 0);
+ return value_x_binop (arg1, arg2, op, OP_NULL);
}
else
{
tem = value_less (arg2, arg1);
- return value_from_long (builtin_type_int, (LONGEST) tem);
+ return value_from_longest (builtin_type_int, (LONGEST) tem);
}
case BINOP_GEQ:
@@ -681,12 +680,12 @@ evaluate_subexp (expect_type, exp, pos, noside)
goto nosideret;
if (binop_user_defined_p (op, arg1, arg2))
{
- return value_x_binop (arg1, arg2, op, 0);
+ return value_x_binop (arg1, arg2, op, OP_NULL);
}
else
{
tem = value_less (arg1, arg2);
- return value_from_long (builtin_type_int, (LONGEST) ! tem);
+ return value_from_longest (builtin_type_int, (LONGEST) ! tem);
}
case BINOP_LEQ:
@@ -696,12 +695,12 @@ evaluate_subexp (expect_type, exp, pos, noside)
goto nosideret;
if (binop_user_defined_p (op, arg1, arg2))
{
- return value_x_binop (arg1, arg2, op, 0);
+ return value_x_binop (arg1, arg2, op, OP_NULL);
}
else
{
tem = value_less (arg2, arg1);
- return value_from_long (builtin_type_int, (LONGEST) ! tem);
+ return value_from_longest (builtin_type_int, (LONGEST) ! tem);
}
case BINOP_REPEAT:
@@ -713,9 +712,9 @@ evaluate_subexp (expect_type, exp, pos, noside)
error ("Non-integral right operand for \"@\" operator.");
if (noside == EVAL_AVOID_SIDE_EFFECTS)
return allocate_repeat_value (VALUE_TYPE (arg1),
- (int) value_as_long (arg2));
+ longest_to_int (value_as_long (arg2)));
else
- return value_repeat (arg1, (int) value_as_long (arg2));
+ return value_repeat (arg1, longest_to_int (value_as_long (arg2)));
case BINOP_COMMA:
evaluate_subexp (NULL_TYPE, exp, pos, noside);
@@ -753,7 +752,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
if (unop_user_defined_p (op, arg1))
return value_x_unop (arg1, op);
else
- return value_from_long (builtin_type_int,
+ return value_from_longest (builtin_type_int,
(LONGEST) value_zerop (arg1));
case UNOP_IND:
@@ -835,7 +834,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
return value_zero (exp->elts[pc + 1].type, lval_memory);
else
return value_at_lazy (exp->elts[pc + 1].type,
- (CORE_ADDR) value_as_long (arg1));
+ value_as_pointer (arg1));
case UNOP_PREINCREMENT:
arg1 = evaluate_subexp (expect_type, exp, pos, noside);
@@ -847,7 +846,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
}
else
{
- arg2 = value_add (arg1, value_from_long (builtin_type_char,
+ arg2 = value_add (arg1, value_from_longest (builtin_type_char,
(LONGEST) 1));
return value_assign (arg1, arg2);
}
@@ -862,7 +861,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
}
else
{
- arg2 = value_sub (arg1, value_from_long (builtin_type_char,
+ arg2 = value_sub (arg1, value_from_longest (builtin_type_char,
(LONGEST) 1));
return value_assign (arg1, arg2);
}
@@ -877,7 +876,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
}
else
{
- arg2 = value_add (arg1, value_from_long (builtin_type_char,
+ arg2 = value_add (arg1, value_from_longest (builtin_type_char,
(LONGEST) 1));
value_assign (arg1, arg2);
return arg1;
@@ -893,7 +892,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
}
else
{
- arg2 = value_sub (arg1, value_from_long (builtin_type_char,
+ arg2 = value_sub (arg1, value_from_longest (builtin_type_char,
(LONGEST) 1));
value_assign (arg1, arg2);
return arg1;
@@ -908,7 +907,7 @@ evaluate_subexp (expect_type, exp, pos, noside)
}
nosideret:
- return value_from_long (builtin_type_long, (LONGEST) 1);
+ return value_from_longest (builtin_type_long, (LONGEST) 1);
}
/* Evaluate a subexpression of EXP, at index *POS,
@@ -960,7 +959,7 @@ evaluate_subexp_for_address (exp, pos, noside)
value_zero (type, not_lval);
}
else
- return locate_var_value (exp->elts[pc + 1].symbol, (CORE_ADDR) 0);
+ return locate_var_value (exp->elts[pc + 1].symbol, (FRAME) 0);
default:
if (noside == EVAL_AVOID_SIDE_EFFECTS)
@@ -1000,7 +999,7 @@ evaluate_subexp_with_coercion (exp, pos, noside)
if (TYPE_CODE (SYMBOL_TYPE (exp->elts[pc + 1].symbol)) == TYPE_CODE_ARRAY)
{
(*pos) += 3;
- val = locate_var_value (exp->elts[pc + 1].symbol, (CORE_ADDR) 0);
+ val = locate_var_value (exp->elts[pc + 1].symbol, (FRAME) 0);
return value_cast (lookup_pointer_type (TYPE_TARGET_TYPE (SYMBOL_TYPE (exp->elts[pc + 1].symbol))),
val);
}
@@ -1034,22 +1033,22 @@ evaluate_subexp_for_sizeof (exp, pos)
case UNOP_IND:
(*pos)++;
val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
- return value_from_long (builtin_type_int, (LONGEST)
+ return value_from_longest (builtin_type_int, (LONGEST)
TYPE_LENGTH (TYPE_TARGET_TYPE (VALUE_TYPE (val))));
case UNOP_MEMVAL:
(*pos) += 3;
- return value_from_long (builtin_type_int,
+ return value_from_longest (builtin_type_int,
(LONGEST) TYPE_LENGTH (exp->elts[pc + 1].type));
case OP_VAR_VALUE:
(*pos) += 3;
- return value_from_long (builtin_type_int,
+ return value_from_longest (builtin_type_int,
(LONGEST) TYPE_LENGTH (SYMBOL_TYPE (exp->elts[pc + 1].symbol)));
default:
val = evaluate_subexp (NULL_TYPE, exp, pos, EVAL_AVOID_SIDE_EFFECTS);
- return value_from_long (builtin_type_int,
+ return value_from_longest (builtin_type_int,
(LONGEST) TYPE_LENGTH (VALUE_TYPE (val)));
}
}