Files
mercury/compiler/prog_data_used_modules.m
Zoltan Somogyi 4ebc3ffa04 Carve four modules out of prog_data.m.
The prog_data.m module is imported by most modules of the compiler; by
359 modules out of 488, to be exact. Yet it has many parts that most of
those 359 modules don't need. This diff puts those parts into four new
modules. The number of imports of these modules:

    348 modules import prog_data.m
     84 modules import prog_data_foreign.m
     62 modules import prog_data_pragma.m
     12 modules import prog_data_event.m
      5 modules import prog_data_used_modules.m

compiler/prog_data_event.m:
compiler/prog_data_foreign.m:
compiler/prog_data_pragma.m:
compiler/prog_data_used_modules.m:
    New modules. They contain the parts of the parse tree that deal
    respectively with the specification of events and event sets,
    interfacing to foreign languages, pragmas, and the sets of used
    (i.e. not unused) modules.

compiler/prog_data.m:
    Delete the stuff that is now in the new modules. Put the remaining parts
    of the module into a logical order.

compiler/parse_tree.m:
compiler/notes/compiler_design.html:
    Include and document the new modules.

compiler/globals.m:
    Move a type here from prog_data.m, since this is where it belongs.

compiler/add_foreign_proc.m:
compiler/add_mutable_aux_preds.m:
compiler/add_pragma.m:
compiler/add_solver.m:
compiler/add_trail_ops.m:
compiler/call_gen.m:
compiler/code_gen.m:
compiler/code_loc_dep.m:
compiler/comp_unit_interface.m:
compiler/compile_target_code.m:
compiler/complexity.m:
compiler/continuation_info.m:
compiler/coverage_profiling.m:
compiler/ctgc.datastruct.m:
compiler/ctgc.livedata.m:
compiler/ctgc.selector.m:
compiler/deep_profiling.m:
compiler/dep_par_conj.m:
compiler/deps_map.m:
compiler/det_analysis.m:
compiler/det_report.m:
compiler/elds_to_erlang.m:
compiler/equiv_type.m:
compiler/erl_call_gen.m:
compiler/exception_analysis.m:
compiler/export.m:
compiler/fact_table.m:
compiler/foreign.m:
compiler/frameopt.m:
compiler/get_dependencies.m:
compiler/goal_form.m:
compiler/goal_util.m:
compiler/granularity.m:
compiler/hlds_goal.m:
compiler/hlds_module.m:
compiler/hlds_out_goal.m:
compiler/hlds_out_module.m:
compiler/hlds_out_pred.m:
compiler/hlds_pred.m:
compiler/inlining.m:
compiler/intermod.m:
compiler/ite_gen.m:
compiler/item_util.m:
compiler/jumpopt.m:
compiler/layout.m:
compiler/layout_out.m:
compiler/live_vars.m:
compiler/livemap.m:
compiler/llds.m:
compiler/llds_out_file.m:
compiler/llds_out_global.m:
compiler/llds_out_instr.m:
compiler/make.dependencies.m:
compiler/make.module_dep_file.m:
compiler/make_hlds.m:
compiler/make_hlds_warn.m:
compiler/mark_tail_calls.m:
compiler/mercury_compile_llds_back_end.m:
compiler/mercury_compile_main.m:
compiler/ml_call_gen.m:
compiler/ml_code_gen.m:
compiler/ml_code_util.m:
compiler/ml_foreign_proc_gen.m:
compiler/ml_proc_gen.m:
compiler/ml_tailcall.m:
compiler/ml_unify_gen.m:
compiler/mlds.m:
compiler/mlds_to_c.m:
compiler/mlds_to_cs.m:
compiler/mlds_to_java.m:
compiler/modecheck_goal.m:
compiler/module_imports.m:
compiler/module_qual.m:
compiler/module_qual.qualify_items.m:
compiler/modules.m:
compiler/opt_debug.m:
compiler/par_conj_gen.m:
compiler/parse_pragma.m:
compiler/parse_tree_out_info.m:
compiler/parse_tree_out_pragma.m:
compiler/pd_cost.m:
compiler/polymorphism.m:
compiler/pragma_c_gen.m:
compiler/proc_gen.m:
compiler/prog_ctgc.m:
compiler/prog_event.m:
compiler/prog_foreign.m:
compiler/prog_item.m:
compiler/prog_out.m:
compiler/prog_util.m:
compiler/purity.m:
compiler/rbmm.points_to_analysis.m:
compiler/rbmm.points_to_graph.m:
compiler/simplify_goal_call.m:
compiler/simplify_goal_scope.m:
compiler/simplify_proc.m:
compiler/smm_common.m:
compiler/stack_layout.m:
compiler/structure_reuse.analysis.m:
compiler/structure_reuse.direct.choose_reuse.m:
compiler/structure_reuse.direct.detect_garbage.m:
compiler/structure_reuse.domain.m:
compiler/structure_reuse.indirect.m:
compiler/structure_sharing.analysis.m:
compiler/structure_sharing.domain.m:
compiler/table_gen.m:
compiler/tabling_analysis.m:
compiler/term_constr_build.m:
compiler/term_constr_initial.m:
compiler/term_constr_main.m:
compiler/term_constr_main_types.m:
compiler/term_constr_pass2.m:
compiler/term_constr_util.m:
compiler/term_errors.m:
compiler/term_pass1.m:
compiler/term_pass2.m:
compiler/term_traversal.m:
compiler/term_util.m:
compiler/termination.m:
compiler/trace_gen.m:
compiler/trailing_analysis.m:
compiler/type_constraints.m:
compiler/typecheck.m:
compiler/unique_modes.m:
compiler/unused_args.m:
compiler/unused_imports.m:
compiler/use_local_vars.m:
compiler/write_deps_file.m:
    Conform to the changes above.
