comparison runtime/func.h @ 65:1db811fa4744

Handle native Rhope functions and plain C functions separately as part of move to new C strategy
author Mike Pavone <pavone@retrodev.com>
date Tue, 01 Jun 2010 01:13:54 -0400
parents 04baa003de5a
children d4b44ae2e34a
comparison
equal deleted inserted replaced
64:e1fd6d244f14 65:1db811fa4744
52 } 52 }
53 53
54 54
55 #define MethodDispatch(type_id,name,type_name) \ 55 #define MethodDispatch(type_id,name,type_name) \
56 case type_id:\ 56 case type_id:\
57 goto m_ ## name ## _AT_ ## type_name; 57 goto m_ ## name ## AT_ ## type_name;
58 58
59 #define MethodImpl(name,type_name,mytype_id,numparams) \ 59 #define MethodImpl(name,type_name,mytype_id,numparams) \
60 f_ ## name ## _AT_ ## type_name:\ 60 f_ ## name ## AT_ ## type_name:\
61 sf_ ## name ## _AT_ ## type_name:\ 61 sf_ ## name ## AT_ ## type_name:\
62 if (cdata->num_params < 1)\ 62 if (cdata->num_params < 1)\
63 goto _exception;\ 63 goto _exception;\
64 if(get_blueprint(cdata->params[0])->type_id != mytype_id)\ 64 if(get_blueprint(cdata->params[0])->type_id != mytype_id)\
65 {\ 65 {\
66 puts("uh oh, need conversion and that's not implemented yet!");\ 66 puts("uh oh, need conversion and that's not implemented yet!");\
67 exit(1);\ 67 exit(1);\
68 }\ 68 }\
69 m_ ## name ## _AT_ ## type_name:\ 69 m_ ## name ## AT_ ## type_name:\
70 for(idx = numparams; idx < cdata->num_params; ++idx)\ 70 for(idx = numparams; idx < cdata->num_params; ++idx)\
71 release_ref(cdata->params[0-idx]); cdata->num_params = numparams;\ 71 release_ref(cdata->params[0-idx]); cdata->num_params = numparams;\
72 lv_ ## name ## _AT_ ## type_name = alloc_stack(ct, sizeof(lt_ ## name ## _AT_ ## type_name)); 72 lv_ ## name ## AT_ ## type_name = alloc_stack(ct, sizeof(lt_ ## name ## AT_ ## type_name));
73 73
74 74
75 #define MethodImplNoLocals(name,type_name,mytype_id,numparams) \ 75 #define MethodImplNoLocals(name,type_name,mytype_id,numparams) \
76 f_ ## name ## _AT_ ## type_name:\ 76 f_ ## name ## AT_ ## type_name:\
77 sf_ ## name ## _AT_ ## type_name:\ 77 sf_ ## name ## AT_ ## type_name:\
78 if (cdata->num_params < 1)\ 78 if (cdata->num_params < 1)\
79 goto _exception;\ 79 goto _exception;\
80 if(get_blueprint(cdata->params[0])->type_id != mytype_id)\ 80 if(get_blueprint(cdata->params[0])->type_id != mytype_id)\
81 {\ 81 {\
82 puts("uh oh, need conversion and that's not implemented yet!");\ 82 puts("uh oh, need conversion and that's not implemented yet!");\
83 exit(1);\ 83 exit(1);\
84 }\ 84 }\
85 m_ ## name ## _AT_ ## type_name:\ 85 m_ ## name ## AT_ ## type_name:\
86 for(idx = numparams; idx < cdata->num_params; ++idx)\ 86 for(idx = numparams; idx < cdata->num_params; ++idx)\
87 release_ref(cdata->params[0-idx]); cdata->num_params = numparams; 87 release_ref(cdata->params[0-idx]); cdata->num_params = numparams;
88 88
89 #define NumParams 89 #define NumParams
90 #define CallSpace 90 #define CallSpace
98 98
99 #define CopiedParam(num,convtypeid) Param(num,convtypeid) cdata->params[num] = copy_object(cdata->params[num]); 99 #define CopiedParam(num,convtypeid) Param(num,convtypeid) cdata->params[num] = copy_object(cdata->params[num]);
100 #define Ret(num,val) cdata->params[0-num] = (object *)(val); 100 #define Ret(num,val) cdata->params[0-num] = (object *)(val);
101 #define Exception 101 #define Exception
102 #define FuncDef(name) lt_ ## name * lv_ ## name; 102 #define FuncDef(name) lt_ ## name * lv_ ## name;
103 #define MethodDef(name) lt_ ## name ## _AT_ ## type_name * lv_ ## name ## _AT_ ## type_name; 103 #define MethodDef(name) lt_ ## name ## AT_ ## type_name * lv_ ## name ## AT_ ## type_name;
104 104
105 105
106 #define PrepCall(callspace) cdata = alloc_cdata(ct, cdata, callspace); 106 #define PrepCall(callspace) cdata = alloc_cdata(ct, cdata, callspace);
107 107
108 #define SetParam(num,value) cdata->params[0-num] = value; 108 #define SetParam(num,value) cdata->params[0-num] = value;
121 121
122 #define FreeCallMethod(myname,mytype)\ 122 #define FreeCallMethod(myname,mytype)\
123 temp_cdata = cdata->lastframe;\ 123 temp_cdata = cdata->lastframe;\
124 free_stack(ct, cdata);\ 124 free_stack(ct, cdata);\
125 cdata = temp_cdata;\ 125 cdata = temp_cdata;\
126 lv_ ## myname ## _AT_ ## type_name = (lt_ ## myname ## _AT_ ## type_name *)(cdata+1); 126 lv_ ## myname ## AT_ ## type_name = (lt_ ## myname ## AT_ ## type_name *)(cdata+1);
127 127
128 #define TPrepCall(callspace) \ 128 #define TPrepCall(callspace) \
129 func = cdata->lastframe->func;\ 129 func = cdata->lastframe->func;\
130 temp_cdata = cdata->lastframe->lastframe;\ 130 temp_cdata = cdata->lastframe->lastframe;\
131 free_stack(ct, cdata->lastframe);\ 131 free_stack(ct, cdata->lastframe);\