diff options
author | Andy Wingo <wingo@pobox.com> | 2011-10-24 18:29:45 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2011-10-24 19:01:12 +0200 |
commit | 8b33752be7950b66bf0007e282eae3d13502f445 (patch) | |
tree | 2997cf207d1750b9644620379409328a9de71090 | |
parent | cf4c26625b901e3550c80bbf53c13189582f57a6 (diff) | |
download | guile-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.c | 21 | ||||
-rw-r--r-- | libguile/procs.c | 19 |
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 |