2016-03-13 18:19:31 +11:00

109 lines
3.8 KiB
Mathematica

%---------------------------------------------------------------------------%
% vim: ft=mercury ts=4 sw=4 et
%---------------------------------------------------------------------------%
% Copyright (C) 2016 The Mercury team.
% This file may only be copied under the terms of the GNU General
% Public License - see the file COPYING in the Mercury distribution.
%---------------------------------------------------------------------------%
%
% This module defines the used_modules type and its operations.
%
%---------------------------------------------------------------------------%
:- module parse_tree.prog_data_used_modules.
:- interface.
:- import_module mdbcomp.
:- import_module mdbcomp.sym_name.
:- import_module set.
%---------------------------------------------------------------------------%
:- type used_modules
---> used_modules(
% The modules used in the interface and implementation.
int_used_modules :: set(module_name),
imp_used_modules :: set(module_name)
).
:- type item_visibility
---> visibility_public
; visibility_private.
% Initialize the used_modules structure.
%
:- func used_modules_init = used_modules.
% Given a sym_name, call record_module_and_ancestors_as_used on the module
% part of the name.
%
:- pred record_sym_name_module_as_used(item_visibility::in, sym_name::in,
used_modules::in, used_modules::out) is det.
% Given a module name, add the module and all of its parent modules
% to the used_modules.
%
:- pred record_module_and_ancestors_as_used(item_visibility::in, sym_name::in,
used_modules::in, used_modules::out) is det.
:- pred record_format_modules_as_used(used_modules::in, used_modules::out)
is det.
%---------------------------------------------------------------------------%
:- implementation.
:- import_module mdbcomp.builtin_modules.
:- import_module list.
used_modules_init = used_modules(set.init, set.init).
record_sym_name_module_as_used(Visibility, SymName, !UsedModules) :-
(
SymName = unqualified(_)
;
SymName = qualified(ModuleName, _),
record_module_and_ancestors_as_used(Visibility, ModuleName,
!UsedModules)
).
record_module_and_ancestors_as_used(Visibility, ModuleName, !UsedModules) :-
(
ModuleName = unqualified(_),
record_module_as_used(Visibility, ModuleName, !UsedModules)
;
ModuleName = qualified(ParentModuleName, _),
record_module_as_used(Visibility, ModuleName, !UsedModules),
record_module_and_ancestors_as_used(Visibility, ParentModuleName,
!UsedModules)
).
:- pred record_module_as_used(item_visibility::in, module_name::in,
used_modules::in, used_modules::out) is det.
record_module_as_used(Visibility, ModuleName, !UsedModules) :-
(
Visibility = visibility_public,
IntUsedModules0 = !.UsedModules ^ int_used_modules,
set.insert(ModuleName, IntUsedModules0, IntUsedModules),
!UsedModules ^ int_used_modules := IntUsedModules
;
Visibility = visibility_private,
ImplUsedModules0 = !.UsedModules ^ imp_used_modules,
set.insert(ModuleName, ImplUsedModules0, ImplUsedModules),
!UsedModules ^ imp_used_modules := ImplUsedModules
).
record_format_modules_as_used(!UsedModules) :-
ImplUsedModules0 = !.UsedModules ^ imp_used_modules,
FormatModules = [mercury_string_format_module,
mercury_string_parse_util_module, mercury_stream_module],
set.insert_list(FormatModules, ImplUsedModules0, ImplUsedModules),
!UsedModules ^ imp_used_modules := ImplUsedModules.
%---------------------------------------------------------------------------%
:- end_module parse_tree.prog_data_used_modules.
%---------------------------------------------------------------------------%