built-in predicate

logtalk_load_context/2

Description

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.

Warning

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(?callable, -nonvar) - zero_or_more

Errors

Key is neither a variable nor a callable term:
type_error(callable, Key)
Key is a callable term but not a valid key:
domain_error(logtalk_load_context_key, Key)

Examples

% 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))
)).