mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 01:13:30 +00:00
112 lines
3.4 KiB
Mathematica
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.
|
|
%-----------------------------------------------------------------------------%
|