summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2011-10-24 18:29:45 +0200
committerAndy Wingo <wingo@pobox.com>2011-10-24 19:01:12 +0200
commit8b33752be7950b66bf0007e282eae3d13502f445 (patch)
tree2997cf207d1750b9644620379409328a9de71090
parentcf4c26625b901e3550c80bbf53c13189582f57a6 (diff)
downloadguile-8b33752be7950b66bf0007e282eae3d13502f445.tar.gz
slight scm_procedure_p, scm_i_procedure_arity refactor
* libguile/procs.c (scm_procedure_p): * libguile/procprop.c (scm_i_procedure_arity): Refactor.
-rw-r--r--libguile/procprop.c21
-rw-r--r--libguile/procs.c19
2 files changed, 13 insertions, 27 deletions
diff --git a/libguile/procprop.c b/libguile/procprop.c
index 8d5b1623d..2ad941d6a 100644
--- a/libguile/procprop.c
+++ b/libguile/procprop.c
@@ -48,23 +48,20 @@ scm_i_procedure_arity (SCM proc, int *req, int *opt, int *rest)
{
while (!SCM_PROGRAM_P (proc))
{
- if (SCM_IMP (proc))
- return 0;
- switch (SCM_TYP7 (proc))
+ if (SCM_STRUCTP (proc))
{
- case scm_tc7_smob:
- if (!SCM_SMOB_APPLICABLE_P (proc))
- return 0;
- proc = scm_i_smob_apply_trampoline (proc);
- break;
- case scm_tcs_struct:
if (!SCM_STRUCT_APPLICABLE_P (proc))
return 0;
proc = SCM_STRUCT_PROCEDURE (proc);
- break;
- default:
- return 0;
}
+ else if (SCM_HAS_TYP7 (proc, scm_tc7_smob))
+ {
+ if (!SCM_SMOB_APPLICABLE_P (proc))
+ return 0;
+ proc = scm_i_smob_apply_trampoline (proc);
+ }
+ else
+ return 0;
}
return scm_i_program_arity (proc, req, opt, rest);
}
diff --git a/libguile/procs.c b/libguile/procs.c
index 0018dc9a8..7a2f491d9 100644
--- a/libguile/procs.c
+++ b/libguile/procs.c
@@ -46,21 +46,10 @@ SCM_DEFINE (scm_procedure_p, "procedure?", 1, 0, 0,
"Return @code{#t} if @var{obj} is a procedure.")
#define FUNC_NAME s_scm_procedure_p
{
- if (SCM_NIMP (obj))
- switch (SCM_TYP7 (obj))
- {
- case scm_tcs_struct:
- if (!((SCM_OBJ_CLASS_FLAGS (obj) & SCM_CLASSF_PURE_GENERIC)
- || SCM_STRUCT_APPLICABLE_P (obj)))
- break;
- case scm_tc7_program:
- return SCM_BOOL_T;
- case scm_tc7_smob:
- return scm_from_bool (SCM_SMOB_DESCRIPTOR (obj).apply);
- default:
- return SCM_BOOL_F;
- }
- return SCM_BOOL_F;
+ return scm_from_bool (SCM_PROGRAM_P (obj)
+ || (SCM_STRUCTP (obj) && SCM_STRUCT_APPLICABLE_P (obj))
+ || (SCM_HAS_TYP7 (obj, scm_tc7_smob)
+ && SCM_SMOB_APPLICABLE_P (obj)));
}
#undef FUNC_NAME