diff options
author | Mikael Djurfeldt <djurfeldt@nada.kth.se> | 2000-08-25 04:08:50 +0000 |
---|---|---|
committer | Mikael Djurfeldt <djurfeldt@nada.kth.se> | 2000-08-25 04:08:50 +0000 |
commit | 5540e847f4137f2a0896b3a6b94f73fff90194df (patch) | |
tree | 4f5373dea82e2c18a762be9c977f6394e60f9b02 /libguile/procprop.c | |
parent | 14fb1c83d6bf6e6daa11740cdea58a28432727be (diff) | |
download | guile-5540e847f4137f2a0896b3a6b94f73fff90194df.tar.gz |
* procprop.c: #include "libguile/smob.h"; Check applicable smobs.
Diffstat (limited to 'libguile/procprop.c')
-rw-r--r-- | libguile/procprop.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/libguile/procprop.c b/libguile/procprop.c index cd3d56720..b2e76bbb7 100644 --- a/libguile/procprop.c +++ b/libguile/procprop.c @@ -52,6 +52,7 @@ #include "libguile/procs.h" #include "libguile/gsubr.h" #include "libguile/objects.h" +#include "libguile/smob.h" #include "libguile/root.h" #include "libguile/vectors.h" @@ -97,20 +98,27 @@ scm_i_procedure_arity (SCM proc) a += 2; r = 1; break; -#ifdef CCLO - case scm_tc7_cclo: - if (SCM_EQ_P (SCM_CCLO_SUBR (proc), scm_f_gsubr_apply)) + case scm_tc7_smob: + { + int type; + if (!SCM_SMOB_DESCRIPTOR (proc).apply) + return SCM_BOOL_F; + type = SCM_SMOB_DESCRIPTOR (proc).gsubr_type; + goto gsubr_type; + case scm_tc7_cclo: + if (SCM_EQ_P (SCM_CCLO_SUBR (proc), scm_f_gsubr_apply)) { - int type = SCM_INUM (SCM_GSUBR_TYPE (proc)); + type = SCM_INUM (SCM_GSUBR_TYPE (proc)); + gsubr_type: a += SCM_GSUBR_REQ (type); o = SCM_GSUBR_OPT (type); r = SCM_GSUBR_REST (type); break; } - proc = SCM_CCLO_SUBR (proc); - a -= 1; - goto loop; -#endif + proc = SCM_CCLO_SUBR (proc); + a -= 1; + goto loop; + } case scm_tc7_pws: proc = SCM_PROCEDURE (proc); goto loop; |