Просмотр исходного кода

ensure that generics type parameters are correctly filled in module dependencies (fixed issue #1132)

Nicolas Cannasse 13 лет назад
Родитель
Сommit
20d0f9fcd6
1 измененных файлов с 16 добавлено и 0 удалено
  1. 16 0
      codegen.ml

+ 16 - 0
codegen.ml

@@ -242,6 +242,22 @@ let rec build_generic ctx c p tl =
 		Hashtbl.add ctx.g.modules mg.m_path mg;
 		add_dependency mg m;
 		add_dependency ctx.current mg;
+		(* ensure that type parameters are set in dependencies *)
+		let rec loop t =
+			match t with
+			| TInst (c,tl) -> add_dependency mg c.cl_module; List.iter loop tl
+			| TEnum (e,tl) -> add_dependency mg e.e_module; List.iter loop tl
+			| TType (t,tl) -> add_dependency mg t.t_module; List.iter loop tl
+			| TMono r ->
+				(match !r with
+				| None -> ()
+				| Some t -> loop t)
+			| TLazy f ->
+				loop ((!f)());
+			| TAnon _ | TDynamic _ | TFun _ ->
+				assert false
+		in
+		List.iter loop tl;
 		let rec loop l1 l2 =
 			match l1, l2 with
 			| [] , [] -> []