Rudy Ges 2 лет назад
Родитель
Сommit
e89ec22554
3 измененных файлов с 23 добавлено и 20 удалено
  1. 1 1
      src/compiler/hxb/hxbData.ml
  2. 21 19
      src/compiler/hxb/hxbReader.ml
  3. 1 0
      src/compiler/hxb/hxbWriter.ml

+ 1 - 1
src/compiler/hxb/hxbData.ml

@@ -38,4 +38,4 @@ let chunk_kind_of_string = function
 	| name -> raise (HxbFailure ("Invalid chunk name: " ^ name))
 
 let error (s : string) =
-	raise (HxbFailure s)
+	raise (HxbFailure s)

+ 21 - 19
src/compiler/hxb/hxbReader.ml

@@ -69,10 +69,13 @@ class hxb_reader
 		self#read_u8 <> 0
 
 	method read_from_string_pool pool =
-		(* TODO fix module vs global string pool handling *)
 		let l = self#read_uleb128 in
 		(* Printf.eprintf "  Get string #%d\n" l; *)
-		try pool.(l) with e -> begin
+		try begin
+			let s = pool.(l) in
+			(* Printf.eprintf "  Read string %s\n" s; *)
+			s
+		end with e -> begin
 			Printf.eprintf "  Failed getting string #%d\n" l;
 			(* "" *)
 			raise e
@@ -84,7 +87,7 @@ class hxb_reader
 	method read_raw_string =
 		let l = self#read_uleb128 in
 		let s = Bytes.unsafe_to_string (IO.nread ch l) in
-		(* Printf.eprintf "  Read raw string %s\n" s; *)
+		(* Printf.eprintf "    Read raw string %s\n" s; *)
 		s
 
 	(* Basic compounds *)
@@ -115,6 +118,7 @@ class hxb_reader
 		let pack = self#read_list8 (fun () -> self#read_string) in
 		let mname = self#read_string in
 		let tname = self#read_string in
+		Printf.eprintf "    Read full path %s.%s.%s\n" (ExtString.String.join "." pack) mname tname;
 		(pack,mname,tname)
 
 	method read_documentation =
@@ -655,26 +659,20 @@ class hxb_reader
 
 		method read_class_field (m : module_def) : tclass_field =
 			let name = self#read_string in
-			Printf.eprintf "  Read class field %s\n" name;
+			Printf.eprintf "    Read class field %s\n" name;
 			(* TODO read_list? *)
 			(* self#read_type_parameters m ([],name) (fun a -> *)
 			(* 	field_type_parameters <- a *)
 			(* ); *)
-
-			(* TODO fix flags *)
-			(* let flags = Int32.to_int self#read_u32 in *)
-			(* let flags = Int32.to_int (IO.read_real_i32 ch) in *)
-			(* let flags = IO.read_i32 ch in *)
-			let flags = 0 in
-
 			let t = self#read_type_instance in
+			let flags = IO.read_i32 ch in
 			let pos = self#read_pos in
 			let name_pos = self#read_pos in
 			let doc = self#read_option (fun () -> self#read_documentation) in
 			let meta = self#read_metadata in
-			self#read_type_parameters m ([],name) (fun a ->
-				field_type_parameters <- a
-			);
+			(* self#read_type_parameters m ([],name) (fun a -> *)
+			(* 	field_type_parameters <- a *)
+			(* ); *)
 			let params = Array.to_list field_type_parameters in
 			let kind = self#read_field_kind in
 			let expr = self#read_option (fun () -> self#read_texpr) in
@@ -706,10 +704,13 @@ class hxb_reader
 			| _ ->
 				type_type_parameters <- Array.of_list c.cl_params
 			end;
+			Printf.eprintf "  Read constructor for %s\n" (snd m.m_path);
 			c.cl_constructor <- self#read_option f;
+			Printf.eprintf "  Read ordered fields for %s\n" (snd m.m_path);
 				(* TODO check list 8 vs 16 *)
 			c.cl_ordered_fields <- self#read_list8 f;
 				(* TODO check list 8 vs 16 *)
+			Printf.eprintf "  Read ordered statics for %s\n" (snd m.m_path);
 			c.cl_ordered_statics <- self#read_list8 f;
 			List.iter (fun cf -> c.cl_statics <- PMap.add cf.cf_name cf c.cl_statics) c.cl_ordered_statics;
 
@@ -842,7 +843,7 @@ class hxb_reader
 			let l = self#read_uleb128 in
 			classes <- Array.append classes (Array.init l (fun i ->
 				let (pack,mname,tname) = self#read_full_path in
-				Printf.eprintf "  Read clsr %d of %d for class %s\n" i (l-1) tname;
+				Printf.eprintf "  Read clsr %d of %d for %s.%s\n" i (l-1) mname tname;
 				match resolve_type pack mname tname with
 				| TClassDecl c ->
 					c
@@ -931,15 +932,15 @@ class hxb_reader
 						let m = self#read_hhdr in
 						m,chunks
 					| STRI ->
-						string_pool <- Array.concat [string_pool; self#read_string_pool];
-						(* string_pool <- self#read_string_pool; *)
+						(* string_pool <- Array.concat [string_pool; self#read_string_pool]; *)
+						string_pool <- self#read_string_pool;
 						(* Array.iteri (fun i s -> *)
 						(* 	Printf.eprintf "  [Pool] string #%d %s\n" i s; *)
 						(* ) string_pool; *)
 						pass_0 chunks
 					| DOCS ->
-						doc_pool <- Array.concat [doc_pool; self#read_string_pool];
-						(* doc_pool <- self#read_string_pool; *)
+						(* doc_pool <- Array.concat [doc_pool; self#read_string_pool]; *)
+						doc_pool <- self#read_string_pool;
 						(* Array.iteri (fun i s -> *)
 						(* 	Printf.eprintf "  [Pool] doc string #%d %s\n" i s; *)
 						(* ) doc_pool; *)
@@ -949,6 +950,7 @@ class hxb_reader
 			in
 			let m,chunks = pass_0 chunks in
 			List.iter (fun (kind,data) ->
+				Printf.eprintf "Reading chunk %s\n" (string_of_chunk_kind kind);
 				ch <- IO.input_bytes data;
 				match kind with
 				| TYPF ->

+ 1 - 0
src/compiler/hxb/hxbWriter.ml

@@ -923,6 +923,7 @@ class ['a] hxb_writer
 			self#start_chunk CLSR;
 			chunk#write_list l (fun c ->
 				let m = c.cl_module in
+				Printf.eprintf "  Write clsr for %s.%s\n" (snd m.m_path) (snd c.cl_path);
 				self#write_full_path (fst m.m_path) (snd m.m_path) (snd c.cl_path)
 			)
 		end;