evaluator support for case-lambda
authorAndy Wingo <wingo@pobox.com>
Thu, 13 May 2010 19:43:35 +0000 (21:43 +0200)
committerAndy Wingo <wingo@pobox.com>
Thu, 13 May 2010 22:28:39 +0000 (00:28 +0200)
commit7572ee5261f434cf9b8e58126eb6d87c085a596d
tree3ea2ba086038f4e0ee8be0c6edfe82ffd765bad8
parentd8a071fc4e709ee83cd3c7fc935f7ec21375e624
evaluator support for case-lambda

* libguile/memoize.c (patch_case_lambda, scm_m_case_lambda)
  (scm_m_case_lambda_star): Add memoizers for case-lambda and
  case-lambda*.
  (unmemoize): Unmemoize lambdas with multiple arities.

* libguile/eval.c (prepare_boot_closure_env_for_apply):
  (prepare_boot_closure_env_for_eval): Adapt to return both body and
  env, so that case-lambda clauses can be selected appropriately.
  (eval, boot_closure_apply): Adapt callers.

* module/ice-9/eval.scm (make-general-closure): Support multiple
  arities.
libguile/eval.c
libguile/memoize.c
module/ice-9/eval.scm