ソースを参照

[hxb] write/read overloads too

Rudy Ges 2 年 前
コミット
5ca4865ba1
2 ファイル変更10 行追加5 行削除
  1. 8 4
      src/compiler/hxb/hxbReader.ml
  2. 2 1
      src/compiler/hxb/hxbWriter.ml

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

@@ -1082,8 +1082,8 @@ class hxb_reader
 		let name = self#read_string in
 		let pos = self#read_pos in
 		let name_pos = self#read_pos in
-		(* TODO overloads *)
-		{ null_field with cf_name = name; cf_pos = pos; cf_name_pos = name_pos }
+		let overloads = self#read_list (fun () -> self#read_class_field_forward) in
+		{ null_field with cf_name = name; cf_pos = pos; cf_name_pos = name_pos; cf_overloads = overloads }
 
 	method read_class_field_data (nested : bool) (cf : tclass_field) : unit =
 		let name = cf.cf_name in
@@ -1105,7 +1105,12 @@ class hxb_reader
 
 		let expr = self#read_option (fun () -> self#read_texpr) in
 		let expr_unoptimized = self#read_option (fun () -> self#read_texpr) in
-		let overloads = self#read_list (fun () -> self#read_class_field false) in
+
+		let l = self#read_uleb128 in
+		for i = 0 to l - 1 do
+			let f = List.nth cf.cf_overloads i in
+			self#read_class_field_data true f
+		done;
 
 		cf.cf_type <- t;
 		cf.cf_doc <- doc;
@@ -1114,7 +1119,6 @@ class hxb_reader
 		cf.cf_expr <- expr;
 		cf.cf_expr_unoptimized <- expr_unoptimized;
 		cf.cf_params <- params;
-		cf.cf_overloads <- overloads;
 		cf.cf_flags <- flags;
 
 	method read_class_field (nested : bool) =

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

@@ -1177,6 +1177,7 @@ class ['a] hxb_writer
 		chunk#write_string cf.cf_name;
 		self#write_pos cf.cf_pos;
 		self#write_pos cf.cf_name_pos;
+		chunk#write_list cf.cf_overloads (self#write_class_field_forward);
 
 	method write_class_field_data cf =
 		let restore = self#start_temporary_chunk in
@@ -1196,7 +1197,7 @@ class ['a] hxb_writer
 			raise e
 		end);
 		chunk#write_option cf.cf_expr_unoptimized self#write_texpr;
-		chunk#write_list cf.cf_overloads (self#write_class_field);
+		chunk#write_list cf.cf_overloads (fun f -> self#write_class_field_data f);
 		restore (fun chunk new_chunk ->
 			chunk#write_list cf.cf_params self#write_type_parameter_forward;
 			chunk#write_list cf.cf_params self#write_type_parameter_data;