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