eval: Store docstrings for lambdas.
authorLudovic Courtès <ludo@gnu.org>
Wed, 28 Nov 2012 15:42:49 +0000 (16:42 +0100)
committerLudovic Courtès <ludo@gnu.org>
Wed, 28 Nov 2012 15:43:59 +0000 (16:43 +0100)
commitc438cd7175540536c3965b4ffea28ae6df7e59e0
treed605cd827451938f46218bb8692d44438cb0ecce
parentfc32c44995dacb2c3f2fb9d1eafec59c44787c32
eval: Store docstrings for lambdas.

Fixes <http://bugs.gnu.org/12173>.
Reported by Ian Price <ianprice90@googlemail.com>.

* libguile/memoize.c (MAKMEMO_LAMBDA): New `docstring' parameter.  Add
  it as the second argument of `SCM_M_LAMBDA'.  Update caller.
  (memoize)[SCM_M_LAMBDA]: Extract docstring from EXP; when `memoize'
  returns, add the docstring to the lambda's arguments.
  (unmemoize)[SCM_M_LAMBDA]: Adjust to new argument layout of
  `SCM_M_LAMBDA'.
* libguile/eval.c (BOOT_CLOSURE_NUM_REQUIRED_ARGS,
  BOOT_CLOSURE_HAS_REST_ARGS, BOOT_CLOSURE_IS_REST,
  BOOT_CLOSURE_PARSE_FULL): Adjust to new argument layout of
  `SCM_M_LAMBDA'.
* module/ice-9/eval.scm (primitive-eval)[make-general-closure]:
  Likewise.
  [eval]: When EXP is a lambda, match its docstring; when the docstring
  is not #f, add it to the closures procedure properties.
* test-suite/tests/eval.test ("docstrings"): New test prefix.

* libguile/procs.c (sym_documentation): Rename to...
  (scm_sym_documentation): ... this.  Make it global.
* libguile/procs.h (scm_sym_documentation): New declaration.
libguile/eval.c
libguile/memoize.c
libguile/procs.c
libguile/procs.h
module/ice-9/eval.scm
test-suite/tests/eval.test