anchor.diff:  		  `(setf ,(->usersym name)
   			 (!function ,lex-chain ,name ,args ,locals ,body)))
   		(!return (ret) `,`(return-from ,',blockname ,(or ret :undefined))))
  -       (let (#+nil (-object-env-stack- *object-env-stack*))
  -	 (lambda (js-user::this
  -		  &optional ,@(mapcar (lambda (arg)
  -					`(,(->usersym arg) :undefined)) args)
  -		  &rest ,additional-args)
  -	   (let (js-user::arguments)
  -	     (let (,@(mapcar (lambda (var)
  -			       (list (->usersym var) :undefined)) locals))
  -	       (block ,blockname ,@body :undefined))))))))
  +       (lambda (js-user::this
  +		&optional ,@(mapcar (lambda (arg)
  +				      `(,(->usersym arg) :undefined)) args)
  +		&rest ,additional-args)
  +	 (let (js-user::arguments)
  +	   (let (,@(mapcar (lambda (var)
  +			     (list (->usersym var) :undefined)) locals))
  +	     (block ,blockname ,@body :undefined)))))))
   
   ;;todo: adhoc solution -- Function object should be added
   (defparameter function.prototype (make-instance 'native-hash))
  
positive.code: 		  `(or js-user::arguments
  		       (setf js-user::arguments
  			     (make-args ,',args ,',additional-args))))
  		(!evalx ()
  		  `(!function nil nil (str) nil
  			      ((let ((form (process-ast (parse-js-string str) ',',lex-chain)))
  				 (!return
  				  (eval (eval-in-lexenv ,',lex-chain -object-env-stack- form)))))))
  		(!name (name)
  		  (macroexpand `(lookup-in-lexchain ,name ,',lex-chain)))
  		(!setf-name (name val)
  
negative.code: 	 (apply (proc ,func) js-user::this ,args2)))))
  
  (defmacro !with (lex-chain obj body)
    `(let* ((-object-env-stack- (cons ,obj -object-env-stack-)))
       (macrolet ((!eval-in-lexenv ()
  		  (macroexpand `(eval-function ,',lex-chain)))
  		(!name (name)
  		  (macroexpand `(lookup-in-lexchain ,name ,',lex-chain)))
  		(!setf-name (name val)
  		  (macroexpand `(set-in-lexchain ,name ,val ,',lex-chain))))
  