anchor.diff:             (t (,cmp ls rs)))))
   
   (stdobject "Math"
  +  (mth "toString" () "[object Math]")
  +
     (pr "E" (exp 1))
     (pr "LN2" (log 2))
     (pr "LN10" (log 10))
  
positive.code:   :object)
  
  (stdproto :object
    (mth "toString" () (format nil "[object ~a]" (obj-class this)))
    (mth "toLocaleString" () (jsmethod this "toString"))
    (mth "valueOf" () this)
  
  
negative.code:         (and (ppcre:scan (reobj-scanner this) (to-string str)) t)
          nil)))
  
  (stdconstructor "Error" (message)
    (if (eq this *global*)
        (js-new -self- message)
        (unless (eq message :undefined)
          (cached-set this "message" message)))
    :error)
  
  (stdproto :error
    (pr "name" "Error" :enum)
    (pr "message" "Error" :enum)
    (mth "toString" ()
      (concatenate 'string "Error: " (cached-lookup this "message"))))
  
  (macrolet ((deferror (name)
               `(stdconstructor ,name (message)
                  (if (eq this *global*)
                      (js-new -self- message)
                      (unless (eq message :undefined)
                        (cached-set this "message" message)))
                  (:clone :error))))
    (deferror "TypeError")
    (deferror "SyntaxError")
    (deferror "TypeError")
    (deferror "URIError"))
  
  (defmacro with-overflow (&body body)
    `(handler-case (progn ,@body)
       (floating-point-overflow () (infinity)) ;; TODO -infinity?
  