ソースを参照

Inlining callJavaScriptMethod

It got small after previous refactorings, and it makes very clear that
messageNotUnderstand either accesses JS or calls some Smalltalk DNU.
Herbert Vojčík 10 年 前
コミット
e26df782be
1 ファイル変更11 行追加17 行削除
  1. 11 17
      support/boot.js

+ 11 - 17
support/boot.js

@@ -1012,18 +1012,19 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require
 		 if the receiver has no klass, we consider it a JS object (outside of the
 		 Amber system). Else assume that the receiver understands #doesNotUnderstand: */
 		function messageNotUnderstood(receiver, stSelector, args) {
-			return receiver.klass === undefined || receiver.allowJavaScriptCalls ?
-				/* Handles JS method calls. */
-				callJavaScriptMethod(receiver, stSelector, args) :
-				/* Handles not understood messages. Also see the Amber counter-part
-				 Object>>doesNotUnderstand: */
-				invokeDnuMethod(receiver, stSelector, args);
+			if (receiver.klass !== undefined && !receiver.allowJavaScriptCalls) {
+				return invokeDnuMethod(receiver, stSelector, args);
+			}
+			/* Call a method of a JS object, or answer a property if it exists.
+			 Else try wrapping a JSObjectProxy around the receiver. */
+			var accessSelector = stSelector._asJavaScriptSelector();
+			if (!(accessSelector in receiver)) {
+				return invokeDnuMethod(globals.JSObjectProxy._on_(receiver), stSelector, args);
+			}
+			return accessJavaScript(receiver, accessSelector, args);
 		}
 
-		/* Call a method of a JS object, or answer a property if it exists.
-		 Else try wrapping a JSObjectProxy around the receiver.
-
-		 If the object property is a function, then call it, except if it starts with
+		/* If the object property is a function, then call it, except if it starts with
 		 an uppercase character (we probably want to answer the function itself in this
 		 case and send it #new from Amber).
 
@@ -1032,13 +1033,6 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require
 
 		 Example:
 		 "self do: aBlock with: anObject" -> "self.do(aBlock, anObject)" */
-		function callJavaScriptMethod(receiver, stSelector, args) {
-			var accessSelector = stSelector._asJavaScriptSelector();
-			return accessSelector in receiver ?
-				accessJavaScript(receiver, accessSelector, args) :
-				invokeDnuMethod(globals.JSObjectProxy._on_(receiver), stSelector, args);
-		}
-
 		function accessJavaScript(receiver, jsSelector, args) {
 			var jsProperty = receiver[jsSelector];
 			if (typeof jsProperty === "function" && !/^[A-Z]/.test(jsSelector)) {