comparison runtime/func.h @ 85:6d10b5b9ebc3

Make dispatch type selectable between replicated switch and computed goto
author Mike Pavone <pavone@retrodev.com>
date Fri, 30 Jul 2010 23:49:19 +0000
parents 0083b2f7b3c7
children f51c4c17457c
comparison
equal deleted inserted replaced
84:6d41b71f1b77 85:6d10b5b9ebc3
13 } returntype; 13 } returntype;
14 14
15 15
16 typedef returntype (*rhope_func)(calldata *); 16 typedef returntype (*rhope_func)(calldata *);
17 typedef void (*special_func) (object *); 17 typedef void (*special_func) (object *);
18
19 #ifdef MULTI_SWITCH
20 #define DispatchEntry(name) case FUNC_##name: goto f_##name;
21 #define ResumeEntry(num,name) case RES_##num##_##name: goto r##num##_##name;
22 #define DispatchVar
23 #define DISPATCH switch(func) { DispatchEntries }
24 #define EndEntry case END: goto DO_END;
25 #else
26 #define DispatchEntry(name) &&f_##name,
27 #define ResumeEntry(num,name) &&r##num##_##name,
28 #define DispatchVar void * funcs[] = { DispatchEntries };
29 #define DISPATCH goto *funcs[func];
30 #define EndEntry &&DO_END
31 #endif
32
18 33
19 #define MethodName(name,type) f_ ## name ## AT_ ## type 34 #define MethodName(name,type) f_ ## name ## AT_ ## type
20 35
21 36
22 #define Func(name,numparams) \ 37 #define Func(name,numparams) \