2 * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved.
4 * This file is part of libFirm.
6 * This file may be distributed and/or modified under the terms of the
7 * GNU General Public License version 2 as published by the Free Software
8 * Foundation and appearing in the file LICENSE.GPL included in the
9 * packaging of this file.
11 * Licensees holding valid libFirm Professional Edition licenses may use
12 * this file in accordance with the libFirm Commercial License.
13 * Agreement provided with the Software.
15 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * @brief Some macros for wrapper function implementation. (WARNING deprecated)
23 * @author Sebastian Hack
26 * Please don't use these macros, they make the code unnecessarily unreadable!
28 #ifndef FIRM_ADT_IMPL_H
29 #define FIRM_ADT_IMPL_H
31 #define _MANGLE(prefix,name) prefix ## name
33 #define INTERNAL(name) _MANGLE(_, name)
36 #define _HEAD1(name,res,t1) \
39 #define _HEAD2(name,res,t1,t2) \
40 res (name)(t1 p1, t2 p2)
42 #define _HEAD3(name,res,t1,t2,t3) \
43 res (name)(t1 p1, t2 p2, t3 p3)
45 #define _HEAD4(name,res,t1,t2,t3,t4) \
46 res (name)(t1 p1, t2 p2, t3 p3, t4 p4)
49 #define _IMPL1(name,prefix,ret,res,t1) \
50 _HEAD1(name, res, t1) { \
51 ret prefix ## name (p1); \
54 #define _IMPL2(name,prefix,ret,res,t1,t2) \
55 _HEAD2(name, res, t1, t2) { \
56 ret prefix ## name (p1, p2); \
59 #define _IMPL3(name,prefix,ret,res,t1,t2,t3) \
60 _HEAD3(name, res, t1, t2, t3) { \
61 ret prefix ## name (p1, p2, p3); \
64 #define _IMPL4(name,prefix,ret,res,t1,t2,t3,t4) \
65 _HEAD4(name, res, t1, t2, t3, t4) { \
66 ret prefix ## name (p1, p2, p3, p4); \
69 #define IMPL1_VOID(name,prefix,t1) \
70 _IMPL1(name, prefix, (void), void, t1)
72 #define IMPL2_VOID(name,prefix,t1,t2) \
73 _IMPL2(name, prefix, (void), void, t1, t2)
75 #define IMPL3_VOID(name,prefix,t1,t2,t3) \
76 _IMPL3(name, prefix, (void), void, t1, t2, t3)
78 #define IMPL4_VOID(name,prefix,t1,t2,t3,t4) \
79 _IMPL4(name, prefix, (void), void, t1, t2, t3, t4)
82 #define IMPL1(name,type,prefix,t1) \
83 _IMPL1(name, prefix, return, type, t1)
85 #define IMPL2(name,type,prefix,t1,t2) \
86 _IMPL2(name, prefix, return, type, t1, t2)
88 #define IMPL3(name,type,prefix,t1,t2,t3) \
89 _IMPL3(name, prefix, return, type, t1, t2, t3)
91 #define IMPL4(name,type,prefix,t1,t2,t3,t4) \
92 _IMPL4(name, prefix, return, type, t1, t2, t3, t4)
95 #define FIRM_IMPL1(name,type,t1) \
96 _IMPL1(name, _, return, type, t1)
98 #define FIRM_IMPL2(name,type,t1,t2) \
99 _IMPL2(name, _, return, type, t1, t2)
101 #define FIRM_IMPL3(name,type,t1,t2,t3) \
102 _IMPL3(name, _, return, type, t1, t2, t3)
104 #define FIRM_IMPL4(name,type,t1,t2,t3,t4) \
105 _IMPL4(name, _, return, type, t1, t2, t3, t4)
108 #define FIRM_IMPL1_VOID(name,t1) \
109 _IMPL1(name, _, (void), void, t1)
111 #define FIRM_IMPL2_VOID(name,t1,t2) \
112 _IMPL2(name, _, (void), void, t1, t2)
114 #define FIRM_IMPL3_VOID(name,t1,t2,t3) \
115 _IMPL3(name, _, (void), void, t1, t2, t3)
117 #define FIRM_IMPL4_VOID(name,t1,t2,t3,t4) \
118 _IMPL4(name, _, (void), void, t1, t2, t3, t4)
120 #define FIRM_PROTO1(name,type,t1) _HEAD1(name, type, t1)
121 #define FIRM_PROTO2(name,type,t1,t2) _HEAD2(name, type, t1, t2)
122 #define FIRM_PROTO3(name,type,t1,t2,t3) _HEAD3(name, type, t1, t2, t3)
123 #define FIRM_PROTO4(name,type,t1,t2,t3,t4) _HEAD4(name, type, t1, t2, t3, t4)