/* Parser definitions for GDB.
- Copyright 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
- 1997, 1998, 1999, 2000, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1986, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997,
+ 1998, 1999, 2000, 2002, 2007 Free Software Foundation, Inc.
Modified from expread.y by the Department of Computer Science at the
State University of New York at Buffalo.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
+ Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA. */
#if !defined (PARSER_DEFS_H)
#define PARSER_DEFS_H 1
#include "doublest.h"
+struct block;
+
extern struct expression *expout;
extern int expout_size;
extern int expout_ptr;
the block that we want to evaluate expressions at. When debugging
C or C++ code, we use this to find the exact line we're at, and
then look up the macro definitions active at that point. */
-CORE_ADDR expression_context_pc;
+extern CORE_ADDR expression_context_pc;
/* The innermost context required by the stack and register variables
we've encountered so far. */
int is_a_field_of_this;
};
+struct objc_class_str
+ {
+ struct stoken stoken;
+ struct type *type;
+ int class;
+ };
+
+
/* For parsing of complicated types.
An array should be preceded in the list by the size of the array. */
enum type_pieces
extern void write_exp_elt_block (struct block *);
+extern void write_exp_elt_objfile (struct objfile *objfile);
+
extern void write_exp_msymbol (struct minimal_symbol *,
struct type *, struct type *);
extern int length_of_subexp (struct expression *, int);
+extern int dump_subexp (struct expression *, struct ui_file *, int);
+
+extern int dump_subexp_body_standard (struct expression *,
+ struct ui_file *, int);
+
+extern void operator_length (struct expression *, int, int *, int *);
+
+extern void operator_length_standard (struct expression *, int, int *, int *);
+
+extern char *op_name_standard (enum exp_opcode);
+
extern struct type *follow_types (struct type *);
+extern void null_post_parser (struct expression **, int);
+
/* During parsing of a C expression, the pointer to the next character
is in this variable. */
int right_assoc;
};
-/* The generic method for targets to specify how their registers are
- named. The mapping can be derived from two sources: REGISTER_NAME;
- and builtin regs. */
+/* Information needed to print, prefixify, and evaluate expressions for
+ a given language. */
+
+struct exp_descriptor
+ {
+ /* Print subexpression. */
+ void (*print_subexp) (struct expression *, int *, struct ui_file *,
+ enum precedence);
+
+ /* Returns number of exp_elements needed to represent an operator and
+ the number of subexpressions it takes. */
+ void (*operator_length) (struct expression*, int, int*, int *);
+
+ /* Name of this operator for dumping purposes. */
+ char *(*op_name) (enum exp_opcode);
+
+ /* Dump the rest of this (prefix) expression after the operator
+ itself has been printed. See dump_subexp_body_standard in
+ (expprint.c). */
+ int (*dump_subexp_body) (struct expression *, struct ui_file *, int);
+
+ /* Evaluate an expression. */
+ struct value *(*evaluate_exp) (struct type *, struct expression *,
+ int *, enum noside);
+ };
+
+
+/* Default descriptor containing standard definitions of all
+ elements. */
+extern const struct exp_descriptor exp_descriptor_standard;
+
+/* Functions used by language-specific extended operators to (recursively)
+ print/dump subexpressions. */
+
+extern void print_subexp (struct expression *, int *, struct ui_file *,
+ enum precedence);
-extern int target_map_name_to_register (char *, int);
+extern void print_subexp_standard (struct expression *, int *,
+ struct ui_file *, enum precedence);
/* Function used to avoid direct calls to fprintf
in the code generated by the bison parser. */