From 37eedb39824dc26c82a92b5515a352d7de0c9b5b Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Sun, 24 Mar 2019 10:28:42 -0600 Subject: Make base class for parser_state This makes a new base class, expr_builder, for parser_state. This separates the state needed to construct an expression from the state needed by the parsers. gdb/ChangeLog 2019-04-04 Tom Tromey * gdbarch.h, gdbarch.c: Rebuild. * gdbarch.sh (dtrace_parse_probe_argument): Change type. * stap-probe.h: (struct stap_parse_info): Replace "parser_state" with "expr_builder". * parser-defs.h (struct expr_builder): Rename from "parser_state". (parser_state): New class. * parse.c (expr_builder): Rename. (expr_builder::release): Rename. (write_exp_elt, write_exp_elt_opcode, write_exp_elt_sym) (write_exp_elt_msym, write_exp_elt_block, write_exp_elt_objfile) (write_exp_elt_longcst, write_exp_elt_floatcst) (write_exp_elt_type, write_exp_elt_intern, write_exp_string) (write_exp_string_vector, write_exp_bitstring) (write_exp_msymbol, mark_struct_expression) (write_dollar_variable) (insert_type_address_space, increase_expout_size): Replace "parser_state" with "expr_builder". * dtrace-probe.c: Replace "parser_state" with "expr_builder". * amd64-linux-tdep.c (amd64_dtrace_parse_probe_argument): Replace "parser_state" with "expr_builder". --- gdb/parser-defs.h | 56 +++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 38 insertions(+), 18 deletions(-) (limited to 'gdb/parser-defs.h') diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h index 8fcbca3..5bc9d25 100644 --- a/gdb/parser-defs.h +++ b/gdb/parser-defs.h @@ -32,15 +32,17 @@ struct internalvar; extern int parser_debug; -struct parser_state +/* A class that can be used to build a "struct expression". */ + +struct expr_builder { /* Constructor. LANG is the language used to parse the expression. And GDBARCH is the gdbarch to use during parsing. */ - parser_state (const struct language_defn *lang, + expr_builder (const struct language_defn *lang, struct gdbarch *gdbarch); - DISABLE_COPY_AND_ASSIGN (parser_state); + DISABLE_COPY_AND_ASSIGN (expr_builder); /* Resize the allocated expression to the correct size, and return it as an expression_up -- passing ownership to the caller. */ @@ -74,6 +76,24 @@ struct parser_state size_t expout_ptr; }; +/* An instance of this type is instantiated during expression parsing, + and passed to the appropriate parser. It holds both inputs to the + parser, and result. */ + +struct parser_state : public expr_builder +{ + /* Constructor. LANG is the language used to parse the expression. + And GDBARCH is the gdbarch to use during parsing. */ + + parser_state (const struct language_defn *lang, + struct gdbarch *gdbarch) + : expr_builder (lang, gdbarch) + { + } + + DISABLE_COPY_AND_ASSIGN (parser_state); +}; + /* If this is nonzero, this block is used as the lexical context for symbol names. */ @@ -236,36 +256,36 @@ struct type_stack extern int prefixify_expression (struct expression *expr); -extern void write_exp_elt_opcode (struct parser_state *, enum exp_opcode); +extern void write_exp_elt_opcode (struct expr_builder *, enum exp_opcode); -extern void write_exp_elt_sym (struct parser_state *, struct symbol *); +extern void write_exp_elt_sym (struct expr_builder *, struct symbol *); -extern void write_exp_elt_longcst (struct parser_state *, LONGEST); +extern void write_exp_elt_longcst (struct expr_builder *, LONGEST); -extern void write_exp_elt_floatcst (struct parser_state *, const gdb_byte *); +extern void write_exp_elt_floatcst (struct expr_builder *, const gdb_byte *); -extern void write_exp_elt_type (struct parser_state *, struct type *); +extern void write_exp_elt_type (struct expr_builder *, struct type *); -extern void write_exp_elt_intern (struct parser_state *, struct internalvar *); +extern void write_exp_elt_intern (struct expr_builder *, struct internalvar *); -extern void write_exp_string (struct parser_state *, struct stoken); +extern void write_exp_string (struct expr_builder *, struct stoken); -void write_exp_string_vector (struct parser_state *, int type, +void write_exp_string_vector (struct expr_builder *, int type, struct stoken_vector *vec); -extern void write_exp_bitstring (struct parser_state *, struct stoken); +extern void write_exp_bitstring (struct expr_builder *, struct stoken); -extern void write_exp_elt_block (struct parser_state *, const struct block *); +extern void write_exp_elt_block (struct expr_builder *, const struct block *); -extern void write_exp_elt_objfile (struct parser_state *, +extern void write_exp_elt_objfile (struct expr_builder *, struct objfile *objfile); -extern void write_exp_msymbol (struct parser_state *, +extern void write_exp_msymbol (struct expr_builder *, struct bound_minimal_symbol); -extern void write_dollar_variable (struct parser_state *, struct stoken str); +extern void write_dollar_variable (struct expr_builder *, struct stoken str); -extern void mark_struct_expression (struct parser_state *); +extern void mark_struct_expression (struct expr_builder *); extern const char *find_template_name_end (const char *); @@ -281,7 +301,7 @@ extern void push_type (enum type_pieces); extern void push_type_int (int); -extern void insert_type_address_space (struct parser_state *, char *); +extern void insert_type_address_space (struct expr_builder *, char *); extern enum type_pieces pop_type (void); -- cgit v1.1