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) :-
),
( 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
)
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.