mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-16 18:03:36 +00:00
compiler/file_names.m:
Take ext_src out of the ext type, because this allows us to delete
the I/O state pair of arguments out of every file translation predicate
other than module_name_to_source_file_name and the ones that create
directories.
compiler/file_kind.m:
Delete the ext output argument of file_kind_to_extension, because
we can't return ext_src for fk_src anymore.
compiler/write_deps_file.m:
Delete a test for ext_src which could never succeed, because the
predicate in question is never called with ext_src.
Undo an accidental change from the diff that introduced
module_name_to_lib_file_name_create_dirs.
Conform to the changes above.
compiler/compile_target_code.m:
compiler/fact_table.m:
compiler/make.module_dep_file.m:
compiler/make.module_target.m:
compiler/make.program_target.m:
compiler/make.util.m:
compiler/mercury_compile_front_end.m:
compiler/mercury_compile_llds_back_end.m:
compiler/mercury_compile_main.m:
compiler/mercury_compile_make_hlds.m:
compiler/mlds_to_c_file.m:
compiler/mmc_analysis.m:
compiler/module_cmds.m:
compiler/read_modules.m:
compiler/recompilation.used_file.m:
compiler/write_module_interface_files.m:
Conform to the changes above.
169 lines
6.1 KiB
Mathematica
169 lines
6.1 KiB
Mathematica
%-----------------------------------------------------------------------------%
|
|
% vim: ft=mercury ts=4 sw=4 et
|
|
%-----------------------------------------------------------------------------%
|
|
% Copyright (C) 2003-2006, 2008-2011 The University of Melbourne.
|
|
% This file may only be copied under the terms of the GNU General
|
|
% Public License - see the file COPYING in the Mercury distribution.
|
|
%-----------------------------------------------------------------------------%
|
|
%
|
|
% File: mmc_analysis.m.
|
|
% Main author: stayl.
|
|
%
|
|
% Specify Mercury compiler analyses to be used with the inter-module analysis
|
|
% framework.
|
|
%
|
|
%-----------------------------------------------------------------------------%
|
|
|
|
:- module transform_hlds.mmc_analysis.
|
|
:- interface.
|
|
|
|
:- import_module analysis.
|
|
:- import_module hlds.
|
|
:- import_module hlds.hlds_module.
|
|
:- import_module hlds.hlds_pred.
|
|
:- import_module mdbcomp.
|
|
:- import_module mdbcomp.sym_name.
|
|
|
|
%-----------------------------------------------------------------------------%
|
|
|
|
:- type mmc
|
|
---> mmc.
|
|
|
|
:- instance compiler(mmc).
|
|
|
|
:- pred module_name_func_id(module_info::in, pred_proc_id::in,
|
|
module_name::out, func_id::out) is det.
|
|
|
|
:- pred module_name_func_id_from_pred_info(pred_info::in, proc_id::in,
|
|
module_name::out, func_id::out) is det.
|
|
|
|
:- pred func_id_to_ppid(module_info::in, module_name::in,
|
|
func_id::in, pred_proc_id::out) is det.
|
|
|
|
%-----------------------------------------------------------------------------%
|
|
%-----------------------------------------------------------------------------%
|
|
|
|
:- implementation.
|
|
|
|
:- import_module hlds.pred_table.
|
|
:- import_module libs.
|
|
:- import_module libs.globals.
|
|
:- import_module libs.options.
|
|
:- import_module parse_tree.
|
|
:- import_module parse_tree.file_names.
|
|
:- import_module parse_tree.find_module.
|
|
:- import_module transform_hlds.ctgc.
|
|
:- import_module transform_hlds.ctgc.structure_reuse.
|
|
:- import_module transform_hlds.ctgc.structure_reuse.analysis.
|
|
:- import_module transform_hlds.ctgc.structure_sharing.
|
|
:- import_module transform_hlds.ctgc.structure_sharing.analysis.
|
|
:- import_module transform_hlds.exception_analysis.
|
|
:- import_module transform_hlds.tabling_analysis.
|
|
:- import_module transform_hlds.trailing_analysis.
|
|
:- import_module transform_hlds.unused_args.
|
|
|
|
:- import_module io.
|
|
:- import_module list.
|
|
:- import_module maybe.
|
|
:- import_module require.
|
|
:- import_module unit.
|
|
|
|
%-----------------------------------------------------------------------------%
|
|
|
|
:- instance compiler(mmc) where [
|
|
compiler_name(mmc) = "mmc",
|
|
|
|
analyses(mmc, Name, Analysis) :-
|
|
(
|
|
Name = "mm_tabling_analysis",
|
|
Analysis = 'new analysis_type'(
|
|
unit1 : unit(any_call),
|
|
unit1 : unit(mm_tabling_analysis_answer))
|
|
;
|
|
Name = "trail_usage",
|
|
Analysis = 'new analysis_type'(
|
|
unit1 : unit(any_call),
|
|
unit1 : unit(trailing_analysis_answer))
|
|
;
|
|
Name = "exception_analysis",
|
|
Analysis = 'new analysis_type'(
|
|
unit1 : unit(any_call),
|
|
unit1 : unit(exception_analysis_answer))
|
|
;
|
|
Name = "unused_args",
|
|
Analysis = 'new analysis_type'(
|
|
unit1 : unit(unused_args_call),
|
|
unit1 : unit(unused_args_answer))
|
|
;
|
|
Name = "structure_sharing",
|
|
Analysis = 'new analysis_type'(
|
|
unit1 : unit(structure_sharing_call),
|
|
unit1 : unit(structure_sharing_answer))
|
|
;
|
|
Name = "structure_reuse",
|
|
Analysis = 'new analysis_type'(
|
|
unit1 : unit(structure_reuse_call),
|
|
unit1 : unit(structure_reuse_answer))
|
|
),
|
|
|
|
module_name_to_read_file_name(mmc, Globals, Ext,
|
|
ModuleName, MaybeFileName, !IO) :-
|
|
mmc_module_name_to_read_file_name(Globals, Ext,
|
|
ModuleName, MaybeFileName, !IO),
|
|
|
|
module_name_to_write_file_name(mmc, Globals, Ext,
|
|
ModuleName, FileName, !IO) :-
|
|
mmc_module_name_to_write_file_name(Globals, Ext,
|
|
ModuleName, FileName, !IO)
|
|
].
|
|
|
|
:- pred mmc_module_name_to_read_file_name(globals::in,
|
|
ext::in, module_name::in, maybe_error(string)::out,
|
|
io::di, io::uo) is det.
|
|
|
|
mmc_module_name_to_read_file_name(Globals, Ext,
|
|
ModuleName, MaybeFileName, !IO) :-
|
|
module_name_to_search_file_name(Globals, $pred, Ext,
|
|
ModuleName, FileName0),
|
|
globals.lookup_accumulating_option(Globals, intermod_directories, Dirs),
|
|
search_for_file(Dirs, FileName0, MaybeFileName, !IO).
|
|
|
|
:- pred mmc_module_name_to_write_file_name(globals::in,
|
|
ext::in, module_name::in, string::out, io::di, io::uo) is det.
|
|
|
|
mmc_module_name_to_write_file_name(Globals, Ext,
|
|
ModuleName, FileName, !IO) :-
|
|
module_name_to_file_name_create_dirs(Globals, $pred, Ext,
|
|
ModuleName, FileName, !IO).
|
|
|
|
module_name_func_id(ModuleInfo, proc(PredId, ProcId), PredModule, FuncId) :-
|
|
module_info_pred_info(ModuleInfo, PredId, PredInfo),
|
|
module_name_func_id_from_pred_info(PredInfo, ProcId, PredModule, FuncId).
|
|
|
|
module_name_func_id_from_pred_info(PredInfo, ProcId, PredModule, FuncId) :-
|
|
PredModule = pred_info_module(PredInfo),
|
|
PredName = pred_info_name(PredInfo),
|
|
PredOrFunc = pred_info_is_pred_or_func(PredInfo),
|
|
PredFormArity = pred_info_pred_form_arity(PredInfo),
|
|
FuncId = func_id(PredOrFunc, PredName, PredFormArity, ProcId).
|
|
|
|
func_id_to_ppid(ModuleInfo, ModuleName, FuncId, PPId) :-
|
|
FuncId = func_id(PredOrFunc, FuncName, PredFormArity, ProcId),
|
|
module_info_get_predicate_table(ModuleInfo, PredTable),
|
|
predicate_table_lookup_pf_m_n_a(PredTable, is_fully_qualified,
|
|
PredOrFunc, ModuleName, FuncName, PredFormArity, PredIds),
|
|
(
|
|
PredIds = [],
|
|
unexpected($pred, "no predicate")
|
|
;
|
|
PredIds = [PredId],
|
|
PPId = proc(PredId, ProcId)
|
|
;
|
|
PredIds = [_, _ | _],
|
|
unexpected($pred, "more than one predicate")
|
|
).
|
|
|
|
%-----------------------------------------------------------------------------%
|
|
:- end_module transform_hlds.mmc_analysis.
|
|
%-----------------------------------------------------------------------------%
|