From dba9c9a0a79f5199ad1770edb57fd2531ee270ee Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Fri, 6 Dec 2024 23:30:36 -0800 Subject: [PATCH] instantiate module resolutions for meta-predicate lookups when expanding calls (#2255, #2619, #2684) --- src/loader.pl | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/loader.pl b/src/loader.pl index 44926aba..54a03e91 100644 --- a/src/loader.pl +++ b/src/loader.pl @@ -844,6 +844,12 @@ expand_goal(UnexpandedGoals, Module, ExpandedGoals) :- UnexpandedGoals = ExpandedGoals), !. +module_instantiated(M, EM) :- + ( var(M) -> + EM = user + ; M = EM + ). + :- non_counted_backtracking expand_goal/5. expand_goal(UnexpandedGoals, Module, ExpandedGoals, HeadVars, TGs) :- @@ -856,9 +862,10 @@ expand_goal(UnexpandedGoals, Module, ExpandedGoals, HeadVars, TGs) :- ), ( expand_goal_cases(Goals, Module, ExpandedGoals, HeadVars, TGs) -> true - ; predicate_property(Module:Goals, meta_predicate(MetaSpecs0)), + ; module_instantiated(Module, InstantiatedModule), + predicate_property(InstantiatedModule:Goals, meta_predicate(MetaSpecs0)), MetaSpecs0 =.. [_ | MetaSpecs] -> - expand_module_names(Goals, MetaSpecs, Module, ExpandedGoals, HeadVars, TGs) + expand_module_names(Goals, MetaSpecs, InstantiatedModule, ExpandedGoals, HeadVars, TGs) ; thread_goals(Goals, ExpandedGoals, (',')) ; Goals = ExpandedGoals ) @@ -886,14 +893,16 @@ expand_call_goal_(UnexpandedGoals, Module, ExpandedGoals) :- UnexpandedGoals = ExpandedGoals ; goal_expansion(UnexpandedGoals, Module, UnexpandedGoals1), ( Module \== user -> - goal_expansion(UnexpandedGoals1, user, Goals), - ( predicate_property(Module:Goals, meta_predicate(MetaSpecs0)), - MetaSpecs0 =.. [_ | MetaSpecs] -> - expand_module_names(Goals, MetaSpecs, Module, ExpandedGoals, [], []) - ; ExpandedGoals = Goals - ) - ; ExpandedGoals = UnexpandedGoals1 + goal_expansion(UnexpandedGoals1, user, Goals) + ; Goals = UnexpandedGoals1 + ), + module_instantiated(Module, InstantiatedModule), + ( predicate_property(InstantiatedModule:Goals, meta_predicate(MetaSpecs0)), + MetaSpecs0 =.. [_ | MetaSpecs] -> + expand_module_names(Goals, MetaSpecs, InstantiatedModule, ExpandedGoals, [], []) + ; ExpandedGoals = Goals ) + ; ExpandedGoals = UnexpandedGoals1 ). :- non_counted_backtracking transitive_goal/3. -- 2.54.0