From 59a26b4751c91025ffe3e01f8e1a4976d054efe4 Mon Sep 17 00:00:00 2001 From: jjgarcia Date: Sun, 13 Oct 2002 16:03:36 +0000 Subject: [PATCH] Use same link_call() with and without CLOS. The use of static variables is not thread safe. --- src/c/eval.d | 10 ---------- src/h/ecl-cmp.h | 8 -------- src/h/external.h | 3 +-- 3 files changed, 1 insertion(+), 20 deletions(-) diff --git a/src/c/eval.d b/src/c/eval.d index 25da5c3f2..50d1f8d84 100644 --- a/src/c/eval.d +++ b/src/c/eval.d @@ -73,12 +73,7 @@ apply(int narg, cl_object fun, cl_object *args) *----------------------------------------------------------------------*/ cl_object -#ifdef CLOS -link_call(cl_object sym, cl_objectfn *pLK, cl_object *gfun, - int narg, va_list args) -#else link_call(cl_object sym, cl_objectfn *pLK, int narg, va_list args) -#endif /* CLOS */ { cl_object fun = symbol_function(sym); @@ -94,11 +89,6 @@ link_call(cl_object sym, cl_objectfn *pLK, int narg, va_list args) return va_APPLY(narg, fun->cfun.entry, args); #ifdef CLOS case t_gfun: - putprop(sym, CONS(CONS(make_unsigned_integer((cl_index)gfun), - make_unsigned_integer((cl_index)OBJNULL)), - getf(sym->symbol.plist, @'si::link-from', Cnil)), - @'si::link-from'); - *gfun = fun; return va_gcall(narg, fun, args); #endif /* CLOS */ case t_cclosure: diff --git a/src/h/ecl-cmp.h b/src/h/ecl-cmp.h index 682fa6117..366d7c4c1 100644 --- a/src/h/ecl-cmp.h +++ b/src/h/ecl-cmp.h @@ -42,17 +42,9 @@ cs_overflow() #define LINK_ARGS &narg -#ifdef CLOS -#define TRAMPOLINK(narg, vv, lk) \ - static cl_object gfun = OBJNULL; \ - va_list args; va_start(args, narg); \ - if (gfun) return(va_gcall(narg, gfun, args)); \ - else return(link_call(vv, (cl_objectfn *)lk , &gfun, narg, args)) -#else #define TRAMPOLINK(narg, vv, lk) \ va_list args; va_start(args, narg); \ return(link_call(vv, (cl_objectfn *)lk, narg, args)) -#endif #define cclosure_call funcall diff --git a/src/h/external.h b/src/h/external.h index 1a6bb5d5d..8bfdc051e 100644 --- a/src/h/external.h +++ b/src/h/external.h @@ -231,8 +231,7 @@ extern void FEend_of_file(cl_object strm); #define funcall clLfuncall extern cl_object apply(int narg, cl_object fun, cl_object *args); -extern cl_object link_call(cl_object sym, cl_objectfn *pLK, cl_object *gfun, - int narg, va_list args); +extern cl_object link_call(cl_object sym, cl_objectfn *pLK, int narg, va_list args); extern cl_object cl_safe_eval(cl_object form, cl_object *bytecodes, cl_object env, cl_object err_value); extern void init_eval(void);