Fix #2725 by calling load_context/1 in the unspecified branch of strip_module/3

This fixes #2725, by making it so that `strip_module(Pred, M, P), call(M:P)`
doesn't throw an `instanciation_error` when `Pred` isn't in the form `module:predicate`.

Now, `strip_module(hello, M, P)` will call `load_context(M)`, which unifies `M`
with the topmost module (or `user`).

Two new test cases are added: issue2725.pl, which tests the minimal case id(X) --> X.
and the strip_module(P, M, _), call(M:P) scenario, and module_resolution,
which tests the behavior of strip_module in a few scenarios.
This commit is contained in:
Emilie Burgun
2025-01-01 17:27:40 +01:00
parent 1ed4fe6555
commit b76bdd75e4
9 changed files with 88 additions and 14 deletions

View File

@@ -0,0 +1,8 @@
:- module(module_resolution, [get_module/2]).
get_module(P, M) :- strip_module(P, M, _).
:- initialization((strip_module(hello, M, _), write(M), write('\n'))).
:- initialization((loader:strip_module(hello, M, _), write(M), write('\n'))).
:- initialization((get_module(hello, M), write(M), write('\n'))).
:- initialization((module_resolution:get_module(hello, M), write(M), write('\n'))).