|  | @@ -277,6 +277,55 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require
 | 
	
		
			
				|  |  |  		this.installMethod = installMethod;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	function PackagesBrik(brikz, st) {
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		var org = brikz.ensure("organize");
 | 
	
		
			
				|  |  | +		var root = brikz.ensure("root");
 | 
	
		
			
				|  |  | +		var nil = root.nil;
 | 
	
		
			
				|  |  | +		var SmalltalkObject = root.Object;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		function SmalltalkPackage() {}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		inherits(SmalltalkPackage, SmalltalkObject);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		this.__init__ = function () {
 | 
	
		
			
				|  |  | +			st.addPackage("Kernel-Infrastructure");
 | 
	
		
			
				|  |  | +			st.wrapClassName("Package", "Kernel-Infrastructure", SmalltalkPackage, globals.Object, false);
 | 
	
		
			
				|  |  | +		};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		st.packages = {};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		/* Smalltalk package creation. To add a Package, use smalltalk.addPackage() */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		function pkg(spec) {
 | 
	
		
			
				|  |  | +			var that = new SmalltalkPackage();
 | 
	
		
			
				|  |  | +			that.pkgName = spec.pkgName;
 | 
	
		
			
				|  |  | +			org.setupPackageOrganization(that);
 | 
	
		
			
				|  |  | +			that.properties = spec.properties || {};
 | 
	
		
			
				|  |  | +			return that;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		/* Add a package to the smalltalk.packages object, creating a new one if needed.
 | 
	
		
			
				|  |  | +		 If pkgName is null or empty we return nil, which is an allowed package for a class.
 | 
	
		
			
				|  |  | +		 If package already exists we still update the properties of it. */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		st.addPackage = function(pkgName, properties) {
 | 
	
		
			
				|  |  | +			if(!pkgName) {return nil;}
 | 
	
		
			
				|  |  | +			if(!(st.packages[pkgName])) {
 | 
	
		
			
				|  |  | +				st.packages[pkgName] = pkg({
 | 
	
		
			
				|  |  | +					pkgName: pkgName,
 | 
	
		
			
				|  |  | +					properties: properties
 | 
	
		
			
				|  |  | +				});
 | 
	
		
			
				|  |  | +			} else {
 | 
	
		
			
				|  |  | +				if(properties) {
 | 
	
		
			
				|  |  | +					st.packages[pkgName].properties = properties;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			return st.packages[pkgName];
 | 
	
		
			
				|  |  | +		};
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  	function ClassesBrik(brikz, st) {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		var org = brikz.ensure("organize");
 | 
	
	
		
			
				|  | @@ -287,12 +336,10 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require
 | 
	
		
			
				|  |  |  		var SmalltalkObject = root.Object;
 | 
	
		
			
				|  |  |  		rootAsClass.klass = {fn: SmalltalkClass};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		function SmalltalkPackage() {}
 | 
	
		
			
				|  |  |  		function SmalltalkBehavior() {}
 | 
	
		
			
				|  |  |  		function SmalltalkClass() {}
 | 
	
		
			
				|  |  |  		function SmalltalkMetaclass() {}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		inherits(SmalltalkPackage, SmalltalkObject);
 | 
	
		
			
				|  |  |  		inherits(SmalltalkBehavior, SmalltalkObject);
 | 
	
		
			
				|  |  |  		inherits(SmalltalkClass, SmalltalkBehavior);
 | 
	
		
			
				|  |  |  		inherits(SmalltalkMetaclass, SmalltalkBehavior);
 | 
	
	
		
			
				|  | @@ -308,9 +355,6 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require
 | 
	
		
			
				|  |  |  			// Manually bootstrap the metaclass hierarchy
 | 
	
		
			
				|  |  |  			globals.ProtoObject.klass.superclass = rootAsClass.klass = globals.Class;
 | 
	
		
			
				|  |  |  			addSubclass(globals.ProtoObject.klass);
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -			st.addPackage("Kernel-Infrastructure");
 | 
	
		
			
				|  |  | -			st.wrapClassName("Package", "Kernel-Infrastructure", SmalltalkPackage, globals.Object, false);
 | 
	
		
			
				|  |  |  		};
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		/* Smalltalk classes */
 | 
	
	
		
			
				|  | @@ -318,20 +362,6 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require
 | 
	
		
			
				|  |  |  		var classes = [];
 | 
	
		
			
				|  |  |  		var wrappedClasses = [];
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		/* We hold all Packages in a separate Object */
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		st.packages = {};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		/* Smalltalk package creation. To add a Package, use smalltalk.addPackage() */
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		function pkg(spec) {
 | 
	
		
			
				|  |  | -			var that = new SmalltalkPackage();
 | 
	
		
			
				|  |  | -			that.pkgName = spec.pkgName;
 | 
	
		
			
				|  |  | -			org.setupPackageOrganization(that);
 | 
	
		
			
				|  |  | -			that.properties = spec.properties || {};
 | 
	
		
			
				|  |  | -			return that;
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  		/* Smalltalk class creation. A class is an instance of an automatically
 | 
	
		
			
				|  |  |  		 created metaclass object. Newly created classes (not their metaclass)
 | 
	
		
			
				|  |  |  		 should be added to the smalltalk object, see smalltalk.addClass().
 | 
	
	
		
			
				|  | @@ -394,25 +424,6 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require
 | 
	
		
			
				|  |  |  			wireKlass(klass);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		/* Add a package to the smalltalk.packages object, creating a new one if needed.
 | 
	
		
			
				|  |  | -		 If pkgName is null or empty we return nil, which is an allowed package for a class.
 | 
	
		
			
				|  |  | -		 If package already exists we still update the properties of it. */
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -		st.addPackage = function(pkgName, properties) {
 | 
	
		
			
				|  |  | -			if(!pkgName) {return nil;}
 | 
	
		
			
				|  |  | -			if(!(st.packages[pkgName])) {
 | 
	
		
			
				|  |  | -				st.packages[pkgName] = pkg({
 | 
	
		
			
				|  |  | -					pkgName: pkgName,
 | 
	
		
			
				|  |  | -					properties: properties
 | 
	
		
			
				|  |  | -				});
 | 
	
		
			
				|  |  | -			} else {
 | 
	
		
			
				|  |  | -				if(properties) {
 | 
	
		
			
				|  |  | -					st.packages[pkgName].properties = properties;
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -			}
 | 
	
		
			
				|  |  | -			return st.packages[pkgName];
 | 
	
		
			
				|  |  | -		};
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |  		/* Add a class to the smalltalk object, creating a new one if needed.
 | 
	
		
			
				|  |  |  		 A Package is lazily created if it does not exist with given name. */
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -1127,6 +1138,7 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require
 | 
	
		
			
				|  |  |  	brikz.selectorConversion = SelectorConversionBrik;
 | 
	
		
			
				|  |  |  	brikz.classInit = ClassInitBrik;
 | 
	
		
			
				|  |  |  	brikz.manipulation = ManipulationBrik;
 | 
	
		
			
				|  |  | +	brikz.packages = PackagesBrik;
 | 
	
		
			
				|  |  |  	brikz.classes = ClassesBrik;
 | 
	
		
			
				|  |  |  	brikz.methods = MethodsBrik;
 | 
	
		
			
				|  |  |  	brikz.stInit = SmalltalkInitBrik;
 |