Commit d1fecbf9512471ad2bb0ab46cd931a37c7cdc2d5
1 parent
e0e05bf8
add ability to call interface methods with return value
Showing
1 changed file
with
22 additions
and
13 deletions
... | ... | @@ -40,19 +40,28 @@ |
40 | 40 | * @TODO: actually i use gcc feature ## for variadoc... think about |
41 | 41 | * a way to make this standard. |
42 | 42 | */ |
43 | -#define CALL(object,_iface,method,...) \ | |
44 | - do { \ | |
45 | - class_ptr class = class_getClass((object)); \ | |
46 | - struct i_##_iface * iface; \ | |
47 | - if (class->init) class->init(); \ | |
48 | - iface = (struct i_##_iface *)class_getInterface(&class, &i_##_iface); \ | |
49 | - while ((NULL == iface || NULL == iface->method) && HAS_PARENT(class)) { \ | |
50 | - class = class->parent; \ | |
51 | - if (class->init) class->init(); \ | |
52 | - iface = (struct i_##_iface *)class_getInterface(&class, &i_##_iface); \ | |
53 | - }; \ | |
54 | - assert(NULL != iface->method); \ | |
55 | - iface->method(object, ##__VA_ARGS__); \ | |
43 | +#define _CALL(object,_iface,method,...) \ | |
44 | + class_ptr class = class_getClass((object)); \ | |
45 | + struct i_##_iface * iface; \ | |
46 | + if (class->init) class->init(); \ | |
47 | + iface = (struct i_##_iface *)class_getInterface(&class, &i_##_iface); \ | |
48 | + while ((NULL == iface || NULL == iface->method) && HAS_PARENT(class)) { \ | |
49 | + class = class->parent; \ | |
50 | + if (class->init) class->init(); \ | |
51 | + iface = (struct i_##_iface *)class_getInterface(&class, &i_##_iface); \ | |
52 | + }; \ | |
53 | + assert(NULL != iface->method); | |
54 | + | |
55 | +#define CALL(object,_iface,method,...) \ | |
56 | + do { \ | |
57 | + _CALL(object, _iface, method, ##__VA_ARGS__); \ | |
58 | + iface->method(object, ##__VA_ARGS__); \ | |
59 | + } while(0) | |
60 | + | |
61 | +#define RETCALL(object,_iface,method,ret,...) \ | |
62 | + do { \ | |
63 | + _CALL(object, _iface, method, ##__VA_ARGS__); \ | |
64 | + ret = iface->method(object, ##__VA_ARGS__); \ | |
56 | 65 | } while(0) |
57 | 66 | |
58 | 67 | ... | ... |
Please
register
or
login
to post a comment