built-in predicate



logtalk_load_context(Key, Value)

Provides access to the Logtalk compilation/loading context. The following keys are currently supported:

  • entity_identifier - identifier of the entity being compiled if any
  • entity_prefix - internal prefix for the entity compiled code
  • entity_type - returns the value module when compiling a module as an object
  • entity_relation - returns the entity relations as declared in the entity opening directive
  • source - full path of the source file being compiled
  • file - the actual file being compiled, different from source only when processing an include/1 directive
  • basename - source file basename
  • directory - source file directory
  • stream - input stream being used to read source file terms
  • target - the full path of the intermediate Prolog file
  • flags - the list of the explicit flags used for the compilation of the source file
  • term - the source file term being compiled
  • term_position - the position of the term being compiled (StartLine-EndLine)
  • variables - the variables of the term being compiled ([Variable1, ...])
  • variable_names - the variable names of the term being compiled ([Name1=Variable1, ...])
  • variable_names(Term) - the variable names of the term being compiled ([Name1=Variable1, ...])
  • singletons - the singleton variables of the term being compiled ([Name1=Variable1, ...])
  • singletons(Term) - the singleton variables of the term being compiled ([Name1=Variable1, ...])
  • parameter_variables - list of parameter variable names and positions ([Name1-Position1, ...])

For the entity_relation key, the possible values are:

  • extends_protocol(Protocol, ParentProtocol, Scope)
  • implements_protocol(ObjectOrCategory, Protocol, Scope)
  • extends_category(Category, ParentCategory, Scope)
  • imports_category(Object, Category, Scope)
  • extends_object(Prototype, Parent, Scope)
  • instantiates_class(Instance, Class, Scope)
  • specializes_class(Class, Superclass, Scope)
  • complements_object(Category, Object)

Calling this predicate with the parameter_variables key only succeeds when compiling a parametric entity containing parameter variables.

This predicate is usually called by the term_expansion/2 and goal_expansion/2 methods. It can also be called directly from initialization/1 directives in a source file. Note that the entity keys are only available when compiling an entity term or from an object initialization/1 directive.


The term_position key is only supported in backend Prolog compilers that provide access to the start and end lines of a read term. When such support is not available, the value -1 is returned for both the start and the end lines.

Variables in the values of the term, variables, variable_names, and singletons keys are not shared with, respectively, the term and goal arguments of the term_expansion/2 and goal_expansion/2 methods. Use instead the variable_names(Term) and singletons(Term) keys.

Modes and number of proofs

logtalk_load_context(?atom, -nonvar) - zero_or_more




% expand source file terms only if they are entity terms
term_expansion(Term, ExpandedTerms) :-
    logtalk_load_context(entity_identifier, _),

% expand source file term while accessing its variable names
term_expansion(Term, ExpandedTerms) :-
    logtalk_load_context(variable_names(Term), VariableNames),

% define a library alias based on the source directory
:- initialization((
    logtalk_load_context(directory, Directory),
    assertz(logtalk_library_path(my_app, Directory))