Cosmetic changes
[libfirm] / ir / adt / impl.h
1 /**
2  * Some macros for wrapper function implementation.
3  * @author Sebastian Hack
4  * @date 9.12.2004
5  */
6
7 #ifndef _IMPL_H
8 #define _IMPL_H
9
10 #define _MANGLE(prefix,name)            prefix ## name
11
12 #define INTERNAL(name)                                  _MANGLE(_, name)
13
14
15 #define _HEAD1(name,res,t1) \
16         res (name)(t1 p1)
17
18 #define _HEAD2(name,res,t1,t2) \
19         res (name)(t1 p1, t2 p2)
20
21 #define _HEAD3(name,res,t1,t2,t3) \
22         res (name)(t1 p1, t2 p2, t3 p3)
23
24 #define _HEAD4(name,res,t1,t2,t3,t4) \
25         res (name)(t1 p1, t2 p2, t3 p3, t4 p4)
26
27
28 #define _IMPL1(name,prefix,ret,res,t1) \
29 _HEAD1(name, res, t1) { \
30         ret prefix ## name (p1); \
31 }
32
33 #define _IMPL2(name,prefix,ret,res,t1,t2) \
34 _HEAD2(name, res, t1, t2) { \
35         ret prefix ## name (p1, p2); \
36 }
37
38 #define _IMPL3(name,prefix,ret,res,t1,t2,t3) \
39 _HEAD3(name, res, t1, t2, t3) { \
40         ret prefix ## name (p1, p2, p3); \
41 }
42
43 #define _IMPL4(name,prefix,ret,res,t1,t2,t3,t4) \
44 _HEAD4(name, res, t1, t2, t3, t4) { \
45         ret prefix ## name (p1, p2, p3, p4); \
46 }
47
48 #define IMPL1_VOID(name,prefix,t1) \
49   _IMPL1(name, prefix, (void), void, t1)
50
51 #define IMPL2_VOID(name,prefix,t1,t2) \
52   _IMPL2(name, prefix, (void), void, t1, t2)
53
54 #define IMPL3_VOID(name,prefix,t1,t2,t3) \
55   _IMPL3(name, prefix, (void), void, t1, t2, t3)
56
57 #define IMPL4_VOID(name,prefix,t1,t2,t3,t4) \
58   _IMPL4(name, prefix, (void), void, t1, t2, t3, t4)
59
60
61 #define IMPL1(name,type,prefix,t1) \
62   _IMPL1(name, prefix, return, type, t1)
63
64 #define IMPL2(name,type,prefix,t1,t2) \
65   _IMPL2(name, prefix, return, type, t1, t2)
66
67 #define IMPL3(name,type,prefix,t1,t2,t3) \
68   _IMPL3(name, prefix, return, type, t1, t2, t3)
69
70 #define IMPL4(name,type,prefix,t1,t2,t3,t4) \
71   _IMPL4(name, prefix, return, type, t1, t2, t3, t4)
72
73
74 #define FIRM_IMPL1(name,type,t1) \
75   _IMPL1(name, _, return, type, t1)
76
77 #define FIRM_IMPL2(name,type,t1,t2) \
78   _IMPL2(name, _, return, type, t1, t2)
79
80 #define FIRM_IMPL3(name,type,t1,t2,t3) \
81   _IMPL3(name, _, return, type, t1, t2, t3)
82
83 #define FIRM_IMPL4(name,type,t1,t2,t3,t4) \
84   _IMPL4(name, _, return, type, t1, t2, t3, t4)
85
86
87 #define FIRM_IMPL1_VOID(name,t1) \
88   _IMPL1(name, _, (void), void, t1)
89
90 #define FIRM_IMPL2_VOID(name,t1,t2) \
91   _IMPL2(name, _, (void), void, t1, t2)
92
93 #define FIRM_IMPL3_VOID(name,t1,t2,t3) \
94   _IMPL3(name, _, (void), void, t1, t2, t3)
95
96 #define FIRM_IMPL4_VOID(name,t1,t2,t3,t4) \
97   _IMPL4(name, _, (void), void, t1, t2, t3, t4)
98
99 #define FIRM_PROTO1(name,type,t1)                                               _HEAD1(name, type, t1)
100 #define FIRM_PROTO2(name,type,t1,t2)                                    _HEAD2(name, type, t1, t2)
101 #define FIRM_PROTO3(name,type,t1,t2,t3)                         _HEAD3(name, type, t1, t2, t3)
102 #define FIRM_PROTO4(name,type,t1,t2,t3,t4)              _HEAD4(name, type, t1, t2, t3, t4)
103
104 #endif