X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fparser-defs.h;h=bca80146546c3ac05e2e3d899851b123a05b5af3;hb=12a0339399d8be3e1362dbf8dbfc93f452ce18a7;hp=748208ae6d1ecac55b32649f86a7ae0737e8c8a2;hpb=389e51db103b5c811f1849228c2c5e9e71062f5a;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h index 748208ae6d..bca8014654 100644 --- a/gdb/parser-defs.h +++ b/gdb/parser-defs.h @@ -1,7 +1,8 @@ /* 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, 2008, 2009, 2010, 2011 + Free Software Foundation, Inc. Modified from expread.y by the Department of Computer Science at the State University of New York at Buffalo. @@ -10,7 +11,7 @@ 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 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -19,19 +20,24 @@ GNU General Public License for more details. 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. */ + along with this program. If not, see . */ #if !defined (PARSER_DEFS_H) #define PARSER_DEFS_H 1 #include "doublest.h" +struct block; + +extern int parser_debug; + extern struct expression *expout; extern int expout_size; extern int expout_ptr; +#define parse_gdbarch (expout->gdbarch) +#define parse_language (expout->language_defn) + /* If this is nonzero, this block is used as the lexical context for symbol names. */ @@ -44,7 +50,7 @@ extern struct block *expression_context_block; extern CORE_ADDR expression_context_pc; /* The innermost context required by the stack and register variables - we've encountered so far. */ + we've encountered so far. */ extern struct block *innermost_block; /* The block in which the most recently discovered symbol was found. @@ -56,16 +62,32 @@ extern struct block *block_found; extern int arglist_len; /* A string token, either a char-string or bit-string. Char-strings are - used, for example, for the names of symbols. */ + used, for example, for the names of symbols. */ struct stoken { - /* Pointer to first byte of char-string or first bit of bit-string */ + /* Pointer to first byte of char-string or first bit of bit-string. */ + char *ptr; + /* Length of string in bytes for char-string or bits for bit-string. */ + int length; + }; + +struct typed_stoken + { + /* A language-specific type field. */ + int type; + /* Pointer to first byte of char-string or first bit of bit-string. */ char *ptr; - /* Length of string in bytes for char-string or bits for bit-string */ + /* Length of string in bytes for char-string or bits for bit-string. */ int length; }; +struct stoken_vector + { + int len; + struct typed_stoken *tokens; + }; + struct ttype { struct stoken stoken; @@ -79,6 +101,14 @@ struct symtoken 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 @@ -101,8 +131,6 @@ union type_stack_elt extern union type_stack_elt *type_stack; extern int type_stack_depth, type_stack_size; -extern void write_exp_elt (union exp_element); - extern void write_exp_elt_opcode (enum exp_opcode); extern void write_exp_elt_sym (struct symbol *); @@ -111,23 +139,27 @@ extern void write_exp_elt_longcst (LONGEST); extern void write_exp_elt_dblcst (DOUBLEST); +extern void write_exp_elt_decfloatcst (gdb_byte *); + extern void write_exp_elt_type (struct type *); extern void write_exp_elt_intern (struct internalvar *); extern void write_exp_string (struct stoken); +void write_exp_string_vector (int type, struct stoken_vector *vec); + extern void write_exp_bitstring (struct stoken); extern void write_exp_elt_block (struct block *); -extern void write_exp_msymbol (struct minimal_symbol *, - struct type *, struct type *); +extern void write_exp_elt_objfile (struct objfile *objfile); + +extern void write_exp_msymbol (struct minimal_symbol *); extern void write_dollar_variable (struct stoken str); -extern struct symbol *parse_nested_classes_for_hpacc (char *, int, char **, - int *, char **); +extern void mark_struct_expression (void); extern char *find_template_name_end (char *); @@ -149,14 +181,39 @@ extern int pop_type_int (void); 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 (const struct expression *, int, int *, int *); + +extern void operator_length_standard (const struct expression *, int, int *, + int *); + +extern int operator_check_standard (struct expression *exp, int pos, + int (*objfile_func) + (struct objfile *objfile, void *data), + void *data); + +extern char *op_name_standard (enum exp_opcode); + extern struct type *follow_types (struct type *); +extern void null_post_parser (struct expression **, int); + +extern int parse_float (const char *p, int len, DOUBLEST *d, + const char **suffix); + +extern int parse_c_float (struct gdbarch *gdbarch, const char *p, int len, + DOUBLEST *d, struct type **t); + /* During parsing of a C expression, the pointer to the next character is in this variable. */ extern char *lexptr; -/* After a token has been recognized, this variable points to it. +/* After a token has been recognized, this variable points to it. Currently used only for error reporting. */ extern char *prev_lexptr; @@ -206,19 +263,68 @@ struct op_print enum precedence precedence; /* For a binary operator: 1 iff right associate. - For a unary operator: 1 iff postfix. */ + For a unary operator: 1 iff postfix. */ 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) (const struct expression*, int, int*, int *); + + /* Call TYPE_FUNC and OBJFILE_FUNC for any TYPE and OBJFILE found being + referenced by the single operator of EXP at position POS. Operator + parameters are located at positive (POS + number) offsets in EXP. + The functions should never be called with NULL TYPE or NULL OBJFILE. + Functions should get passed an arbitrary caller supplied DATA pointer. + If any of the functions returns non-zero value then (any other) non-zero + value should be immediately returned to the caller. Otherwise zero + should be returned. */ + int (*operator_check) (struct expression *exp, int pos, + int (*objfile_func) (struct objfile *objfile, + void *data), + void *data); + + /* 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); + }; + -extern int target_map_name_to_register (char *, int); +/* 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 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. */ -extern void parser_fprintf (FILE *, const char *, ...) ATTR_FORMAT (printf, 2 ,3); +extern void parser_fprintf (FILE *, const char *, ...) ATTRIBUTE_PRINTF (2, 3); + +extern int exp_uses_objfile (struct expression *exp, struct objfile *objfile); #endif /* PARSER_DEFS_H */