instantiate module resolutions for meta-predicate lookups when expanding calls (#2255, #2619, #2684)

This commit is contained in:
Mark Thom
2024-12-06 23:30:36 -08:00
parent ea02b54e7f
commit dba9c9a0a7

View File

@@ -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.