|  | @@ -154,11 +154,11 @@ selector: "visitSendNode:",
 | 
	
		
			
				|  |  |  category: 'visiting',
 | 
	
		
			
				|  |  |  fn: function (aNode) {
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  | -(function($rec){smalltalk.send($rec, "_selector_", [smalltalk.send(aNode, "_selector", [])]);return smalltalk.send($rec, "_with_", [(function(){smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_receiver", [])]);return smalltalk.send(smalltalk.send(aNode, "_arguments", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]);})]);})(smalltalk.send(smalltalk.send(self, "_builder", []), "_send", []));
 | 
	
		
			
				|  |  | +(function($rec){smalltalk.send($rec, "_selector_", [smalltalk.send(aNode, "_selector", [])]);smalltalk.send($rec, "_superSend_", [smalltalk.send(aNode, "_superSend", [])]);return smalltalk.send($rec, "_with_", [(function(){smalltalk.send(self, "_visit_", [smalltalk.send(aNode, "_receiver", [])]);return smalltalk.send(smalltalk.send(aNode, "_arguments", []), "_do_", [(function(each){return smalltalk.send(self, "_visit_", [each]);})]);})]);})(smalltalk.send(smalltalk.send(self, "_builder", []), "_send", []));
 | 
	
		
			
				|  |  |  return self;},
 | 
	
		
			
				|  |  |  args: ["aNode"],
 | 
	
		
			
				|  |  | -source: "visitSendNode: aNode\x0a\x09self builder send\x0a\x09\x09selector: aNode selector;\x0a\x09\x09with: [\x0a\x09\x09\x09self visit: aNode receiver.\x0a\x09\x09\x09(aNode arguments do: [ :each | self visit: each ]) ]",
 | 
	
		
			
				|  |  | -messageSends: ["selector:", "selector", "with:", "visit:", "receiver", "do:", "arguments", "send", "builder"],
 | 
	
		
			
				|  |  | +source: "visitSendNode: aNode\x0a\x09self builder send\x0a\x09\x09selector: aNode selector;\x0a\x09\x09superSend: aNode superSend;\x0a\x09\x09with: [\x0a\x09\x09\x09self visit: aNode receiver.\x0a\x09\x09\x09(aNode arguments do: [ :each | self visit: each ]) ]",
 | 
	
		
			
				|  |  | +messageSends: ["selector:", "selector", "superSend:", "superSend", "with:", "visit:", "receiver", "do:", "arguments", "send", "builder"],
 | 
	
		
			
				|  |  |  referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.IRASTTranslator);
 | 
	
	
		
			
				|  | @@ -678,6 +678,9 @@ smalltalk.IRBuilder);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +smalltalk.addClass('IRInliner', smalltalk.Object, [], 'Compiler-IR');
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  smalltalk.addClass('IRInstruction', smalltalk.Object, ['builder', 'instructions'], 'Compiler-IR');
 | 
	
		
			
				|  |  |  smalltalk.IRInstruction.comment="I am the abstract root class of the IR (intermediate representation) instructions class hierarchy.\x0aThe IR graph is used to emit JavaScript code using a JSStream. "
 | 
	
		
			
				|  |  |  smalltalk.addMethod(
 | 
	
	
		
			
				|  | @@ -2022,6 +2025,26 @@ smalltalk.IRVisitor);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +smalltalk.addClass('IRJSTranslator', smalltalk.IRVisitor, ['stream'], 'Compiler-IR');
 | 
	
		
			
				|  |  | +smalltalk.addMethod(
 | 
	
		
			
				|  |  | +"_initialize",
 | 
	
		
			
				|  |  | +smalltalk.method({
 | 
	
		
			
				|  |  | +selector: "initialize",
 | 
	
		
			
				|  |  | +category: 'initialization',
 | 
	
		
			
				|  |  | +fn: function () {
 | 
	
		
			
				|  |  | +var self=this;
 | 
	
		
			
				|  |  | +smalltalk.send(self, "_initialize", [], smalltalk.IRJSTranslator.superclass || nil);
 | 
	
		
			
				|  |  | +(self['@stream']=smalltalk.send((smalltalk.JSStream || JSStream), "_new", []));
 | 
	
		
			
				|  |  | +return self;},
 | 
	
		
			
				|  |  | +args: [],
 | 
	
		
			
				|  |  | +source: "initialize\x0a\x09super initialize.\x0a\x09stream := JSStream new.",
 | 
	
		
			
				|  |  | +messageSends: ["initialize", "new"],
 | 
	
		
			
				|  |  | +referencedClasses: ["JSStream"]
 | 
	
		
			
				|  |  | +}),
 | 
	
		
			
				|  |  | +smalltalk.IRJSTranslator);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  smalltalk.addClass('JSStream', smalltalk.Object, ['stream'], 'Compiler-IR');
 | 
	
		
			
				|  |  |  smalltalk.addMethod(
 | 
	
		
			
				|  |  |  "_contents",
 | 
	
	
		
			
				|  | @@ -2152,14 +2175,13 @@ var self=this;
 | 
	
		
			
				|  |  |  smalltalk.send(self['@stream'], "_nextPutAll_", ["fn: function("]);
 | 
	
		
			
				|  |  |  smalltalk.send(anArray, "_do_separatedBy_", [(function(each){return smalltalk.send(self['@stream'], "_nextPutAll_", [smalltalk.send(each, "_asVariableName", [])]);}), (function(){return smalltalk.send(self['@stream'], "_nextPut_", [","]);})]);
 | 
	
		
			
				|  |  |  (function($rec){smalltalk.send($rec, "_nextPutAll_", ["){"]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);
 | 
	
		
			
				|  |  | -smalltalk.send(self, "_nextPutVar_", ["$return"]);
 | 
	
		
			
				|  |  |  (function($rec){smalltalk.send($rec, "_nextPutAll_", ["var self=this;"]);return smalltalk.send($rec, "_lf", []);})(self['@stream']);
 | 
	
		
			
				|  |  |  smalltalk.send(aBlock, "_value", []);
 | 
	
		
			
				|  |  | -smalltalk.send(self['@stream'], "_nextPutAll_", ["return $return || self;}"]);
 | 
	
		
			
				|  |  | +smalltalk.send(self['@stream'], "_nextPutAll_", ["return self;}"]);
 | 
	
		
			
				|  |  |  return self;},
 | 
	
		
			
				|  |  |  args: ["aBlock", "anArray"],
 | 
	
		
			
				|  |  | -source: "nextPutFunctionWith: aBlock arguments: anArray\x0a\x09stream nextPutAll: 'fn: function('.\x0a\x09anArray \x0a\x09\x09do: [ :each | stream nextPutAll: each asVariableName ]\x0a\x09\x09separatedBy: [ stream nextPut: ',' ].\x0a\x09stream nextPutAll: '){'; lf.\x0a\x09self nextPutVar: '$return'.\x0a\x09stream nextPutAll: 'var self=this;'; lf.\x0a\x09aBlock value.\x0a\x09stream nextPutAll: 'return $return || self;}'",
 | 
	
		
			
				|  |  | -messageSends: ["nextPutAll:", "do:separatedBy:", "asVariableName", "nextPut:", "lf", "nextPutVar:", "value"],
 | 
	
		
			
				|  |  | +source: "nextPutFunctionWith: aBlock arguments: anArray\x0a\x09stream nextPutAll: 'fn: function('.\x0a\x09anArray \x0a\x09\x09do: [ :each | stream nextPutAll: each asVariableName ]\x0a\x09\x09separatedBy: [ stream nextPut: ',' ].\x0a\x09stream nextPutAll: '){'; lf.\x0a\x09stream nextPutAll: 'var self=this;'; lf.\x0a\x09aBlock value.\x0a\x09stream nextPutAll: 'return self;}'",
 | 
	
		
			
				|  |  | +messageSends: ["nextPutAll:", "do:separatedBy:", "asVariableName", "nextPut:", "lf", "value"],
 | 
	
		
			
				|  |  |  referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 | 
	
		
			
				|  |  |  smalltalk.JSStream);
 | 
	
	
		
			
				|  | @@ -2227,11 +2249,11 @@ selector: "nextPutReturnWith:",
 | 
	
		
			
				|  |  |  category: 'streaming',
 | 
	
		
			
				|  |  |  fn: function (aBlock) {
 | 
	
		
			
				|  |  |  var self=this;
 | 
	
		
			
				|  |  | -smalltalk.send(self['@stream'], "_nextPutAll_", ["$return="]);
 | 
	
		
			
				|  |  | +smalltalk.send(self['@stream'], "_nextPutAll_", ["return "]);
 | 
	
		
			
				|  |  |  smalltalk.send(aBlock, "_value", []);
 | 
	
		
			
				|  |  |  return self;},
 | 
	
		
			
				|  |  |  args: ["aBlock"],
 | 
	
		
			
				|  |  | -source: "nextPutReturnWith: aBlock\x0a\x09stream nextPutAll: '$return='.\x0a\x09aBlock value",
 | 
	
		
			
				|  |  | +source: "nextPutReturnWith: aBlock\x0a\x09stream nextPutAll: 'return '.\x0a\x09aBlock value",
 | 
	
		
			
				|  |  |  messageSends: ["nextPutAll:", "value"],
 | 
	
		
			
				|  |  |  referencedClasses: []
 | 
	
		
			
				|  |  |  }),
 |