Pārlūkot izejas kodu

don't write i32 if it can be helped

Simon Krajewski 1 gadu atpakaļ
vecāks
revīzija
ad9b161fc9
2 mainītis faili ar 16 papildinājumiem un 19 dzēšanām
  1. 9 9
      src/compiler/hxb/hxbReader.ml
  2. 7 10
      src/compiler/hxb/hxbWriter.ml

+ 9 - 9
src/compiler/hxb/hxbReader.ml

@@ -114,7 +114,7 @@ class hxb_reader
 	method read_u8 =
 		IO.read_byte ch
 
-	method read_u32 =
+	method read_i32 =
 		IO.read_real_i32 ch
 
 	method read_i16 =
@@ -900,10 +900,10 @@ class hxb_reader
 			| _ -> assert false
 
 	method read_var =
-		let id = IO.read_i32 ch in
+		let id = self#read_uleb128 in
 		let name = self#read_string in
 		let kind = self#read_var_kind in
-		let flags = IO.read_i32 ch in
+		let flags = self#read_uleb128 in
 		let meta = self#read_metadata in
 		let pos = self#read_pos in
 		let v = {
@@ -946,7 +946,7 @@ class hxb_reader
 					| 2 -> TConst TSuper
 					| 3 -> TConst (TBool false)
 					| 4 -> TConst (TBool true)
-					| 5 -> TConst (TInt (IO.read_real_i32 ch))
+					| 5 -> TConst (TInt self#read_i32)
 					| 6 -> TConst (TFloat self#read_string)
 					| 7 -> TConst (TString self#read_string)
 
@@ -1079,7 +1079,7 @@ class hxb_reader
 					| 101 ->
 						let e1 = loop () in
 						let ef = self#read_enum_field_ref in
-						let i = IO.read_i32 ch in
+						let i = self#read_uleb128 in
 						TEnumParameter(e1,ef,i)
 					| 102 ->
 						let e1 = loop () in
@@ -1233,7 +1233,7 @@ class hxb_reader
 			);
 		let t = self#read_type_instance in
 
-		let flags = IO.read_i32 ch in
+		let flags = self#read_uleb128 in
 
 		let doc = self#read_option (fun () -> self#read_documentation) in
 		let meta = self#read_metadata in
@@ -1360,7 +1360,7 @@ class hxb_reader
 	method read_class (c : tclass) =
 		self#read_common_module_type (Obj.magic c);
 		c.cl_kind <- self#read_class_kind;
-		c.cl_flags <- (Int32.to_int self#read_u32);
+		c.cl_flags <- self#read_uleb128;
 		let read_relation () =
 			let c = self#read_class_ref in
 			let tl = self#read_types in
@@ -1447,10 +1447,10 @@ class hxb_reader
 		);
 
 	method read_chunk =
-		let size = Int32.to_int self#read_u32 in
+		let size = Int32.to_int self#read_i32 in
 		let name = Bytes.unsafe_to_string (IO.nread ch 4) in
 		let data = IO.nread ch size in
-		let crc = self#read_u32 in
+		let crc = self#read_i32 in
 		ignore(crc); (* TODO *)
 		let kind = chunk_kind_of_string name in
 		(kind,data)

+ 7 - 10
src/compiler/hxb/hxbWriter.ml

@@ -175,7 +175,7 @@ object(self)
 	method write_u8 v =
 		IO.write_byte ch v
 
-	method write_u32 v =
+	method write_i32 v =
 		IO.write_real_i32 ch v
 
 	method write_f64 v =
@@ -221,9 +221,6 @@ class abstract_chunk (name : string) = object(self)
 	method write_bool b =
 		self#write_u8 (if b then 1 else 0)
 
-	method write_i32 i =
-		self#write_u32 (Int32.of_int i);
-
 	method export : 'a . 'a IO.output -> unit = fun chex ->
 		let bytes = self#get_bytes in
 		IO.write_real_i32 chex (Int32.of_int (Bytes.length bytes));
@@ -1173,10 +1170,10 @@ class hxb_writer
 		chunk#write_u8 b
 
 	method write_var fctx v =
-		chunk#write_i32 v.v_id;
+		chunk#write_uleb128 v.v_id;
 		chunk#write_string v.v_name;
 		self#write_var_kind v.v_kind;
-		chunk#write_i32 v.v_flags;
+		chunk#write_uleb128 v.v_flags;
 		self#write_metadata v.v_meta;
 		self#write_pos v.v_pos
 
@@ -1246,7 +1243,7 @@ class hxb_writer
 					chunk#write_u8 4;
 				| TInt i32 ->
 					chunk#write_u8 5;
-					chunk#write_u32 i32;
+					chunk#write_i32 i32;
 				| TFloat f ->
 					chunk#write_u8 6;
 					chunk#write_string f;
@@ -1396,7 +1393,7 @@ class hxb_writer
 						die "" __LOC__
 				in
 				self#write_enum_field_ref en ef;
-				chunk#write_i32 i;
+				chunk#write_uleb128 i;
 			| TField(e1,FInstance(c,tl,cf)) ->
 				chunk#write_u8 102;
 				loop e1;
@@ -1594,7 +1591,7 @@ class hxb_writer
 			prerr_endline (Printf.sprintf "%s while writing type instance for field %s" todo_error cf.cf_name);
 			raise e
 		end);
-		chunk#write_i32 cf.cf_flags;
+		chunk#write_uleb128 cf.cf_flags;
 		chunk#write_option cf.cf_doc self#write_documentation;
 		self#write_metadata cf.cf_meta;
 		self#write_field_kind cf.cf_kind;
@@ -1678,7 +1675,7 @@ class hxb_writer
 		end;
 		self#write_common_module_type (Obj.magic c);
 		self#write_class_kind c.cl_kind;
-		chunk#write_u32 (Int32.of_int c.cl_flags);
+		chunk#write_uleb128 c.cl_flags;
 		chunk#write_option c.cl_super (fun (c,tl) ->
 			self#write_class_ref c;
 			self#write_types tl