Selaa lähdekoodia

minor cleanup

Simon Krajewski 1 vuosi sitten
vanhempi
commit
40bd0ef2f2
1 muutettua tiedostoa jossa 21 lisäystä ja 21 poistoa
  1. 21 21
      src/compiler/hxb/hxbWriter.ml

+ 21 - 21
src/compiler/hxb/hxbWriter.ml

@@ -446,13 +446,13 @@ class hxb_writer
 		DynArray.add chunks new_chunk;
 		chunk <- new_chunk
 
-	method start_temporary_chunk : 'a . (chunk -> chunk -> 'a) -> 'a =
+	method start_temporary_chunk : 'a . (chunk -> 'a) -> 'a =
 		let new_chunk = new chunk HEND (* TODO: something else? *) cp in
 		let old_chunk = chunk in
 		chunk <- new_chunk;
 		(fun f ->
 			chunk <- old_chunk;
-			f old_chunk new_chunk;
+			f new_chunk
 		)
 
 	(* Basic compounds *)
@@ -893,7 +893,7 @@ class hxb_writer
 			let index = anon_fields#add cf () in
 			chunk#write_u8 1;
 			chunk#write_uleb128 index;
-			let close = self#open_field_scope true cf in
+			let close = self#open_field_scope true cf.cf_params in
 			self#write_class_field_data cf;
 			close()
 
@@ -1122,7 +1122,7 @@ class hxb_writer
 				(* Now we write the type into a temporary chunk in order to identify it. *)
 				let restore = self#start_temporary_chunk in
 				self#write_type_instance_not_simple t;
-				let t_bytes = restore (fun chunk new_chunk ->
+				let t_bytes = restore (fun new_chunk ->
 					new_chunk#get_bytes
 				) in
 				let index = try
@@ -1410,12 +1410,6 @@ class hxb_writer
 
 	(* Fields *)
 
-	method set_field_type_parameters (nested : bool) params =
-		if not nested then field_type_parameters <- new identity_pool;
-		List.iter (fun ttp ->
-			ignore(field_type_parameters#add ttp ());
-		) params
-
 	method write_type_parameter_forward ttp =
 		self#write_path ttp.ttp_class.cl_path;
 		self#write_pos ttp.ttp_class.cl_name_pos
@@ -1463,11 +1457,16 @@ class hxb_writer
 			f r;
 			f w;
 
-	method open_field_scope (nested : bool) (cf : tclass_field) =
+	method open_field_scope (nested : bool) (params : type_params) =
 		let old_field_params = field_type_parameters in
 		let old_local_params = local_type_parameters in
-		if not nested then local_type_parameters <- new identity_pool;
-		self#set_field_type_parameters nested cf.cf_params;
+		if not nested then begin
+			local_type_parameters <- new identity_pool;
+			field_type_parameters <- new identity_pool;
+		end;
+		List.iter (fun ttp ->
+			ignore(field_type_parameters#add ttp ());
+		) params;
 		(fun () ->
 			field_type_parameters <- old_field_params;
 			local_type_parameters <- old_local_params;
@@ -1478,7 +1477,7 @@ class hxb_writer
 		self#write_pos cf.cf_pos;
 		self#write_pos cf.cf_name_pos;
 		chunk#write_list cf.cf_overloads (fun cf ->
-			let close = self#open_field_scope false cf in
+			let close = self#open_field_scope false cf.cf_params in
 			self#write_class_field_forward cf;
 			close()
 		);
@@ -1487,7 +1486,7 @@ class hxb_writer
 		let restore = self#start_temporary_chunk in
 		let fctx = create_field_writer_context (new pos_writer chunk stats p false) in
 		fctx,(fun () ->
-			restore(fun chunk new_chunk ->
+			restore(fun new_chunk ->
 				let items = fctx.vars#items in
 				chunk#write_uleb128 (DynArray.length items);
 				DynArray.iter (fun v ->
@@ -1517,12 +1516,12 @@ class hxb_writer
 				chunk#write_option cf.cf_expr_unoptimized (self#write_texpr fctx);
 				close();
 		end;
-		chunk#write_list cf.cf_overloads (fun f ->
-			let close = self#open_field_scope false f in
-			self#write_class_field_data f;
+		chunk#write_list cf.cf_overloads (fun cf ->
+			let close = self#open_field_scope false cf.cf_params in
+			self#write_class_field_data cf;
 			close();
 		);
-		restore (fun chunk new_chunk ->
+		restore (fun new_chunk ->
 			chunk#write_list cf.cf_params self#write_type_parameter_forward;
 			chunk#write_list cf.cf_params self#write_type_parameter_data;
 			let ltp = List.map fst local_type_parameters#to_list in
@@ -1769,7 +1768,7 @@ class hxb_writer
 				end;
 
 				let write_field source cf =
-					let close = self#open_field_scope false cf in
+					let close = self#open_field_scope false cf.cf_params in
 					self#write_class_field_data cf;
 					close();
 				in
@@ -1794,13 +1793,14 @@ class hxb_writer
 			chunk#write_list own_enums (fun e ->
 				chunk#write_list (PMap.foldi (fun s f acc -> (s,f) :: acc) e.e_constrs []) (fun (s,ef) ->
 					self#select_type e.e_path;
+					let close = self#open_field_scope false ef.ef_params in
 					chunk#write_string s;
-					self#set_field_type_parameters false ef.ef_params;
 					chunk#write_list ef.ef_params self#write_type_parameter_forward;
 					chunk#write_list ef.ef_params self#write_type_parameter_data;
 					self#write_type_instance ef.ef_type;
 					chunk#write_option ef.ef_doc self#write_documentation;
 					self#write_metadata ef.ef_meta;
+					close();
 				);
 			)
 		end;