|  | @@ -64,6 +64,8 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |      function RootBrik (brikz, st) {
 | 
	
		
			
				|  |  |          /* Smalltalk foundational objects */
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +        var coreFns = this.coreFns = {};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          /* SmalltalkRoot is the hidden root of the normal Amber hierarchy.
 | 
	
		
			
				|  |  |           All objects including `ProtoObject` inherit from SmalltalkRoot.
 | 
	
		
			
				|  |  |           Detached roots (eg. wrapped JS classes like Number or Date)
 | 
	
	
		
			
				|  | @@ -77,25 +79,17 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |          function SmalltalkObject () {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        inherits(SmalltalkProtoObject, SmalltalkRoot);
 | 
	
		
			
				|  |  | -        inherits(SmalltalkObject, SmalltalkProtoObject);
 | 
	
		
			
				|  |  | +        coreFns.ProtoObject = inherits(SmalltalkProtoObject, SmalltalkRoot);
 | 
	
		
			
				|  |  | +        coreFns.Object = inherits(SmalltalkObject, SmalltalkProtoObject);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          this.Root = SmalltalkRoot;
 | 
	
		
			
				|  |  |          this.Object = SmalltalkObject;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        this.__init__ = function () {
 | 
	
		
			
				|  |  | -            var globals = brikz.smalltalkGlobals.globals;
 | 
	
		
			
				|  |  | -            var addCoupledClass = brikz.classes.addCoupledClass;
 | 
	
		
			
				|  |  | -            st.addPackage("Kernel-Objects");
 | 
	
		
			
				|  |  | -            addCoupledClass("ProtoObject", undefined, "Kernel-Objects", SmalltalkProtoObject);
 | 
	
		
			
				|  |  | -            addCoupledClass("Object", globals.ProtoObject, "Kernel-Objects", SmalltalkObject);
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -        this.__init__.once = true;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      OrganizeBrik.deps = ["arraySet", "root"];
 | 
	
		
			
				|  |  |      function OrganizeBrik (brikz, st) {
 | 
	
		
			
				|  |  |          var SmalltalkObject = brikz.root.Object;
 | 
	
		
			
				|  |  | +        var coreFns = brikz.root.coreFns;
 | 
	
		
			
				|  |  |          var addElement = brikz.arraySet.addElement;
 | 
	
		
			
				|  |  |          var removeElement = brikz.arraySet.removeElement;
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -110,19 +104,9 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |              this.elements = [];
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        inherits(SmalltalkOrganizer, SmalltalkObject);
 | 
	
		
			
				|  |  | -        inherits(SmalltalkPackageOrganizer, SmalltalkOrganizer);
 | 
	
		
			
				|  |  | -        inherits(SmalltalkClassOrganizer, SmalltalkOrganizer);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        this.__init__ = function () {
 | 
	
		
			
				|  |  | -            var globals = brikz.smalltalkGlobals.globals;
 | 
	
		
			
				|  |  | -            var addCoupledClass = brikz.classes.addCoupledClass;
 | 
	
		
			
				|  |  | -            st.addPackage("Kernel-Infrastructure");
 | 
	
		
			
				|  |  | -            addCoupledClass("Organizer", globals.Object, "Kernel-Infrastructure", SmalltalkOrganizer);
 | 
	
		
			
				|  |  | -            addCoupledClass("PackageOrganizer", globals.Organizer, "Kernel-Infrastructure", SmalltalkPackageOrganizer);
 | 
	
		
			
				|  |  | -            addCoupledClass("ClassOrganizer", globals.Organizer, "Kernel-Infrastructure", SmalltalkClassOrganizer);
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -        this.__init__.once = true;
 | 
	
		
			
				|  |  | +        coreFns.Organizer = inherits(SmalltalkOrganizer, SmalltalkObject);
 | 
	
		
			
				|  |  | +        coreFns.PackageOrganizer = inherits(SmalltalkPackageOrganizer, SmalltalkOrganizer);
 | 
	
		
			
				|  |  | +        coreFns.ClassOrganizer = inherits(SmalltalkClassOrganizer, SmalltalkOrganizer);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          this.setupClassOrganization = function (behaviorBody) {
 | 
	
		
			
				|  |  |              behaviorBody.organization = new SmalltalkClassOrganizer();
 | 
	
	
		
			
				|  | @@ -167,19 +151,12 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |      function PackagesBrik (brikz, st) {
 | 
	
		
			
				|  |  |          var setupPackageOrganization = brikz.organize.setupPackageOrganization;
 | 
	
		
			
				|  |  |          var SmalltalkObject = brikz.root.Object;
 | 
	
		
			
				|  |  | +        var coreFns = brikz.root.coreFns;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          function SmalltalkPackage () {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        inherits(SmalltalkPackage, SmalltalkObject);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        this.__init__ = function () {
 | 
	
		
			
				|  |  | -            var globals = brikz.smalltalkGlobals.globals;
 | 
	
		
			
				|  |  | -            var addCoupledClass = brikz.classes.addCoupledClass;
 | 
	
		
			
				|  |  | -            st.addPackage("Kernel-Infrastructure");
 | 
	
		
			
				|  |  | -            addCoupledClass("Package", globals.Object, "Kernel-Infrastructure", SmalltalkPackage);
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -        this.__init__.once = true;
 | 
	
		
			
				|  |  | +        coreFns.Package = inherits(SmalltalkPackage, SmalltalkObject);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          st.packages = {};
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -220,24 +197,17 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |          var removeOrganizationElement = brikz.organize.removeOrganizationElement;
 | 
	
		
			
				|  |  |          var globals = brikz.smalltalkGlobals.globals;
 | 
	
		
			
				|  |  |          var SmalltalkObject = brikz.root.Object;
 | 
	
		
			
				|  |  | +        var coreFns = brikz.root.coreFns;
 | 
	
		
			
				|  |  |          var addElement = brikz.arraySet.addElement;
 | 
	
		
			
				|  |  |          var removeElement = brikz.arraySet.removeElement;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          function SmalltalkBehaviorBody () {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        inherits(SmalltalkBehaviorBody, SmalltalkObject);
 | 
	
		
			
				|  |  | +        coreFns.BehaviorBody = inherits(SmalltalkBehaviorBody, SmalltalkObject);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          this.BehaviorBody = SmalltalkBehaviorBody;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        this.__init__ = function () {
 | 
	
		
			
				|  |  | -            var globals = brikz.smalltalkGlobals.globals;
 | 
	
		
			
				|  |  | -            var addCoupledClass = brikz.classes.addCoupledClass;
 | 
	
		
			
				|  |  | -            st.addPackage("Kernel-Classes");
 | 
	
		
			
				|  |  | -            addCoupledClass("BehaviorBody", globals.Object, "Kernel-Classes", SmalltalkBehaviorBody);
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -        this.__init__.once = true;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          /* Smalltalk classes */
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          var classes = [];
 | 
	
	
		
			
				|  | @@ -307,19 +277,12 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |          var addOrganizationElement = brikz.organize.addOrganizationElement;
 | 
	
		
			
				|  |  |          var registerSelector = brikz.selectors.registerSelector;
 | 
	
		
			
				|  |  |          var SmalltalkObject = brikz.root.Object;
 | 
	
		
			
				|  |  | +        var coreFns = brikz.root.coreFns;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          function SmalltalkMethod () {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        inherits(SmalltalkMethod, SmalltalkObject);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        this.__init__ = function () {
 | 
	
		
			
				|  |  | -            var globals = brikz.smalltalkGlobals.globals;
 | 
	
		
			
				|  |  | -            var addCoupledClass = brikz.classes.addCoupledClass;
 | 
	
		
			
				|  |  | -            st.addPackage("Kernel-Methods");
 | 
	
		
			
				|  |  | -            addCoupledClass("CompiledMethod", globals.Object, "Kernel-Methods", SmalltalkMethod);
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -        this.__init__.once = true;
 | 
	
		
			
				|  |  | +        coreFns.CompiledMethod = inherits(SmalltalkMethod, SmalltalkObject);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /* Smalltalk method object. To add a method to a class,
 | 
	
		
			
				|  |  |           use api.addMethod() */
 | 
	
	
		
			
				|  | @@ -376,8 +339,9 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    TraitsBrik.deps = ["behaviors"];
 | 
	
		
			
				|  |  | +    TraitsBrik.deps = ["behaviors", "root"];
 | 
	
		
			
				|  |  |      function TraitsBrik (brikz, st) {
 | 
	
		
			
				|  |  | +        var coreFns = brikz.root.coreFns;
 | 
	
		
			
				|  |  |          var SmalltalkBehaviorBody = brikz.behaviors.BehaviorBody;
 | 
	
		
			
				|  |  |          var setupBehavior = brikz.behaviors.setupBehavior;
 | 
	
		
			
				|  |  |          var buildBehaviorBody = brikz.behaviors.buildBehaviorBody;
 | 
	
	
		
			
				|  | @@ -385,7 +349,7 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |          function SmalltalkTrait () {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        inherits(SmalltalkTrait, SmalltalkBehaviorBody);
 | 
	
		
			
				|  |  | +        coreFns.Trait = inherits(SmalltalkTrait, SmalltalkBehaviorBody);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          SmalltalkTrait.prototype.toString = function () {
 | 
	
		
			
				|  |  |              return 'Smalltalk Trait ' + this.className;
 | 
	
	
		
			
				|  | @@ -409,14 +373,6 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |              if (st._traitMethodRemoved) st._traitMethodRemoved(method, this);
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        this.__init__ = function () {
 | 
	
		
			
				|  |  | -            var globals = brikz.smalltalkGlobals.globals;
 | 
	
		
			
				|  |  | -            var addCoupledClass = brikz.classes.addCoupledClass;
 | 
	
		
			
				|  |  | -            st.addPackage("Kernel-Classes");
 | 
	
		
			
				|  |  | -            addCoupledClass("Trait", globals.BehaviorBody, "Kernel-Classes", SmalltalkTrait);
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -        this.__init__.once = true;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          function traitBuilder (className) {
 | 
	
		
			
				|  |  |              return {
 | 
	
		
			
				|  |  |                  className: className,
 | 
	
	
		
			
				|  | @@ -441,9 +397,11 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    ClassesBrik.deps = ["root", "behaviors", "arraySet"];
 | 
	
		
			
				|  |  | +    ClassesBrik.deps = ["root", "behaviors", "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;
 | 
	
	
		
			
				|  | @@ -460,9 +418,9 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |          function SmalltalkMetaclass () {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        inherits(SmalltalkBehavior, SmalltalkBehaviorBody);
 | 
	
		
			
				|  |  | -        inherits(SmalltalkClass, SmalltalkBehavior);
 | 
	
		
			
				|  |  | -        inherits(SmalltalkMetaclass, SmalltalkBehavior);
 | 
	
		
			
				|  |  | +        coreFns.Behavior = inherits(SmalltalkBehavior, SmalltalkBehaviorBody);
 | 
	
		
			
				|  |  | +        coreFns.Class = inherits(SmalltalkClass, SmalltalkBehavior);
 | 
	
		
			
				|  |  | +        coreFns.Metaclass = inherits(SmalltalkMetaclass, SmalltalkBehavior);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // Fake root class of the system.
 | 
	
		
			
				|  |  |          // Effective superclass of all classes created with `nil subclass: ...`.
 | 
	
	
		
			
				|  | @@ -496,23 +454,14 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |              if (st._methodRemoved) st._methodRemoved(method, this);
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        this.__init__ = function () {
 | 
	
		
			
				|  |  | -            var globals = brikz.smalltalkGlobals.globals;
 | 
	
		
			
				|  |  | -            var addCoupledClass = brikz.classes.addCoupledClass;
 | 
	
		
			
				|  |  | +        this.bootstrapHierarchy = function () {
 | 
	
		
			
				|  |  |              var nilSubclasses = [globals.ProtoObject];
 | 
	
		
			
				|  |  | -            st.addPackage("Kernel-Classes");
 | 
	
		
			
				|  |  | -            addCoupledClass("Behavior", globals.BehaviorBody, "Kernel-Classes", SmalltalkBehavior);
 | 
	
		
			
				|  |  | -            addCoupledClass("Metaclass", globals.Behavior, "Kernel-Classes", SmalltalkMetaclass);
 | 
	
		
			
				|  |  | -            addCoupledClass("Class", globals.Behavior, "Kernel-Classes", SmalltalkClass);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            // Manually bootstrap the metaclass hierarchy
 | 
	
		
			
				|  |  |              nilAsClass.klass = globals.Class;
 | 
	
		
			
				|  |  |              nilSubclasses.forEach(function (each) {
 | 
	
		
			
				|  |  |                  each.klass.superclass = globals.Class;
 | 
	
		
			
				|  |  |                  addSubclass(each.klass);
 | 
	
		
			
				|  |  |              });
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  | -        this.__init__.once = true;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          /* Smalltalk class creation. A class is an instance of an automatically
 | 
	
		
			
				|  |  |           created metaclass object. Newly created classes (not their metaclass)
 | 
	
	
		
			
				|  | @@ -571,7 +520,7 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |              if (typeof superclass == 'undefined' || superclass && superclass.isNil) {
 | 
	
		
			
				|  |  |                  console.warn('Compiling ' + className + ' as a subclass of `nil`. A dependency might be missing.');
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  | -            return buildBehaviorBody(pkgName, classBuilder(className, superclass, iVarNames));
 | 
	
		
			
				|  |  | +            return buildBehaviorBody(pkgName, classBuilder(className, superclass, iVarNames, coreFns[className]));
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          function classBuilder (className, superclass, iVarNames, fn) {
 | 
	
	
		
			
				|  | @@ -620,13 +569,6 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        /* Create a new class coupling with a JavaScript constructor,
 | 
	
		
			
				|  |  | -         and add it to the system.*/
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        this.addCoupledClass = function (className, superclass, pkgName, fn) {
 | 
	
		
			
				|  |  | -            return buildBehaviorBody(pkgName, classBuilder(className, superclass, null, fn));
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          function metaSubclasses (metaclass) {
 | 
	
		
			
				|  |  |              return metaclass.instanceClass.subclasses
 | 
	
		
			
				|  |  |                  .filter(function (each) {
 | 
	
	
		
			
				|  | @@ -668,7 +610,10 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |          };
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +    SmalltalkInitBrik.deps = ["classes"];
 | 
	
		
			
				|  |  |      function SmalltalkInitBrik (brikz, st) {
 | 
	
		
			
				|  |  | +        var bootstrapHierarchy = brikz.classes.bootstrapHierarchy;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          var initialized = false;
 | 
	
		
			
				|  |  |          var runtimeLoadedPromise = new Promise(function (resolve, reject) {
 | 
	
		
			
				|  |  |              require(['./kernel-runtime'], resolve, reject);
 | 
	
	
		
			
				|  | @@ -679,6 +624,7 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |          st.initialize = function () {
 | 
	
		
			
				|  |  |              return runtimeLoadedPromise.then(function (configureWithRuntime) {
 | 
	
		
			
				|  |  |                  if (initialized) return;
 | 
	
		
			
				|  |  | +                bootstrapHierarchy();
 | 
	
		
			
				|  |  |                  configureWithRuntime(brikz);
 | 
	
		
			
				|  |  |                  initialized = true;
 | 
	
		
			
				|  |  |              });
 | 
	
	
		
			
				|  | @@ -754,11 +700,12 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |      NilBrik.deps = ["root"];
 | 
	
		
			
				|  |  |      function NilBrik (brikz, st) {
 | 
	
		
			
				|  |  |          var SmalltalkObject = brikz.root.Object;
 | 
	
		
			
				|  |  | +        var coreFns = brikz.root.coreFns;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          function SmalltalkNil () {
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        inherits(SmalltalkNil, SmalltalkObject);
 | 
	
		
			
				|  |  | +        coreFns.UndefinedObject = inherits(SmalltalkNil, SmalltalkObject);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          this.nilAsReceiver = new SmalltalkNil();
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -771,14 +718,6 @@ define(['require', './brikz', './compatibility'], function (require, Brikz) {
 | 
	
		
			
				|  |  |              value: true,
 | 
	
		
			
				|  |  |              enumerable: false, configurable: false, writable: false
 | 
	
		
			
				|  |  |          });
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -        this.__init__ = function () {
 | 
	
		
			
				|  |  | -            var globals = brikz.smalltalkGlobals.globals;
 | 
	
		
			
				|  |  | -            var addCoupledClass = brikz.classes.addCoupledClass;
 | 
	
		
			
				|  |  | -            st.addPackage("Kernel-Objects");
 | 
	
		
			
				|  |  | -            addCoupledClass("UndefinedObject", globals.Object, "Kernel-Objects", SmalltalkNil);
 | 
	
		
			
				|  |  | -        };
 | 
	
		
			
				|  |  | -        this.__init__.once = true;
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      /* Defines asReceiver to be present at load time */
 |