anchor.diff:       ,@(mapcar (lambda (op)
   		 (if (symbolp op)
   		     `(setf (symbol-function ',(js!intern op)) (function ,op))
  -		     `(setf (symbol-function ',(js!intern (first op)) (function ,(second op))))))
  +		     `(setf (symbol-function ',(js!intern (first op))) (function ,(second op)))))
   	     ops)))
   
  -(js!binary-operators + - * /)
  +(js!binary-operators
  + + * /
  + (== equalp) < > <= >= (!= /=))
  +
  +(defun js!- (ls rs)
  +  (declare (fixnum ls rs))
  +  (the fixnum (- ls rs)))
   
   (defmacro js!binary (op-sym ls rs)
     (let ((op (symbol-function op-sym)))
       `(funcall ,op ,ls ,rs)))
  +
  +(defmacro js!if (exp then else)
  +  (let ((rexp (gensym)))
  +    `(let ((,rexp ,exp))
  +       (cond ((not ,rexp) ,else)
  +	     ((and (numberp ,rexp) (zerop ,rexp))
  +	      ,else)
  +	     (t ,then)))))
positive.code:   (let ((ret (gensym)))
      `(let ((,ret (make-instance 'native-hash :prototype (prop ,func "prototype"))))
         (funcall (proc ,func) ,ret ,@args)
         (setf (prop ,ret 'constructor) ,func)
         ,ret)))
  
  (defmacro js!return (ret)
  
negative.code: 		      `,`(prop *global* #+nil this ,name)))
  		(js!assign (op exp val)
  		  (let ((name (find-name exp)))
  		    (if (funcall ,local-variable-p name)
  			`(setf ,exp ,val)
  			`,`(setf (prop *global* #+nil this ,exp) ,val))))
  		(js!return (ret) `,`(return-from ,',blockname ,ret)))
         (lambda (this &rest ,argument-list)
  	 (declare (dynamic-extent ,argument-list))
  	 #+js-debug (format t "this: ~A~%" this)
  	 (let ((arguments (coerce ,argument-list 'simple-vector))
  	       ,@(mapcar (lambda (var-desc)
  			   (list (->sym (car var-desc))
  