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  <tom@tromey.com>

	* 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".
This commit is contained in:
Tom Tromey
2019-03-24 10:28:42 -06:00
parent 73923d7eed
commit 37eedb3982
9 changed files with 115 additions and 73 deletions

View File

@@ -1735,7 +1735,7 @@ amd64_dtrace_disable_probe (struct gdbarch *gdbarch, CORE_ADDR addr)
static void
amd64_dtrace_parse_probe_argument (struct gdbarch *gdbarch,
struct parser_state *pstate,
struct expr_builder *builder,
int narg)
{
struct stoken str;
@@ -1758,11 +1758,11 @@ amd64_dtrace_parse_probe_argument (struct gdbarch *gdbarch,
int regno = arg_reg_map[narg];
const char *regname = user_reg_map_regnum_to_name (gdbarch, regno);
write_exp_elt_opcode (pstate, OP_REGISTER);
write_exp_elt_opcode (builder, OP_REGISTER);
str.ptr = regname;
str.length = strlen (regname);
write_exp_string (pstate, str);
write_exp_elt_opcode (pstate, OP_REGISTER);
write_exp_string (builder, str);
write_exp_elt_opcode (builder, OP_REGISTER);
}
else
{
@@ -1770,27 +1770,27 @@ amd64_dtrace_parse_probe_argument (struct gdbarch *gdbarch,
const char *regname = user_reg_map_regnum_to_name (gdbarch, AMD64_RSP_REGNUM);
/* Displacement. */
write_exp_elt_opcode (pstate, OP_LONG);
write_exp_elt_type (pstate, builtin_type (gdbarch)->builtin_long);
write_exp_elt_longcst (pstate, narg - 6);
write_exp_elt_opcode (pstate, OP_LONG);
write_exp_elt_opcode (builder, OP_LONG);
write_exp_elt_type (builder, builtin_type (gdbarch)->builtin_long);
write_exp_elt_longcst (builder, narg - 6);
write_exp_elt_opcode (builder, OP_LONG);
/* Register: SP. */
write_exp_elt_opcode (pstate, OP_REGISTER);
write_exp_elt_opcode (builder, OP_REGISTER);
str.ptr = regname;
str.length = strlen (regname);
write_exp_string (pstate, str);
write_exp_elt_opcode (pstate, OP_REGISTER);
write_exp_string (builder, str);
write_exp_elt_opcode (builder, OP_REGISTER);
write_exp_elt_opcode (pstate, BINOP_ADD);
write_exp_elt_opcode (builder, BINOP_ADD);
/* Cast to long. */
write_exp_elt_opcode (pstate, UNOP_CAST);
write_exp_elt_type (pstate,
write_exp_elt_opcode (builder, UNOP_CAST);
write_exp_elt_type (builder,
lookup_pointer_type (builtin_type (gdbarch)->builtin_long));
write_exp_elt_opcode (pstate, UNOP_CAST);
write_exp_elt_opcode (builder, UNOP_CAST);
write_exp_elt_opcode (pstate, UNOP_IND);
write_exp_elt_opcode (builder, UNOP_IND);
}
}