There are many places where 2 annotations are not enough. This patch adds INDIRECT_CALL_3 and INDIRECT_CALL_4 to cover such cases.
Unified · Split
| @@ -23,6 +23,16 @@ · 22 unmodified lines | ||
| 23 | 23 | likely(f == f2) ? f2(__VA_ARGS__) : \ |
| 24 | 24 | INDIRECT_CALL_1(f, f1, __VA_ARGS__); \ |
| 25 | 25 | }) |
| 26 | +#define INDIRECT_CALL_3(f, f3, f2, f1, ...) \ | |
| 27 | + ({ \ | |
| 28 | + likely(f == f3) ? f3(__VA_ARGS__) : \ | |
| 29 | + INDIRECT_CALL_2(f, f2, f1, __VA_ARGS__); \ | |
| 30 | + }) | |
| 31 | +#define INDIRECT_CALL_4(f, f4, f3, f2, f1, ...) \ | |
| 32 | + ({ \ | |
| 33 | + likely(f == f4) ? f4(__VA_ARGS__) : \ | |
| 34 | + INDIRECT_CALL_3(f, f3, f2, f1, __VA_ARGS__); \ | |
| 35 | + }) | |
| 26 | 36 | |
| 27 | 37 | #define INDIRECT_CALLABLE_DECLARE(f) f |
| 28 | 38 | #define INDIRECT_CALLABLE_SCOPE |
| @@ -30,6 +40,8 @@ · 1 unmodified line | ||
| 30 | 40 | #else |
| 31 | 41 | #define INDIRECT_CALL_1(f, f1, ...) f(__VA_ARGS__) |
| 32 | 42 | #define INDIRECT_CALL_2(f, f2, f1, ...) f(__VA_ARGS__) |
| 43 | +#define INDIRECT_CALL_3(f, f3, f2, f1, ...) f(__VA_ARGS__) | |
| 44 | +#define INDIRECT_CALL_4(f, f4, f3, f2, f1, ...) f(__VA_ARGS__) | |
| 33 | 45 | #define INDIRECT_CALLABLE_DECLARE(f) |
| 34 | 46 | #define INDIRECT_CALLABLE_SCOPE static |
| 35 | 47 | #endif |