From 574add857a460f6cb6ab90525977160ceb7ff51b Mon Sep 17 00:00:00 2001 From: "Joel E. Denny" Date: Sun, 11 Feb 2007 07:34:26 +0000 Subject: [PATCH] * 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. --- ChangeLog | 12 ++++++++++++ data/Makefile.am | 2 +- data/push.c | 11 ++++++++++- src/reader.c | 28 ++++++++++++++-------------- 4 files changed, 37 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index a4be8fdd..e19d3715 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2007-02-11 Joel E. Denny + + * 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 As in semantic actions, make @$ in %initial-action, %destructor, and diff --git a/data/Makefile.am b/data/Makefile.am index 9f526edc..dadd7984 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -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 diff --git a/data/push.c b/data/push.c index 5ad90616..057e2e70 100644 --- a/data/push.c +++ b/data/push.c @@ -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; } diff --git a/src/reader.c b/src/reader.c index 24da9b74..be9f46f6 100644 --- a/src/reader.c +++ b/src/reader.c @@ -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 (); -- 2.47.2