summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2009-02-16 01:00:49 +0100
committerLudovic Courtès <ludo@gnu.org>2009-03-02 00:20:43 +0100
commit54d14084e229f90b75475a866e3f458be30fa233 (patch)
treef9762726165af120436199f63abc84bf225005d8
parente20d7001c3f7150400169fecb0bf0eefdf122fe2 (diff)
downloadguile-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.c16
-rw-r--r--libguile/gsubr.c4
-rw-r--r--libguile/gsubr.h2
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 */