Browse Source

kernel: Move asReceiver to ClassesBrik.

It sort-of belongs there, as it checks a$cls.
Herby Vojčík 4 năm trước cách đây
mục cha
commit
505f3e98b8
2 tập tin đã thay đổi với 18 bổ sung25 xóa
  1. 1 24
      lang/base/boot.js
  2. 17 1
      lang/base/kernel-language.js

+ 1 - 24
lang/base/boot.js

@@ -76,28 +76,6 @@ define([
         st.defaultAmdNamespace = st.defaultAmdNamespace || "amber/core";
     }
 
-    /* Defines asReceiver to be present at load time */
-    /* (logically it belongs more to PrimitiveBrik) */
-    AsReceiverBrik.deps = ["nil"];
-    function AsReceiverBrik (brikz, st) {
-        var nilAsReceiver = brikz.nil.nilAsReceiver;
-
-        /**
-         * This function is used all over the compiled amber code.
-         * It takes any value (JavaScript or Smalltalk)
-         * and returns a proper Amber Smalltalk receiver.
-         *
-         * null or undefined -> nilAsReceiver,
-         * object having Smalltalk signature -> unchanged,
-         * otherwise wrapped foreign (JS) object
-         */
-        this.asReceiver = function (o) {
-            if (o == null) return nilAsReceiver;
-            else if (o.a$cls != null) return o;
-            else return st.wrapJavaScript(o);
-        };
-    }
-
     var api = {};
     var globals = Object.create(global);
     var brikz = Brikz(api);
@@ -108,7 +86,6 @@ define([
 
     configureWithHierarchy(brikz);
 
-    brikz.asReceiver = AsReceiverBrik;
     brikz.stInit = SmalltalkInitBrik;
     brikz.amd = AMDBrik;
 
@@ -129,6 +106,6 @@ define([
         nilAsValue: brikz.nil.nilAsValue,
         nilAsClass: brikz.classes.nilAsClass,
         globals: globals,
-        asReceiver: brikz.asReceiver.asReceiver
+        asReceiver: brikz.classes.asReceiver
     };
 });

+ 17 - 1
lang/base/kernel-language.js

@@ -205,7 +205,7 @@ define(function () {
         this.traitMethodChanged = traitMethodChanged;
     }
 
-    ClassesBrik.deps = ["root", "event", "behaviors", "methods", "arraySet"];
+    ClassesBrik.deps = ["root", "event", "behaviors", "methods", "arraySet", "nil"];
     function ClassesBrik (brikz, st) {
         var SmalltalkRoot = brikz.root.Root;
         var specialConstructors = brikz.commonSpecialConstructors;
@@ -218,6 +218,7 @@ define(function () {
         var removeElement = brikz.arraySet.removeElement;
         var emit = brikz.commonEmit;
         var declareEvent = brikz.event.declareEvent;
+        var nilAsReceiver = brikz.nil.nilAsReceiver;
 
         function SmalltalkBehavior () {
         }
@@ -379,6 +380,21 @@ define(function () {
 
         this.wireKlass = wireKlass;
 
+        /**
+         * This function is used all over the compiled amber code.
+         * It takes any value (JavaScript or Smalltalk)
+         * and returns a proper Amber Smalltalk receiver.
+         *
+         * null or undefined -> nilAsReceiver,
+         * object having Smalltalk signature -> unchanged,
+         * otherwise wrapped foreign (JS) object
+         */
+        this.asReceiver = function (o) {
+            if (o == null) return nilAsReceiver;
+            else if (o.a$cls != null) return o;
+            else return st.wrapJavaScript(o);
+        };
+
         /* Add a class to the system, creating a new one if needed.
          A Package is lazily created if one with given name does not exist. */