]> Repositorios git - scryer-prolog.git/commitdiff
instantiate module resolutions for meta-predicate lookups when expanding calls (...
authorMark Thom <[email protected]>
Sat, 7 Dec 2024 07:30:36 +0000 (23:30 -0800)
committerMark Thom <[email protected]>
Sat, 7 Dec 2024 07:30:36 +0000 (23:30 -0800)
src/loader.pl

index 44926aba957024df70bc498377eba252346b85fe..54a03e9195f16b84b36989f9d5dfa33d433a4fb7 100644 (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.