/* Input parser for Bison
Copyright (C) 1984, 1986, 1989, 1992, 1998, 2000, 2001, 2002, 2003,
- 2005, 2006 Free Software Foundation, Inc.
+ 2005, 2006, 2007 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
static bool
symbol_should_be_used (symbol_list const *s)
{
- if (code_props_code_get (symbol_destructor_get (s->content.sym)))
+ if (symbol_destructor_get (s->content.sym)->code)
return true;
if (warnings_flag & warnings_midrule_values)
- {
- if (s->midrule && code_props_is_value_used (s->midrule->action_props))
- return true;
- if (s->midrule_parent_rule)
- {
- symbol_list *rhs_node =
- symbol_list_n_get (s->midrule_parent_rule,
- s->midrule_parent_rhs_index);
- if (code_props_is_value_used (rhs_node->action_props))
- return true;
- }
- }
+ return ((s->midrule && s->midrule->action_props.is_value_used)
+ || (s->midrule_parent_rule
+ && symbol_list_n_get (s->midrule_parent_rule,
+ s->midrule_parent_rhs_index)
+ ->action_props.is_value_used));
return false;
}
Don't worry about the default action if $$ is untyped, since $$'s
value can't be used. */
- if (!code_props_code_get (r->action_props) && r->content.sym->type_name)
+ if (!r->action_props.code && r->content.sym->type_name)
{
symbol *first_rhs = r->next->content.sym;
/* If $$ is being set in default way, report if any type mismatch. */
symbol_list const *l = r;
int n = 0;
for (; l && l->content.sym; l = l->next, ++n)
- if (! (code_props_is_value_used (l->action_props)
+ if (! (l->action_props.is_value_used
|| !symbol_should_be_used (l)
/* The default action, $$ = $1, `uses' both. */
- || (!code_props_code_get (r->action_props)
- && (n == 0 || n == 1))))
+ || (!r->action_props.code && (n == 0 || n == 1))))
{
if (n)
warn_at (r->location, _("unused value: $%d"), n);
/* Make a DUMMY nonterminal, whose location is that of the midrule
action. Create the MIDRULE. */
- location dummy_location =
- code_props_location_get (current_rule->action_props);
+ location dummy_location = current_rule->action_props.location;
symbol *dummy = dummy_symbol_get (dummy_location);
symbol_list *midrule = symbol_list_sym_new (dummy, dummy_location);
++nritems;
/* Attach its location and actions to that of the DUMMY. */
midrule->location = dummy_location;
- code_props_rule_action_init (
- &midrule->action_props,
- code_props_code_get (current_rule->action_props),
- code_props_location_get (current_rule->action_props),
- midrule);
+ code_props_rule_action_init (&midrule->action_props,
+ current_rule->action_props.code,
+ current_rule->action_props.location,
+ midrule);
code_props_none_init (¤t_rule->action_props);
if (previous_rule_end)
void
grammar_current_rule_prec_set (symbol *precsym, location loc)
{
+ symbol_class_set (precsym, token_sym, loc, false);
if (current_rule->ruleprec)
complain_at (loc, _("only one %s allowed per rule"), "%prec");
current_rule->ruleprec = precsym;
void
grammar_current_rule_symbol_append (symbol *sym, location loc)
{
- if (code_props_code_get (current_rule->action_props))
+ if (current_rule->action_props.code)
grammar_midrule_action ();
grammar_symbol_append (sym, loc);
}
void
grammar_current_rule_action_append (const char *action, location loc)
{
- if (code_props_code_get (current_rule->action_props))
+ if (current_rule->action_props.code)
grammar_midrule_action ();
/* After all symbol declarations have been parsed, packgram invokes
code_props_translate_code. */
rules[ruleno].precsym = NULL;
rules[ruleno].location = p->location;
rules[ruleno].useful = true;
- rules[ruleno].action = code_props_code_get (p->action_props);
- if (rules[ruleno].action)
- rules[ruleno].action_location =
- code_props_location_get (p->action_props);
+ rules[ruleno].action = p->action_props.code;
+ rules[ruleno].action_location = p->action_props.location;
/* If the midrule's $$ is set or its $n is used, remove the `$' from the
symbol name so that it's a user-defined symbol so that the default
%destructor and %printer apply. */
if (p->midrule_parent_rule
- && (code_props_is_value_used (p->action_props)
- || code_props_is_value_used (
- symbol_list_n_get (
- p->midrule_parent_rule,
- p->midrule_parent_rhs_index)->action_props)))
+ && (p->action_props.is_value_used
+ || symbol_list_n_get (p->midrule_parent_rule,
+ p->midrule_parent_rhs_index)
+ ->action_props.is_value_used))
p->content.sym->tag += 1;
/* Don't check the generated rule 0. It has no action, so some rhs