|
@@ -2307,22 +2307,23 @@ smalltalk.addMethod(
|
|
|
smalltalk.method({
|
|
|
selector: "doesNotUnderstand:",
|
|
|
category: 'proxy',
|
|
|
-fn: function (aMessage) {
|
|
|
+fn: function (aMessage){
|
|
|
var self=this;
|
|
|
+var jsSelector;
|
|
|
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;
|
|
|
+jsSelector=_st(self)._selectorToForwardMessage_(aMessage);
|
|
|
+$2=jsSelector;
|
|
|
+if(($receiver = $2) == nil || $receiver == undefined){
|
|
|
+$1=smalltalk.Object.fn.prototype._doesNotUnderstand_.apply(_st(self), [aMessage]);
|
|
|
} else {
|
|
|
-$3=smalltalk.Object.fn.prototype._doesNotUnderstand_.apply(_st(self), [aMessage]);
|
|
|
-return $3;
|
|
|
+$1=_st(self)._forwardMessage_jsSelector_(aMessage,jsSelector);
|
|
|
};
|
|
|
return $1;
|
|
|
-}, function($ctx1) {$ctx1.fill(self,"doesNotUnderstand:",{aMessage:aMessage},smalltalk.JSObjectProxy)});},
|
|
|
+}, function($ctx1) {$ctx1.fill(self,"doesNotUnderstand:",{aMessage:aMessage,jsSelector:jsSelector},smalltalk.JSObjectProxy)})},
|
|
|
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| jsSelector |\x0a\x09jsSelector := self selectorToForwardMessage: aMessage.\x0a\x09^ jsSelector\x0a\x09\x09ifNotNil: [ self forwardMessage: aMessage jsSelector: jsSelector ]\x0a\x09\x09ifNil: [ super doesNotUnderstand: aMessage ]",
|
|
|
+messageSends: ["selectorToForwardMessage:", "ifNotNil:ifNil:", "forwardMessage:jsSelector:", "doesNotUnderstand:"],
|
|
|
referencedClasses: []
|
|
|
}),
|
|
|
smalltalk.JSObjectProxy);
|
|
@@ -2346,6 +2347,25 @@ referencedClasses: []
|
|
|
}),
|
|
|
smalltalk.JSObjectProxy);
|
|
|
|
|
|
+smalltalk.addMethod(
|
|
|
+"_forwardMessage_jsSelector_",
|
|
|
+smalltalk.method({
|
|
|
+selector: "forwardMessage:jsSelector:",
|
|
|
+category: 'proxy',
|
|
|
+fn: function (aMessage,aString){
|
|
|
+var self=this;
|
|
|
+return smalltalk.withContext(function($ctx1) {
|
|
|
+
|
|
|
+ return smalltalk.send(self._jsObject(), aString, aMessage._arguments());
|
|
|
+ ;
|
|
|
+return self}, function($ctx1) {$ctx1.fill(self,"forwardMessage:jsSelector:",{aMessage:aMessage,aString:aString},smalltalk.JSObjectProxy)})},
|
|
|
+args: ["aMessage", "aString"],
|
|
|
+source: "forwardMessage: aMessage jsSelector: aString\x0a\x09<\x0a\x09\x09return smalltalk.send(self._jsObject(), aString, aMessage._arguments());\x0a\x09>",
|
|
|
+messageSends: [],
|
|
|
+referencedClasses: []
|
|
|
+}),
|
|
|
+smalltalk.JSObjectProxy);
|
|
|
+
|
|
|
smalltalk.addMethod(
|
|
|
"_inspectOn_",
|
|
|
smalltalk.method({
|
|
@@ -2444,6 +2464,30 @@ referencedClasses: []
|
|
|
}),
|
|
|
smalltalk.JSObjectProxy);
|
|
|
|
|
|
+smalltalk.addMethod(
|
|
|
+"_selectorToForwardMessage_",
|
|
|
+smalltalk.method({
|
|
|
+selector: "selectorToForwardMessage:",
|
|
|
+category: 'testing',
|
|
|
+fn: function (aMessage){
|
|
|
+var self=this;
|
|
|
+return smalltalk.withContext(function($ctx1) {
|
|
|
+
|
|
|
+ var jsSelector = aMessage._selector()._asJavaScriptSelector();
|
|
|
+ if(jsSelector in self._jsObject()) {
|
|
|
+ return jsSelector;
|
|
|
+ } else {
|
|
|
+ return nil;
|
|
|
+ }
|
|
|
+ ;
|
|
|
+return self}, function($ctx1) {$ctx1.fill(self,"selectorToForwardMessage:",{aMessage:aMessage},smalltalk.JSObjectProxy)})},
|
|
|
+args: ["aMessage"],
|
|
|
+source: "selectorToForwardMessage: aMessage\x0a\x09<\x0a\x09\x09var jsSelector = aMessage._selector()._asJavaScriptSelector();\x0a\x09\x09if(jsSelector in self._jsObject()) {\x0a\x09\x09\x09return jsSelector;\x0a\x09\x09} else {\x0a\x09\x09\x09return nil;\x0a\x09\x09}\x0a\x09>",
|
|
|
+messageSends: [],
|
|
|
+referencedClasses: []
|
|
|
+}),
|
|
|
+smalltalk.JSObjectProxy);
|
|
|
+
|
|
|
smalltalk.addMethod(
|
|
|
"_value",
|
|
|
smalltalk.method({
|