| 
					
				 | 
			
			
				@@ -48,7 +48,7 @@ if(typeof console === "undefined") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 /* Array extensions */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Array.prototype.addElement = function(el) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if(typeof el === 'undefined') { return false; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if(typeof el === 'undefined') { return; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if(this.indexOf(el) == -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.push(el); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -185,12 +185,12 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		spec = spec || {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		var meta = metaclass(spec); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		var that = meta.instanceClass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        setupClass(that, spec); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		that.fn = spec.fn || function() {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		setupClass(that, spec); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         that.className = spec.className; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         that.wrapped   = spec.wrapped || false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		meta.className = spec.className + ' class'; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        that.organization = new SmalltalkOrganizer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(spec.superclass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			that.superclass = spec.superclass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			meta.superclass = spec.superclass.klass; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -199,31 +199,19 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	function metaclass(spec) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        var superConstructor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        spec = spec || {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(spec.superclass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            superConstructor = spec.superclass.klass.fn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            superConstructor = SmalltalkClass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		spec = spec || {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		var that = new SmalltalkMetaclass(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        that.fn            = function() {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        that.organization  = new SmalltalkOrganizer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        inherits(that.fn, superConstructor); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        setupClass(that); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		inherits( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			that.fn = function() {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			spec.superclass ? spec.superclass.klass.fn : SmalltalkClass 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		setupClass(that); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		that.instanceClass = new that.fn(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		return that; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	function setupClass(klass, spec) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         spec = spec || {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(!klass.fn) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		    klass.fn = spec.fn || function() {}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		klass.iVarNames = spec.iVarNames || []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		klass.pkg = spec.pkg; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -232,12 +220,13 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             configurable: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		klass.organization = new SmalltalkOrganizer(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		Object.defineProperties(klass, { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			methods: {  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                value: {},  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                enumerable: false,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                configurable: true,  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                writable: true  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                value: {}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                enumerable: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                configurable: true, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                writable: true 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -285,14 +274,14 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             installSuperclass(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if(klass === smalltalk.Object || klass.wrapped) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(klass === st.Object || klass.wrapped) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             installDnuHandlers(klass); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     function installSuperclass(klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // only if the klass has not been initialized yet. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(klass.fn.prototype._yourself) { return false; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(klass.fn.prototype._yourself) { return; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(klass.superclass && klass.superclass !== nil) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             inherits(klass.fn, klass.superclass.fn); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -348,7 +337,7 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	function installNewDnuHandler(string) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(dnuHandlers.indexOf(string) === -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             addDnuHandler(string); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            installDnuHandler(string, smalltalk.Object); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            installDnuHandler(string, st.Object); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             for(var i=0; i<wrappedClasses.length; i++) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 installDnuHandler(string, wrappedClasses[i]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -528,6 +517,7 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				st.thisContext = undefined; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				if(error.smalltalkError) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					handleError(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return nil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					throw(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -542,7 +532,7 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		method = klass ? klass.fn.prototype[selector] : receiver.klass && receiver[selector]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(method) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			var context = pushContext(receiver, selector, method, args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			var context = pushContext(receiver, selector, args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			call = method.apply(receiver, args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			popContext(context); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return call; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -561,6 +551,7 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				st.thisContext = undefined; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				if(error.smalltalkError) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					handleError(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return nil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					throw(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -579,7 +570,7 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	   (See the Smalltalk class ErrorHandler and its subclasses */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	function handleError(error) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        smalltalk.ErrorHandler._current()._handleError_(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        st.ErrorHandler._current()._handleError_(error); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	/* Handles #dnu: *and* JavaScript method calls. 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -640,9 +631,7 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	/* Handle thisContext pseudo variable */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	st.getThisContext = function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(st.thisContext) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return st.thisContext.copy(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return st.thisContext ? st.thisContext.copy() : nil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	function pushContext(receiver, selector, temps) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -719,7 +708,7 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			.replace(/_eq/g, '=') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			.replace(/_comma/g, ',') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			.replace(/_at/g, '@') 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	/* Converts a JavaScript object to valid Smalltalk Object */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	st.readJSObject = function(js) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -728,7 +717,7 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		var readArray = (js.constructor === Array); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		if(readObject) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			object = smalltalk.Dictionary._new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			object = st.Dictionary._new(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		for(var i in js) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			if(readObject) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -744,17 +733,18 @@ function Smalltalk() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /* Boolean assertion */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     st.assert = function(boolean) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(boolean.klass === smalltalk.Boolean) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(boolean.klass === st.Boolean) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			return boolean; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			smalltalk.NonBooleanReceiver._new()._object_(boolean)._signal(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			st.NonBooleanReceiver._new()._object_(boolean)._signal(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			//TODO return sane value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     /* Smalltalk initialization. Called on page load */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     st.initialize = function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(initialized) {return false} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(initialized) { return; } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		classes.forEach(function(klass) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             st.init(klass); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -781,7 +771,7 @@ function SmalltalkMethodContext(receiver, selector, temps, home) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     //     smalltalk.thisContext = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     //     return this.method.apply(receiver, temps); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     // }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 inherits(SmalltalkMethodContext, SmalltalkObject); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |