[BACK]Return to symcat.h CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / external / gpl3 / binutils / dist / include

Annotation of src/external/gpl3/binutils/dist/include/symcat.h, Revision 1.1.1.5.2.1

1.1       skrll       1: /* Symbol concatenation utilities.
                      2:
1.1.1.5.2.1! martin      3:    Copyright (C) 1998-2020 Free Software Foundation, Inc.
1.1       skrll       4:
                      5:    This program is free software; you can redistribute it and/or modify
                      6:    it under the terms of the GNU General Public License as published by
                      7:    the Free Software Foundation; either version 2 of the License, or
                      8:    (at your option) any later version.
                      9:
                     10:    This program is distributed in the hope that it will be useful,
                     11:    but WITHOUT ANY WARRANTY; without even the implied warranty of
                     12:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     13:    GNU General Public License for more details.
                     14:
                     15:    You should have received a copy of the GNU General Public License along
                     16:    with this program; if not, write to the Free Software Foundation, Inc.,
                     17:    51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  */
                     18:
                     19: #ifndef SYM_CAT_H
                     20: #define SYM_CAT_H
                     21:
                     22: #if defined (__STDC__) || defined (ALMOST_STDC) || defined (HAVE_STRINGIZE)
                     23: #define CONCAT2(a,b)    a##b
                     24: #define CONCAT3(a,b,c)  a##b##c
                     25: #define CONCAT4(a,b,c,d) a##b##c##d
1.1.1.2   christos   26: #define CONCAT5(a,b,c,d,e) a##b##c##d##e
                     27: #define CONCAT6(a,b,c,d,e,f) a##b##c##d##e##f
1.1       skrll      28: #define STRINGX(s) #s
                     29: #else
                     30: /* Note one should never pass extra whitespace to the CONCATn macros,
                     31:    e.g. CONCAT2(foo, bar) because traditonal C will keep the space between
                     32:    the two labels instead of concatenating them.  Instead, make sure to
                     33:    write CONCAT2(foo,bar).  */
                     34: #define CONCAT2(a,b)    a/**/b
                     35: #define CONCAT3(a,b,c)  a/**/b/**/c
                     36: #define CONCAT4(a,b,c,d) a/**/b/**/c/**/d
1.1.1.2   christos   37: #define CONCAT5(a,b,c,d,e) a/**/b/**/c/**/d/**/e
                     38: #define CONCAT6(a,b,c,d,e,f) a/**/b/**/c/**/d/**/e/**/f
1.1       skrll      39: #define STRINGX(s) "s"
                     40: #endif
                     41:
                     42: #define XCONCAT2(a,b)     CONCAT2(a,b)
                     43: #define XCONCAT3(a,b,c)   CONCAT3(a,b,c)
                     44: #define XCONCAT4(a,b,c,d) CONCAT4(a,b,c,d)
1.1.1.2   christos   45: #define XCONCAT5(a,b,c,d,e) CONCAT5(a,b,c,d,e)
                     46: #define XCONCAT6(a,b,c,d,e,f) CONCAT6(a,b,c,d,e,f)
1.1       skrll      47:
                     48: /* Note the layer of indirection here is typically used to allow
                     49:    stringification of the expansion of macros.  I.e. "#define foo
                     50:    bar", "XSTRING(foo)", to yield "bar".  Be aware that this only
                     51:    works for __STDC__, not for traditional C which will still resolve
                     52:    to "foo".  */
                     53: #define XSTRING(s) STRINGX(s)
                     54:
                     55: #endif /* SYM_CAT_H */

CVSweb <webmaster@jp.NetBSD.org>