| 
					
				 | 
			
			
				@@ -237,18 +237,20 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		 metaclasses. */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		st.init = function(klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			st.initClass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			initClass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if(klass.klass && !klass.meta) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				st.initClass(klass.klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				initClass(klass.klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		st.initClass = function(klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		function initClass(klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if(klass.wrapped) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				copySuperclass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				dnu.installHandlers(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		this.initClass = initClass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		function copySuperclass(klass, superclass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			var inheritedMethods = Object.create(null); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -315,7 +317,7 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		var org = brikz.ensure("organize"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		var root = brikz.ensure("root"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		brikz.ensure("classInit"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		var classInit = brikz.ensure("classInit"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		var nil = root.nil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		var rootAsClass = root.rootAsClass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		var SmalltalkObject = root.Object; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -536,7 +538,7 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// The fn property changed. We need to add back the klass property to the prototype 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			wireKlass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			st.initClass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			classInit.initClass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		/* Create an alias for an existing class */ 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -573,7 +575,6 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		var SmalltalkObject = brikz.ensure("root").Object; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		brikz.ensure("selectorConversion"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		brikz.ensure("classes"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		brikz.ensure("classInit"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		function SmalltalkMethod() {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		inherits(SmalltalkMethod, SmalltalkObject); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -625,7 +626,7 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// Therefore we populate the organizer here too 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			org.addOrganizationElement(klass, method.protocol); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			propagateMethodChange(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			propagateMethodChange(klass, method); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			var usedSelectors = method.messageSends; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			var dnuHandlers = []; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -643,20 +644,29 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		function propagateMethodChange(klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		function propagateMethodChange(klass, method) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// If already initialized (else it will be done later anyway), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// re-initialize all subclasses to ensure the method change 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// propagation (for wrapped classes, not using the prototype 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// chain). 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			//TODO: optimize, only one method need to be updated, not all of them 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if (stInit.initialized()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				st.allSubclasses(klass).forEach(function (subclass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					st.initClass(subclass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					initMethodInClass(subclass, method); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		function initMethodInClass (klass, method) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (klass.wrapped && !klass.methods[method.selector]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				var jsSelector = method.jsSelector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				manip.installMethod({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					jsSelector: jsSelector, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					fn: klass.superclass.fn.prototype[jsSelector] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}, klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		st.removeMethod = function(method, klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if (klass !== method.methodClass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				throw new Error( 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -670,8 +680,8 @@ define("amber/boot", [ 'require', './browser-compatibility' ], function (require 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			delete klass.fn.prototype[method.jsSelector]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			delete klass.methods[method.selector]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			st.initClass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			propagateMethodChange(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			initMethodInClass(klass, method); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			propagateMethodChange(klass, method); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// Do *not* delete protocols from here. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// This is handled by #removeCompiledMethod 
			 |