|  | @@ -2278,69 +2278,46 @@ referencedClasses: []
 | 
											
												
													
														|  |  }),
 |  |  }),
 | 
											
												
													
														|  |  smalltalk.JSObjectProxy);
 |  |  smalltalk.JSObjectProxy);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -smalltalk.addMethod(
 |  | 
 | 
											
												
													
														|  | -"_canForwardMessage_",
 |  | 
 | 
											
												
													
														|  | -smalltalk.method({
 |  | 
 | 
											
												
													
														|  | -selector: "canForwardMessage:",
 |  | 
 | 
											
												
													
														|  | -category: 'testing',
 |  | 
 | 
											
												
													
														|  | -fn: function (aMessage) {
 |  | 
 | 
											
												
													
														|  | -var self=this;
 |  | 
 | 
											
												
													
														|  | -return smalltalk.withContext(function($ctx1) { 
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -		var jsSelector = aMessage._selector()._asJavaScriptSelector();
 |  | 
 | 
											
												
													
														|  | -		if(jsSelector in self._jsObject()) {
 |  | 
 | 
											
												
													
														|  | -			return true
 |  | 
 | 
											
												
													
														|  | -		} else {
 |  | 
 | 
											
												
													
														|  | -			return false;
 |  | 
 | 
											
												
													
														|  | -		}
 |  | 
 | 
											
												
													
														|  | -	;
 |  | 
 | 
											
												
													
														|  | -return self}, function($ctx1) {$ctx1.fill(self,"canForwardMessage:",{aMessage:aMessage},smalltalk.JSObjectProxy)});},
 |  | 
 | 
											
												
													
														|  | -args: ["aMessage"],
 |  | 
 | 
											
												
													
														|  | -source: "canForwardMessage: aMessage\x0a\x09<\x0a\x09\x09var jsSelector = aMessage._selector()._asJavaScriptSelector();\x0a\x09\x09if(jsSelector in self._jsObject()) {\x0a\x09\x09\x09return true\x0a\x09\x09} else {\x0a\x09\x09\x09return false;\x0a\x09\x09}\x0a\x09>",
 |  | 
 | 
											
												
													
														|  | -messageSends: [],
 |  | 
 | 
											
												
													
														|  | -referencedClasses: []
 |  | 
 | 
											
												
													
														|  | -}),
 |  | 
 | 
											
												
													
														|  | -smalltalk.JSObjectProxy);
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  smalltalk.addMethod(
 |  |  smalltalk.addMethod(
 | 
											
												
													
														|  |  "_doesNotUnderstand_",
 |  |  "_doesNotUnderstand_",
 | 
											
												
													
														|  |  smalltalk.method({
 |  |  smalltalk.method({
 | 
											
												
													
														|  |  selector: "doesNotUnderstand:",
 |  |  selector: "doesNotUnderstand:",
 | 
											
												
													
														|  |  category: 'proxy',
 |  |  category: 'proxy',
 | 
											
												
													
														|  | -fn: function (aMessage) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +fn: function (aMessage){
 | 
											
												
													
														|  |  var self=this;
 |  |  var self=this;
 | 
											
												
													
														|  |  return smalltalk.withContext(function($ctx1) { 
 |  |  return smalltalk.withContext(function($ctx1) { 
 | 
											
												
													
														|  | -var $2,$3,$1;
 |  | 
 | 
											
												
													
														|  | -$2=_st(self)._canForwardMessage_(aMessage);
 |  | 
 | 
											
												
													
														|  | -if(smalltalk.assert($2)){
 |  | 
 | 
											
												
													
														|  | -$1=_st(self)._forwardMessage_(aMessage);
 |  | 
 | 
											
												
													
														|  | 
 |  | +var $2,$1;
 | 
											
												
													
														|  | 
 |  | +$2=_st(self)._lookupProperty_(_st(_st(aMessage)._selector())._asJavaScriptSelector());
 | 
											
												
													
														|  | 
 |  | +if(($receiver = $2) == nil || $receiver == undefined){
 | 
											
												
													
														|  | 
 |  | +$1=smalltalk.Object.fn.prototype._doesNotUnderstand_.apply(_st(self), [aMessage]);
 | 
											
												
													
														|  |  } else {
 |  |  } else {
 | 
											
												
													
														|  | -$3=smalltalk.Object.fn.prototype._doesNotUnderstand_.apply(_st(self), [aMessage]);
 |  | 
 | 
											
												
													
														|  | -return $3;
 |  | 
 | 
											
												
													
														|  | 
 |  | +var jsSelector;
 | 
											
												
													
														|  | 
 |  | +jsSelector=$receiver;
 | 
											
												
													
														|  | 
 |  | +$1=_st(self)._forwardMessage_withArguments_(jsSelector,_st(aMessage)._arguments());
 | 
											
												
													
														|  |  };
 |  |  };
 | 
											
												
													
														|  |  return $1;
 |  |  return $1;
 | 
											
												
													
														|  | -}, function($ctx1) {$ctx1.fill(self,"doesNotUnderstand:",{aMessage:aMessage},smalltalk.JSObjectProxy)});},
 |  | 
 | 
											
												
													
														|  | 
 |  | +}, function($ctx1) {$ctx1.fill(self,"doesNotUnderstand:",{aMessage:aMessage},smalltalk.JSObjectProxy)})},
 | 
											
												
													
														|  |  args: ["aMessage"],
 |  |  args: ["aMessage"],
 | 
											
												
													
														|  | -source: "doesNotUnderstand: aMessage\x0a\x09\x0a\x09^ (self canForwardMessage: aMessage)\x0a\x09\x09ifTrue: [ self forwardMessage: aMessage ]\x0a\x09\x09ifFalse: [ ^ super doesNotUnderstand: aMessage ]",
 |  | 
 | 
											
												
													
														|  | -messageSends: ["ifTrue:ifFalse:", "forwardMessage:", "doesNotUnderstand:", "canForwardMessage:"],
 |  | 
 | 
											
												
													
														|  | 
 |  | +source: "doesNotUnderstand: aMessage\x0a\x09^(self lookupProperty: aMessage selector asJavaScriptSelector)\x0a\x09\x09ifNotNil: [ :jsSelector | self forwardMessage: jsSelector withArguments: aMessage arguments ]\x0a\x09\x09ifNil: [ super doesNotUnderstand: aMessage ]",
 | 
											
												
													
														|  | 
 |  | +messageSends: ["ifNotNil:ifNil:", "forwardMessage:withArguments:", "arguments", "doesNotUnderstand:", "lookupProperty:", "asJavaScriptSelector", "selector"],
 | 
											
												
													
														|  |  referencedClasses: []
 |  |  referencedClasses: []
 | 
											
												
													
														|  |  }),
 |  |  }),
 | 
											
												
													
														|  |  smalltalk.JSObjectProxy);
 |  |  smalltalk.JSObjectProxy);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  smalltalk.addMethod(
 |  |  smalltalk.addMethod(
 | 
											
												
													
														|  | -"_forwardMessage_",
 |  | 
 | 
											
												
													
														|  | 
 |  | +"_forwardMessage_withArguments_",
 | 
											
												
													
														|  |  smalltalk.method({
 |  |  smalltalk.method({
 | 
											
												
													
														|  | -selector: "forwardMessage:",
 |  | 
 | 
											
												
													
														|  | 
 |  | +selector: "forwardMessage:withArguments:",
 | 
											
												
													
														|  |  category: 'proxy',
 |  |  category: 'proxy',
 | 
											
												
													
														|  | -fn: function (aMessage) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +fn: function (aString,anArray){
 | 
											
												
													
														|  |  var self=this;
 |  |  var self=this;
 | 
											
												
													
														|  |  return smalltalk.withContext(function($ctx1) { 
 |  |  return smalltalk.withContext(function($ctx1) { 
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -		return smalltalk.send(self._jsObject(), aMessage._selector()._asJavaScriptSelector(), aMessage._arguments());
 |  | 
 | 
											
												
													
														|  | 
 |  | +		return smalltalk.send(self._jsObject(), aString, anArray);
 | 
											
												
													
														|  |  	;
 |  |  	;
 | 
											
												
													
														|  | -return self}, function($ctx1) {$ctx1.fill(self,"forwardMessage:",{aMessage:aMessage},smalltalk.JSObjectProxy)});},
 |  | 
 | 
											
												
													
														|  | -args: ["aMessage"],
 |  | 
 | 
											
												
													
														|  | -source: "forwardMessage: aMessage\x0a\x09<\x0a\x09\x09return smalltalk.send(self._jsObject(), aMessage._selector()._asJavaScriptSelector(), aMessage._arguments());\x0a\x09>",
 |  | 
 | 
											
												
													
														|  | 
 |  | +return self}, function($ctx1) {$ctx1.fill(self,"forwardMessage:withArguments:",{aString:aString,anArray:anArray},smalltalk.JSObjectProxy)})},
 | 
											
												
													
														|  | 
 |  | +args: ["aString", "anArray"],
 | 
											
												
													
														|  | 
 |  | +source: "forwardMessage: aString withArguments: anArray\x0a\x09<\x0a\x09\x09return smalltalk.send(self._jsObject(), aString, anArray);\x0a\x09>",
 | 
											
												
													
														|  |  messageSends: [],
 |  |  messageSends: [],
 | 
											
												
													
														|  |  referencedClasses: []
 |  |  referencedClasses: []
 | 
											
												
													
														|  |  }),
 |  |  }),
 | 
											
										
											
												
													
														|  | @@ -2427,6 +2404,23 @@ referencedClasses: []
 | 
											
												
													
														|  |  }),
 |  |  }),
 | 
											
												
													
														|  |  smalltalk.JSObjectProxy);
 |  |  smalltalk.JSObjectProxy);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +smalltalk.addMethod(
 | 
											
												
													
														|  | 
 |  | +"_lookupProperty_",
 | 
											
												
													
														|  | 
 |  | +smalltalk.method({
 | 
											
												
													
														|  | 
 |  | +selector: "lookupProperty:",
 | 
											
												
													
														|  | 
 |  | +category: 'accessing',
 | 
											
												
													
														|  | 
 |  | +fn: function (aString){
 | 
											
												
													
														|  | 
 |  | +var self=this;
 | 
											
												
													
														|  | 
 |  | +return smalltalk.withContext(function($ctx1) { 
 | 
											
												
													
														|  | 
 |  | +return aString in self._jsObject() ? aString : nil;
 | 
											
												
													
														|  | 
 |  | +return self}, function($ctx1) {$ctx1.fill(self,"lookupProperty:",{aString:aString},smalltalk.JSObjectProxy)})},
 | 
											
												
													
														|  | 
 |  | +args: ["aString"],
 | 
											
												
													
														|  | 
 |  | +source: "lookupProperty: aString\x0a\x09\x22Looks up a property in JS object.\x0a\x09Return the property if it is present, or nil if it is not present.\x22\x0a\x09<return aString in self._jsObject() ? aString : nil>",
 | 
											
												
													
														|  | 
 |  | +messageSends: [],
 | 
											
												
													
														|  | 
 |  | +referencedClasses: []
 | 
											
												
													
														|  | 
 |  | +}),
 | 
											
												
													
														|  | 
 |  | +smalltalk.JSObjectProxy);
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |  smalltalk.addMethod(
 |  |  smalltalk.addMethod(
 | 
											
												
													
														|  |  "_printOn_",
 |  |  "_printOn_",
 | 
											
												
													
														|  |  smalltalk.method({
 |  |  smalltalk.method({
 | 
											
										
											
												
													
														|  | @@ -5136,3 +5130,22 @@ referencedClasses: []
 | 
											
												
													
														|  |  smalltalk.UndefinedObject.klass);
 |  |  smalltalk.UndefinedObject.klass);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +smalltalk.addMethod(
 | 
											
												
													
														|  | 
 |  | +"_asJavaScriptSelector",
 | 
											
												
													
														|  | 
 |  | +smalltalk.method({
 | 
											
												
													
														|  | 
 |  | +selector: "asJavaScriptSelector",
 | 
											
												
													
														|  | 
 |  | +category: '*Kernel-Objects',
 | 
											
												
													
														|  | 
 |  | +fn: function (){
 | 
											
												
													
														|  | 
 |  | +var self=this;
 | 
											
												
													
														|  | 
 |  | +return smalltalk.withContext(function($ctx1) { 
 | 
											
												
													
														|  | 
 |  | +var $1;
 | 
											
												
													
														|  | 
 |  | +$1=_st(self)._replace_with_("^([a-zA-Z0-9]*).*$","$1");
 | 
											
												
													
														|  | 
 |  | +return $1;
 | 
											
												
													
														|  | 
 |  | +}, function($ctx1) {$ctx1.fill(self,"asJavaScriptSelector",{},smalltalk.String)})},
 | 
											
												
													
														|  | 
 |  | +args: [],
 | 
											
												
													
														|  | 
 |  | +source: "asJavaScriptSelector\x0a\x09\x22Return first keyword of the selector, without trailing colon.\x22\x0a\x09^self replace: '^([a-zA-Z0-9]*).*$' with: '$1'",
 | 
											
												
													
														|  | 
 |  | +messageSends: ["replace:with:"],
 | 
											
												
													
														|  | 
 |  | +referencedClasses: []
 | 
											
												
													
														|  | 
 |  | +}),
 | 
											
												
													
														|  | 
 |  | +smalltalk.String);
 | 
											
												
													
														|  | 
 |  | +
 |