anchor.diff:    (write-string " }"))
   
   (defprinter js-slot-value (obj slot)
  -  (if (and (listp obj) (member (car obj) '(js-block js-expression-if)))
  +  (if (and (listp obj) (member (car obj) '(js-expression-if)))
         (parenthesize-print obj)
         (ps-print obj))
     (if (and (listp slot) (eql 'script-quote (car slot)))
  
positive.code: (defun expression-precedence (expr)
    (if (consp expr)
        (case (car expr)
          (js-block (if (= (length (cdr expr)) 1)
                        (expression-precedence (first (cdr expr)))
                        (op-precedence 'comma)))
          (js-expression-if (op-precedence 'js-expression-if))
          (js-assign (op-precedence '=))
          (operator (op-precedence (second expr)))
  
negative.code: (defprinter js-defun (name args body)
    (print-fun-def name args body))
  
  (defun print-fun-def (name args body-block)
    (format *ps-output-stream* "function ~:[~;~A~](" name (js-translate-symbol name))
    (loop for (arg . rest) on args
          with after = ", "
          unless rest do (setf after "")
          do (progn (write-string (js-translate-symbol arg))
                    (write-string after))
          finally (write-string ") "))
    (ps-print body-block))
  
  ;;; object creation
  (defprinter js-object (slot-defs)
  