| 
					
				 | 
			
			
				@@ -197,6 +197,7 @@ function Smalltalk(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	    receiver = nil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	var klass = klass || receiver.klass; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if(!klass) { return messageNotUnderstood(receiver, selector, args) }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	var method = klass.fn.prototype[selector]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	if(!method) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	    return messageNotUnderstood(receiver, selector, args); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -204,10 +205,26 @@ function Smalltalk(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return method.apply(receiver, args); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    /* handle #dnu:.  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-       Assume that the receiver understands #doesNotUnderstand: */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /* Handles #dnu: *and* JavaScript method calls. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       if the receiver has no klass, we consider it a JS object (outside of the 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+       Jtalk system). Else assume that the receiver understands #doesNotUnderstand: */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     messageNotUnderstood = function(receiver, selector, args) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/* Handles JS method calls. Assumes that a single array or single argument was passed from Jtalk. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	   Example: someJSObject foo: #(1 2 3) -> someJSObject.foo(1,2,3); */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var jsFunction = receiver[selector.replace(/_/g, '')]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	var jsArguments; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if(receiver.klass === undefined && typeof jsFunction === "function") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    if(args[0].constructor === Array) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		jsArguments = args[0] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		jsArguments = [args[0]] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	    return jsFunction.apply(receiver, jsArguments); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	/* Handles not understood messages. Also see the Jtalk counter-part  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	   Object>>doesNotUnderstand: */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	return receiver._doesNotUnderstand_( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	    st.Message._new() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		._selector_(convertSelector(selector)) 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -313,6 +330,6 @@ smalltalk.mapClassName("RegularExpression", "Kernel", RegExp, smalltalk.String); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 smalltalk.mapClassName("Error", "Kernel", Error, smalltalk.Object); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//if(CanvasRenderingContext2D) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//    smalltalk.mapClassName("CanvasRenderingContext", "Canvas", CanvasRenderingContext2D, smalltalk.Object); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-//} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+if(this.CanvasRenderingContext2D) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    smalltalk.mapClassName("CanvasRenderingContext", "Canvas", CanvasRenderingContext2D, smalltalk.Object); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 |