From 1cf61a4ee6a7092b9af435f93e716f0d87b8585a Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Mon, 10 Nov 2014 14:54:41 -0500 Subject: [PATCH] compiler: add and use `MModule::c_name` Signed-off-by: Jean Privat --- src/compiler/abstract_compiler.nit | 23 ++++++++++++++++++----- src/compiler/separate_compiler.nit | 12 +++++++----- src/compiler/separate_erasure_compiler.nit | 10 ++++++---- 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/compiler/abstract_compiler.nit b/src/compiler/abstract_compiler.nit index 733a56e..16c0e4b 100644 --- a/src/compiler/abstract_compiler.nit +++ b/src/compiler/abstract_compiler.nit @@ -284,7 +284,7 @@ class MakefileToolchain self.toolcontext.info("Total C source files to compile: {cfiles.length}", 2) end - fun makefile_name(mainmodule: MModule): String do return "{mainmodule.name}.mk" + fun makefile_name(mainmodule: MModule): String do return "{mainmodule.c_name}.mk" fun default_outname(mainmodule: MModule): String do @@ -473,7 +473,7 @@ abstract class AbstractCompiler do if modelbuilder.toolcontext.opt_group_c_files.value then if self.files.is_empty then - var f = new CodeFile(mainmodule.name) + var f = new CodeFile(mainmodule.c_name) self.files.add(f) end return self.files.first @@ -1697,7 +1697,7 @@ redef class MClassType do var res = self.c_name_cache if res != null then return res - res = "{mclass.intro_mmodule.name.to_cmangle}__{mclass.name.to_cmangle}" + res = "{mclass.intro_mmodule.c_name}__{mclass.name.to_cmangle}" self.c_name_cache = res return res end @@ -1803,7 +1803,7 @@ redef class MClass fun c_name: String do var res = self.c_name_cache if res != null then return res - res = "{intro_mmodule.name.to_cmangle}__{name.to_cmangle}" + res = "{intro_mmodule.c_name}__{name.to_cmangle}" self.c_name_cache = res return res end @@ -1831,7 +1831,7 @@ redef class MPropDef do var res = self.c_name_cache if res != null then return res - res = "{self.mclassdef.mmodule.name.to_cmangle}__{self.mclassdef.mclass.name.to_cmangle}__{self.mproperty.name.to_cmangle}" + res = "{self.mclassdef.mmodule.c_name}__{self.mclassdef.mclass.name.to_cmangle}__{self.mproperty.name.to_cmangle}" self.c_name_cache = res return res end @@ -3015,6 +3015,19 @@ redef class Array[E] end redef class MModule + # Return the name of the global C identifier associated to `self`. + # This name is used to prefix files and other C identifiers associated with `self`. + var c_name: String is lazy do + var g = mgroup + var res + if g != null and g.mproject.name != name then + res = g.mproject.name.to_cmangle + "__" + name.to_cmangle + else + res = name.to_cmangle + end + return res + end + # All `MProperty` associated to all `MClassDef` of `mclass` fun properties(mclass: MClass): Set[MProperty] do if not self.properties_cache.has_key(mclass) then diff --git a/src/compiler/separate_compiler.nit b/src/compiler/separate_compiler.nit index 7509e55..491ebfe 100644 --- a/src/compiler/separate_compiler.nit +++ b/src/compiler/separate_compiler.nit @@ -92,9 +92,11 @@ redef class ModelBuilder var compiler = new SeparateCompiler(mainmodule, self, runtime_type_analysis) compiler.compile_header + var c_name = mainmodule.c_name + # compile class structures self.toolcontext.info("Property coloring", 2) - compiler.new_file("{mainmodule.name}.classes") + compiler.new_file("{c_name}.classes") compiler.do_property_coloring for m in mainmodule.in_importation.greaters do for mclass in m.intro_mclasses do @@ -104,21 +106,21 @@ redef class ModelBuilder end # The main function of the C - compiler.new_file("{mainmodule.name}.main") + compiler.new_file("{c_name}.main") compiler.compile_nitni_global_ref_functions compiler.compile_main_function compiler.compile_finalizer_function # compile methods for m in mainmodule.in_importation.greaters do - self.toolcontext.info("Generate C for module {m}", 2) - compiler.new_file("{m.name}.sep") + self.toolcontext.info("Generate C for module {m.full_name}", 2) + compiler.new_file("{m.c_name}.sep") compiler.compile_module_to_c(m) end # compile live & cast type structures self.toolcontext.info("Type coloring", 2) - compiler.new_file("{mainmodule.name}.types") + compiler.new_file("{c_name}.types") var mtypes = compiler.do_type_coloring for t in mtypes do compiler.compile_type_to_c(t) diff --git a/src/compiler/separate_erasure_compiler.nit b/src/compiler/separate_erasure_compiler.nit index b90a8bd..233bf54 100644 --- a/src/compiler/separate_erasure_compiler.nit +++ b/src/compiler/separate_erasure_compiler.nit @@ -67,9 +67,11 @@ redef class ModelBuilder var compiler = new SeparateErasureCompiler(mainmodule, self, runtime_type_analysis) compiler.compile_header + var c_name = mainmodule.c_name + # compile class structures self.toolcontext.info("Property coloring", 2) - compiler.new_file("{mainmodule.name}.tables") + compiler.new_file("{c_name}.tables") compiler.do_property_coloring for m in mainmodule.in_importation.greaters do for mclass in m.intro_mclasses do @@ -79,14 +81,14 @@ redef class ModelBuilder compiler.compile_color_consts(compiler.vt_colors) # The main function of the C - compiler.new_file("{mainmodule.name}.main") + compiler.new_file("{c_name}.main") compiler.compile_nitni_global_ref_functions compiler.compile_main_function # compile methods for m in mainmodule.in_importation.greaters do - self.toolcontext.info("Generate C for module {m}", 2) - compiler.new_file("{m.name}.sep") + self.toolcontext.info("Generate C for module {m.full_name}", 2) + compiler.new_file("{m.c_name}.sep") compiler.compile_module_to_c(m) end -- 1.7.9.5