anchor.diff:              (ps:create
                ,@(when (car params)
                        `(:render (lambda ()
  -                                 ,(%add-thisref-binding (car params)
  -                                                        :lambda-wrap nil))))
  +                                 ,@(%add-thisref-binding  (list (car params))))))
                ,@(when name
                        `(#:display-name ',name))
                ,@(loop for (k v) on (cdr params) by #'cddr
                     collect k
  -                  collect (%add-thisref-binding v))))))
  +                  collect (%add-thisref-lambda v))))))
       `(macrolet
            ((cl-react:prop (&rest params)
               `(chain %thisref #:props ,@params))
  
positive.code: handled differently."
    (let*
        ((constructors
          (remove-if-not (lambda (x) (and (listp x) (string-equal (car x) 'constructor))) params))
         (others
          (remove-if (lambda (x) (and (listp x) (string-equal (car x) 'constructor))) params))
         (constructor
          (case (length constructors)
            (0 `(defun ,name ()))
            (1 `(defun ,name ,@(cddr constructors)))
            (otherwise (error "Component can't have more than one constructor")))))
      `(macrolet
  
negative.code:   (some (alexandria:rcurry #'member '(prop state set-state %thisref))
          (alexandria:flatten code)))
  
  (defun %add-thisref-binding (code)
    "Wrap code in a rebinding of 'this', so that macros in the code can find it even when it has been stomped. Do so only if the code uses those macros."
    (if (%needs-thisref-p code)
        `((let ((%thisref this))
            ,@code))
        code))
  
  (defun %add-thisref-lambda (code)
    (if (%needs-thisref-p code)
        (let ((args (gensym)))
          `(lambda (&rest ,args)
             (let ((%thisref this))
               (apply ,code ,args))))
        code))
  
  (defpsmacro cl-react:def-component (name &body params)
  