Index: src/builtin/yaml.rb
===================================================================
RCS file: /cvsroot/jruby/jruby/src/builtin/yaml.rb,v
retrieving revision 1.1.2.3
diff -u -r1.1.2.3 yaml.rb
--- src/builtin/yaml.rb	10 Feb 2006 22:00:49 -0000	1.1.2.3
+++ src/builtin/yaml.rb	26 Mar 2006 07:20:39 -0000
@@ -935,8 +935,8 @@
 	def YAML.make_stream( io )
         if String === io
             io = StringIO.new( io )
-        elsif not IO === io
-            raise YAML::Error, "YAML stream must be an IO or String object."
+        #elsif not IO === io
+        #    raise YAML::Error, "YAML stream must be an IO or String object."
         end
         if YAML::unicode
             def io.readline
@@ -2995,6 +2995,8 @@
     begin
         @stream.readline
     rescue IOError
+    # once here, we should probably be returning nil without explicit;;; fix interpreter
+    nil
     end
 end
 
Index: src/lib/ruby/1.8/zlib.rb
===================================================================
RCS file: /cvsroot/jruby/jruby/src/lib/ruby/1.8/zlib.rb,v
retrieving revision 1.1.2.5
diff -u -r1.1.2.5 zlib.rb
--- src/lib/ruby/1.8/zlib.rb	25 Mar 2006 04:57:08 -0000	1.1.2.5
+++ src/lib/ruby/1.8/zlib.rb	26 Mar 2006 07:20:39 -0000
@@ -260,7 +260,8 @@
     end
 
     def finish
-      @stream.finish
+      # FIXME: this doesn't appear to work
+      #@stream.finish
     end
 
     #
@@ -546,10 +547,10 @@
       else
         raise ArgError.new("negative length %d given",len) if len<0
         len.times do 
-          if n=getc
+          if n = getc
             val << n
           else
-            raise ArgError.new("to long %d given",len)
+            raise ArgError.new("too long %d given",len)
           end
         end
       end
@@ -575,7 +576,7 @@
     #
     def readchar
       val = getc
-      raise EOFError.new("end of file reached") if val.nil?1
+      raise EOFError.new("end of file reached") if val.nil?
       val
     end
 
@@ -633,7 +634,7 @@
     # Not supported.
     #
     def eof?
-      eof
+      @io.available != 1
     end
 
     #
@@ -643,8 +644,19 @@
       # This is impl is wrong since it ignores separator argument.  I wanted some symmetrical
       # unit tests so I added this as a quick hack (plus newline is the common case so it will
       # have some use until it is fixed).
-      b = BufferedReader.new(InputStreamReader.new(@io))
-	  b.readLine + "\n"
+      
+      # cnutter: This is going to be *slow* but using a BufferedReader causes the whole zip stream to
+      # be read in and buffered, so we need a better way to pull off a line at a time
+      
+      str = ''
+      ch = getc
+      return nil if ch.nil?
+      while ch > -1 && ch != "\n"[0]
+        str << ch
+        ch = @io.read
+      end
+	  # return line if nil, otherwise cat \n
+	  str.chomp + "\n"
     end
     
     #
Index: src/org/jruby/RubyComparable.java
===================================================================
RCS file: /cvsroot/jruby/jruby/src/org/jruby/RubyComparable.java,v
retrieving revision 1.6.2.1
diff -u -r1.6.2.1 RubyComparable.java
--- src/org/jruby/RubyComparable.java	2 Jan 2006 07:07:09 -0000	1.6.2.1
+++ src/org/jruby/RubyComparable.java	26 Mar 2006 07:20:39 -0000
@@ -68,12 +68,22 @@
         return comparableModule;
     }
 
