* d10v-tdep.c (d10v_frame_chain, d10v_frame_init_saved_regs,
[deliverable/binutils-gdb.git] / gdb / eval.c
index 06ec1914eba44f753bf7ea4f9e091acc6272ed63..fad995ee35c5b5b03501a091d21b6146fa96c3da 100644 (file)
@@ -1,5 +1,6 @@
 /* Evaluate expressions for GDB.
-   Copyright 1986, 87, 89, 91, 92, 93, 94, 95, 96, 97, 1998
+   Copyright 1986, 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
+   1996, 1997, 1998, 1999, 2000
    Free Software Foundation, Inc.
 
    This file is part of GDB.
@@ -27,9 +28,9 @@
 #include "expression.h"
 #include "target.h"
 #include "frame.h"
-#include "demangle.h"
 #include "language.h"          /* For CAST_IS_CONVERSION */
 #include "f-lang.h"            /* for array bound stuff */
+#include "cp-abi.h"
 
 /* Defined in symtab.c */
 extern int hp_som_som_object_present;
@@ -43,34 +44,27 @@ extern int objectprint;
 
 /* Prototypes for local functions. */
 
-static value_ptr evaluate_subexp_for_sizeof PARAMS ((struct expression *,
-                                                    int *));
+static value_ptr evaluate_subexp_for_sizeof (struct expression *, int *);
 
-static value_ptr evaluate_subexp_for_address PARAMS ((struct expression *,
-                                                     int *, enum noside));
+static value_ptr evaluate_subexp_for_address (struct expression *,
+                                             int *, enum noside);
 
-static value_ptr evaluate_subexp PARAMS ((struct type *, struct expression *,
-                                         int *, enum noside));
+static value_ptr evaluate_subexp (struct type *, struct expression *,
+                                 int *, enum noside);
 
-static char *get_label PARAMS ((struct expression *, int *));
+static char *get_label (struct expression *, int *);
 
 static value_ptr
-  evaluate_struct_tuple PARAMS ((value_ptr, struct expression *, int *,
-                                enum noside, int));
+evaluate_struct_tuple (value_ptr, struct expression *, int *,
+                      enum noside, int);
 
 static LONGEST
-  init_array_element PARAMS ((value_ptr, value_ptr, struct expression *,
-                             int *, enum noside, LONGEST, LONGEST));
+init_array_element (value_ptr, value_ptr, struct expression *,
+                   int *, enum noside, LONGEST, LONGEST);
 
-#if defined (__GNUC__) && !__STDC__
-inline
-#endif
 static value_ptr
-evaluate_subexp (expect_type, exp, pos, noside)
-     struct type *expect_type;
-     register struct expression *exp;
-     register int *pos;
-     enum noside noside;
+evaluate_subexp (struct type *expect_type, register struct expression *exp,
+                register int *pos, enum noside noside)
 {
   return (*exp->language_defn->evaluate_exp) (expect_type, exp, pos, noside);
 }
@@ -79,13 +73,12 @@ evaluate_subexp (expect_type, exp, pos, noside)
    and return the result as a number.  */
 
 CORE_ADDR
-parse_and_eval_address (exp)
-     char *exp;
+parse_and_eval_address (char *exp)
 {
   struct expression *expr = parse_expression (exp);
   register CORE_ADDR addr;
   register struct cleanup *old_chain =
-  make_cleanup ((make_cleanup_func) free_current_contents, &expr);
+  make_cleanup (free_current_contents, &expr);
 
   addr = value_as_pointer (evaluate_expression (expr));
   do_cleanups (old_chain);
@@ -96,27 +89,40 @@ parse_and_eval_address (exp)
    and advanced that variable across the characters parsed.  */
 
 CORE_ADDR
-parse_and_eval_address_1 (expptr)
-     char **expptr;
+parse_and_eval_address_1 (char **expptr)
 {
   struct expression *expr = parse_exp_1 (expptr, (struct block *) 0, 0);
   register CORE_ADDR addr;
   register struct cleanup *old_chain =
-  make_cleanup ((make_cleanup_func) free_current_contents, &expr);
+  make_cleanup (free_current_contents, &expr);
 
   addr = value_as_pointer (evaluate_expression (expr));
   do_cleanups (old_chain);
   return addr;
 }
 
+/* Like parse_and_eval_address, but treats the value of the expression
+   as an integer, not an address, returns a LONGEST, not a CORE_ADDR */
+LONGEST
+parse_and_eval_long (char *exp)
+{
+  struct expression *expr = parse_expression (exp);
+  register LONGEST retval;
+  register struct cleanup *old_chain =
+    make_cleanup (free_current_contents, &expr);
+
+  retval = value_as_long (evaluate_expression (expr));
+  do_cleanups (old_chain);
+  return (retval);
+}
+
 value_ptr
-parse_and_eval (exp)
-     char *exp;
+parse_and_eval (char *exp)
 {
   struct expression *expr = parse_expression (exp);
   register value_ptr val;
   register struct cleanup *old_chain
-  = make_cleanup ((make_cleanup_func) free_current_contents, &expr);
+  = make_cleanup (free_current_contents, &expr);
 
   val = evaluate_expression (expr);
   do_cleanups (old_chain);
@@ -128,13 +134,12 @@ parse_and_eval (exp)
    EXPP is advanced to point to the comma.  */
 
 value_ptr
-parse_to_comma_and_eval (expp)
-     char **expp;
+parse_to_comma_and_eval (char **expp)
 {
   struct expression *expr = parse_exp_1 (expp, (struct block *) 0, 1);
   register value_ptr val;
   register struct cleanup *old_chain
-  = make_cleanup ((make_cleanup_func) free_current_contents, &expr);
+  = make_cleanup (free_current_contents, &expr);
 
   val = evaluate_expression (expr);
   do_cleanups (old_chain);
@@ -147,8 +152,7 @@ parse_to_comma_and_eval (expp)
    See expression.h for info on the format of an expression.  */
 
 value_ptr
-evaluate_expression (exp)
-     struct expression *exp;
+evaluate_expression (struct expression *exp)
 {
   int pc = 0;
   return evaluate_subexp (NULL_TYPE, exp, &pc, EVAL_NORMAL);
@@ -158,8 +162,7 @@ evaluate_expression (exp)
    and getting a value whose type alone is correct.  */
 
 value_ptr
-evaluate_type (exp)
-     struct expression *exp;
+evaluate_type (struct expression *exp)
 {
   int pc = 0;
   return evaluate_subexp (NULL_TYPE, exp, &pc, EVAL_AVOID_SIDE_EFFECTS);
@@ -169,9 +172,7 @@ evaluate_type (exp)
    returning the label.  Otherwise, does nothing and returns NULL. */
 
 static char *
-get_label (exp, pos)
-     register struct expression *exp;
-     int *pos;
+get_label (register struct expression *exp, int *pos)
 {
   if (exp->elts[*pos].opcode == OP_LABELED)
     {
@@ -185,16 +186,12 @@ get_label (exp, pos)
     return NULL;
 }
 
-/* This function evaluates tupes (in Chill) or brace-initializers
+/* This function evaluates tuples (in Chill) or brace-initializers
    (in C/C++) for structure types.  */
 
 static value_ptr
-evaluate_struct_tuple (struct_val, exp, pos, noside, nargs)
-     value_ptr struct_val;
-     register struct expression *exp;
-     register int *pos;
-     enum noside noside;
-     int nargs;
+evaluate_struct_tuple (value_ptr struct_val, register struct expression *exp,
+                      register int *pos, enum noside noside, int nargs)
 {
   struct type *struct_type = check_typedef (VALUE_TYPE (struct_val));
   struct type *substruct_type = struct_type;
@@ -336,12 +333,9 @@ evaluate_struct_tuple (struct_val, exp, pos, noside, nargs)
    Returns last index value.  */
 
 static LONGEST
-init_array_element (array, element, exp, pos, noside, low_bound, high_bound)
-     value_ptr array, element;
-     register struct expression *exp;
-     register int *pos;
-     enum noside noside;
-     LONGEST low_bound, high_bound;
+init_array_element (value_ptr array, value_ptr element,
+                   register struct expression *exp, register int *pos,
+                   enum noside noside, LONGEST low_bound, LONGEST high_bound)
 {
   LONGEST index;
   int element_size = TYPE_LENGTH (VALUE_TYPE (element));
@@ -380,11 +374,9 @@ init_array_element (array, element, exp, pos, noside, low_bound, high_bound)
 }
 
 value_ptr
-evaluate_subexp_standard (expect_type, exp, pos, noside)
-     struct type *expect_type;
-     register struct expression *exp;
-     register int *pos;
-     enum noside noside;
+evaluate_subexp_standard (struct type *expect_type,
+                         register struct expression *exp, register int *pos,
+                         enum noside noside)
 {
   enum exp_opcode op;
   int tem, tem2, tem3;
@@ -1782,10 +1774,8 @@ nosideret:
    then only the type of the result need be correct.  */
 
 static value_ptr
-evaluate_subexp_for_address (exp, pos, noside)
-     register struct expression *exp;
-     register int *pos;
-     enum noside noside;
+evaluate_subexp_for_address (register struct expression *exp, register int *pos,
+                            enum noside noside)
 {
   enum exp_opcode op;
   register int pc;
@@ -1864,10 +1854,8 @@ evaluate_subexp_for_address (exp, pos, noside)
  */
 
 value_ptr
-evaluate_subexp_with_coercion (exp, pos, noside)
-     register struct expression *exp;
-     register int *pos;
-     enum noside noside;
+evaluate_subexp_with_coercion (register struct expression *exp,
+                              register int *pos, enum noside noside)
 {
   register enum exp_opcode op;
   register int pc;
@@ -1903,9 +1891,7 @@ evaluate_subexp_with_coercion (exp, pos, noside)
    Advance *POS over the subexpression.  */
 
 static value_ptr
-evaluate_subexp_for_sizeof (exp, pos)
-     register struct expression *exp;
-     register int *pos;
+evaluate_subexp_for_sizeof (register struct expression *exp, register int *pos)
 {
   enum exp_opcode op;
   register int pc;
@@ -1955,9 +1941,7 @@ evaluate_subexp_for_sizeof (exp, pos)
 /* Parse a type expression in the string [P..P+LENGTH). */
 
 struct type *
-parse_and_eval_type (p, length)
-     char *p;
-     int length;
+parse_and_eval_type (char *p, int length)
 {
   char *tmp = (char *) alloca (length + 4);
   struct expression *expr;
@@ -1973,8 +1957,7 @@ parse_and_eval_type (p, length)
 }
 
 int
-calc_f77_array_dims (array_type)
-     struct type *array_type;
+calc_f77_array_dims (struct type *array_type)
 {
   int ndimen = 1;
   struct type *tmp_type;
This page took 0.026294 seconds and 4 git commands to generate.