1(define-module (lang elisp variables))
2
3;;; The only purpose of this module is to provide a place where the
4;;; variables holding Elisp function definitions can be bound to
5;;; symbols.
6;;;
7;;; This can be useful when looking at unmemoized procedure source
8;;; code for Elisp functions and macros.  Elisp function and macro
9;;; symbols get memoized into variables.  When the unmemoizer tries to
10;;; unmemoize a variables, it does so by looking for a symbol that is
11;;; bound to that variable, starting from the module in which the
12;;; function or macro was defined and then trying the interfaces on
13;;; that module's uses list.  If it can't find any such symbol, it
14;;; returns the symbol '???.
15;;;
16;;; Normally we don't want to bind Elisp function definition variables
17;;; to symbols that are visible from the Elisp evaluation module (lang
18;;; elisp base), because they would pollute the namespace available
19;;; to Elisp variables.  On the other hand, if we are trying to debug
20;;; something, and looking at unmemoized source code, it's far more
21;;; informative if that code has symbols that indicate the Elisp
22;;; function being called than if it just says ??? everywhere.
23;;;
24;;; So we have a compromise, which achieves a reasonable balance of
25;;; correctness (for general operation) and convenience (for
26;;; debugging).
27;;;
28;;; 1. We bind Elisp function definition variables to symbols in this
29;;; module (lang elisp variables).
30;;;
31;;; 2. By default, the Elisp evaluation module (lang elisp base) does
32;;; not use (lang elisp variables), so the Elisp variable namespace
33;;; stays clean.
34;;;
35;;; 3. When debugging, a simple (named-module-use! '(lang elisp base)
36;;; '(lang elisp variables)) makes the function definition symbols
37;;; visible in (lang elisp base) so that the unmemoizer can find
38;;; them, which makes the unmemoized source code much easier to read.
39;;;
40;;; 4. To reduce the effects of namespace pollution even after step 3,
41;;; the symbols that we bind are all prefixed with `<elisp' and
42;;; suffixed with `>'.
43