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