diff options
author | John Gilmore <gnu@cygnus> | 1991-09-19 07:40:51 +0000 |
---|---|---|
committer | John Gilmore <gnu@cygnus> | 1991-09-19 07:40:51 +0000 |
commit | 2ccb38371a20cb1cab35bc41cafc5d0b67589be8 (patch) | |
tree | d5970907e06d6d91cd8326c1474380fef47d7385 | |
parent | d8b3b00eb2cac140cf57b4a0705c672957cddcc5 (diff) | |
download | gdb-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.
-rw-r--r-- | gdb/eval.c | 125 |
1 files changed, 62 insertions, 63 deletions
@@ -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))); } } |