1 /***********************************************************************
3 * This software is part of the ast package *
4 * Copyright (c) 1986-2009 AT&T Intellectual Property *
5 * and is licensed under the *
6 * Common Public License, Version 1.0 *
7 * by AT&T Intellectual Property *
9 * A copy of the License is available at *
10 * http://www.opensource.org/licenses/cpl1.0.txt *
11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
13 * Information and Software Systems Research *
17 * Glenn Fowler <gsf@research.att.com> *
19 ***********************************************************************/
25 * common preprocessor macro reference handler
31 ppmacref(struct ppsymbol
* sym
, char* file
, int line
, int type
, unsigned long sum
)
37 p
= (pp
.state
& (DIRECTIVE
|JOINING
)) == DIRECTIVE
? pp
.outp
: pp
.addp
;
38 p
+= sfsprintf(p
, MAXTOKEN
, "\n#%s %d", pp
.lineid
, error_info
.line
);
39 p
+= sfsprintf(p
, MAXTOKEN
, "\n#%s %s:%s %s %d", dirname(PRAGMA
), pp
.pass
, keyname(X_MACREF
), sym
->name
, type
);
42 if (sym
->macro
&& sym
->macro
->value
)
43 sum
= strsum(sym
->macro
->value
, (long)sym
->macro
->arity
);
44 p
+= sfsprintf(p
, MAXTOKEN
, " %lu", sum
);
46 if ((pp
.state
& (DIRECTIVE
|JOINING
)) == DIRECTIVE
)
57 pp
.pending
= pppendout();