|  | @@ -315,14 +315,19 @@ function Smalltalk(){
 | 
											
												
													
														|  |  	smalltalk.Error._signal_(receiver + ' is not a Jtalk object and "' + jsSelector + '" is undefined')
 |  |  	smalltalk.Error._signal_(receiver + ' is not a Jtalk object and "' + jsSelector + '" is undefined')
 | 
											
												
													
														|  |      };
 |  |      };
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    /* Reuse old contexts stored in oldContexts */
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    st.oldContexts = [];
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  	
 |  |  	
 | 
											
												
													
														|  |      /* Handle thisContext pseudo variable */
 |  |      /* Handle thisContext pseudo variable */
 | 
											
												
													
														|  |      
 |  |      
 | 
											
												
													
														|  |      pushContext = function(receiver, selector, temps) {
 |  |      pushContext = function(receiver, selector, temps) {
 | 
											
												
													
														|  |  	if(thisContext) {
 |  |  	if(thisContext) {
 | 
											
												
													
														|  | -	    return thisContext = thisContext.newContext({receiver: receiver, selector: selector, temps: temps});
 |  | 
 | 
											
												
													
														|  | 
 |  | +	    return thisContext = thisContext.newContext(receiver, selector, temps);
 | 
											
												
													
														|  |  	} else {
 |  |  	} else {
 | 
											
												
													
														|  | -	    return thisContext = new SmalltalkMethodContext({receiver: receiver, selector: selector, temps: temps});
 |  | 
 | 
											
												
													
														|  | 
 |  | +	    return thisContext = new SmalltalkMethodContext(receiver, selector, temps);
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |      };
 |  |      };
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -395,21 +400,29 @@ function Smalltalk(){
 | 
											
												
													
														|  |      st.setDevelopmentMode();
 |  |      st.setDevelopmentMode();
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -function SmalltalkMethodContext(spec) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +function SmalltalkMethodContext(receiver, selector, temps, home) {
 | 
											
												
													
														|  |      var that = this;
 |  |      var that = this;
 | 
											
												
													
														|  | -    spec = spec || {};
 |  | 
 | 
											
												
													
														|  | -    that.homeContext = spec.homeContext;
 |  | 
 | 
											
												
													
														|  | -    that.selector = spec.selector;
 |  | 
 | 
											
												
													
														|  | -    that.receiver = spec.receiver;
 |  | 
 | 
											
												
													
														|  | -    that.temps = spec.temps || {};
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    that.newContext = function(spec) {
 |  | 
 | 
											
												
													
														|  | -	spec = spec || {};
 |  | 
 | 
											
												
													
														|  | -	return new SmalltalkMethodContext({homeContext: that, receiver: spec.receiver, selector: spec.selector, temps: spec.temps});
 |  | 
 | 
											
												
													
														|  | 
 |  | +    that.receiver = receiver;
 | 
											
												
													
														|  | 
 |  | +    that.selector = selector;
 | 
											
												
													
														|  | 
 |  | +    that.temps = temps || {};
 | 
											
												
													
														|  | 
 |  | +    that.homeContext = home;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    that.newContext = function(receiver, selector, temps) {
 | 
											
												
													
														|  | 
 |  | +	var c = smalltalk.oldContexts.pop();
 | 
											
												
													
														|  | 
 |  | +	if(c) {
 | 
											
												
													
														|  | 
 |  | +	    c.homeContext = that;
 | 
											
												
													
														|  | 
 |  | +	    c.receiver = receiver;
 | 
											
												
													
														|  | 
 |  | +	    c.selector = selector;
 | 
											
												
													
														|  | 
 |  | +	    c.temps = temps || {};
 | 
											
												
													
														|  | 
 |  | +	} else {
 | 
											
												
													
														|  | 
 |  | +	    c = new SmalltalkMethodContext(receiver, selector, temps, that);
 | 
											
												
													
														|  | 
 |  | +	}
 | 
											
												
													
														|  | 
 |  | +	return c;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      that.removeYourself = function() {
 |  |      that.removeYourself = function() {
 | 
											
												
													
														|  |  	thisContext = that.homeContext;
 |  |  	thisContext = that.homeContext;
 | 
											
												
													
														|  | 
 |  | +	smalltalk.oldContexts.push(that);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -419,7 +432,6 @@ var nil = new SmalltalkNil();
 | 
											
												
													
														|  |  var smalltalk = new Smalltalk();
 |  |  var smalltalk = new Smalltalk();
 | 
											
												
													
														|  |  var thisContext = undefined;
 |  |  var thisContext = undefined;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  /* Utilities */
 |  |  /* Utilities */
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  Array.prototype.remove = function(s){
 |  |  Array.prototype.remove = function(s){
 |