anchor.diff:  ;;; compiler macros
   
   (eval-when (:compile-toplevel :load-toplevel :execute)
  -  (defvar *js-compiler-macros* (make-hash-table)
  -    "*JS-COMPILER-MACROS* is a hash-table containing the functions corresponding
  +  (defvar *js-compiler-macros* (make-hash-table :test 'equal)
  +        "*JS-COMPILER-MACROS* is a hash-table containing the functions corresponding
   to javascript special forms, indexed by their name. Javascript special
   forms are compiler macros for JS expressions."))
   
  
positive.code: 
  (defmacro defjsmacro (name args &rest body)
    "Define a javascript macro, and store it in the toplevel macro environment."
    (when (gethash name *js-compiler-macros*)
      (warn "Redefining compiler macro ~S" name)
      (remhash name *js-compiler-macros*))
    (let ((lambda-list (gensym)))
      `(setf (gethash ',name *js-macro-toplevel*)
        #'(lambda (&rest ,lambda-list)
  	  (destructuring-bind ,args ,lambda-list ,@body)))))
    
  
negative.code:   "Lookup the macro NAME in the current macro expansion
  environment. Returns the macro and the parent macro environment of
  this macro."
    (unless (symbolp name)
      (return-from lookup-macro nil))
    (do ((env *js-macro-env* (cdr env)))
        ((null env) nil)
      (let ((val (gethash (symbol-name name) (car env))))
        (when val
  	(return-from lookup-macro
  	  (values val (or (cdr env)
  