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