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