diff options
author | Andy Wingo <wingo@pobox.com> | 2010-05-16 12:21:27 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2010-05-16 12:24:08 +0200 |
commit | 311fbeb7c3d13e863936eb9cdfbc5e6278e832e3 (patch) | |
tree | f33b2eb238a3604150fa8576ad862ae437e25361 /libguile/memoize.c | |
parent | 12922f0dd1e327e6f0c5693619e1e6d600e6a866 (diff) | |
download | guile-311fbeb7c3d13e863936eb9cdfbc5e6278e832e3.tar.gz |
scm_memoize_lambda update
* libguile/memoize.h:
* libguile/memoize.c (scm_memoize_lambda): Update to memoize
"full-arity" lambdas.
Diffstat (limited to 'libguile/memoize.c')
-rw-r--r-- | libguile/memoize.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/libguile/memoize.c b/libguile/memoize.c index 544de7cef..af529030d 100644 --- a/libguile/memoize.c +++ b/libguile/memoize.c @@ -1378,13 +1378,30 @@ SCM_DEFINE (scm_memoize_if, "memoize-if", 3, 0, 0, } #undef FUNC_NAME -SCM_DEFINE (scm_memoize_lambda, "memoize-lambda", 3, 0, 0, - (SCM nreq, SCM rest, SCM body), "") +SCM_DEFINE (scm_memoize_lambda, "memoize-lambda", 3, 4, 0, + (SCM body, SCM nreq, SCM rest, SCM nopt, SCM kw, SCM inits, SCM alt), "") #define FUNC_NAME s_scm_memoize_lambda { - SCM_VALIDATE_BOOL (2, rest); - SCM_VALIDATE_MEMOIZED (3, body); - return MAKMEMO_LAMBDA (body, REST_ARITY (scm_to_uint16 (nreq), rest)); + SCM_VALIDATE_MEMOIZED (1, body); + if (SCM_UNBNDP (nopt)) + { + if (scm_is_true (rest)) + return MAKMEMO_LAMBDA (body, FIXED_ARITY (scm_to_uint16 (nreq))); + else + MAKMEMO_LAMBDA (body, REST_ARITY (scm_to_uint16 (nreq), rest)); + } + if (SCM_UNBNDP (kw)) + kw = SCM_BOOL_F; + if (SCM_UNBNDP (inits)) + inits = SCM_EOL; + if (SCM_UNBNDP (alt)) + alt = SCM_BOOL_F; + else + SCM_VALIDATE_MEMOIZED (7, alt); + return MAKMEMO_LAMBDA (body, + FULL_ARITY (scm_to_uint16 (nreq), rest, + scm_to_uint16 (nopt), kw, inits, alt)); + } #undef FUNC_NAME |