瀏覽代碼

write ttp host

Simon Krajewski 1 年之前
父節點
當前提交
10bbeee278
共有 2 個文件被更改,包括 23 次插入5 次删除
  1. 13 4
      src/compiler/hxb/hxbReader.ml
  2. 10 1
      src/compiler/hxb/hxbWriter.ml

+ 13 - 4
src/compiler/hxb/hxbReader.ml

@@ -814,11 +814,20 @@ class hxb_reader
 
 	(* Fields *)
 
-	method read_type_parameters (host : type_param_host) (f : typed_type_param array -> unit) =
+	method read_type_parameters (f : typed_type_param array -> unit) =
 		let l = read_uleb128 ch in
 		let a = Array.init l (fun _ ->
 			let path = self#read_path in
 			let pos = self#read_pos in
+			let host = match IO.read_byte ch with
+				| 0 -> TPHType
+				| 1 -> TPHConstructor
+				| 2 -> TPHMethod
+				| 3 -> TPHEnumConstructor
+				| 4 -> TPHAnonField
+				| 5 -> TPHLocal
+				| i -> die (Printf.sprintf "Invalid type paramter host: %i" i) __LOC__
+			in
 			let c = mk_class current_module path pos pos in
 			mk_type_param c host None None
 		) in
@@ -1234,7 +1243,7 @@ class hxb_reader
 
 	method start_texpr =
 		if not self#in_nested_scope then
-			self#read_type_parameters TPHLocal (fun a ->
+			self#read_type_parameters (fun a ->
 				local_type_parameters <- a
 			);
 		let l = read_uleb128 ch in
@@ -1250,7 +1259,7 @@ class hxb_reader
 	method read_field_type_parameters kind =
 		let num_params = read_uleb128 ch in
 		if not self#in_nested_scope then begin
-			self#read_type_parameters kind (* TODO: need to encode this because we don't know *) (fun a ->
+			self#read_type_parameters (fun a ->
 				field_type_parameters <- a;
 			);
 			field_type_parameter_offset <- 0;
@@ -1356,7 +1365,7 @@ class hxb_reader
 		infos.mt_private <- self#read_bool;
 		infos.mt_doc <- self#read_option (fun () -> self#read_documentation);
 		infos.mt_meta <- self#read_metadata;
-		self#read_type_parameters TPHType (fun a -> type_type_parameters <- a);
+		self#read_type_parameters (fun a -> type_type_parameters <- a);
 		infos.mt_params <- Array.to_list type_type_parameters;
 		infos.mt_using <- self#read_list (fun () ->
 			let c = self#read_class_ref in

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

@@ -1619,7 +1619,16 @@ class hxb_writer
 		IOChunk.write_uleb128 chunk.io (List.length ttps);
 		let write_type_parameter_forward ttp =
 			self#write_path ttp.ttp_class.cl_path;
-			self#write_pos ttp.ttp_class.cl_name_pos
+			self#write_pos ttp.ttp_class.cl_name_pos;
+			let i = match ttp.ttp_host with
+				| TPHType -> 0
+				| TPHConstructor -> 1
+				| TPHMethod -> 2
+				| TPHEnumConstructor -> 3
+				| TPHAnonField -> 4
+				| TPHLocal -> 5
+			in
+			IOChunk.write_u8 chunk.io i
 		in
 		let write_type_parameter_data ttp =
 			let c = ttp.ttp_class in