Files
mercury/compiler/file_kind.m
Julien Fischer bad6ce0733 Update and fix more copyright notices.
compiler/*.m:
    As above.
2024-12-14 23:55:01 +11:00

112 lines
3.4 KiB
Mathematica

%-----------------------------------------------------------------------------%
% vim: ft=mercury ts=4 sw=4 et
%-----------------------------------------------------------------------------%
% Copyright (C) 2015, 2019-2020, 2023-2024 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.
%-----------------------------------------------------------------------------%
%
% File: file_kind.m.
% Main author: zs.
%
%-----------------------------------------------------------------------------%
:- module parse_tree.file_kind.
:- interface.
:- import_module parse_tree.file_names.
%-----------------------------------------------------------------------------%
%
% The different kinds of files that the frontend of the Mercury compiler
% deals with:
%
% - source files,
% - automatically generated interface files, and
% - automatically generated optimization files.
%
:- type file_kind
---> fk_src
; fk_int(int_file_kind)
; fk_opt(opt_file_kind).
:- type int_or_opt_file_kind
---> iofk_int(int_file_kind)
; iofk_opt(opt_file_kind).
:- type src_file_kind
---> sfk_src.
:- type int_file_kind
---> ifk_int0
; ifk_int1
; ifk_int2
; ifk_int3.
:- type opt_file_kind
---> ofk_opt
; ofk_trans_opt.
:- pred file_kind_to_extension(file_kind::in, string::out) is det.
:- pred int_file_kind_to_extension(int_file_kind::in,
string::out, ext::out(ext_int)) is det.
:- pred opt_file_kind_to_extension(opt_file_kind::in,
string::out, ext::out(ext_opt)) is det.
:- pred extension_to_file_kind(string::in, file_kind::out) is semidet.
%-----------------------------------------------------------------------------%
:- implementation.
file_kind_to_extension(fk_src, ".m").
file_kind_to_extension(fk_int(IntFileKind), ExtStr) :-
int_file_kind_to_extension(IntFileKind, ExtStr, _Ext).
file_kind_to_extension(fk_opt(OptFileKind), ExtStr) :-
opt_file_kind_to_extension(OptFileKind, ExtStr, _Ext).
int_file_kind_to_extension(ifk_int0,
".int0", ext_cur_ngs(ext_cur_ngs_int_int0)).
int_file_kind_to_extension(ifk_int1,
".int", ext_cur_ngs(ext_cur_ngs_int_int1)).
int_file_kind_to_extension(ifk_int2,
".int2", ext_cur_ngs(ext_cur_ngs_int_int2)).
int_file_kind_to_extension(ifk_int3,
".int3", ext_cur_ngs(ext_cur_ngs_int_int3)).
opt_file_kind_to_extension(ofk_opt, ".opt",
% XXX LEGACY
ext_cur_ngs_gs_max_ngs(ext_cur_ngs_gs_max_ngs_legacy_opt_plain)).
opt_file_kind_to_extension(ofk_trans_opt, ".trans_opt",
% XXX LEGACY
ext_cur_ngs_gs_max_ngs(ext_cur_ngs_gs_max_ngs_legacy_opt_trans)).
extension_to_file_kind(ExtStr, FileKind) :-
(
ExtStr = ".m",
FileKind = fk_src
;
ExtStr = ".int0",
FileKind = fk_int(ifk_int0)
;
ExtStr = ".int3",
FileKind = fk_int(ifk_int3)
;
ExtStr = ".int2",
FileKind = fk_int(ifk_int2)
;
ExtStr = ".int",
FileKind = fk_int(ifk_int1)
;
ExtStr = ".opt",
FileKind = fk_opt(ofk_opt)
;
ExtStr = ".trans_opt",
FileKind = fk_opt(ofk_trans_opt)
).
%-----------------------------------------------------------------------------%
:- end_module parse_tree.file_kind.
%-----------------------------------------------------------------------------%