95 |
{ DEBUG_AVMA |
{ DEBUG_AVMA |
96 |
int i=fun->sfn.sfn_argd,n=SFUN_NARGS(i); |
int i=fun->sfn.sfn_argd,n=SFUN_NARGS(i); |
97 |
enum ftype restype; |
enum ftype restype; |
98 |
object *x,res,*base; |
object *x,res=OBJNULL,*base; |
99 |
object *temp_ar=alloca(n*sizeof(object)); |
object *temp_ar=ZALLOCA(n*sizeof(object)); |
100 |
/* i=fun->sfn.sfn_argd; */ |
/* i=fun->sfn.sfn_argd; */ |
101 |
/* n=SFUN_NARGS(i); */ |
/* n=SFUN_NARGS(i); */ |
102 |
base = vs_base; |
base = vs_base; |
157 |
void |
void |
158 |
funcall(object fun) |
funcall(object fun) |
159 |
{ |
{ |
160 |
object temporary; |
/* object VOL sfirst=NULL; */ |
161 |
object x; |
/* wipe_stack(&sfirst); */ |
162 |
object * VOL top; |
{ |
163 |
object *lex; |
object temporary=OBJNULL; |
164 |
bds_ptr old_bds_top; |
object x=OBJNULL; |
165 |
VOL bool b; |
object * VOL top=NULL; |
166 |
bool c; |
object *lex=NULL; |
167 |
|
bds_ptr old_bds_top=NULL; |
168 |
|
VOL bool b=0; |
169 |
|
bool c=0; |
170 |
DEBUG_AVMA |
DEBUG_AVMA |
171 |
TOP: |
TOP: |
172 |
if (fun == OBJNULL) |
if (fun == OBJNULL) |
188 |
return; |
return; |
189 |
case t_afun: |
case t_afun: |
190 |
case t_closure: |
case t_closure: |
191 |
{ object res,*b = vs_base; |
{ object res=OBJNULL,*b = vs_base; |
192 |
int n = vs_top - b; |
int n = vs_top - b; |
193 |
res = (object)IapplyVector(fun,n,b); |
res = (object)IapplyVector(fun,n,b); |
194 |
n = fcall.nvalues; |
n = fcall.nvalues; |
200 |
case t_cclosure: |
case t_cclosure: |
201 |
|
|
202 |
{ |
{ |
203 |
object *top, *base, l; |
object *top=NULL, *base=NULL, l=OBJNULL; |
204 |
|
|
205 |
if (fun->cc.cc_turbo != NULL) { |
if (fun->cc.cc_turbo != NULL) { |
206 |
MMccall(fun, fun->cc.cc_turbo); |
MMccall(fun, fun->cc.cc_turbo); |
341 |
lex_env = lex; |
lex_env = lex; |
342 |
if (not_pushed == 0) {ihs_pop();} |
if (not_pushed == 0) {ihs_pop();} |
343 |
CHECK_AVMA; |
CHECK_AVMA; |
344 |
}} |
}}} |
345 |
|
|
346 |
void |
void |
347 |
funcall_no_event(object fun) |
funcall_no_event(object fun) |
356 |
|
|
357 |
case t_cclosure: |
case t_cclosure: |
358 |
{ |
{ |
359 |
object *top, *base, l; |
object *top=NULL, *base=NULL, l=OBJNULL; |
360 |
|
|
361 |
if (fun->cc.cc_turbo != NULL) { |
if (fun->cc.cc_turbo != NULL) { |
362 |
(*fun->cc.cc_self)(fun->cc.cc_turbo); |
(*fun->cc.cc_self)(fun->cc.cc_turbo); |
936 |
void |
void |
937 |
eval(object form) |
eval(object form) |
938 |
{ |
{ |
939 |
object temporary; |
object temporary=OBJNULL; |
940 |
DEBUG_AVMA |
DEBUG_AVMA |
941 |
object fun, x; |
object fun=OBJNULL, x=OBJNULL; |
942 |
object *top; |
object *top=NULL; |
943 |
object *base; |
object *base=NULL; |
944 |
|
|
945 |
cs_check(form); |
cs_check(form); |
946 |
|
|
1132 |
super_funcall(ah); |
super_funcall(ah); |
1133 |
} |
} |
1134 |
|
|
|
|
|
1135 |
DEFUNO_NEW("FUNCALL",object,fLfuncall,LISP |
DEFUNO_NEW("FUNCALL",object,fLfuncall,LISP |
1136 |
,1,MAX_ARGS,NONE,OO,OO,OO,OO,void,Lfuncall,(object fun,...),"") |
,1,MAX_ARGS,NONE,OO,OO,OO,OO,void,Lfuncall,(object fun,...),"") { |
1137 |
{ va_list ap; |
|
1138 |
|
va_list ap; |
1139 |
object *new; |
object *new; |
1140 |
int n = VFUN_NARGS; |
int i,n = VFUN_NARGS-1; |
1141 |
|
|
1142 |
|
if (n>=65) FEerror("arg limit exceeded",0); |
1143 |
|
new=ZALLOCA(n*sizeof(*new)); |
1144 |
|
/* wipe_stack(&n); */ |
1145 |
va_start(ap,fun); |
va_start(ap,fun); |
1146 |
{COERCE_VA_LIST(new,ap,n); |
for (i=0;i<n;i++) |
1147 |
return IapplyVector(fun,n-1,new); |
new[i]=va_arg(ap,object); |
1148 |
va_end(ap); |
va_end(ap); |
1149 |
} |
return IapplyVector(fun,n,new); |
1150 |
} |
} |
1151 |
|
|
1152 |
|
|