|  | @@ -68,7 +68,7 @@ function Brikz(api, apiKey, initKey) {
 | 
	
		
			
				|  |  |  		ensure: { value: null,
 | 
	
		
			
				|  |  |  			enumerable: false, configurable: true, writable: true},
 | 
	
		
			
				|  |  |  		rebuild: { value: function() {
 | 
	
		
			
				|  |  | -			var obrikz = mixin(backup, {});
 | 
	
		
			
				|  |  | +			var obrikz = mixin(backup, {}), inits = [], chk = {};
 | 
	
		
			
				|  |  |  			forEach(obrikz, function(brik) {
 | 
	
		
			
				|  |  |  				mixin({}, api, brik[apiKey] || Object.keys(brik));
 | 
	
		
			
				|  |  |  			});
 | 
	
	
		
			
				|  | @@ -79,6 +79,7 @@ function Brikz(api, apiKey, initKey) {
 | 
	
		
			
				|  |  |  				mixin({}, api, Object.keys(api));
 | 
	
		
			
				|  |  |  				while (typeof b === "function") b = new b(brikz, api, bak);
 | 
	
		
			
				|  |  |  				if (b && !b[apiKey]) b[apiKey] = mixin(api, {});
 | 
	
		
			
				|  |  | +				if (b && b[initKey] && !chk[key]) { chk[key]=1;inits.push(b); }
 | 
	
		
			
				|  |  |  				return brikz[key] = backup[key] = b;
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			forEach(brikz, function(brik, key) { brikz.ensure(key); });
 | 
	
	
		
			
				|  | @@ -86,7 +87,7 @@ function Brikz(api, apiKey, initKey) {
 | 
	
		
			
				|  |  |  			mixin({}, api, Object.keys(api));
 | 
	
		
			
				|  |  |  			mixin(oapi, api);
 | 
	
		
			
				|  |  |  			forEach(brikz, function(brik) { mixin(brik[apiKey] || {}, api); });
 | 
	
		
			
				|  |  | -			forEach(brikz, function(brik) {brik[initKey] && brik[initKey]();});
 | 
	
		
			
				|  |  | +			inits.forEach(function(brik) { brik[initKey](); });
 | 
	
		
			
				|  |  |  		}, enumerable: false, configurable: true, writable: false }});
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -112,11 +113,18 @@ var nil = new SmalltalkNil();
 | 
	
		
			
				|  |  |  var api = new Smalltalk;
 | 
	
		
			
				|  |  |  var brikz = new Brikz(api);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +function RootBrik(brikz, st) {
 | 
	
		
			
				|  |  | +	this.__init__ = function () {
 | 
	
		
			
				|  |  | +		st.wrapClassName("Object", "Kernel-Objects", SmalltalkObject, undefined, false);
 | 
	
		
			
				|  |  | +		st.wrapClassName("Smalltalk", "Kernel-Objects", Smalltalk, st.Object, false);
 | 
	
		
			
				|  |  | +		st.wrapClassName("UndefinedObject", "Kernel-Objects", SmalltalkNil, st.Object, false);
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  function OrganizeBrik(brikz, st) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	brikz.ensure("augments");
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	var org = this;
 | 
	
		
			
				|  |  | +	brikz.ensure("root");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	function SmalltalkOrganizer () {}
 | 
	
		
			
				|  |  |  	function SmalltalkPackageOrganizer () {
 | 
	
	
		
			
				|  | @@ -130,24 +138,26 @@ function OrganizeBrik(brikz, st) {
 | 
	
		
			
				|  |  |  	inherits(SmalltalkPackageOrganizer, SmalltalkOrganizer);
 | 
	
		
			
				|  |  |  	inherits(SmalltalkClassOrganizer, SmalltalkOrganizer);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	org.Organizer = SmalltalkOrganizer;
 | 
	
		
			
				|  |  | -	org.PackageOrganizer = SmalltalkPackageOrganizer;
 | 
	
		
			
				|  |  | -	org.ClassOrganizer = SmalltalkClassOrganizer;
 | 
	
		
			
				|  |  | +	this.__init__ = function () {
 | 
	
		
			
				|  |  | +		st.wrapClassName("Organizer", "Kernel-Objects", SmalltalkOrganizer, st.Object, false);
 | 
	
		
			
				|  |  | +		st.wrapClassName("PackageOrganizer", "Kernel-Objects", SmalltalkPackageOrganizer, st.Organizer, false);
 | 
	
		
			
				|  |  | +		st.wrapClassName("ClassOrganizer", "Kernel-Objects", SmalltalkClassOrganizer, st.Organizer, false);
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	org.setupClassOrganization = function (klass) {
 | 
	
		
			
				|  |  | -		klass.organization = new org.ClassOrganizer;
 | 
	
		
			
				|  |  | +	this.setupClassOrganization = function (klass) {
 | 
	
		
			
				|  |  | +		klass.organization = new SmalltalkClassOrganizer;
 | 
	
		
			
				|  |  |  		klass.organization.theClass = klass;
 | 
	
		
			
				|  |  |  	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	org.setupPackageOrganization = function (pkg) {
 | 
	
		
			
				|  |  | -		pkg.organization = new org.PackageOrganizer;
 | 
	
		
			
				|  |  | +	this.setupPackageOrganization = function (pkg) {
 | 
	
		
			
				|  |  | +		pkg.organization = new SmalltalkPackageOrganizer;
 | 
	
		
			
				|  |  |  	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	org.addOrganizationElement = function (owner, element) {
 | 
	
		
			
				|  |  | +	this.addOrganizationElement = function (owner, element) {
 | 
	
		
			
				|  |  |  		owner.organization.elements.addElement(element);
 | 
	
		
			
				|  |  |  	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	org.removeOrganizationElement = function (owner, element) {
 | 
	
		
			
				|  |  | +	this.removeOrganizationElement = function (owner, element) {
 | 
	
		
			
				|  |  |  		owner.organization.elements.removeElement(element);
 | 
	
		
			
				|  |  |  	};
 | 
	
		
			
				|  |  |  }
 | 
	
	
		
			
				|  | @@ -304,10 +314,15 @@ function ClassesBrik(brikz, st) {
 | 
	
		
			
				|  |  |  	inherits(SmalltalkClass, SmalltalkBehavior);
 | 
	
		
			
				|  |  |  	inherits(SmalltalkMetaclass, SmalltalkBehavior);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	this.Package = SmalltalkPackage;
 | 
	
		
			
				|  |  | -	this.Behavior = SmalltalkBehavior;
 | 
	
		
			
				|  |  | -	this.Class = SmalltalkClass;
 | 
	
		
			
				|  |  | -	this.Metaclass = SmalltalkMetaclass;
 | 
	
		
			
				|  |  | +	this.__init__ = function () {
 | 
	
		
			
				|  |  | +		st.wrapClassName("Behavior", "Kernel-Classes", SmalltalkBehavior, st.Object, false);
 | 
	
		
			
				|  |  | +		st.wrapClassName("Metaclass", "Kernel-Classes", SmalltalkMetaclass, st.Behavior, false);
 | 
	
		
			
				|  |  | +		st.wrapClassName("Class", "Kernel-Classes", SmalltalkClass, st.Behavior, false);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		st.Object.klass.superclass = st.Class;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		st.wrapClassName("Package", "Kernel-Objects", SmalltalkPackage, st.Object, false);
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* Smalltalk classes */
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -529,7 +544,9 @@ function MethodsBrik(brikz, st) {
 | 
	
		
			
				|  |  |  	function SmalltalkMethod() {}
 | 
	
		
			
				|  |  |  	inherits(SmalltalkMethod, SmalltalkObject);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -	this.Method = SmalltalkMethod;
 | 
	
		
			
				|  |  | +	this.__init__ = function () {
 | 
	
		
			
				|  |  | +		st.wrapClassName("CompiledMethod", "Kernel-Methods", SmalltalkMethod, st.Object, false);
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	/* Smalltalk method object. To add a method to a class,
 | 
	
		
			
				|  |  |  	 use smalltalk.addMethod() */
 | 
	
	
		
			
				|  | @@ -676,6 +693,27 @@ function SmalltalkInitBrik(brikz, st) {
 | 
	
		
			
				|  |  |  		return initialized;
 | 
	
		
			
				|  |  |  	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	this.__init__ = function () {
 | 
	
		
			
				|  |  | +		st.wrapClassName("Number", "Kernel-Objects", Number, st.Object);
 | 
	
		
			
				|  |  | +		st.wrapClassName("BlockClosure", "Kernel-Methods", Function, st.Object);
 | 
	
		
			
				|  |  | +		st.wrapClassName("Boolean", "Kernel-Objects", Boolean, st.Object);
 | 
	
		
			
				|  |  | +		st.wrapClassName("Date", "Kernel-Objects", Date, st.Object);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		st.addClass("Collection", st.Object, null, "Kernel-Collections");
 | 
	
		
			
				|  |  | +		st.addClass("IndexableCollection", st.Collection, null, "Kernel-Collections");
 | 
	
		
			
				|  |  | +		st.addClass("SequenceableCollection", st.IndexableCollection, null, "Kernel-Collections");
 | 
	
		
			
				|  |  | +		st.addClass("CharacterArray", st.SequenceableCollection, null, "Kernel-Collections");
 | 
	
		
			
				|  |  | +		st.wrapClassName("String", "Kernel-Collections", String, st.CharacterArray);
 | 
	
		
			
				|  |  | +		st.wrapClassName("Array", "Kernel-Collections", Array, st.SequenceableCollection);
 | 
	
		
			
				|  |  | +		st.wrapClassName("RegularExpression", "Kernel-Collections", RegExp, st.Object);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		st.wrapClassName("Error", "Kernel-Exceptions", Error, st.Object);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		/* Alias definitions */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		st.alias(st.Array, "OrderedCollection");
 | 
	
		
			
				|  |  | +		st.alias(st.Date, "Time");
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  function PrimitivesBrik(brikz, st) {
 | 
	
	
		
			
				|  | @@ -743,6 +781,8 @@ function PrimitivesBrik(brikz, st) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  function RuntimeBrik(brikz, st) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +	brikz.ensure("root");
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	function SmalltalkMethodContext(home, setup) {
 | 
	
		
			
				|  |  |  		this.homeContext = home;
 | 
	
		
			
				|  |  |  		this.setup       = setup || function() {};
 | 
	
	
		
			
				|  | @@ -756,7 +796,10 @@ function RuntimeBrik(brikz, st) {
 | 
	
		
			
				|  |  |  	SmalltalkMethodContext.prototype.lookupClass = null;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	inherits(SmalltalkMethodContext, SmalltalkObject);
 | 
	
		
			
				|  |  | -	this.MethodContext = SmalltalkMethodContext;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	this.__init__ = function () {
 | 
	
		
			
				|  |  | +		st.wrapClassName("MethodContext", "Kernel-Methods", SmalltalkMethodContext, st.Object, false);
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	SmalltalkMethodContext.prototype.fill = function(receiver, selector, locals, lookupClass) {
 | 
	
		
			
				|  |  |  		this.receiver    = receiver;
 | 
	
	
		
			
				|  | @@ -1001,52 +1044,7 @@ function SelectorConversionBrik(brikz, st) {
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -function BootstrapBrik(brikz, st) {
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	brikz.ensure("classes");
 | 
	
		
			
				|  |  | -	brikz.ensure("methods");
 | 
	
		
			
				|  |  | -	brikz.ensure("organize");
 | 
	
		
			
				|  |  | -	brikz.ensure("runtime");
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -	this.bootstrap = function () {
 | 
	
		
			
				|  |  | -		st.wrapClassName("Object", "Kernel-Objects", SmalltalkObject, undefined, false);
 | 
	
		
			
				|  |  | -		st.wrapClassName("Behavior", "Kernel-Classes", brikz.classes.Behavior, st.Object, false);
 | 
	
		
			
				|  |  | -		st.wrapClassName("Metaclass", "Kernel-Classes", brikz.classes.Metaclass, st.Behavior, false);
 | 
	
		
			
				|  |  | -		st.wrapClassName("Class", "Kernel-Classes", brikz.classes.Class, st.Behavior, false);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		st.Object.klass.superclass = st.Class;
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		st.wrapClassName("Smalltalk", "Kernel-Objects", Smalltalk, st.Object, false);
 | 
	
		
			
				|  |  | -		st.wrapClassName("Package", "Kernel-Objects", brikz.classes.Package, st.Object, false);
 | 
	
		
			
				|  |  | -		st.wrapClassName("CompiledMethod", "Kernel-Methods", brikz.methods.Method, st.Object, false);
 | 
	
		
			
				|  |  | -		st.wrapClassName("Organizer", "Kernel-Objects", brikz.organize.Organizer, st.Object, false);
 | 
	
		
			
				|  |  | -		st.wrapClassName("PackageOrganizer", "Kernel-Objects", brikz.organize.PackageOrganizer, st.Organizer, false);
 | 
	
		
			
				|  |  | -		st.wrapClassName("ClassOrganizer", "Kernel-Objects", brikz.organize.ClassOrganizer, st.Organizer, false);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		st.wrapClassName("Number", "Kernel-Objects", Number, st.Object);
 | 
	
		
			
				|  |  | -		st.wrapClassName("BlockClosure", "Kernel-Methods", Function, st.Object);
 | 
	
		
			
				|  |  | -		st.wrapClassName("Boolean", "Kernel-Objects", Boolean, st.Object);
 | 
	
		
			
				|  |  | -		st.wrapClassName("Date", "Kernel-Objects", Date, st.Object);
 | 
	
		
			
				|  |  | -		st.wrapClassName("UndefinedObject", "Kernel-Objects", SmalltalkNil, st.Object, false);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		st.addClass("Collection", st.Object, null, "Kernel-Collections");
 | 
	
		
			
				|  |  | -		st.addClass("IndexableCollection", st.Collection, null, "Kernel-Collections");
 | 
	
		
			
				|  |  | -		st.addClass("SequenceableCollection", st.IndexableCollection, null, "Kernel-Collections");
 | 
	
		
			
				|  |  | -		st.addClass("CharacterArray", st.SequenceableCollection, null, "Kernel-Collections");
 | 
	
		
			
				|  |  | -		st.wrapClassName("String", "Kernel-Collections", String, st.CharacterArray);
 | 
	
		
			
				|  |  | -		st.wrapClassName("Array", "Kernel-Collections", Array, st.SequenceableCollection);
 | 
	
		
			
				|  |  | -		st.wrapClassName("RegularExpression", "Kernel-Collections", RegExp, st.Object);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		st.wrapClassName("Error", "Kernel-Exceptions", Error, st.Object);
 | 
	
		
			
				|  |  | -		st.wrapClassName("MethodContext", "Kernel-Methods", brikz.runtime.MethodContext, st.Object, false);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		/* Alias definitions */
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		st.alias(st.Array, "OrderedCollection");
 | 
	
		
			
				|  |  | -		st.alias(st.Date, "Time");
 | 
	
		
			
				|  |  | -	};
 | 
	
		
			
				|  |  | -}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +brikz.root = RootBrik;
 | 
	
		
			
				|  |  |  brikz.dnu = DNUBrik;
 | 
	
		
			
				|  |  |  brikz.messageSend = MessageSendBrik;
 | 
	
		
			
				|  |  |  brikz.organize = OrganizeBrik;
 | 
	
	
		
			
				|  | @@ -1059,10 +1057,8 @@ brikz.classes = ClassesBrik;
 | 
	
		
			
				|  |  |  brikz.methods = MethodsBrik;
 | 
	
		
			
				|  |  |  brikz.stInit = SmalltalkInitBrik;
 | 
	
		
			
				|  |  |  brikz.augments = AugmentsBrik;
 | 
	
		
			
				|  |  | -brikz.bootstrap = BootstrapBrik;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  brikz.rebuild();
 | 
	
		
			
				|  |  | -brikz.bootstrap.bootstrap();
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  global_smalltalk = api;
 | 
	
		
			
				|  |  |  global_nil = nil;
 |