X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fexpression.h;h=8fe6b070445492243f4162a591a5e453b3c198e8;hb=873c08142c4c377d2d3ed0b1b1b9e262ddc06c61;hp=3b70ef3f410687b1d692dcb2d64eb037465ce2ea;hpb=270140bd2556ce2b0b9c32ecb31e1dcb3fc1887a;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/expression.h b/gdb/expression.h index 3b70ef3f41..8fe6b07044 100644 --- a/gdb/expression.h +++ b/gdb/expression.h @@ -1,7 +1,6 @@ /* Definitions for expressions stored in reversed prefix form, for GDB. - Copyright (C) 1986, 1989, 1992, 1994, 2000, 2003, 2005, 2007-2012 - Free Software Foundation, Inc. + Copyright (C) 1986-2017 Free Software Foundation, Inc. This file is part of GDB. @@ -86,6 +85,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. */ @@ -96,16 +97,20 @@ 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_field_expression (char *, char **); +extern struct type *parse_expression_for_completion (const char *, char **, + 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 to complete a field name. */ -extern int in_parse_field; + 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 @@ -128,7 +133,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 +146,25 @@ 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. So we have four sorts of subrange. This + enumeration type is to identify this. */ + +enum range_type + { + BOTH_BOUND_DEFAULT, /* "(:)" */ + LOW_BOUND_DEFAULT, /* "(:high)" */ + HIGH_BOUND_DEFAULT, /* "(low:)" */ + NONE_BOUND_DEFAULT /* "(low:high)" */ + }; + #endif /* !defined (EXPRESSION_H) */