X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fparser-defs.h;h=d6c3b068978efed010263ad85cdea2460344fd50;hb=975f8708de015fb2b813edbf8b714f4777c57a41;hp=2c1ea15d05e7d9fae21c763d34b84f011e65bb51;hpb=2a61252965c91540133bece7deb92eb22e3cf929;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h index 2c1ea15d05..d6c3b06897 100644 --- a/gdb/parser-defs.h +++ b/gdb/parser-defs.h @@ -1,6 +1,6 @@ /* Parser definitions for GDB. - Copyright (C) 1986-2019 Free Software Foundation, Inc. + Copyright (C) 1986-2020 Free Software Foundation, Inc. Modified from expread.y by the Department of Computer Science at the State University of New York at Buffalo. @@ -23,14 +23,15 @@ #if !defined (PARSER_DEFS_H) #define PARSER_DEFS_H 1 -#include "common/vec.h" #include "expression.h" +#include "symtab.h" struct block; struct language_defn; struct internalvar; +class innermost_block_tracker; -extern int parser_debug; +extern bool parser_debug; /* A class that can be used to build a "struct expression". */ @@ -107,13 +108,15 @@ struct parser_state : public expr_builder CORE_ADDR context_pc, int comma, const char *input, - int completion) + int completion, + innermost_block_tracker *tracker) : expr_builder (lang, gdbarch), expression_context_block (context_block), expression_context_pc (context_pc), comma_terminates (comma), lexptr (input), - parse_completion (completion) + parse_completion (completion), + block_tracker (tracker) { } @@ -186,6 +189,9 @@ struct parser_state : public expr_builder /* Completion state is updated here. */ expr_completion_state m_completion_state; + /* The innermost block tracker. */ + innermost_block_tracker *block_tracker; + private: /* Data structure for saving values of arglist_len for function calls whose @@ -200,21 +206,12 @@ private: class innermost_block_tracker { public: - innermost_block_tracker () - : m_types (INNERMOST_BLOCK_FOR_SYMBOLS), + innermost_block_tracker (innermost_block_tracker_types types + = INNERMOST_BLOCK_FOR_SYMBOLS) + : m_types (types), m_innermost_block (NULL) { /* Nothing. */ } - /* Reset the currently stored innermost block. Usually called before - parsing a new expression. As the most common case is that we only - want to gather the innermost block for symbols in an expression, this - becomes the default block tracker type. */ - void reset (innermost_block_tracker_types t = INNERMOST_BLOCK_FOR_SYMBOLS) - { - m_types = t; - m_innermost_block = NULL; - } - /* Update the stored innermost block if the new block B is more inner than the currently stored block, or if no block is stored yet. The type T tells us whether the block B was for a symbol or for a @@ -246,12 +243,6 @@ private: const struct block *m_innermost_block; }; -/* The innermost context required by the stack and register variables - we've encountered so far. This is cleared by the expression - parsing functions before parsing an expression, and can queried - once the parse is complete. */ -extern innermost_block_tracker innermost_block; - /* A string token, either a char-string or bit-string. Char-strings are used, for example, for the names of symbols. */ @@ -299,40 +290,6 @@ struct objc_class_str int theclass; }; -/* For parsing of complicated types. - An array should be preceded in the list by the size of the array. */ -enum type_pieces - { - tp_end = -1, - tp_pointer, - tp_reference, - tp_rvalue_reference, - tp_array, - tp_function, - tp_function_with_arguments, - tp_const, - tp_volatile, - tp_space_identifier, - tp_type_stack, - tp_kind - }; -/* The stack can contain either an enum type_pieces or an int. */ -union type_stack_elt - { - enum type_pieces piece; - int int_val; - struct type_stack *stack_val; - std::vector *typelist_val; - }; - -/* The type stack is an instance of this structure. */ - -struct type_stack -{ - /* Elements on the stack. */ - std::vector elements; -}; - /* Reverse an expression from suffix form (in which it is constructed) to prefix form (in which we can conveniently print or execute it). Ordinarily this always returns -1. However, if LAST_STRUCT @@ -374,28 +331,7 @@ extern void write_dollar_variable (struct parser_state *, struct stoken str); extern const char *find_template_name_end (const char *); -extern char *copy_name (struct stoken); - -extern void insert_type (enum type_pieces); - -extern void push_type (enum type_pieces); - -extern void push_type_int (int); - -extern void insert_type_address_space (struct expr_builder *, char *); - -extern enum type_pieces pop_type (void); - -extern int pop_type_int (void); - -extern struct type_stack *get_type_stack (void); - -extern struct type_stack *append_type_stack (struct type_stack *to, - struct type_stack *from); - -extern void push_type_stack (struct type_stack *stack); - -extern void push_typelist (std::vector *typelist); +extern std::string copy_name (struct stoken); extern int dump_subexp (struct expression *, struct ui_file *, int); @@ -414,11 +350,8 @@ extern int operator_check_standard (struct expression *exp, int pos, extern const char *op_name_standard (enum exp_opcode); -extern struct type *follow_types (struct type *); - -extern type_instance_flags follow_type_instance_flags (); - -extern void null_post_parser (expression_up *, int, int); +extern void null_post_parser (expression_up *, int, int, + innermost_block_tracker *); extern bool parse_float (const char *p, int len, const struct type *type, gdb_byte *data);