[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
push malloc failures, and cleanup
From: |
Joel E. Denny |
Subject: |
push malloc failures, and cleanup |
Date: |
Sun, 11 Feb 2007 02:37:10 -0500 (EST) |
I committed the following.
Given the existing comments in yacc.c (and push.c) about malloc.h
infringing on the user namespace, should yypstate_new really be invoking
malloc directly? Likewise for yypstate_delete and free.
Index: ChangeLog
===================================================================
RCS file: /sources/bison/bison/ChangeLog,v
retrieving revision 1.1681
diff -p -u -r1.1681 ChangeLog
--- ChangeLog 10 Feb 2007 22:28:23 -0000 1.1681
+++ ChangeLog 11 Feb 2007 07:02:20 -0000
@@ -1,3 +1,15 @@
+2007-02-11 Joel E. Denny <address@hidden>
+
+ * data/Makefile.am: Update copyright date.
+ * data/push.c (yypull_parse): Report memory exhaustion and return 2 if
+ yypstate_new returns NULL.
+ (yypstate_new): Return NULL if malloc does.
+ * src/reader.c (packgram): Move translation of rule actions from the
+ beginning of packgram to...
+ (check_and_convert_grammar): ... here right before packgram is invoked
+ so it's easier to write more complete comments, and remove redundant
+ code.
+
2007-02-10 Joel E. Denny <address@hidden>
As in semantic actions, make @$ in %initial-action, %destructor, and
Index: data/Makefile.am
===================================================================
RCS file: /sources/bison/bison/data/Makefile.am,v
retrieving revision 1.17
diff -p -u -r1.17 Makefile.am
--- data/Makefile.am 29 Jan 2007 10:54:42 -0000 1.17
+++ data/Makefile.am 11 Feb 2007 07:02:20 -0000
@@ -1,4 +1,4 @@
-## Copyright (C) 2002, 2005, 2006 Free Software Foundation, Inc.
+## Copyright (C) 2002, 2005, 2006, 2007 Free Software Foundation, Inc.
## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
Index: data/push.c
===================================================================
RCS file: /sources/bison/bison/data/push.c,v
retrieving revision 1.36
diff -p -u -r1.36 push.c
--- data/push.c 16 Jan 2007 06:16:03 -0000 1.36
+++ data/push.c 11 Feb 2007 07:02:20 -0000
@@ -1091,7 +1091,14 @@ b4_push_if(
]b4_locations_if([[ YYLTYPE yylloc;
]])])[
if (yyps == 0)
- yyps_local = yypstate_new ();
+ {
+ yyps_local = yypstate_new ();
+ if (!yyps_local)
+ {
+ yyerror (]b4_yyerror_args[YY_("memory exhausted"));
+ return 2;
+ }
+ }
else
yyps_local = yyps;
do {
@@ -1108,6 +1115,8 @@ b4_push_if(
]b4_c_function_def([[yypstate_new]], [[yypstate *]])[
{
yypstate *yyps = (yypstate *) malloc (sizeof *yyps);
+ if (!yyps)
+ return 0;
yyps->yynew = 1;
return yyps;
}
Index: src/reader.c
===================================================================
RCS file: /sources/bison/bison/src/reader.c,v
retrieving revision 1.282
diff -p -u -r1.282 reader.c
--- src/reader.c 9 Jan 2007 05:24:11 -0000 1.282
+++ src/reader.c 11 Feb 2007 07:02:20 -0000
@@ -444,20 +444,6 @@ packgram (void)
rules = xnmalloc (nrules, sizeof *rules);
- /* Before invoking grammar_rule_check on any rule, make sure all actions have
- already been scanned in order to set `used' flags. Otherwise, checking
- that a midrule's $$ should be set will not always work properly because
- the check must forward-reference the midrule's parent rule. For the same
- reason, all the `used' flags must be set before checking whether to remove
- `$' from any midrule symbol name. */
- while (p)
- {
- code_props_translate_code (&p->action_props);
- if (p)
- p = p->next;
- }
-
- p = grammar;
while (p)
{
int rule_length = 0;
@@ -643,6 +629,20 @@ check_and_convert_grammar (void)
token symbols into FDEFINES if requested. */
symbols_pack ();
+ /* Scan rule actions after invoking symbol_check_alias_consistency (in
+ symbols_pack above) so that token types are set correctly before the rule
+ action type checking.
+
+ Before invoking grammar_rule_check (in packgram below) on any rule, make
+ sure all actions have already been scanned in order to set `used' flags.
+ Otherwise, checking that a midrule's $$ should be set will not always work
+ properly because the check must forward-reference the midrule's parent
+ rule. For the same reason, all the `used' flags must be set before
+ checking whether to remove `$' from any midrule symbol name (also in
+ packgram). */
+ for (symbol_list *sym = grammar; sym; sym = sym->next)
+ code_props_translate_code (&sym->action_props);
+
/* Convert the grammar into the format described in gram.h. */
packgram ();
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- push malloc failures, and cleanup,
Joel E. Denny <=