aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog22
-rw-r--r--gdb/c-exp.y20
-rw-r--r--gdb/ch-exp.y5
-rw-r--r--gdb/parse.c19
-rw-r--r--gdb/parser-defs.h14
-rw-r--r--gdb/tm-mips.h4
-rw-r--r--gdb/tm-sparc.h4
7 files changed, 61 insertions, 27 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index f45db9f..f715e33 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,25 @@
+Tue Feb 2 16:10:31 1993 Fred Fish (fnf@cygnus.com)
+
+ * c-exp.y (lcurly, rcurly): New nonterminals.
+ * c-exp.y (exp): Use lcurly and rcurly for arrays and UNOP_MEMVAL
+ constructs.
+ * parse.c (free_funcalls): Moved prototype from parser-defs.h,
+ made function static.
+ * parse.c (struct funcall): Moved struct def from parser-defs.h.
+ * parse.c (funcall_chain): Moved from parser-defs.h, made static.
+ * parse.c (start_arglist):
+ * parser-defs.h (free_funcalls): Moved prototype to parse.c.
+ * parser-defs.h (struct funcall): Moved struct def to parse.c.
+ * parser-defs.h (funcall_chain): Moved to parse.c.
+ * printcmd.c (print_frame_nameless_args): Fix prototype.
+ * tm-mips.h (setup_arbitrary_frame): Fix prototype.
+ * tm-sparc.h (setup_arbitrary_frame): Fix prototype.
+ * valops.c (typecmp): Moved prototype from values.h.
+ * value.h (typecmp): Moved prototype to valops.c, made static.
+ **** start-sanitize-chill ****
+ * ch-exp.y (yylex): Change way control sequences are disabled.
+ **** end-sanitize-chill ****
+
Tue Feb 2 16:11:43 1993 John Gilmore (gnu@cygnus.com)
* tm-mips.h, tm-sparc.h: Fix thinko in SETUP_ARBITRARY_FRAME.
diff --git a/gdb/c-exp.y b/gdb/c-exp.y
index a7f7320..981634a 100644
--- a/gdb/c-exp.y
+++ b/gdb/c-exp.y
@@ -128,7 +128,8 @@ static int
parse_number PARAMS ((char *, int, int, YYSTYPE *));
%}
-%type <voidval> exp exp1 type_exp start variable qualified_name
+%type <voidval> exp exp1 type_exp start variable qualified_name lcurly
+%type <lval> rcurly
%type <tval> type typebase
%type <tvec> nonempty_typelist
/* %type <bval> block */
@@ -307,6 +308,10 @@ exp : exp '('
write_exp_elt_opcode (OP_FUNCALL); }
;
+lcurly : '{'
+ { start_arglist (); }
+ ;
+
arglist :
;
@@ -318,18 +323,17 @@ arglist : arglist ',' exp %prec ABOVE_COMMA
{ arglist_len++; }
;
-exp : '{'
- /* This is to save the value of arglist_len
- being accumulated by an outer function call. */
- { start_arglist (); }
- arglist '}' %prec ARROW
+rcurly : '}'
+ { $$ = end_arglist () - 1; }
+ ;
+exp : lcurly arglist rcurly %prec ARROW
{ write_exp_elt_opcode (OP_ARRAY);
write_exp_elt_longcst ((LONGEST) 0);
- write_exp_elt_longcst ((LONGEST) end_arglist () - 1);
+ write_exp_elt_longcst ((LONGEST) $3);
write_exp_elt_opcode (OP_ARRAY); }
;
-exp : '{' type '}' exp %prec UNARY
+exp : lcurly type rcurly exp %prec UNARY
{ write_exp_elt_opcode (UNOP_MEMVAL);
write_exp_elt_type ($2);
write_exp_elt_opcode (UNOP_MEMVAL); }
diff --git a/gdb/ch-exp.y b/gdb/ch-exp.y
index 1ee9c90..7233721 100644
--- a/gdb/ch-exp.y
+++ b/gdb/ch-exp.y
@@ -1420,7 +1420,7 @@ match_character_literal ()
if ((*tokptr == '^') && (*(tokptr + 1) == '('))
{
- return (0); /* Disable, see note above. */
+#if 0 /* Disable, see note above. -fnf */
/* Match and decode a control sequence. Return zero if we don't
find a valid integer literal, or if the next unconsumed character
after the integer literal is not the trailing ')'.
@@ -1431,6 +1431,9 @@ match_character_literal ()
{
return (0);
}
+#else
+ return (0);
+#endif
}
else
{
diff --git a/gdb/parse.c b/gdb/parse.c
index 9d96975..4cec13b 100644
--- a/gdb/parse.c
+++ b/gdb/parse.c
@@ -39,6 +39,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "parser-defs.h"
static void
+free_funcalls PARAMS ((void));
+
+static void
prefixify_expression PARAMS ((struct expression *));
static int
@@ -47,6 +50,17 @@ length_of_subexp PARAMS ((struct expression *, int));
static void
prefixify_subexp PARAMS ((struct expression *, struct expression *, int, int));
+/* Data structure for saving values of arglist_len for function calls whose
+ arguments contain other function calls. */
+
+struct funcall
+ {
+ struct funcall *next;
+ int arglist_len;
+ };
+
+static struct funcall *funcall_chain;
+
/* Assign machine-independent names to certain registers
(unless overridden by the REGISTER_NAMES table) */
@@ -82,8 +96,9 @@ unsigned num_std_regs = (sizeof std_regs / sizeof std_regs[0]);
void
start_arglist ()
{
- register struct funcall *new = (struct funcall *) xmalloc (sizeof (struct funcall));
+ register struct funcall *new;
+ new = (struct funcall *) xmalloc (sizeof (struct funcall));
new->next = funcall_chain;
new->arglist_len = arglist_len;
arglist_len = 0;
@@ -107,7 +122,7 @@ end_arglist ()
/* Free everything in the funcall chain.
Used when there is an error inside parsing. */
-void
+static void
free_funcalls ()
{
register struct funcall *call, *next;
diff --git a/gdb/parser-defs.h b/gdb/parser-defs.h
index 098cd39..c57511a 100644
--- a/gdb/parser-defs.h
+++ b/gdb/parser-defs.h
@@ -49,17 +49,6 @@ struct block *block_found;
/* Number of arguments seen so far in innermost function call. */
int arglist_len;
-/* Data structure for saving values of arglist_len
- for function calls whose arguments contain other function calls. */
-
-struct funcall
- {
- struct funcall *next;
- int arglist_len;
- };
-
-struct funcall *funcall_chain;
-
/* A string token, either a char-string or bit-string. Char-strings are
used, for example, for the names of symbols. */
@@ -129,9 +118,6 @@ start_arglist PARAMS ((void));
extern int
end_arglist PARAMS ((void));
-extern void
-free_funcalls PARAMS ((void));
-
extern char *
copy_name PARAMS ((struct stoken));
diff --git a/gdb/tm-mips.h b/gdb/tm-mips.h
index ad09333..0075662 100644
--- a/gdb/tm-mips.h
+++ b/gdb/tm-mips.h
@@ -367,6 +367,8 @@ typedef struct mips_extra_func_info {
multiple functions with the same SP that are at different stack levels. */
#define SETUP_ARBITRARY_FRAME(argc, argv) setup_arbitrary_frame (argc, argv)
-extern struct frame_info *setup_arbitrary_frame ();
+/* FIXME: Depends on equivalence between FRAME and "struct frame_info *",
+ and equivalence between CORE_ADDR and FRAME_ADDR. */
+extern struct frame_info *setup_arbitrary_frame PARAMS ((int, CORE_ADDR *));
#define STAB_REG_TO_REGNUM(num) ((num) < 32 ? (num) : (num)+FP0_REGNUM-32)
diff --git a/gdb/tm-sparc.h b/gdb/tm-sparc.h
index a4c6d49..9dcc7a4 100644
--- a/gdb/tm-sparc.h
+++ b/gdb/tm-sparc.h
@@ -552,7 +552,9 @@ extern void single_step ();
"frame" or "info frame" command. */
#define SETUP_ARBITRARY_FRAME(argc, argv) setup_arbitrary_frame (argc, argv)
-extern struct frame_info *setup_arbitrary_frame ();
+/* FIXME: Depends on equivalence between FRAME and "struct frame_info *",
+ and equivalence between CORE_ADDR and FRAME_ADDR. */
+extern struct frame_info *setup_arbitrary_frame PARAMS ((int, CORE_ADDR *));
/* To print every pair of float registers as a double, we use this hook. */