Browse Source

move local type params to expressions

Simon Krajewski 1 year ago
parent
commit
e3a95b4074
2 changed files with 11 additions and 12 deletions
  1. 5 6
      src/compiler/hxb/hxbReader.ml
  2. 6 6
      src/compiler/hxb/hxbWriter.ml

+ 5 - 6
src/compiler/hxb/hxbReader.ml

@@ -107,7 +107,7 @@ class hxb_reader
 	val empty_anon = mk_anon (ref Closed)
 
 	method in_nested_scope = match field_stack with
-		| [] -> assert false
+		| [] -> false
 		| [_] -> false
 		| _ -> true
 
@@ -1234,6 +1234,10 @@ class hxb_reader
 		{ null_field with cf_name = name; cf_pos = pos; cf_name_pos = name_pos; cf_overloads = overloads }
 
 	method start_texpr =
+		if not self#in_nested_scope then
+			self#read_type_parameters TPHLocal (fun a ->
+				local_type_parameters <- a
+			);
 		let l = read_uleb128 ch in
 		let ts = Array.init l (fun _ ->
 			self#read_type_instance
@@ -1267,13 +1271,8 @@ class hxb_reader
 	method read_class_field_data (cf : tclass_field) : unit =
 		current_field <- cf;
 
-		let nested = self#in_nested_scope in
 		let params = self#read_field_type_parameters TPHMethod in
 
-		if not nested then
-			self#read_type_parameters TPHLocal (fun a ->
-				local_type_parameters <- a
-			);
 		let t = self#read_type_instance in
 
 		let flags = read_uleb128 ch in

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

@@ -548,7 +548,7 @@ class hxb_writer
 	val mutable field_stack = []
 
 	method in_nested_scope = match field_stack with
-		| [] -> assert false
+		| [] -> false (* can happen for cl_init and in CFEX *)
 		| [_] -> false
 		| _ -> true
 
@@ -1694,6 +1694,11 @@ class hxb_writer
 		fctx,(fun () ->
 			restore(fun new_chunk ->
 				let restore = self#start_temporary_chunk 512 in
+				if not self#in_nested_scope then begin
+					let ltp = List.map fst local_type_parameters#to_list in
+					Chunk.write_list chunk ltp self#write_type_parameter_forward;
+					Chunk.write_list chunk ltp self#write_type_parameter_data;
+				end;
 				let items = fctx.t_pool#items in
 				IOChunk.write_uleb128 chunk.io (DynArray.length items);
 				DynArray.iter (fun bytes ->
@@ -1747,11 +1752,6 @@ class hxb_writer
 		in
 		restore (fun new_chunk ->
 			self#commit_field_type_parameters cf.cf_params;
-			if not self#in_nested_scope then begin
-				let ltp = List.map fst local_type_parameters#to_list in
-				Chunk.write_list chunk ltp self#write_type_parameter_forward;
-				Chunk.write_list chunk ltp self#write_type_parameter_data;
-			end;
 			Chunk.export_data new_chunk chunk
 		);
 		expr_chunk