X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fexpression.h;h=9f26bb8d60ba6905abaf1afd4473dbf5946b958a;hb=d6be54ef73eacaaf5bf28bafc7dfebc80ebac832;hp=31f24203f49205be594ed6d08578cd0cea420239;hpb=28e7fd62340426746f9c896cbc40c5d374ec47aa;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/expression.h b/gdb/expression.h index 31f24203f4..9f26bb8d60 100644 --- a/gdb/expression.h +++ b/gdb/expression.h @@ -1,6 +1,6 @@ /* Definitions for expressions stored in reversed prefix form, for GDB. - Copyright (C) 1986-2013 Free Software Foundation, Inc. + Copyright (C) 1986-2018 Free Software Foundation, Inc. This file is part of GDB. @@ -22,7 +22,6 @@ #include "symtab.h" /* Needed for "struct block" type. */ -#include "doublest.h" /* Needed for DOUBLEST. */ /* Definitions for saved C expressions. */ @@ -64,9 +63,9 @@ union exp_element { enum exp_opcode opcode; struct symbol *symbol; + struct minimal_symbol *msymbol; LONGEST longconst; - DOUBLEST doubleconst; - gdb_byte decfloatconst[16]; + gdb_byte floatconst[16]; /* Really sizeof (union exp_element) characters (or less for the last element of a string). */ char string; @@ -85,6 +84,8 @@ struct expression union exp_element elts[1]; }; +typedef gdb::unique_xmalloc_ptr expression_up; + /* Macros for converting between number of expression elements and bytes to store that many expression elements. */ @@ -95,23 +96,21 @@ struct expression /* From parse.c */ -extern struct expression *parse_expression (char *); +extern expression_up parse_expression (const char *); + +extern expression_up parse_expression_with_language (const char *string, + enum language lang); -extern struct type *parse_expression_for_completion (char *, char **, - enum type_code *); +extern struct type *parse_expression_for_completion + (const char *, gdb::unique_xmalloc_ptr *, enum type_code *); -extern struct expression *parse_exp_1 (char **, CORE_ADDR pc, - const struct block *, int); +extern expression_up parse_exp_1 (const char **, CORE_ADDR pc, + const struct block *, int); /* For use by parsers; set if we want to parse an expression and attempt completion. */ extern int parse_completion; -/* The innermost context required by the stack and register variables - we've encountered so far. To use this, set it to NULL, then call - parse_, then look at it. */ -extern const struct block *innermost_block; - /* From eval.c */ /* Values of NOSIDE argument to eval_subexp. */ @@ -128,7 +127,10 @@ enum noside type (inaccuracy: anything that is listed as being in a register in the function in which it was - declared will be lval_register). */ + declared will be lval_register). + Ideally this would not even read + target memory, but currently it + does in many situations. */ }; extern struct value *evaluate_subexp_standard @@ -138,12 +140,36 @@ extern struct value *evaluate_subexp_standard extern void print_expression (struct expression *, struct ui_file *); -extern char *op_name (struct expression *exp, enum exp_opcode opcode); +extern const char *op_name (struct expression *exp, enum exp_opcode opcode); -extern char *op_string (enum exp_opcode); +extern const char *op_string (enum exp_opcode); extern void dump_raw_expression (struct expression *, - struct ui_file *, char *); + struct ui_file *, const char *); extern void dump_prefix_expression (struct expression *, struct ui_file *); +/* In an OP_RANGE expression, either bound could be empty, indicating + that its value is by default that of the corresponding bound of the + array or string. Also, the upper end of the range can be exclusive + or inclusive. So we have six sorts of subrange. This enumeration + type is to identify this. */ + +enum range_type +{ + /* Neither the low nor the high bound was given -- so this refers to + the entire available range. */ + BOTH_BOUND_DEFAULT, + /* The low bound was not given and the high bound is inclusive. */ + LOW_BOUND_DEFAULT, + /* The high bound was not given and the low bound in inclusive. */ + HIGH_BOUND_DEFAULT, + /* Both bounds were given and both are inclusive. */ + NONE_BOUND_DEFAULT, + /* The low bound was not given and the high bound is exclusive. */ + NONE_BOUND_DEFAULT_EXCLUSIVE, + /* Both bounds were given. The low bound is inclusive and the high + bound is exclusive. */ + LOW_BOUND_DEFAULT_EXCLUSIVE, +}; + #endif /* !defined (EXPRESSION_H) */