| 
					
				 | 
			
			
				@@ -279,6 +279,7 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	st.initClass = function(klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(klass.wrapped) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			klass.inheritedMethods = {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			copySuperclass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			installSuperclass(klass); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -312,7 +313,7 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			superclass && superclass !== nil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			superclass = superclass.superclass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			for (var keys = Object.keys(superclass.methods), i = 0; i < keys.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				installMethodIfAbsent(superclass.methods[keys[i]], klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				inheritMethodIfAbsent(superclass.methods[keys[i]], klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -324,11 +325,15 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	function installMethodIfAbsent(method, klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		var jsFunction = klass.fn.prototype[method.jsSelector]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(!jsFunction || jsFunction.isAmberDNU) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			installMethod(method, klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	function inheritMethodIfAbsent(method, klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		var selector = method.selector; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(klass.methods.hasOwnProperty(selector) || klass.inheritedMethods.hasOwnProperty(selector)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		installMethod(method, klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		klass.inheritedMethods[method.selector] = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	function reinstallMethods(klass) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -340,14 +345,21 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	function installDnuHandlers(klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		var m = dnu.methods; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		for(var i=0; i<m.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			installMethodIfAbsent(m[i], klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			installDnuHandlerIfAbsent(m[i], klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	function installNewDnuHandler(newHandler) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		installMethodIfAbsent(newHandler, st.Object); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		installDnuHandlerIfAbsent(newHandler, st.Object); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		for(var i = 0; i < wrappedClasses.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			installMethodIfAbsent(newHandler, wrappedClasses[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			installDnuHandlerIfAbsent(newHandler, wrappedClasses[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	function installDnuHandlerIfAbsent(handler, klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		var jsFunction = klass.fn.prototype[handler.jsSelector]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(!jsFunction) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			installMethod(handler, klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |