/***********************************************************************1* *2* This software is part of the ast package *3* Copyright (c) 1986-2011 AT&T Intellectual Property *4* and is licensed under the *5* Eclipse Public License, Version 1.0 *6* by AT&T Intellectual Property *7* *8* A copy of the License is available at *9* http://www.eclipse.org/org/documents/epl-v10.html *10* (with md5 checksum b35adb5213ca9657e911e9befb180842) *11* *12* Information and Software Systems Research *13* AT&T Research *14* Florham Park NJ *15* *16* Glenn Fowler <[email protected]> *17* *18***********************************************************************/19#pragma prototyped20/*21* Glenn Fowler22* AT&T Research23*24* common preprocessor macro reference handler25*/2627#include "pplib.h"2829void30ppmacref(struct ppsymbol* sym, char* file, int line, int type, unsigned long sum)31{32register char* p;3334NoP(file);35NoP(line);36p = (pp.state & (DIRECTIVE|JOINING)) == DIRECTIVE ? pp.outp : pp.addp;37p += sfsprintf(p, MAXTOKEN, "\n#%s %d", pp.lineid, error_info.line);38p += sfsprintf(p, MAXTOKEN, "\n#%s %s:%s %s %d", dirname(PRAGMA), pp.pass, keyname(X_MACREF), sym->name, type);39if (type > 0)40{41if (sym->macro && sym->macro->value)42sum = strsum(sym->macro->value, (long)sym->macro->arity);43p += sfsprintf(p, MAXTOKEN, " %lu", sum);44}45if ((pp.state & (DIRECTIVE|JOINING)) == DIRECTIVE)46{47pp.outp = p;48ppcheckout();49}50else51{52*p++ = '\n';53pp.addp = p;54pp.state |= ADD;55}56pp.pending = pppendout();57}585960