diff options
| author | Michael Matz <matz@suse.de> | 2017-07-09 05:30:47 +0200 |
|---|---|---|
| committer | Michael Matz <matz@suse.de> | 2017-07-09 05:30:47 +0200 |
| commit | 824dcebe59f52a686b003214c1af0633cf5fe89e (patch) | |
| tree | c3f0e9be1b79309bd2e02932c1ebe52b9609e8b2 /tests/pp/pp-counter.c | |
| parent | 1f3d3957c4aa4d403b07245fe4f0a49ac8fefcc4 (diff) | |
| download | tinycc-824dcebe59f52a686b003214c1af0633cf5fe89e.tar.gz tinycc-824dcebe59f52a686b003214c1af0633cf5fe89e.tar.bz2 | |
tccpp: Implement __COUNTER__
This requires one more change in how macro arguments are expanded:
the standard requires that macro args are expanded before substituting
into the replacement list. This implies expanding them only once
even when they occur multiple times in the list. TCC expanded
them repeatedly in that case. Without __COUNTER__ that's harmless.
So, simply always expand arguments (when used without # and ##) once
and store the resulting tokens.
Diffstat (limited to 'tests/pp/pp-counter.c')
| -rw-r--r-- | tests/pp/pp-counter.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/pp/pp-counter.c b/tests/pp/pp-counter.c new file mode 100644 index 0000000..3978e1a --- /dev/null +++ b/tests/pp/pp-counter.c @@ -0,0 +1,27 @@ +X1 __COUNTER__ +X2 __COUNTER__ +#if __COUNTER__ +X3 __COUNTER__ +#endif +#define pass(x) x +#define a x __COUNTER__ y +#define a2 pass(__COUNTER__) +#define f(c) c __COUNTER__ +#define apply(d) d d __COUNTER__ x2 f(d) y2 __COUNTER__ +#define _paste(a,b) a ## b +#define paste(a,b) _paste(a,b) +#define _paste3(a,b,c) a ## b ## c +#define doublepaste(a,b) _paste3(a,b,b) +#define str(x) #x +X4 a +X5 f(a) +X6 f(b) +X7 f(__COUNTER__) +X8 apply(a) +X9 apply(f(a)) +X10 apply(__COUNTER__) +X11 apply(a2) +X12 str(__COUNTER__) +X13 paste(x,__COUNTER__) +X14 _paste(x,__COUNTER__) +X15 doublepaste(x,__COUNTER__) |
