52#include "gdbsupport/gdb_optional.h"
79 innermost_block_tracker_types t)
116 gdb_assert (tag == TYPE_CODE_UNION
117 || tag == TYPE_CODE_STRUCT
118 || tag == TYPE_CODE_ENUM);
128 std::vector<std::string> data (vec->
len);
129 for (
int i = 0; i < vec->
len; ++i)
141 if (sym.
symbol !=
nullptr)
145 push_new<expr::var_value_operation> (sym);
150 if (msymbol.
minsym != NULL)
151 push_new<expr::var_msym_value_operation> (msymbol);
153 error (_(
"No symbol table is loaded. Use the \"file\" command."));
155 error (_(
"No symbol \"%s\" in current context."),
name);
176 if (str.
length >= 2 && str.
ptr[1] ==
'$')
185 push_new<expr::last_operation> (i);
189 for (; i < str.
length; i++)
190 if (!(str.
ptr[i] >=
'0' && str.
ptr[i] <=
'9'))
194 i = atoi (str.
ptr + 1 + negate);
197 push_new<expr::last_operation> (i);
209 push_new<expr::register_operation> (
copy_name (str));
221 push_new<expr::internalvar_operation> (isym);
231 push_new<expr::var_value_operation> (sym);
237 push_new<expr::var_msym_value_operation> (msym);
243 push_new<expr::internalvar_operation>
253 int just_seen_right = 0;
254 int just_seen_colon = 0;
255 int just_seen_space = 0;
257 if (!p || (*p !=
'<'))
272 if (just_seen_colon || just_seen_right || just_seen_space)
276 if (just_seen_colon || just_seen_right)
283 if (just_seen_space || (just_seen_colon > 1))
290 if (!((*p >=
'a' && *p <=
'z') ||
291 (*p >=
'A' && *p <=
'Z') ||
292 (*p >=
'0' && *p <=
'9') ||
293 (*p ==
'_') || (*p ==
',') ||
294 (*p ==
'&') || (*p ==
'*') ||
295 (*p ==
'(') || (*p ==
')') ||
296 (*p ==
'[') || (*p ==
']')))
333 std::unique_ptr<expr_completion_base> *completer)
337 if (*stringptr == 0 || **stringptr == 0)
340 const struct block *expression_context_block =
block;
341 CORE_ADDR expression_context_pc = 0;
344 if (tracker ==
nullptr)
345 tracker = &local_tracker;
350 if (!expression_context_block)
351 expression_context_block
354 expression_context_pc = expression_context_block->
entry_pc ();
356 expression_context_pc = pc;
360 if (!expression_context_block)
366 expression_context_block
369 if (expression_context_block)
370 expression_context_pc = expression_context_block->
entry_pc ();
406 expression_context_pc,
flags, *stringptr,
407 completer !=
nullptr, tracker);
416 catch (
const gdb_exception_error &except)
426 result->op->set_outermost ();
431 if (completer !=
nullptr)
464 error (_(
"Junk after end of expression."));
474 gdb::optional<scoped_restore_current_language> lang_saver;
477 lang_saver.emplace ();
491 std::unique_ptr<expr_completion_base> *completer)
499 catch (
const gdb_exception_error &except)
506 if (*completer ==
nullptr)
521 const struct type *
type, gdb_byte *data)
530fits_in_type (
int n_sign, ULONGEST n,
int type_bits,
bool type_signed_p)
533 if (n == 0 && n_sign == -1)
536 if (n_sign == -1 && !type_signed_p)
540 if (type_bits >
sizeof (ULONGEST) * 8)
543 ULONGEST smax = (ULONGEST)1 << (type_bits - 1);
549 else if (n_sign == 1 && type_signed_p)
554 else if (n_sign == 1 && !type_signed_p)
557 return ((n >> 1) >> (type_bits - 1)) == 0;
560 gdb_assert_not_reached (
"");
570 gdb_assert (n.
sgn () >= 0);
577 if (n_sign == -1 && !type_signed_p)
613 _(
"Set expression debugging."),
614 _(
"Show expression debugging."),
615 _(
"When non-zero, the internal representation "
616 "of expressions will be printed."),
622 _(
"Set parser debugging."),
623 _(
"Show parser debugging."),
624 _(
"When non-zero, expression parser "
625 "tracing will be enabled."),
struct gdbarch * get_current_arch(void)
innermost_block_tracker_types m_types
void update(const struct block *b, innermost_block_tracker_types t)
const struct block * m_innermost_block
void error_no_arg(const char *why)
struct cmd_list_element * showdebuglist
struct cmd_list_element * setdebuglist
set_show_commands add_setshow_boolean_cmd(const char *name, enum command_class theclass, bool *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
set_show_commands add_setshow_zuinteger_cmd(const char *name, enum command_class theclass, unsigned int *var, const char *set_doc, const char *show_doc, const char *help_doc, cmd_func_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, struct cmd_list_element **show_list)
std::unique_ptr< expression > expression_up
@ PARSER_LEAVE_BLOCK_ALONE
@ INNERMOST_BLOCK_FOR_REGISTERS
int symbol_read_needs_frame(struct symbol *sym)
const struct block * get_selected_block(CORE_ADDR *addr_in_block)
mach_port_t kern_return_t mach_port_t mach_msg_type_name_t msgportsPoly mach_port_t kern_return_t pid_t pid mach_port_t kern_return_t mach_port_t task mach_port_t kern_return_t int flags
static void set_language(const char *language)
const struct language_defn * language_def(enum language lang)
const struct language_defn * current_language
struct bound_minimal_symbol lookup_bound_minimal_symbol(const char *name)
int have_partial_symbols(void)
int have_full_symbols(void)
bool parse_float(const char *p, int len, const struct type *type, gdb_byte *data)
expression_up parse_exp_1(const char **stringptr, CORE_ADDR pc, const struct block *block, parser_flags flags, innermost_block_tracker *tracker)
bool fits_in_type(int n_sign, ULONGEST n, int type_bits, bool type_signed_p)
expression_up parse_expression_with_language(const char *string, enum language lang)
std::string copy_name(struct stoken token)
static unsigned int expressiondebug
void parser_fprintf(FILE *x, const char *y,...)
expression_up parse_expression(const char *string, innermost_block_tracker *tracker, parser_flags flags)
expression_up parse_expression_for_completion(const char *string, std::unique_ptr< expr_completion_base > *completer)
static expression_up parse_exp_in_context(const char **stringptr, CORE_ADDR pc, const struct block *block, parser_flags flags, innermost_block_tracker *tracker, std::unique_ptr< expr_completion_base > *completer)
static void show_expressiondebug(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
static void show_parserdebug(struct ui_file *file, int from_tty, struct cmd_list_element *c, const char *value)
const char * find_template_name_end(const char *p)
std::string copy_name(struct stoken)
void(* func)(remote_target *remote, char *)
struct symtab_and_line get_current_source_symtab_and_line(void)
bool contains(const struct block *a, bool allow_nested=false) const
CORE_ADDR entry_pc() const
struct symbol * linkage_function() const
struct block * static_block()
struct minimal_symbol * minsym
struct blockvector * blockvector()
ATTRIBUTE_UNUSED_RESULT expression_up release()
gdb::unique_xmalloc_ptr< char > m_name
bool complete(struct expression *exp, completion_tracker &tracker) override
static gdb_mpz pow(unsigned long base, unsigned long exp)
enum language la_language
virtual int parser(struct parser_state *ps) const
const struct block *const expression_context_block
std::unique_ptr< expr_completion_base > m_completion_state
void push_dollar(struct stoken str)
void push_symbol(const char *name, block_symbol sym)
innermost_block_tracker * block_tracker
void mark_completion_tag(enum type_code tag, const char *ptr, int length)
void push_c_string(int, struct stoken_vector *vec)
void mark_struct_expression(expr::structop_base_operation *op)
struct typed_stoken * tokens
struct compunit_symtab * compunit() const
void collect_symbol_completion_matches_type(completion_tracker &tracker, const char *text, const char *word, enum type_code code)
struct block_symbol lookup_symbol(const char *name, const struct block *block, domain_enum domain, struct field_of_this_result *is_a_field_of_this)
bool target_float_from_string(gdb_byte *addr, const struct type *type, const std::string &string)
int user_reg_map_name_to_regnum(struct gdbarch *gdbarch, const char *name, int len)
void gdb_vprintf(struct ui_file *stream, const char *format, va_list args)
void gdb_printf(struct ui_file *stream, const char *format,...)
struct internalvar * create_internalvar(const char *name)
struct internalvar * lookup_only_internalvar(const char *name)