Some macros for easy facade function implementation.
[libfirm] / ir / adt / impl.h
1 /**
2  * Some macros for facade function implementation.
3  * @author Sebastian Hack
4  * @date 9.12.2004
5  */
6
7 #ifndef _IMPL_H
8 #define _IMPL_H
9
10 #define _IMPL1(name,prefix,ret,res,t1,p1) \
11 res name (t1 p1) { \
12         ret prefix ## name (p1); \
13 }
14
15 #define _IMPL2(name,prefix,ret,res,t1,p1,t2,p2) \
16 res name (t1 p1, t2 p2) { \
17         ret prefix ## name (p1, p2); \
18 }
19
20 #define _IMPL3(name,prefix,ret,res,t1,p1,t2,p2,t3,p3) \
21 res name (t1 p1, t2 p2, t3 p3) { \
22         ret prefix ## name (p1, p2, p3); \
23 }
24
25 #define _IMPL4(name,prefix,ret,res,t1,p1,t2,p2,t3,p3,t4,p4) \
26 res name (t1 p1, t2 p2, t3 p3, t4 p4) { \
27         ret prefix ## name (p1, p2, p3, p4); \
28 }
29
30 #define IMPL1_VOID(name,prefix,t1,p1) \
31   _IMPL1(name, prefix, , void, t1, p1)
32
33 #define IMPL2_VOID(name,prefix,t1,p1,t2,p2) \
34   _IMPL2(name, prefix, , void, t1, p1, t2, p2)
35
36 #define IMPL3_VOID(name,prefix,t1,p1,t2,p2,t3,p3) \
37   _IMPL3(name, prefix, , void, t1, p1, t2, p2, t3, p3)
38
39 #define IMPL4_VOID(name,prefix,t1,p1,t2,p2,t3,p3,t4,p4) \
40   _IMPL4(name, prefix, , void, t1, p1, t2, p2, t3, p3, t4, p4)
41
42
43 #define IMPL1(name,type,prefix,t1,p1) \
44   _IMPL1(name, prefix, return, type, t1, p1)
45
46 #define IMPL2(name,type,prefix,t1,p1,t2,p2) \
47   _IMPL2(name, prefix, return, type, t1, p1, t2, p2)
48
49 #define IMPL3(name,type,prefix,t1,p1,t2,p2,t3,p3) \
50   _IMPL3(name, prefix, return, type, t1, p1, t2, p2, t3, p3)
51
52 #define IMPL4(name,type,prefix,t1,p1,t2,p2,t3,p3,t4,p4) \
53   _IMPL4(name, prefix, return, type, t1, p1, t2, p2, t3, p3, t4, p4)
54
55
56 #define FIRM_IMPL1(name,type,t1,p1) \
57   _IMPL1(name, __, return, type, t1, p1)
58
59 #define FIRM_IMPL2(name,type,t1,p1,t2,p2) \
60   _IMPL2(name, __, return, type, t1, p1, t2, p2)
61
62 #define FIRM_IMPL3(name,type,t1,p1,t2,p2,t3,p3) \
63   _IMPL3(name, __, return, type, t1, p1, t2, p2, t3, p3)
64
65 #define FIRM_IMPL4(name,type,t1,p1,t2,p2,t3,p3,t4,p4) \
66   _IMPL4(name, __, return, type, t1, p1, t2, p2, t3, p3, t4, p4)
67
68
69 #define FIRM_IMPL1_VOID(name,t1,p1) \
70   _IMPL1(name, __, , void, t1, p1)
71
72 #define FIRM_IMPL2_VOID(name,t1,p1,t2,p2) \
73   _IMPL2(name, __, , void, t1, p1, t2, p2)
74
75 #define FIRM_IMPL3_VOID(name,t1,p1,t2,p2,t3,p3) \
76   _IMPL3(name, __, , void, t1, p1, t2, p2, t3, p3)
77
78 #define FIRM_IMPL4_VOID(name,t1,p1,t2,p2,t3,p3,t4,p4) \
79   _IMPL4(name, __, , void, t1, p1, t2, p2, t3, p3, t4, p4)
80
81 #endif