/[gcl]/gcl/o/eval.c
ViewVC logotype

Diff of /gcl/o/eval.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.19 by camm, Tue Nov 2 17:32:48 2004 UTC revision 1.20 by camm, Fri Jun 10 15:24:44 2005 UTC
# Line 95  quick_call_sfun(object fun) Line 95  quick_call_sfun(object fun)
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;
# Line 157  call_vfun(object fun) Line 157  call_vfun(object fun)
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)
# Line 185  funcall(object fun) Line 188  funcall(object fun)
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;
# Line 197  funcall(object fun) Line 200  funcall(object fun)
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);
# Line 338  END: Line 341  END:
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)
# Line 353  funcall_no_event(object fun) Line 356  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);
# Line 933  Ieval(object form) Line 936  Ieval(object form)
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    
# Line 1129  call_applyhook(object fun) Line 1132  call_applyhook(object fun)
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    

Legend:
Removed from v.1.19  
changed lines
  Added in v.1.20

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26