mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-22 18:53:04 +00:00
* src/reader.c (grammar_midrule_action): If $$ is set in a
mid-rule, move the `used' bit to its lhs. * tests/input.at (Unused values): New. * tests/actions.at (Exotic Dollars): Adjust: exp is not typed.
This commit is contained in:
@@ -1,3 +1,10 @@
|
|||||||
|
2006-01-04 Akim Demaille <akim@epita.fr>
|
||||||
|
|
||||||
|
* src/reader.c (grammar_midrule_action): If $$ is set in a
|
||||||
|
mid-rule, move the `used' bit to its lhs.
|
||||||
|
* tests/input.at (Unused values): New.
|
||||||
|
* tests/actions.at (Exotic Dollars): Adjust: exp is not typed.
|
||||||
|
|
||||||
2006-01-03 Paul Eggert <eggert@cs.ucla.edu>
|
2006-01-03 Paul Eggert <eggert@cs.ucla.edu>
|
||||||
|
|
||||||
* doc/bison.texinfo (Bison Options): Say more accurately what
|
* doc/bison.texinfo (Bison Options): Say more accurately what
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/* Input parser for Bison
|
/* Input parser for Bison
|
||||||
|
|
||||||
Copyright (C) 1984, 1986, 1989, 1992, 1998, 2000, 2001, 2002, 2003,
|
Copyright (C) 1984, 1986, 1989, 1992, 1998, 2000, 2001, 2002, 2003,
|
||||||
2005 Free Software Foundation, Inc.
|
2005, 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
This file is part of Bison, the GNU Compiler Compiler.
|
This file is part of Bison, the GNU Compiler Compiler.
|
||||||
|
|
||||||
@@ -307,6 +307,10 @@ grammar_midrule_action (void)
|
|||||||
midrule->action = current_rule->action;
|
midrule->action = current_rule->action;
|
||||||
midrule->action_location = dummy_location;
|
midrule->action_location = dummy_location;
|
||||||
current_rule->action = NULL;
|
current_rule->action = NULL;
|
||||||
|
/* If $$ was used in the action, the LHS of the enclosing rule was
|
||||||
|
incorrectly flagged as used. */
|
||||||
|
midrule->used = current_rule->used;
|
||||||
|
current_rule->used = false;
|
||||||
|
|
||||||
if (previous_rule_end)
|
if (previous_rule_end)
|
||||||
previous_rule_end->next = midrule;
|
previous_rule_end->next = midrule;
|
||||||
|
|||||||
@@ -56,11 +56,12 @@ symbol_list_new (symbol *sym, location loc)
|
|||||||
`------------------*/
|
`------------------*/
|
||||||
|
|
||||||
void
|
void
|
||||||
symbol_list_print (symbol_list *l, FILE *f)
|
symbol_list_print (const symbol_list *l, FILE *f)
|
||||||
{
|
{
|
||||||
for (/* Nothing. */; l && l->sym; l = l->next)
|
for (/* Nothing. */; l && l->sym; l = l->next)
|
||||||
{
|
{
|
||||||
symbol_print (l->sym, f);
|
symbol_print (l->sym, f);
|
||||||
|
fprintf (stderr, l->used ? " used" : " unused");
|
||||||
if (l && l->sym)
|
if (l && l->sym)
|
||||||
fprintf (f, ", ");
|
fprintf (f, ", ");
|
||||||
}
|
}
|
||||||
@@ -96,7 +97,7 @@ symbol_list_free (symbol_list *list)
|
|||||||
`--------------------*/
|
`--------------------*/
|
||||||
|
|
||||||
unsigned int
|
unsigned int
|
||||||
symbol_list_length (symbol_list *l)
|
symbol_list_length (const symbol_list *l)
|
||||||
{
|
{
|
||||||
int res = 0;
|
int res = 0;
|
||||||
for (/* Nothing. */; l; l = l->next)
|
for (/* Nothing. */; l; l = l->next)
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ typedef struct symbol_list
|
|||||||
symbol_list *symbol_list_new (symbol *sym, location loc);
|
symbol_list *symbol_list_new (symbol *sym, location loc);
|
||||||
|
|
||||||
/* Print it. */
|
/* Print it. */
|
||||||
void symbol_list_print (symbol_list *l, FILE *f);
|
void symbol_list_print (const symbol_list *l, FILE *f);
|
||||||
|
|
||||||
/* Prepend SYM at LOC to the LIST. */
|
/* Prepend SYM at LOC to the LIST. */
|
||||||
symbol_list *symbol_list_prepend (symbol_list *l,
|
symbol_list *symbol_list_prepend (symbol_list *l,
|
||||||
@@ -64,7 +64,7 @@ symbol_list *symbol_list_prepend (symbol_list *l,
|
|||||||
void symbol_list_free (symbol_list *l);
|
void symbol_list_free (symbol_list *l);
|
||||||
|
|
||||||
/* Return its length. */
|
/* Return its length. */
|
||||||
unsigned int symbol_list_length (symbol_list *l);
|
unsigned int symbol_list_length (const symbol_list *l);
|
||||||
|
|
||||||
/* Get symbol N in symbol list L. */
|
/* Get symbol N in symbol list L. */
|
||||||
symbol_list *symbol_list_n_get (symbol_list *l, int n);
|
symbol_list *symbol_list_n_get (symbol_list *l, int n);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Executing Actions. -*- Autotest -*-
|
# Executing Actions. -*- Autotest -*-
|
||||||
# Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
@@ -107,7 +107,7 @@ AT_DATA_GRAMMAR([[input.y]],
|
|||||||
};
|
};
|
||||||
|
|
||||||
%type <val> a_1 a_2 a_5
|
%type <val> a_1 a_2 a_5
|
||||||
exp sum_of_the_five_previous_values
|
sum_of_the_five_previous_values
|
||||||
|
|
||||||
%%
|
%%
|
||||||
exp: a_1 a_2 { $<val>$ = 3; } { $<val>$ = $<val>3 + 1; } a_5
|
exp: a_1 a_2 { $<val>$ = 3; } { $<val>$ = $<val>3 + 1; } a_5
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
# Checking the Bison scanner. -*- Autotest -*-
|
# Checking the Bison scanner. -*- Autotest -*-
|
||||||
# Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
|
# Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
|
||||||
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU General Public License as published by
|
||||||
@@ -82,6 +82,57 @@ input.y:6.5: warning: empty rule for typed nonterminal, and no action
|
|||||||
AT_CLEANUP
|
AT_CLEANUP
|
||||||
|
|
||||||
|
|
||||||
|
## --------------- ##
|
||||||
|
## Unused values. ##
|
||||||
|
## --------------- ##
|
||||||
|
|
||||||
|
AT_SETUP([Unused values])
|
||||||
|
|
||||||
|
AT_DATA([input.y],
|
||||||
|
[[%token <integer> INT
|
||||||
|
%type <integer> exp
|
||||||
|
%%
|
||||||
|
exp:
|
||||||
|
INT { } INT { } INT { }
|
||||||
|
/* Ideally we would like to complain also about $2 and $4 here, but
|
||||||
|
it's hard to implement. */
|
||||||
|
| INT { $$ } INT { $$ } INT { }
|
||||||
|
| INT { $1 } INT { } INT { }
|
||||||
|
| INT { } INT { $1 } INT { }
|
||||||
|
| INT { } INT { } INT { $1 }
|
||||||
|
| INT { } INT { } INT { $$ = $1 + $3 + $5; }
|
||||||
|
;
|
||||||
|
]])
|
||||||
|
|
||||||
|
AT_CHECK([bison input.y], [], [],
|
||||||
|
[[input.y:5.3-25: warning: unset value: $$
|
||||||
|
input.y:5.3-25: warning: unused value: $1
|
||||||
|
input.y:5.3-25: warning: unused value: $3
|
||||||
|
input.y:5.3-25: warning: unused value: $5
|
||||||
|
input.y:8.3-31: warning: unset value: $$
|
||||||
|
input.y:8.3-31: warning: unused value: $1
|
||||||
|
input.y:8.3-31: warning: unused value: $3
|
||||||
|
input.y:8.3-31: warning: unused value: $5
|
||||||
|
input.y:9.3-28: warning: unset value: $$
|
||||||
|
input.y:9.3-28: warning: unused value: $3
|
||||||
|
input.y:9.3-28: warning: unused value: $5
|
||||||
|
input.y:10.3-28: warning: unset value: $$
|
||||||
|
input.y:10.3-28: warning: unused value: $3
|
||||||
|
input.y:10.3-28: warning: unused value: $5
|
||||||
|
input.y:11.3-29: warning: unset value: $$
|
||||||
|
input.y:11.3-29: warning: unused value: $3
|
||||||
|
input.y:11.3-29: warning: unused value: $5
|
||||||
|
input.y: conflicts: 1 reduce/reduce
|
||||||
|
input.y:8.7-12: warning: rule never reduced because of conflicts: @3: /* empty */
|
||||||
|
input.y:9.7-12: warning: rule never reduced because of conflicts: @5: /* empty */
|
||||||
|
input.y:10.7-9: warning: rule never reduced because of conflicts: @7: /* empty */
|
||||||
|
input.y:11.7-9: warning: rule never reduced because of conflicts: @9: /* empty */
|
||||||
|
input.y:12.7-9: warning: rule never reduced because of conflicts: @11: /* empty */
|
||||||
|
]])
|
||||||
|
|
||||||
|
AT_CLEANUP
|
||||||
|
|
||||||
|
|
||||||
## ---------------------- ##
|
## ---------------------- ##
|
||||||
## Incompatible Aliases. ##
|
## Incompatible Aliases. ##
|
||||||
## ---------------------- ##
|
## ---------------------- ##
|
||||||
|
|||||||
Reference in New Issue
Block a user