From: Mark Thom Date: Sat, 7 Dec 2024 07:30:36 +0000 (-0800) Subject: instantiate module resolutions for meta-predicate lookups when expanding calls (... X-Git-Tag: v0.10.0~101 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=dba9c9a0a79f5199ad1770edb57fd2531ee270ee;p=scryer-prolog.git instantiate module resolutions for meta-predicate lookups when expanding calls (#2255, #2619, #2684) --- 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.