| Index: gdb/parser-defs.h
|
| diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h
|
| index d14aea6bbeec9a3e26d2489db286b90a5316246a..86f3bdf10632b4e1003bc219efbe7e3db0155c39 100644
|
| --- a/gdb/parser-defs.h
|
| +++ b/gdb/parser-defs.h
|
| @@ -25,6 +25,7 @@
|
| #define PARSER_DEFS_H 1
|
|
|
| #include "doublest.h"
|
| +#include "vec.h"
|
|
|
| struct block;
|
|
|
| @@ -107,6 +108,8 @@ struct objc_class_str
|
| int class;
|
| };
|
|
|
| +typedef struct type *type_ptr;
|
| +DEF_VEC_P (type_ptr);
|
|
|
| /* For parsing of complicated types.
|
| An array should be preceded in the list by the size of the array. */
|
| @@ -116,19 +119,57 @@ enum type_pieces
|
| tp_pointer,
|
| tp_reference,
|
| tp_array,
|
| - tp_function,
|
| + tp_function,
|
| + tp_function_with_arguments,
|
| tp_const,
|
| tp_volatile,
|
| - tp_space_identifier
|
| + tp_space_identifier,
|
| + tp_type_stack
|
| };
|
| /* The stack can contain either an enum type_pieces or an int. */
|
| union type_stack_elt
|
| {
|
| enum type_pieces piece;
|
| int int_val;
|
| + struct type_stack *stack_val;
|
| + VEC (type_ptr) *typelist_val;
|
| };
|
| -extern union type_stack_elt *type_stack;
|
| -extern int type_stack_depth, type_stack_size;
|
| +
|
| +/* The type stack is an instance of this structure. */
|
| +
|
| +struct type_stack
|
| +{
|
| + /* Elements on the stack. */
|
| + union type_stack_elt *elements;
|
| + /* Current stack depth. */
|
| + int depth;
|
| + /* Allocated size of stack. */
|
| + int size;
|
| +};
|
| +
|
| +/* Helper function to initialize the expout, expout_size, expout_ptr
|
| + trio before it is used to store expression elements created during
|
| + the parsing of an expression. INITIAL_SIZE is the initial size of
|
| + the expout array. LANG is the language used to parse the expression.
|
| + And GDBARCH is the gdbarch to use during parsing. */
|
| +
|
| +extern void initialize_expout (int, const struct language_defn *,
|
| + struct gdbarch *);
|
| +
|
| +/* Helper function that frees any unsed space in the expout array.
|
| + It is generally used when the parser has just been parsed and
|
| + created. */
|
| +
|
| +extern void reallocate_expout (void);
|
| +
|
| +/* Reverse an expression from suffix form (in which it is constructed)
|
| + to prefix form (in which we can conveniently print or execute it).
|
| + Ordinarily this always returns -1. However, if EXPOUT_LAST_STRUCT
|
| + is not -1 (i.e., we are trying to complete a field name), it will
|
| + return the index of the subexpression which is the left-hand-side
|
| + of the struct operation at EXPOUT_LAST_STRUCT. */
|
| +
|
| +extern int prefixify_expression (struct expression *expr);
|
|
|
| extern void write_exp_elt_opcode (enum exp_opcode);
|
|
|
| @@ -168,16 +209,29 @@ extern int end_arglist (void);
|
|
|
| extern char *copy_name (struct stoken);
|
|
|
| +extern void insert_type (enum type_pieces);
|
| +
|
| extern void push_type (enum type_pieces);
|
|
|
| extern void push_type_int (int);
|
|
|
| -extern void push_type_address_space (char *);
|
| +extern void insert_type_address_space (char *);
|
|
|
| extern enum type_pieces pop_type (void);
|
|
|
| extern int pop_type_int (void);
|
|
|
| +extern struct type_stack *get_type_stack (void);
|
| +
|
| +extern struct type_stack *append_type_stack (struct type_stack *to,
|
| + struct type_stack *from);
|
| +
|
| +extern void push_type_stack (struct type_stack *stack);
|
| +
|
| +extern void type_stack_cleanup (void *arg);
|
| +
|
| +extern void push_typelist (VEC (type_ptr) *typelist);
|
| +
|
| extern int length_of_subexp (struct expression *, int);
|
|
|
| extern int dump_subexp (struct expression *, struct ui_file *, int);
|
| @@ -216,17 +270,6 @@ extern char *lexptr;
|
| Currently used only for error reporting. */
|
| extern char *prev_lexptr;
|
|
|
| -/* Tokens that refer to names do so with explicit pointer and length,
|
| - so they can share the storage that lexptr is parsing.
|
| -
|
| - When it is necessary to pass a name to a function that expects
|
| - a null-terminated string, the substring is copied out
|
| - into a block of storage that namecopy points to.
|
| -
|
| - namecopy is allocated once, guaranteed big enough, for each parsing. */
|
| -
|
| -extern char *namecopy;
|
| -
|
| /* Current depth in parentheses within the expression. */
|
|
|
| extern int paren_depth;
|
|
|