Browse Source

kernel: MethodCompositionBrik, setupMethods.

Herbert Vojčík 7 years ago
parent
commit
547fa78005
2 changed files with 34 additions and 28 deletions
  1. 27 21
      support/kernel-fundamentals.js
  2. 7 7
      support/kernel-language.js

+ 27 - 21
support/kernel-fundamentals.js

@@ -192,7 +192,6 @@ define(['./compatibility'], function () {
 
     BehaviorsBrik.deps = ["organize", "root", "smalltalkGlobals", "arraySet"];
     function BehaviorsBrik (brikz, st) {
-        var setupClassOrganization = brikz.organize.setupClassOrganization;
         var addOrganizationElement = brikz.organize.addOrganizationElement;
         var removeOrganizationElement = brikz.organize.removeOrganizationElement;
         var globals = brikz.smalltalkGlobals.globals;
@@ -212,12 +211,6 @@ define(['./compatibility'], function () {
 
         var classes = [];
 
-        this.setupBehavior = function (behaviorBody) {
-            setupClassOrganization(behaviorBody);
-            behaviorBody.localMethods = Object.create(null);
-            behaviorBody.methods = Object.create(null);
-        };
-
         this.buildBehaviorBody = function (pkgName, builder) {
             var pkg = st.packages[pkgName];
             if (!pkg) throw new Error("Missing package " + pkgName);
@@ -266,10 +259,10 @@ define(['./compatibility'], function () {
         };
     }
 
-    MethodsBrik.deps = ["organize", "selectors", "root", "selectorConversion"];
+    MethodsBrik.deps = ["composition", "selectors", "root", "selectorConversion"];
     function MethodsBrik (brikz, st) {
-        var addOrganizationElement = brikz.organize.addOrganizationElement;
         var registerSelector = brikz.selectors.registerSelector;
+        var updateMethod = brikz.composition.updateMethod;
         var SmalltalkObject = brikz.root.Object;
         var coreFns = brikz.root.coreFns;
 
@@ -307,16 +300,6 @@ define(['./compatibility'], function () {
             updateMethod(method.selector, behaviorBody);
         };
 
-        function addMethod (method, behaviorBody) {
-            behaviorBody.methods[method.selector] = method;
-
-            // During the bootstrap, #addCompiledMethod is not used.
-            // Therefore we populate the organizer here too
-            addOrganizationElement(behaviorBody, method.protocol);
-
-            behaviorBody.methodAdded(method);
-        }
-
         function registerNewSelectors (method) {
             var newSelectors = [];
 
@@ -338,6 +321,28 @@ define(['./compatibility'], function () {
             delete behaviorBody.localMethods[method.selector];
             updateMethod(method.selector, behaviorBody);
         };
+    }
+
+    MethodCompositionBrik.deps = ["organize"];
+    function MethodCompositionBrik (brikz, st) {
+        var setupClassOrganization = brikz.organize.setupClassOrganization;
+        var addOrganizationElement = brikz.organize.addOrganizationElement;
+
+        this.setupMethods = function (behaviorBody) {
+            setupClassOrganization(behaviorBody);
+            behaviorBody.localMethods = Object.create(null);
+            behaviorBody.methods = Object.create(null);
+        };
+
+        function addMethod (method, behaviorBody) {
+            behaviorBody.methods[method.selector] = method;
+
+            // During the bootstrap, #addCompiledMethod is not used.
+            // Therefore we populate the organizer here too
+            addOrganizationElement(behaviorBody, method.protocol);
+
+            behaviorBody.methodAdded(method);
+        }
 
         function removeMethod (method, behaviorBody) {
             delete behaviorBody.methods[method.selector];
@@ -348,7 +353,7 @@ define(['./compatibility'], function () {
             // This is handled by #removeCompiledMethod
         }
 
-        function updateMethod (selector, behaviorBody) {
+        this.updateMethod = function (selector, behaviorBody) {
             var oldMethod = behaviorBody.methods[selector],
                 newMethod = behaviorBody.localMethods[selector];
             if (oldMethod == null && newMethod == null) {
@@ -358,7 +363,7 @@ define(['./compatibility'], function () {
             if (newMethod === oldMethod) return;
             if (newMethod != null) addMethod(newMethod, behaviorBody);
             else removeMethod(oldMethod, behaviorBody);
-        }
+        };
     }
 
     function ArraySetBrik (brikz, st) {
@@ -450,6 +455,7 @@ define(['./compatibility'], function () {
         brikz.selectorConversion = SelectorConversionBrik;
         brikz.selectors = SelectorsBrik;
         brikz.packages = PackagesBrik;
+        brikz.composition = MethodCompositionBrik;
         brikz.behaviors = BehaviorsBrik;
         brikz.methods = MethodsBrik;
 

+ 7 - 7
support/kernel-language.js

@@ -60,11 +60,11 @@ define(['./compatibility'], function () {
         return defineMethod;
     }
 
-    TraitsBrik.deps = ["behaviors", "root"];
+    TraitsBrik.deps = ["behaviors", "composition", "root"];
     function TraitsBrik (brikz, st) {
         var coreFns = brikz.root.coreFns;
         var SmalltalkBehaviorBody = brikz.behaviors.BehaviorBody;
-        var setupBehavior = brikz.behaviors.setupBehavior;
+        var setupMethods = brikz.composition.setupMethods;
         var buildBehaviorBody = brikz.behaviors.buildBehaviorBody;
 
         function SmalltalkTrait () {
@@ -98,7 +98,7 @@ define(['./compatibility'], function () {
                     var that = new SmalltalkTrait();
                     that.className = className;
                     that.pkg = pkg;
-                    setupBehavior(that);
+                    setupMethods(that);
                     return that;
                 },
                 updateExisting: function (trait, pkg) {
@@ -116,14 +116,14 @@ define(['./compatibility'], function () {
         };
     }
 
-    ClassesBrik.deps = ["root", "behaviors", "arraySet", "smalltalkGlobals"];
+    ClassesBrik.deps = ["root", "behaviors", "composition", "arraySet", "smalltalkGlobals"];
     function ClassesBrik (brikz, st) {
         var SmalltalkRoot = brikz.root.Root;
         var coreFns = brikz.root.coreFns;
         var globals = brikz.smalltalkGlobals.globals;
         var SmalltalkBehaviorBody = brikz.behaviors.BehaviorBody;
         var buildBehaviorBody = brikz.behaviors.buildBehaviorBody;
-        var setupBehavior = brikz.behaviors.setupBehavior;
+        var setupMethods = brikz.composition.setupMethods;
         var removeBehaviorBody = brikz.behaviors.removeBehaviorBody;
         var addElement = brikz.arraySet.addElement;
         var removeElement = brikz.arraySet.removeElement;
@@ -200,7 +200,7 @@ define(['./compatibility'], function () {
             that.pkg = spec.pkg;
             that.subclasses = [];
 
-            setupBehavior(that);
+            setupMethods(that);
             return that;
         }
 
@@ -215,7 +215,7 @@ define(['./compatibility'], function () {
             that.instanceClass = new that.fn();
 
             wireKlass(that);
-            setupBehavior(that);
+            setupMethods(that);
             return that;
         }