Browse Source

kernel: Simplify buildTraitOrClass.

Maybe remove updateExisting
and buildTraitOrClass completely in the future.
Herby Vojčík 4 years ago
parent
commit
badfe0ab84
3 changed files with 19 additions and 10 deletions
  1. 8 0
      CHANGELOG
  2. 5 6
      lang/base/kernel-fundamentals.js
  3. 6 4
      lang/base/kernel-language.js

+ 8 - 0
CHANGELOG

@@ -1,3 +1,11 @@
+? ??? 2019 - Release 0.24.1
+===================================
+
+* $core.removeClass returns removed class.
+
+Commits: https://lolg.it/amber/amber/commits/0.24.1
+
+
 4 Jun 2019 - Release 0.24.0
 ===================================
 

+ 5 - 6
lang/base/kernel-fundamentals.js

@@ -70,29 +70,28 @@ define(['./junk-drawer'], function ($goodies) {
 
             var traitsOrClasses = [];
 
-            this.buildTraitOrClass = function (category, builder) {
+            this.buildTraitOrClass = function (builder) {
                 var traitOrClass = globals.hasOwnProperty(builder.name) && globals[builder.name];
                 if (traitOrClass) {
                     builder.updateExisting(traitOrClass);
+                    return traitOrClass;
                 } else {
-                    traitOrClass = builder.make();
-                    traitOrClass.category = category;
-                    addTraitOrClass(traitOrClass);
+                    return addTraitOrClass(builder.make());
                 }
-
-                return traitOrClass;
             };
 
             function addTraitOrClass (traitOrClass) {
                 globals[traitOrClass.name] = traitOrClass;
                 addElement(traitsOrClasses, traitOrClass);
                 traitOrClass.added();
+                return traitOrClass;
             }
 
             function removeTraitOrClass (traitOrClass) {
                 traitOrClass.removed();
                 removeElement(traitsOrClasses, traitOrClass);
                 delete globals[traitOrClass.name];
+                return traitOrClass;
             }
 
             this.removeTraitOrClass = removeTraitOrClass;

+ 6 - 4
lang/base/kernel-language.js

@@ -182,12 +182,13 @@ define(['./junk-drawer'], function ($goodies) {
                 emit.traitMethodRemoved(method, this);
             };
 
-            function traitBuilder (traitName) {
+            function traitBuilder (traitName, category) {
                 return {
                     name: traitName,
                     make: function () {
                         var that = new SmalltalkTrait();
                         that.name = traitName;
+                        that.category = category;
                         that.traitUsers = [];
                         setupMethods(that);
                         return that;
@@ -198,7 +199,7 @@ define(['./junk-drawer'], function ($goodies) {
             }
 
             st.addTrait = function (className, category) {
-                return buildTraitOrClass(category, traitBuilder(className));
+                return buildTraitOrClass(traitBuilder(className, category));
             };
         }
 
@@ -327,7 +328,7 @@ define(['./junk-drawer'], function ($goodies) {
              should be added to the system, see smalltalk.addClass().
              Superclass linking is *not* handled here, see api.initialize()  */
 
-            function classBuilder (className, superclass, fn) {
+            function classBuilder (className, superclass, category, fn) {
                 var logicalSuperclass = superclass;
                 if (superclass == null || superclass.a$nil) {
                     superclass = nilAsClass;
@@ -343,6 +344,7 @@ define(['./junk-drawer'], function ($goodies) {
                     that.slots = [];
 
                     that.name = className;
+                    that.category = category;
                     that.subclasses = [];
 
                     setupMethods(that);
@@ -414,7 +416,7 @@ define(['./junk-drawer'], function ($goodies) {
                 if (typeof superclass === 'undefined' || superclass && superclass.a$nil) {
                     console.warn('Compiling ' + className + ' as a subclass of `nil`. A dependency might be missing.');
                 }
-                return buildTraitOrClass(category, classBuilder(className, superclass, specialConstructors[className]));
+                return buildTraitOrClass(classBuilder(className, superclass, category, specialConstructors[className]));
             };
 
             st.removeClass = removeTraitOrClass;