home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / guile / 1.8 / lang / elisp / variables.scm < prev   
Encoding:
Text File  |  2008-12-17  |  2.0 KB  |  43 lines

  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.