diff options
author | Andy Wingo <wingo@pobox.com> | 2011-12-01 23:31:50 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2011-12-01 23:31:50 +0100 |
commit | b2208d2e987759270c712e35c8164394a47a52aa (patch) | |
tree | 1edd39e74a266fc53c075d328696e8fbf33eba5b /libguile/procprop.c | |
parent | 3dc9f41900a0e9f915da3aa1eea6e0fae829c40d (diff) | |
parent | 738c899e4c1ab9d25cfbcd1010f34e0cce400bca (diff) | |
download | guile-b2208d2e987759270c712e35c8164394a47a52aa.tar.gz |
Merge remote-tracking branch 'origin/stable-2.0'
Conflicts:
configure.ac
libguile/fluids.c
libguile/gc.c
libguile/gc.h
libguile/objcodes.c
libguile/procprop.c
libguile/vm.c
module/ice-9/psyntax-pp.scm
module/ice-9/psyntax.scm
Diffstat (limited to 'libguile/procprop.c')
-rw-r--r-- | libguile/procprop.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/libguile/procprop.c b/libguile/procprop.c index 2ad941d6a..93ee7f033 100644 --- a/libguile/procprop.c +++ b/libguile/procprop.c @@ -43,9 +43,23 @@ SCM_GLOBAL_SYMBOL (scm_sym_name, "name"); static SCM overrides; +static SCM arity_overrides; + int scm_i_procedure_arity (SCM proc, int *req, int *opt, int *rest) { + SCM o; + + o = scm_weak_table_refq (arity_overrides, proc, SCM_BOOL_F); + + if (scm_is_true (o)) + { + *req = scm_to_int (scm_car (o)); + *opt = scm_to_int (scm_cadr (o)); + *rest = scm_is_true (scm_caddr (o)); + return 1; + } + while (!SCM_PROGRAM_P (proc)) { if (SCM_STRUCTP (proc)) @@ -63,9 +77,27 @@ scm_i_procedure_arity (SCM proc, int *req, int *opt, int *rest) else return 0; } + return scm_i_program_arity (proc, req, opt, rest); } +SCM_DEFINE (scm_set_procedure_minimum_arity_x, "set-procedure-minimum-arity!", + 4, 0, 0, (SCM proc, SCM req, SCM opt, SCM rest), + "") +#define FUNC_NAME s_scm_set_procedure_minimum_arity_x +{ + int t SCM_UNUSED; + + SCM_VALIDATE_PROC (1, proc); + SCM_VALIDATE_INT_COPY (2, req, t); + SCM_VALIDATE_INT_COPY (3, opt, t); + SCM_VALIDATE_BOOL (4, rest); + + scm_weak_table_putq_x (arity_overrides, proc, scm_list_3 (req, opt, rest)); + return SCM_UNDEFINED; +} +#undef FUNC_NAME + SCM_DEFINE (scm_procedure_minimum_arity, "procedure-minimum-arity", 1, 0, 0, (SCM proc), "Return the \"minimum arity\" of a procedure.\n\n" @@ -171,6 +203,7 @@ void scm_init_procprop () { overrides = scm_c_make_weak_table (0, SCM_WEAK_TABLE_KIND_KEY); + arity_overrides = scm_c_make_weak_table (0, SCM_WEAK_TABLE_KIND_KEY); #include "libguile/procprop.x" } |