Files
mercury/mdbcomp/builtin_modules.m
Mark Brown d465fa53cb Update the COPYING.LIB file and references to it.
Discussion of these changes can be found on the Mercury developers
mailing list archives from June 2018.

COPYING.LIB:
    Add a special linking exception to the LGPL.

*:
    Update references to COPYING.LIB.

    Clean up some minor errors that have accumulated in copyright
    messages.
2018-06-09 17:43:12 +10:00

243 lines
9.1 KiB
Mathematica

%---------------------------------------------------------------------------%
% vim: ft=mercury ts=4 sw=4 et
%---------------------------------------------------------------------------%
% Copyright (C) 2014-2018 The Mercury team.
% This file is distributed under the terms specified in COPYING.LIB.
%---------------------------------------------------------------------------%
%
% This module contains information about various modules of the Mercury
% standard library that serve to implement various kinds of builtin operations.
% The compiler can generate references to types, predicates or functions
% in these modules, and the debugger and the profilers need access to
% many of these as well.
%
%---------------------------------------------------------------------------%
:- module mdbcomp.builtin_modules.
:- interface.
:- import_module mdbcomp.sym_name.
:- import_module list.
% Returns all the modules which are automatically imported.
%
:- func all_builtin_modules = list(sym_name).
% Returns the name of the module containing public builtins;
% originally this was "mercury_builtin", but it later became
% just "builtin", and it may eventually be renamed "std.builtin".
% This module is automatically imported, as if via `import_module'.
%
:- func mercury_public_builtin_module = sym_name.
% Returns the name of the module containing private builtins;
% traditionally this was "mercury_builtin", but it later became
% "private_builtin", and it may eventually be renamed
% "std.private_builtin". This module is automatically imported,
% as if via `use_module'.
%
:- func mercury_private_builtin_module = sym_name.
% Returns the name of the module containing builtins for region-based
% memory management. This module is automatically imported iff
% RBMM is enabled.
%
:- func mercury_region_builtin_module = sym_name.
% Returns the name of the module containing builtins for software
% transactional memory.
% This module is automatically imported iff STM is used in a module.
%
:- func mercury_stm_builtin_module = sym_name.
% Returns the name of the module implementing exceptions.
% This module is automatically imported iff STM is used in a module.
%
:- func mercury_exception_module = sym_name.
% Returns the name of the module implementing univs.
% This module is automatically imported iff STM is used in a module.
%
:- func mercury_univ_module = sym_name.
% Returns the name of the module containing builtins for tabling;
% originally these were in "private_builtin", but were then moved into
% a separate module. This module is automatically imported iff any
% predicate is tabled.
%
:- func mercury_table_builtin_module = sym_name.
% Returns the name of the module that handles tabling statistics.
% This is separate from table_builtin, since its contents need to be
% visible to users, while the contents of table_builtin are private.
% This module is automatically imported iff any tabled predicate
% gather statistics.
%
:- func mercury_table_statistics_module = sym_name.
% Returns the name of the module containing the builtins for deep
% profiling. This module is automatically imported iff deep profiling
% is enabled.
%
:- func mercury_profiling_builtin_module = sym_name.
% Returns the name of the module containing the builtins for term size
% profiling. This module is automatically imported iff term size profiling
% is enabled.
%
:- func mercury_term_size_prof_builtin_module = sym_name.
% Returns the name of the module containing the builtins for parallelism.
% This module is automatically imported iff building in a .par grade.
%
:- func mercury_par_builtin_module = sym_name.
% Returns the name of the module containing the RTTI implementation for
% certain backends.
%
:- func mercury_rtti_implementation_builtin_module = sym_name.
% Returns the name of the module containing the builtins for the
% source-to-source debugger.
%
:- func mercury_ssdb_builtin_module = sym_name.
% Returns the name of the list module.
%
:- func mercury_list_module = sym_name.
% Returns the name of the string module.
%
:- func mercury_string_module = sym_name.
% Returns the name of the string.format module.
%
:- func mercury_string_format_module = sym_name.
% Returns the name of the string.parse_util module.
%
:- func mercury_string_parse_util_module = sym_name.
% Returns the name of the int module.
%
:- func mercury_int_module = sym_name.
% Returns the name of the I/O module.
%
:- func mercury_io_module = sym_name.
% Returns the name of the stream module.
%
:- func mercury_stream_module = sym_name.
% Returns the sym_name of the module with the given name in the
% Mercury standard library.
%
:- func mercury_std_lib_module_name(sym_name) = sym_name.
% Succeeds iff the specified module is one of the builtin modules listed
% above which may be automatically imported.
%
:- pred any_mercury_builtin_module(sym_name::in) is semidet.
% Succeeds iff the specified module will never be traced.
%
:- pred non_traced_mercury_builtin_module(sym_name::in) is semidet.
:- pred is_std_lib_module_name(sym_name::in, string::out) is semidet.
:- pred is_mdbcomp_module_name(sym_name::in) is semidet.
%---------------------------------------------------------------------------%
%---------------------------------------------------------------------------%
:- implementation.
:- import_module library.
%---------------------------------------------------------------------------%
all_builtin_modules = [
mercury_public_builtin_module,
mercury_private_builtin_module,
mercury_region_builtin_module,
mercury_stm_builtin_module,
mercury_table_builtin_module,
mercury_table_statistics_module,
mercury_profiling_builtin_module,
mercury_term_size_prof_builtin_module,
mercury_par_builtin_module,
mercury_rtti_implementation_builtin_module,
mercury_ssdb_builtin_module
].
% We may eventually want to put the standard library into a package "std":
% mercury_public_builtin_module = qualified(unqualified("std"), "builtin").
% mercury_private_builtin_module(M) =
% qualified(unqualified("std"), "private_builtin"))).
mercury_public_builtin_module = unqualified("builtin").
mercury_private_builtin_module = unqualified("private_builtin").
mercury_region_builtin_module = unqualified("region_builtin").
mercury_stm_builtin_module = unqualified("stm_builtin").
% Exception is a non-builtin module needed by the STM system.
mercury_exception_module = unqualified("exception").
% Univ is a non-builtin module needed by the STM system.
mercury_univ_module = unqualified("univ").
mercury_table_builtin_module = unqualified("table_builtin").
mercury_table_statistics_module = unqualified("table_statistics").
mercury_profiling_builtin_module = unqualified("profiling_builtin").
mercury_term_size_prof_builtin_module = unqualified("term_size_prof_builtin").
mercury_par_builtin_module = unqualified("par_builtin").
mercury_rtti_implementation_builtin_module =
unqualified("rtti_implementation").
mercury_ssdb_builtin_module = unqualified("ssdb").
mercury_list_module = unqualified("list").
mercury_string_module = unqualified("string").
% string.format and string.parse_util are non-builtin modules
% that the compiler needs when compiling away the string format
% interpretation overhead of string.format and similar functions.
mercury_string_format_module = qualified(unqualified("string"), "format").
mercury_string_parse_util_module =
qualified(unqualified("string"), "parse_util").
mercury_int_module = unqualified("int").
mercury_io_module = unqualified("io").
mercury_stream_module = unqualified("stream").
mercury_std_lib_module_name(ModuleName) = ModuleName.
% -- not yet:
% QualfiedModuleName = qualified(unqualified("std"), ModuleName),
any_mercury_builtin_module(Module) :-
( Module = mercury_public_builtin_module
; Module = mercury_private_builtin_module
; Module = mercury_region_builtin_module
; Module = mercury_table_builtin_module
; Module = mercury_profiling_builtin_module
; Module = mercury_term_size_prof_builtin_module
; Module = mercury_par_builtin_module
; Module = mercury_ssdb_builtin_module
).
non_traced_mercury_builtin_module(Module) :-
( Module = mercury_table_builtin_module
; Module = mercury_profiling_builtin_module
; Module = mercury_term_size_prof_builtin_module
; Module = mercury_par_builtin_module
; Module = mercury_ssdb_builtin_module
).
is_std_lib_module_name(ModuleName, Name) :-
% -- not yet:
% ModuleName = qualified(unqualified("std"), UnqualifiedModuleName),
Name = sym_name_to_string(ModuleName),
mercury_std_library_module(Name).
is_mdbcomp_module_name(ModuleName) :-
Name = sym_name_to_string(ModuleName),
mercury_mdbcomp_module(Name).
%---------------------------------------------------------------------------%
:- end_module mdbcomp.builtin_modules.
%---------------------------------------------------------------------------%