mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-14 14:53:03 +00:00
Whether the default %destructor/%printer applies to a particular symbol
isn't a question of whether the user *declares* that symbol (in %token, for example). It's a question of whether the user by any means *defines* the symbol at all (by simply using a char token, for example). $end is defined by Bison whereas any other token with token number 0 is defined by the user. The error token is always defined by Bison regardless of whether the user declares it with %token, but we may one day let the user define error as a nonterminal instead. * NEWS (2.3+): Say "user-defined" instead of "user-declared". * doc/bison.texinfo (Freeing Discarded Symbols): Likewise, and document the meaning of "user-defined". * tests/actions.at (Default %printer and %destructor for user-declared end token): Rename to... (Default %printer and %destructor for user-defined end token): ... this. * src/symtab.c (symbol_destructor_get, symbol_printer_get): In the computation of whether to apply the default, don't maintain a list of every Bison-defined symbol. Instead, just check for a first character of '$', which a user symbol cannot have, and check for the error token.
This commit is contained in:
@@ -168,8 +168,7 @@ symbol_destructor_get (symbol *sym)
|
||||
return sym->destructor;
|
||||
|
||||
/* Apply the default %destructor only to user-defined symbols. */
|
||||
if (sym == errtoken || sym == undeftoken || sym == accept
|
||||
|| UNIQSTR_EQ (sym->tag, uniqstr_new ("$end")))
|
||||
if (sym->tag[0] == '$' || sym == errtoken)
|
||||
return NULL;
|
||||
return default_destructor;
|
||||
}
|
||||
@@ -214,8 +213,7 @@ symbol_printer_get (symbol *sym)
|
||||
return sym->printer;
|
||||
|
||||
/* Apply the default %printer only to user-defined symbols. */
|
||||
if (sym == errtoken || sym == undeftoken || sym == accept
|
||||
|| UNIQSTR_EQ (sym->tag, uniqstr_new ("$end")))
|
||||
if (sym->tag[0] == '$' || sym == errtoken)
|
||||
return NULL;
|
||||
return default_printer;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user