| 
					
				 | 
			
			
				@@ -901,31 +901,25 @@ smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.method({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 selector: "interpretBlockNode:continue:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 category: 'interpreting', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-fn: function (aNode, aBlock) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fn: function (aNode,aBlock){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-function $AIContext(){return smalltalk.AIContext||(typeof AIContext=="undefined"?nil:AIContext)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return smalltalk.withContext(function($ctx1) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-var $1,$2,$3,$4; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var $1,$2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 _st(self)._continue_value_(aBlock,(function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-var blockResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 return smalltalk.withContext(function($ctx2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$1=_st($AIContext())._new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-_st($1)._outerContext_(_st(self)._context()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$2=_st($1)._yourself(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-_st(self)._context_($2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$3=self; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-_st($3)._interpret_(_st(_st(aNode)._nodes())._first()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-$4=_st($3)._result(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-blockResult=$4; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-blockResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-_st(self)._context_(_st(_st(self)._context())._outerContext()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return blockResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}, function($ctx2) {$ctx2.fillBlock({blockResult:blockResult},$ctx1)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-return self}, function($ctx1) {$ctx1.fill(self,"interpretBlockNode:continue:",{aNode:aNode,aBlock:aBlock},smalltalk.ASTInterpreter)});}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return _st(self)._withBlockContext_((function(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx3) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$1=self; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+_st($1)._interpret_(_st(_st(aNode)._nodes())._first()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$2=_st($1)._result(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return $2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx3) {$ctx3.fillBlock({},$ctx1)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx2) {$ctx2.fillBlock({},$ctx1)})})); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return self}, function($ctx1) {$ctx1.fill(self,"interpretBlockNode:continue:",{aNode:aNode,aBlock:aBlock},smalltalk.ASTInterpreter)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 args: ["aNode", "aBlock"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-source: "interpretBlockNode: aNode continue: aBlock\x0a\x09self\x0a\x09\x09continue: aBlock\x0a\x09\x09value: [ \x0a\x09\x09\x09| blockResult |\x0a\x09\x09\x09\x0a\x09\x09\x09self context: (AIContext new\x0a\x09\x09\x09\x09outerContext: self context;\x0a\x09\x09\x09\x09yourself).\x0a\x09\x09\x09\x0a\x09\x09\x09blockResult := self interpret: aNode nodes first; result.\x0a\x09\x09\x09\x0a\x09\x09\x09self context: self context outerContext.\x0a\x09\x09\x09blockResult ]", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-messageSends: ["continue:value:", "context:", "outerContext:", "context", "new", "yourself", "interpret:", "first", "nodes", "result", "outerContext"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-referencedClasses: ["AIContext"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "interpretBlockNode: aNode continue: aBlock\x0a\x09self\x0a\x09\x09continue: aBlock\x0a\x09\x09value: [ \x0a\x09\x09\x09self withBlockContext: [ \x0a\x09\x09\x09\x09self interpret: aNode nodes first; result ] ]", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: ["continue:value:", "withBlockContext:", "interpret:", "first", "nodes", "result"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.ASTInterpreter); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1275,6 +1269,33 @@ referencedClasses: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 }), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.ASTInterpreter); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.addMethod( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+"_withBlockContext_", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.method({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+selector: "withBlockContext:", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+category: 'private', 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+fn: function (aBlock){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var self=this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var blockResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+function $AIContext(){return smalltalk.AIContext||(typeof AIContext=="undefined"?nil:AIContext)} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return smalltalk.withContext(function($ctx1) {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+var $1,$2,$3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$1=_st($AIContext())._new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+_st($1)._outerContext_(_st(self)._context()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$2=_st($1)._yourself(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+_st(self)._context_($2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+blockResult=_st(aBlock)._value(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+_st(self)._context_(_st(_st(self)._context())._outerContext()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+$3=blockResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+return $3; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}, function($ctx1) {$ctx1.fill(self,"withBlockContext:",{aBlock:aBlock,blockResult:blockResult},smalltalk.ASTInterpreter)})}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+args: ["aBlock"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+source: "withBlockContext: aBlock\x0a\x09\x22Evaluate aBlock with a BlockContext:\x0a\x09- a context is pushed before aBlock evaluation.\x0a\x09- the context is poped after aBlock evaluation\x0a\x09- the result of aBlock evaluation is answered\x22\x0a\x09\x0a\x09| blockResult |\x0a\x09\x09\x09\x0a\x09self context: (AIContext new\x0a\x09\x09outerContext: self context;\x0a\x09\x09yourself).\x0a\x09\x0a\x09blockResult := aBlock value.\x0a\x09\x0a\x09self context: self context outerContext.\x0a\x09^ blockResult", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+messageSends: ["context:", "outerContext:", "context", "new", "yourself", "value", "outerContext"], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+referencedClasses: ["AIContext"] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+smalltalk.ASTInterpreter); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.addClass('ASTSteppingInterpreter', smalltalk.ASTInterpreter, ['continuation', 'nextNode'], 'Compiler-Interpreter'); 
			 |