Skip to content

Commit

Permalink
Introduce md_origin instead of m_manual_deps
Browse files Browse the repository at this point in the history
  • Loading branch information
kLabz committed May 2, 2024
1 parent 5c43ad9 commit 8d2953d
Show file tree
Hide file tree
Showing 11 changed files with 36 additions and 30 deletions.
8 changes: 6 additions & 2 deletions src/compiler/hxb/hxbWriter.ml
Original file line number Diff line number Diff line change
Expand Up @@ -2259,9 +2259,13 @@ module HxbWriter = struct

(* Note: this is only a start, and is still including a lot of dependencies *)
(* that are not actually needed for signature only. *)
let sig_deps = ref (PMap.map (fun m -> m) m.m_extra.m_manual_deps) in
let sig_deps = ref PMap.empty in
PMap.iter (fun id mdep -> match mdep.md_origin with
| MDepFromMacro -> sig_deps := PMap.add id mdep !sig_deps;
| _ -> ()
) m.m_extra.m_deps;
List.iter (fun mdep ->
let dep = {md_sign = mdep.m_extra.m_sign; md_path = mdep.m_path; md_kind = mdep.m_extra.m_kind} in
let dep = {md_sign = mdep.m_extra.m_sign; md_path = mdep.m_path; md_kind = mdep.m_extra.m_kind; md_origin = MDepFromTyping} in
sig_deps := PMap.add mdep.m_id dep !sig_deps;
) writer.sig_deps;
m.m_extra.m_sig_deps <- Some !sig_deps;
Expand Down
6 changes: 2 additions & 4 deletions src/core/tFunctions.ml
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,6 @@ let module_extra file sign time kind added policy =
m_time = time;
m_processed = 0;
m_deps = PMap.empty;
m_manual_deps = PMap.empty;
m_sig_deps = None;
m_kind = kind;
m_cache_bound_objects = DynArray.create ();
Expand Down Expand Up @@ -292,10 +291,9 @@ let null_abstract = {
a_enum = false;
}

