+ if (sym->destructor)
+ complain_at (loc, _("%s redeclaration for %s"),
+ "%destructor", sym->tag);
+ sym->destructor = destructor;
+ sym->destructor_location = loc;
+ }
+}
+
+
+/*---------------------------------------------------------------.
+| Set the PRINTER associated with SYM. Do nothing if passed 0. |
+`---------------------------------------------------------------*/
+
+void
+symbol_printer_set (symbol *sym, char *printer, location loc)
+{
+ if (printer)
+ {
+ if (sym->printer)
+ complain_at (loc, _("%s redeclaration for %s"),
+ "%printer", sym->tag);
+ sym->printer = printer;
+ sym->printer_location = loc;
+ }
+}
+
+
+/*-----------------------------------------------------------------.
+| Set the PRECEDENCE associated with SYM. Does nothing if invoked |
+| with UNDEF_ASSOC as ASSOC. |
+`-----------------------------------------------------------------*/
+
+void
+symbol_precedence_set (symbol *sym, int prec, assoc a, location loc)
+{
+ if (a != undef_assoc)
+ {
+ if (sym->prec != 0)
+ complain_at (loc, _("redefining precedence of %s"), sym->tag);
+ sym->prec = prec;
+ sym->assoc = a;