anchor.diff:  ;;; structures. A reference to a LEAF is indicated by a REF node. This
   ;;; allows us to easily substitute one for the other without actually
   ;;; hacking the flow graph.
  +;;; NOTE: LEAF is the concrete (genuine) variables, and REF only acts like
  +;;; a pointer, so we don't need to change nodes, only change LEAF underlying
  +;;; REF nodes.
   (defstruct leaf
  +  ;; FIXME: JS is different! There will be global and local variables,
  +  ;; constants, local functions, lambdas and global functions.
  +  ;;
     ;; the name of LEAF as it appears in the source, e.g. 'FOO or '(SETF
     ;; FOO) or 'N or '*Z*, or the special .ANONYMOUS. value if there's
     ;; no name for this thing in the source (as can happen for
  
positive.code:   ;;
    ;; The value of this slot in can affect ordinary runtime behavior,
    ;; e.g. of special variables and known functions, not just debugging.
    ;;
    ;; See also the LEAF-DEBUG-NAME function and the
    ;; FUNCTIONAL-%DEBUG-NAME slot.
    (source-name nil
     ;; I guess we state the type this way to avoid calling
     ;; LEGAL-FUN-NAME-P unless absolutely necessary,
  
negative.code:   ;;
    ;; E.g. for the function which implements (DEFUN FOO ...), we could
    ;; have
    ;;   SOURCE-NAME=FOO
    ;;   DEBUG-NAME=NIL
    ;; for the function which implements the top level form
    ;; (IN-PACKAGE :FOO) we could have
    ;;   SOURCE-NAME=NIL
    ;;   DEBUG-NAME=(TOP-LEVEL-FORM (IN-PACKAGE :FOO)
    ;; for the function which implements FOO in
    ;;   (DEFUN BAR (...) (FLET ((FOO (...) ...)) ...))
    ;; we could have
    ;;   SOURCE-NAME=FOO
    ;;   DEBUG-NAME=(FLET FOO)
    ;; and for the function which implements FOO in
    ;;   (DEFMACRO FOO (...) ...)
    ;; we could have
    ;;   SOURCE-NAME=FOO (or maybe .ANONYMOUS.?)
    ;;   DEBUG-NAME=(MACRO-FUNCTION FOO)
    (debug-name nil
  	      :type (or null (not (satisfies legal-fun-name-p)))
  	      :read-only t)
  