[ Modules | Reference Manual | Alphabetic Index ]

lock_pass(+)

Locks access to internals of the current module

Description

Used to forbid access from outside the current module to its internals, except through the module interface (i.e. its exports).

This primitive is usually used a directive in the source code of the module to be locked.

A module locked with lock_pass/1 can be unlocked using unlock/2, and giving the same pass-string that was used in locking. The pass-string can be changed by calling lock_pass/1 again from within the module.

Modes and Determinism

Modules

This predicate is sensitive to its module context (tool predicate, see @/2).

Examples

    % After compiling the following code:
     :- module(m).
     :- export pub/0.
     pub :- writeln(pub).
     priv :- writeln(priv).
     :- lock_pass("secret").


    ?- module(m).
    trying to access a locked module in module(m)

    ?- call(pub) @ m.
    pub
    yes.

    ?- call(priv) @ m.
    trying to access a locked module in priv

    ?- assert(foo) @ m.
    trying to access a locked module in assert_(foo, m)

    ?- unlock(m, "secret").
    yes.

    ?- call(priv) @ m.
    priv
    yes.

    ?- assert(foo) @ m.
    yes.

See Also

lock / 0, unlock / 2, get_module_info / 3