|  | @@ -2829,30 +2829,66 @@ $globals.ASTInterpreter);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  $core.addMethod(
 | 
	
		
			
				|  |  |  $core.method({
 | 
	
		
			
				|  |  | -selector: "sendMessage:to:superSend:",
 | 
	
		
			
				|  |  | +selector: "sendJavaScript:superMessage:to:",
 | 
	
		
			
				|  |  |  protocol: "private",
 | 
	
		
			
				|  |  |  //>>excludeStart("ide", pragmas.excludeIdeData);
 | 
	
		
			
				|  |  | -args: ["aMessage", "anObject", "aBoolean"],
 | 
	
		
			
				|  |  | -source: "sendMessage: aMessage to: anObject superSend: aBoolean\x0a\x09| method |\x0a\x09\x0a\x09aBoolean ifFalse: [ ^ aMessage sendTo: anObject ].\x0a\x09anObject class superclass ifNil: [ ^ self messageNotUnderstood: aMessage receiver: anObject ].\x0a\x09\x0a\x09method := (self context method methodClass superclass lookupSelector: aMessage selector)\x0a\x09\x09ifNil: [ ^ self messageNotUnderstood: aMessage receiver: anObject ].\x0a\x09\x09\x0a\x09^ method sendTo: anObject arguments: aMessage arguments",
 | 
	
		
			
				|  |  | +args: ["aString", "aMessage", "anObject"],
 | 
	
		
			
				|  |  | +source: "sendJavaScript: aString superMessage: aMessage to: anObject\x0a\x09| methodBlock parent |\x0a\x09\x0a\x09parent := self context method methodClass superPrototype.\x0a\x09parent ifNil: [ ^ self messageNotUnderstood: aMessage receiver: anObject ].\x0a\x09\x0a\x09methodBlock := (parent at: aString)\x0a\x09\x09ifNil: [ ^ self messageNotUnderstood: aMessage receiver: anObject ].\x0a\x09\x09\x0a\x09^ methodBlock applyTo: anObject arguments: aMessage arguments",
 | 
	
		
			
				|  |  |  referencedClasses: [],
 | 
	
		
			
				|  |  |  //>>excludeEnd("ide");
 | 
	
		
			
				|  |  |  pragmas: [],
 | 
	
		
			
				|  |  | -messageSends: ["ifFalse:", "sendTo:", "ifNil:", "superclass", "class", "messageNotUnderstood:receiver:", "lookupSelector:", "methodClass", "method", "context", "selector", "sendTo:arguments:", "arguments"]
 | 
	
		
			
				|  |  | -}, function ($methodClass){ return function (aMessage,anObject,aBoolean){
 | 
	
		
			
				|  |  | +messageSends: ["superPrototype", "methodClass", "method", "context", "ifNil:", "messageNotUnderstood:receiver:", "at:", "applyTo:arguments:", "arguments"]
 | 
	
		
			
				|  |  | +}, function ($methodClass){ return function (aString,aMessage,anObject){
 | 
	
		
			
				|  |  |  var self=this,$self=this;
 | 
	
		
			
				|  |  | -var method;
 | 
	
		
			
				|  |  | +var methodBlock,parent;
 | 
	
		
			
				|  |  |  //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 | 
	
		
			
				|  |  |  return $core.withContext(function($ctx1) {
 | 
	
		
			
				|  |  |  //>>excludeEnd("ctx");
 | 
	
		
			
				|  |  |  var $1,$2;
 | 
	
		
			
				|  |  | -if(!$core.assert(aBoolean)){
 | 
	
		
			
				|  |  | -return $recv(aMessage)._sendTo_(anObject);
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -$1=[$recv($recv(anObject)._class())._superclass()
 | 
	
		
			
				|  |  | +parent=$recv($recv($recv($self._context())._method())._methodClass())._superPrototype();
 | 
	
		
			
				|  |  | +$1=parent;
 | 
	
		
			
				|  |  | +if($1 == null || $1.a$nil){
 | 
	
		
			
				|  |  | +return [$self._messageNotUnderstood_receiver_(aMessage,anObject)
 | 
	
		
			
				|  |  |  //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 | 
	
		
			
				|  |  | -,$ctx1.sendIdx["superclass"]=1
 | 
	
		
			
				|  |  | +,$ctx1.sendIdx["messageNotUnderstood:receiver:"]=1
 | 
	
		
			
				|  |  |  //>>excludeEnd("ctx");
 | 
	
		
			
				|  |  |  ][0];
 | 
	
		
			
				|  |  | +} else {
 | 
	
		
			
				|  |  | +$1;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +$2=$recv(parent)._at_(aString);
 | 
	
		
			
				|  |  | +if($2 == null || $2.a$nil){
 | 
	
		
			
				|  |  | +return $self._messageNotUnderstood_receiver_(aMessage,anObject);
 | 
	
		
			
				|  |  | +} else {
 | 
	
		
			
				|  |  | +methodBlock=$2;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +return $recv(methodBlock)._applyTo_arguments_(anObject,$recv(aMessage)._arguments());
 | 
	
		
			
				|  |  | +//>>excludeStart("ctx", pragmas.excludeDebugContexts);
 | 
	
		
			
				|  |  | +}, function($ctx1) {$ctx1.fill(self,"sendJavaScript:superMessage:to:",{aString:aString,aMessage:aMessage,anObject:anObject,methodBlock:methodBlock,parent:parent})});
 | 
	
		
			
				|  |  | +//>>excludeEnd("ctx");
 | 
	
		
			
				|  |  | +}; }),
 | 
	
		
			
				|  |  | +$globals.ASTInterpreter);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +$core.addMethod(
 | 
	
		
			
				|  |  | +$core.method({
 | 
	
		
			
				|  |  | +selector: "sendSuperMessage:to:",
 | 
	
		
			
				|  |  | +protocol: "private",
 | 
	
		
			
				|  |  | +//>>excludeStart("ide", pragmas.excludeIdeData);
 | 
	
		
			
				|  |  | +args: ["aMessage", "anObject"],
 | 
	
		
			
				|  |  | +source: "sendSuperMessage: aMessage to: anObject\x0a\x09| method parent |\x0a\x09\x0a\x09parent := self context method methodClass superclass.\x0a\x09parent ifNil: [ ^ self messageNotUnderstood: aMessage receiver: anObject ].\x0a\x09\x0a\x09method := (parent lookupSelector: aMessage selector)\x0a\x09\x09ifNil: [ ^ self messageNotUnderstood: aMessage receiver: anObject ].\x0a\x09\x09\x0a\x09^ method sendTo: anObject arguments: aMessage arguments",
 | 
	
		
			
				|  |  | +referencedClasses: [],
 | 
	
		
			
				|  |  | +//>>excludeEnd("ide");
 | 
	
		
			
				|  |  | +pragmas: [],
 | 
	
		
			
				|  |  | +messageSends: ["superclass", "methodClass", "method", "context", "ifNil:", "messageNotUnderstood:receiver:", "lookupSelector:", "selector", "sendTo:arguments:", "arguments"]
 | 
	
		
			
				|  |  | +}, function ($methodClass){ return function (aMessage,anObject){
 | 
	
		
			
				|  |  | +var self=this,$self=this;
 | 
	
		
			
				|  |  | +var method,parent;
 | 
	
		
			
				|  |  | +//>>excludeStart("ctx", pragmas.excludeDebugContexts);
 | 
	
		
			
				|  |  | +return $core.withContext(function($ctx1) {
 | 
	
		
			
				|  |  | +//>>excludeEnd("ctx");
 | 
	
		
			
				|  |  | +var $1,$2;
 | 
	
		
			
				|  |  | +parent=$recv($recv($recv($self._context())._method())._methodClass())._superclass();
 | 
	
		
			
				|  |  | +$1=parent;
 | 
	
		
			
				|  |  |  if($1 == null || $1.a$nil){
 | 
	
		
			
				|  |  |  return [$self._messageNotUnderstood_receiver_(aMessage,anObject)
 | 
	
		
			
				|  |  |  //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 | 
	
	
		
			
				|  | @@ -2862,7 +2898,7 @@ return [$self._messageNotUnderstood_receiver_(aMessage,anObject)
 | 
	
		
			
				|  |  |  } else {
 | 
	
		
			
				|  |  |  $1;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  | -$2=$recv($recv($recv($recv($self._context())._method())._methodClass())._superclass())._lookupSelector_($recv(aMessage)._selector());
 | 
	
		
			
				|  |  | +$2=$recv(parent)._lookupSelector_($recv(aMessage)._selector());
 | 
	
		
			
				|  |  |  if($2 == null || $2.a$nil){
 | 
	
		
			
				|  |  |  return $self._messageNotUnderstood_receiver_(aMessage,anObject);
 | 
	
		
			
				|  |  |  } else {
 | 
	
	
		
			
				|  | @@ -2870,7 +2906,7 @@ method=$2;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  return $recv(method)._sendTo_arguments_(anObject,$recv(aMessage)._arguments());
 | 
	
		
			
				|  |  |  //>>excludeStart("ctx", pragmas.excludeDebugContexts);
 | 
	
		
			
				|  |  | -}, function($ctx1) {$ctx1.fill(self,"sendMessage:to:superSend:",{aMessage:aMessage,anObject:anObject,aBoolean:aBoolean,method:method})});
 | 
	
		
			
				|  |  | +}, function($ctx1) {$ctx1.fill(self,"sendSuperMessage:to:",{aMessage:aMessage,anObject:anObject,method:method,parent:parent})});
 | 
	
		
			
				|  |  |  //>>excludeEnd("ctx");
 | 
	
		
			
				|  |  |  }; }),
 | 
	
		
			
				|  |  |  $globals.ASTInterpreter);
 | 
	
	
		
			
				|  | @@ -3311,11 +3347,11 @@ selector: "visitSendNode:",
 | 
	
		
			
				|  |  |  protocol: "visiting",
 | 
	
		
			
				|  |  |  //>>excludeStart("ide", pragmas.excludeIdeData);
 | 
	
		
			
				|  |  |  args: ["aNode"],
 | 
	
		
			
				|  |  | -source: "visitSendNode: aNode\x0a\x09| receiver args message result |\x0a\x09\x0a\x09args := aNode arguments collect: [ :each | self pop ].\x0a\x09receiver := self peek.\x0a\x09\x0a\x09message := self\x0a\x09\x09messageFromSendNode: aNode\x0a\x09\x09arguments: args reversed.\x0a\x09\x0a\x09result := self sendMessage: message to: receiver superSend: aNode superSend.\x0a\x09\x0a\x09\x22For cascade sends, push the reciever if the send is not the last one\x22\x0a\x09aNode isSideEffect ifFalse: [ self pop; push: result ]",
 | 
	
		
			
				|  |  | +source: "visitSendNode: aNode\x0a\x09| receiver args message result |\x0a\x09\x0a\x09args := aNode arguments collect: [ :each | self pop ].\x0a\x09receiver := self peek.\x0a\x09\x0a\x09message := self\x0a\x09\x09messageFromSendNode: aNode\x0a\x09\x09arguments: args reversed.\x0a\x09\x0a\x09result := aNode superSend\x0a\x09\x09ifFalse: [ message sendTo: receiver ]\x0a\x09\x09ifTrue: [ aNode receiver binding isJavaScriptSuper\x0a\x09\x09\x09ifFalse: [ self sendSuperMessage: message to: receiver ]\x0a\x09\x09\x09ifTrue: [ self sendJavaScript: aNode javaScriptSelector superMessage: message to: receiver ] ].\x0a\x09\x0a\x09\x22For cascade sends, push the reciever if the send is not the last one\x22\x0a\x09aNode isSideEffect ifFalse: [ self pop; push: result ]",
 | 
	
		
			
				|  |  |  referencedClasses: [],
 | 
	
		
			
				|  |  |  //>>excludeEnd("ide");
 | 
	
		
			
				|  |  |  pragmas: [],
 | 
	
		
			
				|  |  | -messageSends: ["collect:", "arguments", "pop", "peek", "messageFromSendNode:arguments:", "reversed", "sendMessage:to:superSend:", "superSend", "ifFalse:", "isSideEffect", "push:"]
 | 
	
		
			
				|  |  | +messageSends: ["collect:", "arguments", "pop", "peek", "messageFromSendNode:arguments:", "reversed", "ifFalse:ifTrue:", "superSend", "sendTo:", "isJavaScriptSuper", "binding", "receiver", "sendSuperMessage:to:", "sendJavaScript:superMessage:to:", "javaScriptSelector", "ifFalse:", "isSideEffect", "push:"]
 | 
	
		
			
				|  |  |  }, function ($methodClass){ return function (aNode){
 | 
	
		
			
				|  |  |  var self=this,$self=this;
 | 
	
		
			
				|  |  |  var receiver,args,message,result;
 | 
	
	
		
			
				|  | @@ -3337,7 +3373,15 @@ return [$self._pop()
 | 
	
		
			
				|  |  |  }));
 | 
	
		
			
				|  |  |  receiver=$self._peek();
 | 
	
		
			
				|  |  |  message=$self._messageFromSendNode_arguments_(aNode,$recv(args)._reversed());
 | 
	
		
			
				|  |  | -result=$self._sendMessage_to_superSend_(message,receiver,$recv(aNode)._superSend());
 | 
	
		
			
				|  |  | +if($core.assert($recv(aNode)._superSend())){
 | 
	
		
			
				|  |  | +if($core.assert($recv($recv($recv(aNode)._receiver())._binding())._isJavaScriptSuper())){
 | 
	
		
			
				|  |  | +result=$self._sendJavaScript_superMessage_to_($recv(aNode)._javaScriptSelector(),message,receiver);
 | 
	
		
			
				|  |  | +} else {
 | 
	
		
			
				|  |  | +result=$self._sendSuperMessage_to_(message,receiver);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +} else {
 | 
	
		
			
				|  |  | +result=$recv(message)._sendTo_(receiver);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  |  if(!$core.assert($recv(aNode)._isSideEffect())){
 | 
	
		
			
				|  |  |  $self._pop();
 | 
	
		
			
				|  |  |  $self._push_(result);
 | 
	
	
		
			
				|  | @@ -3972,6 +4016,24 @@ return true;
 | 
	
		
			
				|  |  |  }; }),
 | 
	
		
			
				|  |  |  $globals.JSStatementNode);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +$core.addMethod(
 | 
	
		
			
				|  |  | +$core.method({
 | 
	
		
			
				|  |  | +selector: "isJavaScriptSuper",
 | 
	
		
			
				|  |  | +protocol: "*Compiler-Interpreter",
 | 
	
		
			
				|  |  | +//>>excludeStart("ide", pragmas.excludeIdeData);
 | 
	
		
			
				|  |  | +args: [],
 | 
	
		
			
				|  |  | +source: "isJavaScriptSuper\x0a\x09^ true",
 | 
	
		
			
				|  |  | +referencedClasses: [],
 | 
	
		
			
				|  |  | +//>>excludeEnd("ide");
 | 
	
		
			
				|  |  | +pragmas: [],
 | 
	
		
			
				|  |  | +messageSends: []
 | 
	
		
			
				|  |  | +}, function ($methodClass){ return function (){
 | 
	
		
			
				|  |  | +var self=this,$self=this;
 | 
	
		
			
				|  |  | +return true;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}; }),
 | 
	
		
			
				|  |  | +$globals.JavaScriptSuperVar);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  $core.addMethod(
 | 
	
		
			
				|  |  |  $core.method({
 | 
	
		
			
				|  |  |  selector: "inContext:",
 | 
	
	
		
			
				|  | @@ -4099,6 +4161,24 @@ return $recv(aContext)._localAt_("self");
 | 
	
		
			
				|  |  |  }; }),
 | 
	
		
			
				|  |  |  $globals.SuperVar);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +$core.addMethod(
 | 
	
		
			
				|  |  | +$core.method({
 | 
	
		
			
				|  |  | +selector: "isJavaScriptSuper",
 | 
	
		
			
				|  |  | +protocol: "*Compiler-Interpreter",
 | 
	
		
			
				|  |  | +//>>excludeStart("ide", pragmas.excludeIdeData);
 | 
	
		
			
				|  |  | +args: [],
 | 
	
		
			
				|  |  | +source: "isJavaScriptSuper\x0a\x09^ false",
 | 
	
		
			
				|  |  | +referencedClasses: [],
 | 
	
		
			
				|  |  | +//>>excludeEnd("ide");
 | 
	
		
			
				|  |  | +pragmas: [],
 | 
	
		
			
				|  |  | +messageSends: []
 | 
	
		
			
				|  |  | +}, function ($methodClass){ return function (){
 | 
	
		
			
				|  |  | +var self=this,$self=this;
 | 
	
		
			
				|  |  | +return false;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +}; }),
 | 
	
		
			
				|  |  | +$globals.SuperVar);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  $core.addMethod(
 | 
	
		
			
				|  |  |  $core.method({
 | 
	
		
			
				|  |  |  selector: "inContext:put:",
 |