Mercurial > repos > rhope
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) \ |