THRIFT-125. OCaml libraries don't compile with 32-bit ocaml

Patch: Iain Proctor and John Bilings

git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1058270 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/ocaml/src/TBinaryProtocol.ml b/lib/ocaml/src/TBinaryProtocol.ml
index a06cc9a..6d7500e 100644
--- a/lib/ocaml/src/TBinaryProtocol.ml
+++ b/lib/ocaml/src/TBinaryProtocol.ml
@@ -22,6 +22,7 @@
 module P = Protocol
 
 let get_byte i b = 255 land (i lsr (8*b))
+let get_byte32 i b = 255 land (Int32.to_int (Int32.shift_right i (8*b)))
 let get_byte64 i b = 255 land (Int64.to_int (Int64.shift_right i (8*b)))
 
 
@@ -35,7 +36,7 @@
     for i=0 to (n-1) do
       s:= Int32.logor !s (Int32.shift_left (Int32.of_int (int_of_char b.[i])) (8*(n-1-i)))
     done;
-    Int32.to_int (Int32.shift_right (Int32.shift_left !s sb) sb)
+    Int32.shift_right (Int32.shift_left !s sb) sb
 
 let comp_int64 b n =
   let s = ref 0L in
@@ -44,8 +45,8 @@
     done;
     !s
 
-let version_mask = 0xffff0000
-let version_1 = 0x80010000
+let version_mask = 0xffff0000l
+let version_1 = 0x80010000l
 
 class t trans =
 object (self)
@@ -63,7 +64,7 @@
       ibyte.[0] <- char_of_int (gb 1);
       trans#write ibyte 0 2
   method writeI32 i =
-    let gb = get_byte i in
+    let gb = get_byte32 i in
       for i=0 to 3 do
         ibyte.[3-i] <- char_of_int (gb i)
       done;
@@ -78,13 +79,13 @@
     self#writeI64 (Int64.bits_of_float d)
   method writeString s=
     let n = String.length s in
-      self#writeI32(n);
+      self#writeI32 (Int32.of_int n);
       trans#write s 0 n
   method writeBinary a = self#writeString a
   method writeMessageBegin (n,t,s) =
-    self#writeI32 (version_1 lor (P.message_type_to_i t));
+    self#writeI32 (Int32.logor version_1 (Int32.of_int (P.message_type_to_i t)));
     self#writeString n;
-    self#writeI32 s
+    self#writeI32 (Int32.of_int s)
   method writeMessageEnd = ()
   method writeStructBegin s = ()
   method writeStructEnd = ()
@@ -93,26 +94,26 @@
     self#writeI16 i
   method writeFieldEnd = ()
   method writeFieldStop =
-    self#writeByte (tv (Protocol.T_STOP))
+    self#writeByte (tv (P.T_STOP))
   method writeMapBegin (k,v,s) =
     self#writeByte (tv k);
     self#writeByte (tv v);
-    self#writeI32 s
+    self#writeI32 (Int32.of_int s)
   method writeMapEnd = ()
   method writeListBegin (t,s) =
     self#writeByte (tv t);
-    self#writeI32 s
+    self#writeI32 (Int32.of_int s)
   method writeListEnd = ()
   method writeSetBegin (t,s) =
     self#writeByte (tv t);
-    self#writeI32 s
+    self#writeI32 (Int32.of_int s)
   method writeSetEnd = ()
   method readByte =
     ignore (trans#readAll ibyte 0 1);
-    (comp_int ibyte 1)
+    Int32.to_int (comp_int ibyte 1)
   method readI16 =
     ignore (trans#readAll ibyte 0 2);
-    comp_int ibyte 2
+    Int32.to_int (comp_int ibyte 2)
   method readI32 =
     ignore (trans#readAll ibyte 0 4);
     comp_int ibyte 4
@@ -124,20 +125,19 @@
   method readBool =
     self#readByte = 1
   method readString =
-    let sz = self#readI32 in
+    let sz = Int32.to_int (self#readI32) in
     let buf = String.create sz in
       ignore (trans#readAll buf 0 sz);
       buf
   method readBinary = self#readString
   method readMessageBegin =
     let ver = self#readI32 in
-      if (ver land version_mask != version_1) then
-        (print_int ver;
-        raise (P.E (P.BAD_VERSION, "Missing version identifier")))
+      if Int32.compare (Int32.logand ver version_mask) version_1 != 0 then
+        raise (P.E (P.BAD_VERSION, "Missing version identifier"))
       else
         let s = self#readString in
-        let mt = P.message_type_of_i (ver land 0xFF) in
-          (s,mt, self#readI32)
+        let mt = P.message_type_of_i (Int32.to_int (Int32.logand ver 0xFFl)) in
+          (s,mt, Int32.to_int self#readI32)
   method readMessageEnd = ()
   method readStructBegin =
     ""
@@ -152,15 +152,15 @@
   method readMapBegin =
     let kt = vt (self#readByte) in
     let vt = vt (self#readByte) in
-      (kt,vt, self#readI32)
+      (kt,vt, Int32.to_int self#readI32)
   method readMapEnd = ()
   method readListBegin =
     let t = vt (self#readByte) in
-    (t,self#readI32)
+    (t, Int32.to_int self#readI32)
   method readListEnd = ()
   method readSetBegin =
     let t = vt (self#readByte) in
-    (t, self#readI32);
+    (t, Int32.to_int self#readI32);
   method readSetEnd = ()
 end