Use the new code_props interface for destructors and printers.

* src/symtab.h (symbol, semantic_type): Remove destructor_location and
printer_location members, and change the type of the destructor and
printer members to code_props.
(symbol_destructor_set, symbol_destructor_get, symbol_printer_set,
symbol_printer_get, semantic_type_destructor_set,
semantic_type_printer_set, default_tagged_destructor_set,
default_tagless_destructor_set, default_tagged_printer_set,
default_tagless_printer_set): Use code_props in arguments and return
types in place of char const * and location.
(symbol_destructor_location_get, symbol_printer_location_get): Remove
since the locations are now contained in the return of
symbol_destructor_get and symbol_printer_get.
* src/output.c (symbol_destructors_output, symbol_printers_output):
Replace with...
(symbol_code_props_output): ... this to eliminate duplicate code.
(output_skeleton): Update to use symbol_code_props_output.
* src/reader.c (symbol_should_be_used): Update use of
symbol_destructor_get.
* src/symlist.c (symbol_list_destructor_set, symbol_list_printer_set):
Update uses of the various _destructor_set and _printer_set functions.
* src/symtab.c: (default_tagged_destructor_location,
default_tagless_destructor_location, default_tagged_printer_location,
default_tagless_printer_location): Remove since we...
(default_tagged_destructor, default_tagless_destructor,
default_tagged_printer, default_tagless_printer): ... change the type
of these to code_props.
(symbol_new, semantic_type_new, symbol_destructor_set,
semantic_type_destructor_set, symbol_destructor_get,
symbol_printer_set, semantic_type_printer_set, symbol_printer_get,
symbol_check_alias_consistency, default_tagged_destructor_set,
default_tagless_destructor_set, default_tagged_printer_set,
default_tagless_printer_set): Update.
(symbol_destructor_location_get, symbol_printer_location_get): Remove.
(SYMBOL_CODE_PRINT): New similar to SYMBOL_ATTR_PRINT but for
code_props members.
(symbol_print): Use SYMBOL_CODE_PRINT.
This commit is contained in:
Joel E. Denny
2007-01-04 04:51:22 +00:00
parent f6857bbf8c
commit 95021767a1
6 changed files with 209 additions and 279 deletions

View File

@@ -1,6 +1,6 @@
/* Definitions for symtab.c and callers, part of Bison.
Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2004, 2005, 2006
Copyright (C) 1984, 1989, 1992, 2000, 2001, 2002, 2004, 2005, 2006, 2007
Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -30,6 +30,7 @@
# include "assoc.h"
# include "location.h"
# include "scan-code.h"
# include "uniqstr.h"
/*----------.
@@ -72,25 +73,13 @@ struct symbol
example, if <tt>symbol::destructor = NULL</tt>, a default \c \%destructor
or a per-type \c \%destructor might be appropriate, and
\c symbol_destructor_get will compute the correct one. */
const char *destructor;
/** The location of \c symbol::destructor.
Access this field only through <tt>symbol</tt>'s interface functions.
\sa symbol::destructor */
location destructor_location;
code_props destructor;
/** Any \c \%printer declared specifically for this symbol.
Access this field only through <tt>symbol</tt>'s interface functions.
\sa symbol::destructor */
const char *printer;
/** The location of \c symbol::printer.
Access this field only through <tt>symbol</tt>'s interface functions.
\sa symbol::destructor */
location printer_location;
code_props printer;
symbol_number number;
location prec_location;
@@ -144,26 +133,18 @@ void symbol_make_alias (symbol *sym, symbol *symval, location loc);
void symbol_type_set (symbol *sym, uniqstr type_name, location loc);
/** Set the \c destructor associated with \c sym. */
void symbol_destructor_set (symbol *sym, const char *destructor, location loc);
void symbol_destructor_set (symbol *sym, code_props const *destructor);
/** Get the computed \c \%destructor for \c sym, or \c NULL if none. */
const char *symbol_destructor_get (symbol *sym);
/** Get the grammar location of the computed \c \%destructor for \c sym.
\pre <tt>symbol_destructor_get (sym) != NULL</tt> */
location symbol_destructor_location_get (symbol *sym);
/** Get the computed \c \%destructor for \c sym, which was initialized with
\c code_props_none_init if there's no \c \%destructor. */
code_props const *symbol_destructor_get (symbol const *sym);
/** Set the \c printer associated with \c sym. */
void symbol_printer_set (symbol *sym, const char *printer, location loc);
void symbol_printer_set (symbol *sym, code_props const *printer);
/** Get the computed \c \%printer for \c sym, or \c NULL if none. */
const char *symbol_printer_get (symbol *sym);
/** Get the grammar location of the computed \c \%printer for \c sym.
\pre <tt>symbol_printer_get (sym) != NULL</tt> */
location symbol_printer_location_get (symbol *sym);
/** Get the computed \c \%printer for \c sym, which was initialized with
\c code_props_none_init if there's no \c \%printer. */
code_props const *symbol_printer_get (symbol const *sym);
/* Set the \c precedence associated with \c sym.
@@ -209,14 +190,9 @@ typedef struct {
uniqstr tag;
/** Any \c %destructor declared for this semantic type. */
const char *destructor;
/** The location of \c semantic_type::destructor. */
location destructor_location;
code_props destructor;
/** Any \c %printer declared for this semantic type. */
const char *printer;
/** The location of \c semantic_type::printer. */
location printer_location;
code_props printer;
} semantic_type;
/** Fetch (or create) the semantic type associated to KEY. */
@@ -226,12 +202,12 @@ semantic_type *semantic_type_from_uniqstr (const uniqstr key);
semantic_type *semantic_type_get (const char *key);
/** Set the \c destructor associated with \c type. */
void semantic_type_destructor_set (semantic_type *type, const char *destructor,
location loc);
void semantic_type_destructor_set (semantic_type *type,
code_props const *destructor);
/** Set the \c printer associated with \c type. */
void semantic_type_printer_set (semantic_type *type, const char *printer,
location loc);
void semantic_type_printer_set (semantic_type *type,
code_props const *printer);
/*----------------------------------.
| Symbol and semantic type tables. |
@@ -260,13 +236,13 @@ void symbols_pack (void);
`---------------------------------------*/
/** Set the default \c \%destructor for tagged values. */
void default_tagged_destructor_set (const char *destructor, location loc);
void default_tagged_destructor_set (code_props const *destructor);
/** Set the default \c \%destructor for tagless values. */
void default_tagless_destructor_set (const char *destructor, location loc);
void default_tagless_destructor_set (code_props const *destructor);
/** Set the default \c \%printer for tagged values. */
void default_tagged_printer_set (const char *printer, location loc);
void default_tagged_printer_set (code_props const *printer);
/** Set the default \c \%printer for tagless values. */
void default_tagless_printer_set (const char *printer, location loc);
void default_tagless_printer_set (code_props const *printer);
#endif /* !SYMTAB_H_ */