Explorar o código

add Codegen.update_cache_dependencies

Simon Krajewski %!s(int64=12) %!d(string=hai) anos
pai
achega
4c9ea8c541
Modificáronse 2 ficheiros con 31 adicións e 0 borrados
  1. 30 0
      codegen.ml
  2. 1 0
      main.ml

+ 30 - 0
codegen.ml

@@ -1804,6 +1804,36 @@ let detect_usage com =
 	) !usage in
 	) !usage in
 	raise (Typecore.DisplayPosition usage)
 	raise (Typecore.DisplayPosition usage)
 
 
+let update_cache_dependencies com =
+	let rec check_t m t = match follow t with
+		| TInst(c,tl) ->
+			add_dependency m c.cl_module;
+			List.iter (check_t m) tl;
+		| TEnum(en,tl) ->
+			add_dependency m en.e_module;
+			List.iter (check_t m) tl;
+		| TAbstract(a,tl) ->
+			add_dependency m a.a_module;
+			List.iter (check_t m) tl;
+		| TFun(targs,tret) ->
+			List.iter (fun (_,_,t) -> check_t m t) targs;
+			check_t m tret;
+		| TAnon an ->
+			PMap.iter (fun _ cf -> check_field m cf) an.a_fields
+		| _ ->
+			()
+	and check_field m cf =
+		check_t m cf.cf_type
+	in
+	List.iter (fun t -> match t with
+		| TClassDecl c ->
+			List.iter (check_field c.cl_module) c.cl_ordered_statics;
+			List.iter (check_field c.cl_module) c.cl_ordered_fields;
+			(match c.cl_constructor with None -> () | Some cf -> check_field c.cl_module cf);
+		| _ ->
+			()
+	) com.types
+
 (* -------------------------------------------------------------------------- *)
 (* -------------------------------------------------------------------------- *)
 (* POST PROCESS *)
 (* POST PROCESS *)
 
 

+ 1 - 0
main.ml

@@ -1257,6 +1257,7 @@ try
 		) com.types;
 		) com.types;
 		if com.display = DMUsage then
 		if com.display = DMUsage then
 			Codegen.detect_usage com;
 			Codegen.detect_usage com;
+		Codegen.update_cache_dependencies com;
 		let dce_mode = (try Common.defined_value com Define.Dce with _ -> "no") in
 		let dce_mode = (try Common.defined_value com Define.Dce with _ -> "no") in
 		if not (!gen_as3 || dce_mode = "no" || Common.defined com Define.DocGen) then Dce.run com main (dce_mode = "full" && not !interp);
 		if not (!gen_as3 || dce_mode = "no" || Common.defined com Define.DocGen) then Dce.run com main (dce_mode = "full" && not !interp);
 		(* always filter empty abstract implementation classes (issue #1885) *)
 		(* always filter empty abstract implementation classes (issue #1885) *)