let add_dependency ?(skip_postprocess=false) ?(manual_dependency=false) m mdep =
let add_dependency ?(skip_postprocess=false) m mdep origin =
if m != null_module && mdep != null_module && (m.m_path != mdep.m_path || m.m_extra.m_sign != mdep.m_extra.m_sign) then begin
m.m_extra.m_deps <- PMap.add mdep.m_id ({md_sign = mdep.m_extra.m_sign; md_path = mdep.m_path; md_kind = mdep.m_extra.m_kind}) m.m_extra.m_deps;
if manual_dependency then m.m_extra.m_manual_deps <- PMap.add mdep.m_id ({md_sign = mdep.m_extra.m_sign; md_path = mdep.m_path; md_kind = mdep.m_extra.m_kind}) m.m_extra.m_manual_deps;
m.m_extra.m_deps <- PMap.add mdep.m_id ({md_sign = mdep.m_extra.m_sign; md_path = mdep.m_path; md_kind = mdep.m_extra.m_kind; md_origin = origin}) m.m_extra.m_deps;
(* In case the module is cached, we'll have to run post-processing on it again (issue #10635) *)
if not skip_postprocess then m.m_extra.m_processed <- 0
end
Expand Down
6 changes: 5 additions & 1 deletion src/core/tType.ml
Original file line number Diff line number Diff line change
Expand Up @@ -401,10 +401,15 @@ and module_def_display = {
mutable m_import_positions : (pos,bool ref) PMap.t;
}

and module_dep_origin =
| MDepFromTyping
| MDepFromMacro

and module_dep = {
md_sign : Digest.t;
md_kind : module_kind;
md_path : path;
md_origin : module_dep_origin
}

and module_def_extra = {
Expand All @@ -418,7 +423,6 @@ and module_def_extra = {
mutable m_checked : int;
mutable m_processed : int;
mutable m_deps : (int,module_dep) PMap.t;
mutable m_manual_deps : (int,module_dep) PMap.t;
mutable m_sig_deps : (int,module_dep) PMap.t option;
mutable m_kind : module_kind;
mutable m_cache_bound_objects : cache_bound_object DynArray.t;
Expand Down
4 changes: 2 additions & 2 deletions src/filters/exceptions.ml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ let haxe_exception_static_call ctx method_name args p =
| TFun(_,t) -> t
| _ -> raise_typing_error ("haxe.Exception." ^ method_name ^ " is not a function and cannot be called") p
in
add_dependency ctx.typer.c.curclass.cl_module ctx.haxe_exception_class.cl_module;
add_dependency ctx.typer.c.curclass.cl_module ctx.haxe_exception_class.cl_module MDepFromTyping;
make_static_call ctx.typer ctx.haxe_exception_class method_field (fun t -> t) args return_type p

(**
Expand Down Expand Up @@ -605,7 +605,7 @@ let insert_save_stacks tctx =
in
let catch_local = mk (TLocal catch_var) catch_var.v_type catch_var.v_pos in
begin
add_dependency tctx.c.curclass.cl_module native_stack_trace_cls.cl_module;
add_dependency tctx.c.curclass.cl_module native_stack_trace_cls.cl_module MDepFromTyping;
make_static_call tctx native_stack_trace_cls method_field (fun t -> t) [catch_local] return_type catch_var.v_pos
end
else
Expand Down
8 changes: 4 additions & 4 deletions src/filters/filters.ml
Original file line number Diff line number Diff line change
Expand Up @@ -511,16 +511,16 @@ let update_cache_dependencies ~close_monomorphs com t =
let visited_anons = ref [] in
let rec check_t m t = match t with
| TInst(c,tl) ->
add_dependency m c.cl_module;
add_dependency m c.cl_module MDepFromTyping;
List.iter (check_t m) tl;
| TEnum(en,tl) ->
add_dependency m en.e_module;
add_dependency m en.e_module MDepFromTyping;
List.iter (check_t m) tl;
| TType(t,tl) ->
add_dependency m t.t_module;
add_dependency m t.t_module MDepFromTyping;
List.iter (check_t m) tl;
| TAbstract(a,tl) ->
add_dependency m a.a_module;
add_dependency m a.a_module MDepFromTyping;
List.iter (check_t m) tl;
| TFun(targs,tret) ->
List.iter (fun (_,_,t) -> check_t m t) targs;
Expand Down
2 changes: 1 addition & 1 deletion src/optimization/inline.ml
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ let api_inline2 com c field params p =
let api_inline ctx c field params p =
let mk_typeexpr path =
let m = (try ctx.com.module_lut#find path with Not_found -> die "" __LOC__) in
add_dependency ctx.m.curmod m;
add_dependency ctx.m.curmod m MDepFromTyping;
Option.get (ExtList.List.find_map (function
| TClassDecl cl when cl.cl_path = path -> Some (Texpr.Builder.make_static_this cl p)
| _ -> None
Expand Down
2 changes: 1 addition & 1 deletion src/typing/fields.ml
Original file line number Diff line number Diff line change
Expand Up @@ -488,7 +488,7 @@ let type_field cfg ctx e i p mode (with_type : WithType.t) =
with Not_found ->
match loop ctx.g.global_using with
| AKUsingField { se_access = { fa_host = FHStatic c } } as acc ->
add_dependency ctx.m.curmod c.cl_module;
add_dependency ctx.m.curmod c.cl_module MDepFromTyping;
acc
| _ -> die "" __LOC__
) t e in
Expand Down
12 changes: 6 additions & 6 deletions src/typing/generic.ml
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ let rec generic_substitute_type' gctx allow_expr t =
(* maybe loop, or generate cascading generics *)
let info = gctx.ctx.g.get_build_info gctx.ctx (TClassDecl c2) gctx.p in
let t = info.build_apply (List.map (generic_substitute_type' gctx true) tl2) in
(match follow t,gctx.mg with TInst(c,_), Some m -> add_dependency m c.cl_module | _ -> ());
(match follow t,gctx.mg with TInst(c,_), Some m -> add_dependency m c.cl_module MDepFromTyping | _ -> ());
t
| _ ->
try
Expand Down Expand Up @@ -188,8 +188,8 @@ let static_method_container gctx c cf p =
let cg = mk_class mg (pack,name) c.cl_pos c.cl_name_pos in
mg.m_types <- [TClassDecl cg];
ctx.com.module_lut#add mg.m_path mg;
add_dependency mg m;
add_dependency ctx.m.curmod mg;
add_dependency mg m MDepFromTyping;
add_dependency ctx.m.curmod mg MDepFromTyping;
cg

let set_type_parameter_dependencies mg tl =
Expand Down Expand Up @@ -220,7 +220,7 @@ let set_type_parameter_dependencies mg tl =
loop ret
end
and add_dep m tl =
add_dependency mg m;
add_dependency mg m MDepFromTyping;
List.iter loop tl
in
List.iter loop tl
Expand Down Expand Up @@ -320,8 +320,8 @@ let build_generic_class ctx c p tl =
cg.cl_meta <- (Meta.NoDoc,[],null_pos) :: cg.cl_meta;
mg.m_types <- [TClassDecl cg];
ctx.com.module_lut#add mg.m_path mg;
add_dependency mg m;
add_dependency ctx.m.curmod mg;
add_dependency mg m MDepFromTyping;
add_dependency ctx.m.curmod mg MDepFromTyping;
set_type_parameter_dependencies mg tl;
let build_field cf_old =
let params = List.map (fun ttp ->
Expand Down
8 changes: 4 additions & 4 deletions src/typing/macroContext.ml
Original file line number Diff line number Diff line change
Expand Up @@ -469,7 +469,7 @@ let make_macro_api ctx mctx p =
let mdep = Option.map_default (fun s -> TypeloadModule.load_module ctx (parse_path s) pos) ctx.m.curmod mdep in
let mnew = TypeloadModule.type_module ctx.com ctx.g ~dont_check_path:(has_native_meta) m (Path.UniqueKey.lazy_path mdep.m_extra.m_file) [tdef,pos] pos in
mnew.m_extra.m_kind <- if is_macro then MMacro else MFake;
add_dependency ~manual_dependency:true mnew mdep;
add_dependency mnew mdep MDepFromMacro;
ctx.com.module_nonexistent_lut#clear;
in
add false ctx;
Expand Down Expand Up @@ -499,7 +499,7 @@ let make_macro_api ctx mctx p =
with Not_found ->
let mnew = TypeloadModule.type_module ctx.com ctx.g mpath (Path.UniqueKey.lazy_path ctx.m.curmod.m_extra.m_file) types pos in
mnew.m_extra.m_kind <- MFake;
add_dependency ~manual_dependency:true mnew ctx.m.curmod;
add_dependency mnew ctx.m.curmod MDepFromMacro;
ctx.com.module_nonexistent_lut#clear;
end
);
Expand All @@ -510,7 +510,7 @@ let make_macro_api ctx mctx p =
ctx.m.curmod.m_extra.m_deps <- old_deps;
m
) in
add_dependency ~manual_dependency:true m (TypeloadCacheHook.create_fake_module ctx.com file);
add_dependency m (TypeloadCacheHook.create_fake_module ctx.com file) MDepFromMacro;
);
MacroApi.current_module = (fun() ->
ctx.m.curmod
Expand Down Expand Up @@ -811,7 +811,7 @@ let load_macro ctx com mctx api display cpath f p =
let meth,mloaded = load_macro'' com mctx display cpath f p in
let _,_,{cl_path = cpath},_ = meth in
let call args =
add_dependency ~manual_dependency:true ctx.m.curmod mloaded;
add_dependency ctx.m.curmod mloaded MDepFromMacro;
do_call_macro ctx.com api cpath f args p
in
mctx, meth, call
Expand Down
2 changes: 1 addition & 1 deletion src/typing/typeload.ml
Original file line number Diff line number Diff line change
Expand Up @@ -709,7 +709,7 @@ and init_meta_overloads ctx co cf =
let t_iterator ctx p =
match load_qualified_type_def ctx [] "StdTypes" "Iterator" p with
| TTypeDecl t ->
add_dependency ctx.m.curmod t.t_module;
add_dependency ctx.m.curmod t.t_module MDepFromTyping;
let pt = spawn_monomorph ctx.e p in
apply_typedef t [pt], pt
| _ ->
Expand Down
8 changes: 4 additions & 4 deletions src/typing/typeloadModule.ml
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ module ModuleLevel = struct
let decls = try
let r = com.parser_cache#find path in
let mimport = com.module_lut#find ([],path) in
if mimport.m_extra.m_kind <> MFake then add_dependency m mimport;
if mimport.m_extra.m_kind <> MFake then add_dependency m mimport MDepFromTyping;
r
with Not_found ->
if Sys.file_exists path then begin
Expand All @@ -300,7 +300,7 @@ module ModuleLevel = struct
List.iter (fun (d,p) -> match d with EImport _ | EUsing _ -> () | _ -> raise_typing_error "Only import and using is allowed in import.hx files" p) r;
let m_import = make_import_module path r in
add_module com m_import p;
add_dependency m m_import;
add_dependency m m_import MDepFromTyping;
r
end else begin
let r = [] in
Expand Down Expand Up @@ -709,7 +709,7 @@ let type_types_into_module com g m tdecls p =
let imports_and_usings,decls = ModuleLevel.create_module_types ctx_m m tdecls p in
(* define the per-module context for the next pass *)
if ctx_m.g.std_types != null_module then begin
add_dependency m ctx_m.g.std_types;
add_dependency m ctx_m.g.std_types MDepFromTyping;
(* this will ensure both String and (indirectly) Array which are basic types which might be referenced *)
ignore(load_instance ctx_m (make_ptp (mk_type_path (["std"],"String")) null_pos) ParamNormal LoadNormal)
end;
Expand Down Expand Up @@ -847,7 +847,7 @@ and load_module' com g m p =

let load_module ctx m p =
let m2 = load_module' ctx.com ctx.g m p in
add_dependency ~skip_postprocess:true ctx.m.curmod m2;
add_dependency ~skip_postprocess:true ctx.m.curmod m2 MDepFromTyping;
if ctx.pass = PTypeField then flush_pass ctx.g PConnectField ("load_module",fst m @ [snd m]);
m2

Expand Down

0 comments on commit 8d2953d

Please sign in to comment.