anchor.diff:  	 (apply (proc ,func) js-user::this ,args2)))))
   
   (defmacro !with (lex-chain obj body)
  -  `(let* #+nil ((*object-env-stack* (cons ,obj *object-env-stack*))
  -	  (-object-env-stack- *object-env-stack*))
  -	 ((-object-env-stack- (cons ,obj -object-env-stack-)))
  -     (macrolet ((!name (name)
  +  `(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))))
  
positive.code: 		  `(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))))))))
  
  ;;todo: adhoc solution -- Function object should be added
  (defparameter function.prototype (make-instance 'native-hash))
  
negative.code:       (cond
  	((string-equal name "this") 'js-user::this) ;this is always bound
  	((string-equal name "arguments") '(!arguments))
  	((string-equal name "eval") '(!eval-in-lexenv))
  	(t (multiple-value-bind (n found) (count-lookups lexchain 0)
  	     `(,@(build-tree n found))))))))
  
  