|  | @@ -309,23 +309,9 @@ function Smalltalk(){
 | 
	
		
			
				|  |  |  		method.jsSelector = jsSelector;
 | 
	
		
			
				|  |  |  	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	/* Handles Smalltalk message send. Automatically converts undefined to the nil object.
 | 
	
		
			
				|  |  | -	   If the receiver does not understand the selector, call its #doesNotUnderstand: method */
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	sendWithoutContext = function(receiver, selector, args, klass) {
 | 
	
		
			
				|  |  | -		if(receiver == null) {
 | 
	
		
			
				|  |  | -			receiver = nil;
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		var imp = klass ? klass.fn.prototype[selector] : receiver.klass && receiver[selector];
 | 
	
		
			
				|  |  | -		return imp
 | 
	
		
			
				|  |  | -			? imp.apply(receiver, args)
 | 
	
		
			
				|  |  | -			: messageNotUnderstood(receiver, selector, args);
 | 
	
		
			
				|  |  | -	};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  	/* Handles unhandled errors during message sends */
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	sendWithContext = function(receiver, selector, args, klass) {
 | 
	
		
			
				|  |  | +	st.send = function(receiver, selector, args, klass) {
 | 
	
		
			
				|  |  |  		if(st.thisContext) {
 | 
	
		
			
				|  |  |  			return withContextSend(receiver, selector, args, klass);
 | 
	
		
			
				|  |  |  		} else {
 | 
	
	
		
			
				|  | @@ -342,25 +328,21 @@ function Smalltalk(){
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	/* Same as sendWithoutContext but creates a methodContext. */
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  	function withContextSend(receiver, selector, args, klass) {
 | 
	
		
			
				|  |  | -		var call, context, imp;
 | 
	
		
			
				|  |  | +		var call, imp;
 | 
	
		
			
				|  |  |  		if(receiver == null) {
 | 
	
		
			
				|  |  |  			receiver = nil;
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		imp = klass ? klass.fn.prototype[selector] : receiver.klass && receiver[selector];
 | 
	
		
			
				|  |  |  		if(imp) {
 | 
	
		
			
				|  |  | -			context = pushContext(receiver, selector, args);
 | 
	
		
			
				|  |  | +			pushContext(receiver, selector, args);
 | 
	
		
			
				|  |  |  			call = imp.apply(receiver, args);
 | 
	
		
			
				|  |  | -			st.thisContext = context.homeContext;
 | 
	
		
			
				|  |  | -			context.homeContext = undefined;
 | 
	
		
			
				|  |  | -			st.oldContext = context;
 | 
	
		
			
				|  |  | +            popContext();
 | 
	
		
			
				|  |  |  			return call;
 | 
	
		
			
				|  |  |  		} else {
 | 
	
		
			
				|  |  |  			return messageNotUnderstood(receiver, selector, args);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* Handles Smalltalk errors. Triggers the registered ErrorHandler 
 | 
	
		
			
				|  |  |  	   (See the Smalltalk class ErrorHandler and its subclasses */
 | 
	
	
		
			
				|  | @@ -368,7 +350,7 @@ function Smalltalk(){
 | 
	
		
			
				|  |  |  	function handleError(error) {
 | 
	
		
			
				|  |  |  		st.thisContext = undefined;
 | 
	
		
			
				|  |  |  		smalltalk.ErrorHandler._current()._handleError_(error);
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* Handles #dnu: *and* JavaScript method calls.
 | 
	
		
			
				|  |  |  	   if the receiver has no klass, we consider it a JS object (outside of the
 | 
	
	
		
			
				|  | @@ -434,7 +416,7 @@ function Smalltalk(){
 | 
	
		
			
				|  |  |  		}/* else { // this is the default
 | 
	
		
			
				|  |  |  			return undefined;
 | 
	
		
			
				|  |  |  		}*/
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	function pushContext(receiver, selector, temps) {
 | 
	
		
			
				|  |  |  		var c = st.oldContext, tc = st.thisContext;
 | 
	
	
		
			
				|  | @@ -447,7 +429,14 @@ function Smalltalk(){
 | 
	
		
			
				|  |  |  		c.selector = selector;
 | 
	
		
			
				|  |  |  		c.temps = temps || {};
 | 
	
		
			
				|  |  |  		return st.thisContext = c;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    function popContext() {
 | 
	
		
			
				|  |  | +        var context = st.thisContext;
 | 
	
		
			
				|  |  | +        st.thisContext = context.homeContext;
 | 
	
		
			
				|  |  | +		context.homeContext = undefined;
 | 
	
		
			
				|  |  | +		st.oldContext = context;
 | 
	
		
			
				|  |  | +    };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* Convert a string to a valid smalltalk selector.
 | 
	
		
			
				|  |  |  	   if you modify the following functions, also change String>>asSelector
 | 
	
	
		
			
				|  | @@ -499,25 +488,17 @@ function Smalltalk(){
 | 
	
		
			
				|  |  |  		return object;
 | 
	
		
			
				|  |  |  	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	/* Toggle deployment mode (no context will be handled during message send */
 | 
	
		
			
				|  |  | -	st.setDeploymentMode = function() {
 | 
	
		
			
				|  |  | -		st.send = sendWithoutContext;
 | 
	
		
			
				|  |  | -	};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	st.setDevelopmentMode = function() {
 | 
	
		
			
				|  |  | -		st.send = sendWithContext;
 | 
	
		
			
				|  |  | -	}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	/* Set development mode by default */
 | 
	
		
			
				|  |  | -	st.setDevelopmentMode();
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +	/* Kept for backward compatibility */
 | 
	
		
			
				|  |  | +	st.setDeploymentMode = function() {};
 | 
	
		
			
				|  |  | +	st.setDevelopmentMode = function() {};
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  function SmalltalkMethodContext(receiver, selector, temps, home) {
 | 
	
		
			
				|  |  |  	this.receiver = receiver;
 | 
	
		
			
				|  |  |  	this.selector = selector;
 | 
	
		
			
				|  |  |  	this.temps = temps || {};
 | 
	
		
			
				|  |  |  	this.homeContext = home;
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  SmalltalkMethodContext.prototype.copy = function() {
 | 
	
		
			
				|  |  |  	var home = this.homeContext;
 |