summaryrefslogtreecommitdiff
path: root/libguile/memoize.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2010-05-16 12:21:27 +0200
committerAndy Wingo <wingo@pobox.com>2010-05-16 12:24:08 +0200
commit311fbeb7c3d13e863936eb9cdfbc5e6278e832e3 (patch)
treef33b2eb238a3604150fa8576ad862ae437e25361 /libguile/memoize.c
parent12922f0dd1e327e6f0c5693619e1e6d600e6a866 (diff)
downloadguile-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.c27
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