Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libpp/ppmacref.c
1808 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1986-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* *
19
***********************************************************************/
20
#pragma prototyped
21
/*
22
* Glenn Fowler
23
* AT&T Research
24
*
25
* common preprocessor macro reference handler
26
*/
27
28
#include "pplib.h"
29
30
void
31
ppmacref(struct ppsymbol* sym, char* file, int line, int type, unsigned long sum)
32
{
33
register char* p;
34
35
NoP(file);
36
NoP(line);
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);
40
if (type > 0)
41
{
42
if (sym->macro && sym->macro->value)
43
sum = strsum(sym->macro->value, (long)sym->macro->arity);
44
p += sfsprintf(p, MAXTOKEN, " %lu", sum);
45
}
46
if ((pp.state & (DIRECTIVE|JOINING)) == DIRECTIVE)
47
{
48
pp.outp = p;
49
ppcheckout();
50
}
51
else
52
{
53
*p++ = '\n';
54
pp.addp = p;
55
pp.state |= ADD;
56
}
57
pp.pending = pppendout();
58
}
59
60