mirror of
https://github.com/Mercury-Language/mercury.git
synced 2025-12-15 05:44:58 +00:00
Put the fields of foreign_import_modules into our standard order.
compiler/prog_data_foreign.m:
Our standard order for foreign language is the historical order:
C, Java, C#, Erlang. Put foreign_import_modules's fields into this order,
renaming the functor to make the fields' meanings explicit.
compiler/write_deps_file.m:
Conform to the change above.
This commit is contained in:
@@ -60,11 +60,11 @@
|
|||||||
% C++ is commented out while lang_cplusplus is commented out
|
% C++ is commented out while lang_cplusplus is commented out
|
||||||
% in the foreign_language type.
|
% in the foreign_language type.
|
||||||
:- type foreign_import_modules
|
:- type foreign_import_modules
|
||||||
---> foreign_import_modules(
|
---> c_j_cs_e_fims(
|
||||||
fim_c :: set(module_name),
|
fim_c :: set(module_name),
|
||||||
% fim_cplusplus :: set(module_name),
|
% fim_cplusplus :: set(module_name),
|
||||||
fim_csharp :: set(module_name),
|
|
||||||
fim_java :: set(module_name),
|
fim_java :: set(module_name),
|
||||||
|
fim_csharp :: set(module_name),
|
||||||
fim_erlang :: set(module_name)
|
fim_erlang :: set(module_name)
|
||||||
).
|
).
|
||||||
|
|
||||||
@@ -100,7 +100,7 @@
|
|||||||
:- implementation.
|
:- implementation.
|
||||||
|
|
||||||
init_foreign_import_modules =
|
init_foreign_import_modules =
|
||||||
foreign_import_modules(set.init, set.init, set.init, set.init).
|
c_j_cs_e_fims(set.init, set.init, set.init, set.init).
|
||||||
|
|
||||||
add_foreign_import_module(Lang, ModuleName, !FIM) :-
|
add_foreign_import_module(Lang, ModuleName, !FIM) :-
|
||||||
(
|
(
|
||||||
@@ -142,20 +142,20 @@ add_fim_spec(FIMSpec, !FIM) :-
|
|||||||
add_foreign_import_module(Lang, ModuleName, !FIM).
|
add_foreign_import_module(Lang, ModuleName, !FIM).
|
||||||
|
|
||||||
get_all_fim_specs(FIM) = FIMSpecs :-
|
get_all_fim_specs(FIM) = FIMSpecs :-
|
||||||
FIM = foreign_import_modules(ModuleNamesC, ModuleNamesCSharp,
|
FIM = c_j_cs_e_fims(ModuleNamesC, ModuleNamesJava,
|
||||||
ModuleNamesJava, ModuleNamesErlang),
|
ModuleNamesCSharp, ModuleNamesErlang),
|
||||||
FIMSpecs = set.union_list([
|
FIMSpecs = set.union_list([
|
||||||
set.map(make_fim_spec(lang_c), ModuleNamesC),
|
set.map(make_fim_spec(lang_c), ModuleNamesC),
|
||||||
set.map(make_fim_spec(lang_csharp), ModuleNamesCSharp),
|
|
||||||
set.map(make_fim_spec(lang_java), ModuleNamesJava),
|
set.map(make_fim_spec(lang_java), ModuleNamesJava),
|
||||||
|
set.map(make_fim_spec(lang_csharp), ModuleNamesCSharp),
|
||||||
set.map(make_fim_spec(lang_erlang), ModuleNamesErlang)
|
set.map(make_fim_spec(lang_erlang), ModuleNamesErlang)
|
||||||
]).
|
]).
|
||||||
|
|
||||||
get_all_foreign_import_modules(FIM) = ModuleNames :-
|
get_all_foreign_import_modules(FIM) = ModuleNames :-
|
||||||
FIM = foreign_import_modules(ModuleNamesC, ModuleNamesCSharp,
|
FIM = c_j_cs_e_fims(ModuleNamesC, ModuleNamesJava,
|
||||||
ModuleNamesJava, ModuleNamesErlang),
|
ModuleNamesCSharp, ModuleNamesErlang),
|
||||||
ModuleNames = set.union_list([ModuleNamesC, ModuleNamesCSharp,
|
ModuleNames = set.union_list([ModuleNamesC, ModuleNamesJava,
|
||||||
ModuleNamesJava, ModuleNamesErlang]).
|
ModuleNamesCSharp, ModuleNamesErlang]).
|
||||||
|
|
||||||
get_lang_fim_specs(FIM, Lang) = ImportInfos :-
|
get_lang_fim_specs(FIM, Lang) = ImportInfos :-
|
||||||
ModuleNames = get_lang_fim_modules(FIM, Lang),
|
ModuleNames = get_lang_fim_modules(FIM, Lang),
|
||||||
|
|||||||
@@ -661,30 +661,28 @@ generate_d_file(Globals, ModuleAndImports, AllDeps, MaybeTransOptDeps,
|
|||||||
% modules. XXX ITEM_LIST What is the correctness argument that supports
|
% modules. XXX ITEM_LIST What is the correctness argument that supports
|
||||||
% the above assertion?
|
% the above assertion?
|
||||||
( if
|
( if
|
||||||
ForeignImportModules0 = foreign_import_modules(
|
ForeignImportModules0 = c_j_cs_e_fims(C0, Java0, CSharp0, Erlang0),
|
||||||
C0, CSharp0, Java0, Erlang0),
|
|
||||||
set.is_empty(C0),
|
set.is_empty(C0),
|
||||||
set.is_empty(CSharp0),
|
|
||||||
set.is_empty(Java0),
|
set.is_empty(Java0),
|
||||||
|
set.is_empty(CSharp0),
|
||||||
set.is_empty(Erlang0)
|
set.is_empty(Erlang0)
|
||||||
then
|
then
|
||||||
SrcForeignImportModules = foreign_import_modules(
|
SrcForeignImportModules = c_j_cs_e_fims(
|
||||||
SrcC, SrcCSharp, SrcJava, SrcErlang),
|
SrcC, SrcJava, SrcCSharp, SrcErlang),
|
||||||
IntForeignImportModules = foreign_import_modules(
|
IntForeignImportModules = c_j_cs_e_fims(
|
||||||
IntC, IntCSharp, IntJava, IntErlang),
|
IntC, IntJava, IntCSharp, IntErlang),
|
||||||
OptForeignImportModules = foreign_import_modules(
|
OptForeignImportModules = c_j_cs_e_fims(
|
||||||
OptC, OptCSharp, OptJava, OptErlang),
|
OptC, OptJava, OptCSharp, OptErlang),
|
||||||
IntForOptForeignImportModules = foreign_import_modules(
|
IntForOptForeignImportModules = c_j_cs_e_fims(
|
||||||
IntForOptC, IntForOptCSharp, IntForOptJava,
|
IntForOptC, IntForOptJava, IntForOptCSharp,
|
||||||
IntForOptErlang),
|
IntForOptErlang),
|
||||||
C = set.union_list([SrcC, IntC, OptC, IntForOptC]),
|
C = set.union_list([SrcC, IntC, OptC, IntForOptC]),
|
||||||
|
Java= set.union_list([SrcJava, IntJava, OptJava, IntForOptJava]),
|
||||||
CSharp = set.union_list([
|
CSharp = set.union_list([
|
||||||
SrcCSharp, IntCSharp, OptCSharp, IntForOptCSharp]),
|
SrcCSharp, IntCSharp, OptCSharp, IntForOptCSharp]),
|
||||||
Java= set.union_list([SrcJava, IntJava, OptJava, IntForOptJava]),
|
|
||||||
Erlang = set.union_list([
|
Erlang = set.union_list([
|
||||||
SrcErlang, IntErlang, OptErlang, IntForOptErlang]),
|
SrcErlang, IntErlang, OptErlang, IntForOptErlang]),
|
||||||
ForeignImportModules = foreign_import_modules(
|
ForeignImportModules = c_j_cs_e_fims(C, Java, CSharp, Erlang)
|
||||||
C, CSharp, Java, Erlang)
|
|
||||||
else
|
else
|
||||||
ForeignImportModules = ForeignImportModules0
|
ForeignImportModules = ForeignImportModules0
|
||||||
)
|
)
|
||||||
@@ -709,29 +707,29 @@ generate_d_file(Globals, ModuleAndImports, AllDeps, MaybeTransOptDeps,
|
|||||||
else
|
else
|
||||||
globals.get_target(Globals, Target),
|
globals.get_target(Globals, Target),
|
||||||
(
|
(
|
||||||
Target = target_csharp,
|
Target = target_c,
|
||||||
% XXX don't know enough about C# yet
|
% NOTE: for C the possible targets might be a .o file _or_ a
|
||||||
ForeignImportTargets = [],
|
% .pic_o file. We need to include dependencies for the latter
|
||||||
ForeignImportExt = ".cs"
|
% otherwise invoking mmake with a <module>.pic_o target will break.
|
||||||
|
ForeignImportTargets = [ObjFileName, PicObjFileName],
|
||||||
|
ForeignImportExt = ".mh"
|
||||||
;
|
;
|
||||||
Target = target_java,
|
Target = target_java,
|
||||||
module_name_to_file_name(Globals, do_not_create_dirs, ".class",
|
module_name_to_file_name(Globals, do_not_create_dirs, ".class",
|
||||||
ModuleName, ClassFileName, !IO),
|
ModuleName, ClassFileName, !IO),
|
||||||
ForeignImportTargets = [ClassFileName],
|
ForeignImportTargets = [ClassFileName],
|
||||||
ForeignImportExt = ".java"
|
ForeignImportExt = ".java"
|
||||||
|
;
|
||||||
|
Target = target_csharp,
|
||||||
|
% XXX don't know enough about C# yet
|
||||||
|
ForeignImportTargets = [],
|
||||||
|
ForeignImportExt = ".cs"
|
||||||
;
|
;
|
||||||
Target = target_erlang,
|
Target = target_erlang,
|
||||||
module_name_to_file_name(Globals, do_not_create_dirs, ".beam",
|
module_name_to_file_name(Globals, do_not_create_dirs, ".beam",
|
||||||
ModuleName, BeamFileName, !IO),
|
ModuleName, BeamFileName, !IO),
|
||||||
ForeignImportTargets = [BeamFileName],
|
ForeignImportTargets = [BeamFileName],
|
||||||
ForeignImportExt = ".hrl"
|
ForeignImportExt = ".hrl"
|
||||||
;
|
|
||||||
Target = target_c,
|
|
||||||
% NOTE: for C the possible targets might be a .o file _or_ a
|
|
||||||
% .pic_o file. We need to include dependencies for the latter
|
|
||||||
% otherwise invoking mmake with a <module>.pic_o target will break.
|
|
||||||
ForeignImportTargets = [ObjFileName, PicObjFileName],
|
|
||||||
ForeignImportExt = ".mh"
|
|
||||||
),
|
),
|
||||||
% XXX Instead of generating a separate rule for each target in
|
% XXX Instead of generating a separate rule for each target in
|
||||||
% ForeignImportTargets, generate one rule with all those targets
|
% ForeignImportTargets, generate one rule with all those targets
|
||||||
|
|||||||
Reference in New Issue
Block a user