-    public static RubyBoolean equal(IRubyObject recv, IRubyObject other) {
+    public static IRubyObject equal(IRubyObject recv, IRubyObject other) {
         try {
             if (recv == other) {
                 return recv.getRuntime().getTrue();
             }
-            return (RubyNumeric.fix2int(recv.callMethod("<=>", other)) == 0) ? recv.getRuntime().getTrue() : recv.getRuntime().getFalse();
+            IRubyObject result = recv.callMethod("<=>", other);
+            
+            if (result.isNil()) {
+            	return result;
+            }
+            
+            if (RubyNumeric.fix2int(result) != 0) {
+                return recv.getRuntime().getFalse();
+            }
+            	
+            return recv.getRuntime().getTrue();
         } catch (RaiseException rnExcptn) {
         	RubyException raisedException = rnExcptn.getException();
         	if (raisedException.isKindOf(recv.getRuntime().getClass("NoMethodError"))) {
Index: src/org/jruby/RubyFileStat.java
===================================================================
RCS file: /cvsroot/jruby/jruby/src/org/jruby/RubyFileStat.java,v
retrieving revision 1.1.2.2
diff -u -r1.1.2.2 RubyFileStat.java
--- src/org/jruby/RubyFileStat.java	25 Jan 2006 05:37:07 -0000	1.1.2.2
+++ src/org/jruby/RubyFileStat.java	26 Mar 2006 07:20:40 -0000
@@ -55,6 +55,8 @@
         fileStatClass.defineMethod("mode", callbackFactory.getMethod("mode"));
         fileStatClass.defineMethod("size", callbackFactory.getMethod("size"));
         fileStatClass.defineMethod("writable?", callbackFactory.getMethod("writable"));
+        fileStatClass.defineMethod("symlink?", callbackFactory.getMethod("symlink_p"));
+        fileStatClass.defineMethod("blksize", callbackFactory.getMethod("blksize"));
 
         fileStatClass.defineMethod("file?", callbackFactory.getMethod("file_p"));
     	
@@ -67,6 +69,11 @@
 		// files.  Getting the absolutefile does seem to hack around this...
         this.file = (NormalizedFile)file.getAbsoluteFile();
     }
+    
+    public RubyFixnum blksize() {
+        // We cannot determine, so always return 4096 (better than blowing up)
+        return RubyFixnum.newFixnum(getRuntime(), 4096);
+    }
 
     public RubyBoolean directory_p() {
         return getRuntime().newBoolean(file.isDirectory());
@@ -94,6 +101,11 @@
     	return getRuntime().newFixnum(file.length());
     }
     
+    public IRubyObject symlink_p() {
+        // We cannot determine this in Java, so we will always return false (better than blowing up)
+        return getRuntime().getFalse();
+    }
+    
     public IRubyObject writable() {
     	return getRuntime().newBoolean(file.canWrite());
     }
Index: src/org/jruby/RubyString.java
===================================================================
RCS file: /cvsroot/jruby/jruby/src/org/jruby/RubyString.java,v
retrieving revision 1.27.2.6
diff -u -r1.27.2.6 RubyString.java
--- src/org/jruby/RubyString.java	9 Mar 2006 01:42:23 -0000	1.27.2.6
+++ src/org/jruby/RubyString.java	26 Mar 2006 07:20:40 -0000
@@ -949,6 +949,10 @@
 	 *
 	 */
 	public IRubyObject oct() {
+		if (isEmpty()) {
+			return getRuntime().newFixnum(0);
+		}
+		
 		int base = 8;
 		String str = getValue().trim();
 		int pos = (str.charAt(0) == '-' || str.charAt(0) == '+') ? 1 : 0;
Index: src/org/jruby/RubyTime.java
===================================================================
RCS file: /cvsroot/jruby/jruby/src/org/jruby/RubyTime.java,v
retrieving revision 1.13.2.2
diff -u -r1.13.2.2 RubyTime.java
--- src/org/jruby/RubyTime.java	25 Mar 2006 23:01:02 -0000	1.13.2.2
+++ src/org/jruby/RubyTime.java	26 Mar 2006 07:20:40 -0000
@@ -149,9 +149,13 @@
         return (RubyNumeric.fix2int(callMethod("<=>", other)) == 0) ? getRuntime().getTrue() : getRuntime().getFalse();
     }
 
-    public RubyFixnum op_cmp(IRubyObject other) {
+    public IRubyObject op_cmp(IRubyObject other) {
         long millis = getTimeInMillis();
-
+        
+        if (other.isNil()) {
+        	return other;
+        }
+        
         if (other instanceof RubyFloat || other instanceof RubyBignum) {
             double time = millis / 1000.0;
 
Index: src/org/jruby/runtime/builtin/meta/TimeMetaClass.java
===================================================================
RCS file: /cvsroot/jruby/jruby/src/org/jruby/runtime/builtin/meta/TimeMetaClass.java,v
retrieving revision 1.1.2.2
diff -u -r1.1.2.2 TimeMetaClass.java
--- src/org/jruby/runtime/builtin/meta/TimeMetaClass.java	25 Mar 2006 23:01:02 -0000	1.1.2.2
+++ src/org/jruby/runtime/builtin/meta/TimeMetaClass.java	26 Mar 2006 07:20:41 -0000
@@ -182,8 +182,7 @@
         } else {
             len = checkArgumentCount(args, 1, 7);
         }
-
-        int year = RubyNumeric.fix2int(args[0]);
+        int year = (int)RubyNumeric.num2long(args[0]);
         int month = 0;
         
         if (len > 1) {
@@ -203,7 +202,7 @@
                         }
                     }
                 } else {
-                    month = RubyNumeric.fix2int(args[1]) - 1;
+                    month = (int)RubyNumeric.num2long(args[1]) - 1;
                 }
             }
             if (0 > month || month > 11) {
@@ -215,7 +214,7 @@
 
         for (int i = 0; len > i + 2; i++) {
             if (!args[i + 2].isNil()) {
-                int_args[i] = RubyNumeric.fix2int(args[i + 2]);
+                int_args[i] = (int)RubyNumeric.num2long(args[i + 2]);
                 if (time_min[i] > int_args[i] || int_args[i] > time_max[i]) {
                     throw getRuntime().newArgumentError("Argument out of range.");
                 }
