diff options
author | Ludovic Courtès <ludo@gnu.org> | 2009-02-16 01:00:49 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2009-03-02 00:20:43 +0100 |
commit | 54d14084e229f90b75475a866e3f458be30fa233 (patch) | |
tree | f9762726165af120436199f63abc84bf225005d8 | |
parent | e20d7001c3f7150400169fecb0bf0eefdf122fe2 (diff) | |
download | guile-54d14084e229f90b75475a866e3f458be30fa233.tar.gz |
Change `scm_gsubr_apply ()' to take the gsubr as its first argument.
* libguile/gsubr.c (scm_gsubr_apply): Make SELF the first argument
instead of the first element of ARGS.
* libguile/gsubr.h: Update.
* libguile/eval.i.c (CEVAL): Update.
-rw-r--r-- | libguile/eval.i.c | 16 | ||||
-rw-r--r-- | libguile/gsubr.c | 4 | ||||
-rw-r--r-- | libguile/gsubr.h | 2 |
3 files changed, 10 insertions, 12 deletions
diff --git a/libguile/eval.i.c b/libguile/eval.i.c index 65e274435..f182d3c8f 100644 --- a/libguile/eval.i.c +++ b/libguile/eval.i.c @@ -1129,7 +1129,7 @@ dispatch: debug.info->a.proc = proc; debug.info->a.args = SCM_EOL; #endif - RETURN (scm_gsubr_apply (scm_list_1 (proc))); + RETURN (scm_gsubr_apply (proc, SCM_EOL)); case scm_tc7_pws: proc = SCM_PROCEDURE (proc); #ifdef DEVAL @@ -1248,7 +1248,7 @@ dispatch: debug.info->a.args = scm_cons (arg1, debug.info->a.args); debug.info->a.proc = proc; #endif - RETURN (scm_gsubr_apply (scm_list_2 (proc, arg1))); + RETURN (scm_gsubr_apply (proc, scm_list_1 (arg1))); case scm_tc7_pws: proc = SCM_PROCEDURE (proc); #ifdef DEVAL @@ -1348,12 +1348,12 @@ dispatch: cclon: case scm_tc7_gsubr: #ifdef DEVAL - RETURN (scm_gsubr_apply (scm_cons (proc, debug.info->a.args))); + RETURN (scm_gsubr_apply (proc, debug.info->a.args)); #else - RETURN (scm_gsubr_apply - (scm_cons (proc, - scm_cons2 (arg1, arg2, - scm_ceval_args (x, env, proc))))); + RETURN (scm_gsubr_apply (proc, + scm_cons2 (arg1, arg2, + scm_ceval_args (x, env, + proc)))); #endif case scm_tcs_struct: if (SCM_OBJ_CLASS_FLAGS (proc) & SCM_CLASSF_PURE_GENERIC) @@ -1865,7 +1865,7 @@ tail: #else args = (SCM_UNBNDP(arg1) ? SCM_EOL : scm_cons (arg1, args)); #endif - RETURN (scm_gsubr_apply (scm_cons (proc, args))); + RETURN (scm_gsubr_apply (proc, args)); case scm_tc7_pws: proc = SCM_PROCEDURE (proc); #ifdef DEVAL diff --git a/libguile/gsubr.c b/libguile/gsubr.c index 91852d5b8..cc9bc39a5 100644 --- a/libguile/gsubr.c +++ b/libguile/gsubr.c @@ -179,16 +179,14 @@ scm_c_define_gsubr_with_generic (const char *name, SCM -scm_gsubr_apply (SCM args) +scm_gsubr_apply (SCM self, SCM args) #define FUNC_NAME "scm_gsubr_apply" { - SCM self = SCM_CAR (args); SCM (*fcn)() = SCM_SUBRF (self); SCM v[SCM_GSUBR_MAX]; unsigned int typ = SCM_GSUBR_TYPE (self); long i, n = SCM_GSUBR_REQ (typ) + SCM_GSUBR_OPT (typ) + SCM_GSUBR_REST (typ); - args = SCM_CDR (args); for (i = 0; i < SCM_GSUBR_REQ (typ); i++) { if (scm_is_null (args)) scm_wrong_num_args (SCM_SNAME (self)); diff --git a/libguile/gsubr.h b/libguile/gsubr.h index ea4843696..9c9b7d96c 100644 --- a/libguile/gsubr.h +++ b/libguile/gsubr.h @@ -48,7 +48,7 @@ SCM_API SCM scm_c_define_gsubr_with_generic (const char *name, int req, int opt, int rst, SCM (*fcn) (), SCM *gf); -SCM_API SCM scm_gsubr_apply (SCM args); +SCM_API SCM scm_gsubr_apply (SCM proc, SCM args); SCM_INTERNAL void scm_init_gsubr (void); #endif /* SCM_GSUBR_H */ |