Mercurial > repos > rhope
comparison runtime/func.h @ 35:3498713c3dc9
C backend portion of supporting user defined types is done, but untested. Parser/NWorker still need a fair bit of work
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Wed, 30 Sep 2009 23:55:04 -0400 |
parents | 31f8182f3433 |
children | a24eb366195c d2f9b0a9403d |
comparison
equal
deleted
inserted
replaced
34:df038cef648b | 35:3498713c3dc9 |
---|---|
151 release_ref(cdata->params[idx]);\ | 151 release_ref(cdata->params[idx]);\ |
152 cdata->params[0] = call->params[0];\ | 152 cdata->params[0] = call->params[0];\ |
153 free_stack(cdata->ct, call);\ | 153 free_stack(cdata->ct, call);\ |
154 return ret;\ | 154 return ret;\ |
155 } | 155 } |
156 | |
157 #define GFieldCall(fieldid)\ | |
158 call->num_params = 1;\ | |
159 call->resume = 0;\ | |
160 ret = get_field(fieldid, call);\ | |
161 while(ret == TAIL_RETURN)\ | |
162 ret = call->tail_func(call);\ | |
163 if(ret == EXCEPTION_RETURN)\ | |
164 {\ | |
165 for(idx = 0; idx < cdata->num_params; ++idx)\ | |
166 if(cdata->params[idx])\ | |
167 release_ref(cdata->params[idx]);\ | |
168 cdata->params[0] = call->params[0];\ | |
169 free_stack(cdata->ct, call);\ | |
170 return ret;\ | |
171 } | |
172 | |
173 #define SFieldCall(fieldid)\ | |
174 call->num_params = 2;\ | |
175 call->resume = 0;\ | |
176 ret = set_field(fieldid, call);\ | |
177 while(ret == TAIL_RETURN)\ | |
178 ret = call->tail_func(call);\ | |
179 if(ret == EXCEPTION_RETURN)\ | |
180 {\ | |
181 for(idx = 0; idx < cdata->num_params; ++idx)\ | |
182 if(cdata->params[idx])\ | |
183 release_ref(cdata->params[idx]);\ | |
184 cdata->params[0] = call->params[0];\ | |
185 free_stack(cdata->ct, call);\ | |
186 return ret;\ | |
187 } | |
156 | 188 |
157 #define TMCall(methodid, numparams)\ | 189 #define TMCall(methodid, numparams)\ |
158 free_stack(cdata->ct, call);\ | 190 free_stack(cdata->ct, call);\ |
159 cdata->num_params = numparams;\ | 191 cdata->num_params = numparams;\ |
160 cdata->resume = 0;\ | 192 cdata->resume = 0;\ |