Merge: MModule has a c_name
authorJean Privat <jean@pryen.org>
Mon, 10 Nov 2014 23:35:07 +0000 (18:35 -0500)
committerJean Privat <jean@pryen.org>
Mon, 10 Nov 2014 23:35:07 +0000 (18:35 -0500)
In compiler/, all entities have a `c_name` method to get a fully qualified mangled C identifier also usable to name files. All, except for one small class of indomitable entities that still holds out against the namespaces.

`c_name` where developed before the proposition of projects. This PR add a `c_name` for mmodules and update the places where its simple name was used.

Pull-Request: #898
Reviewed-by: Alexis Laferrière <alexis.laf@xymus.net>

15 files changed:
src/compiler/abstract_compiler.nit
src/compiler/separate_compiler.nit
src/compiler/separate_erasure_compiler.nit
tests/sav/nitg-e/fixme/base_conflict_submodule_name.res [deleted file]
tests/sav/nitg-e/fixme/base_conflict_submodule_name_alt1.res [deleted file]
tests/sav/nitg-e/fixme/base_conflict_submodule_name_alt2.res [deleted file]
tests/sav/nitg-g/fixme/base_conflict_submodule_name.res [deleted file]
tests/sav/nitg-g/fixme/base_conflict_submodule_name_alt1.res [deleted file]
tests/sav/nitg-g/fixme/base_conflict_submodule_name_alt2.res [deleted file]
tests/sav/nitg-s/fixme/base_conflict_submodule_name.res [deleted file]
tests/sav/nitg-s/fixme/base_conflict_submodule_name_alt1.res [deleted file]
tests/sav/nitg-s/fixme/base_conflict_submodule_name_alt2.res [deleted file]
tests/sav/nitg-sg/fixme/base_conflict_submodule_name.res [deleted file]
tests/sav/nitg-sg/fixme/base_conflict_submodule_name_alt1.res [deleted file]
tests/sav/nitg-sg/fixme/base_conflict_submodule_name_alt2.res [deleted file]

index 733a56e..16c0e4b 100644 (file)
@@ -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
index 7509e55..491ebfe 100644 (file)
@@ -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)
index b90a8bd..233bf54 100644 (file)
@@ -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
 
diff --git a/tests/sav/nitg-e/fixme/base_conflict_submodule_name.res b/tests/sav/nitg-e/fixme/base_conflict_submodule_name.res
deleted file mode 100644 (file)
index 7f85acf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Compilation error
diff --git a/tests/sav/nitg-e/fixme/base_conflict_submodule_name_alt1.res b/tests/sav/nitg-e/fixme/base_conflict_submodule_name_alt1.res
deleted file mode 100644 (file)
index 7f85acf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Compilation error
diff --git a/tests/sav/nitg-e/fixme/base_conflict_submodule_name_alt2.res b/tests/sav/nitg-e/fixme/base_conflict_submodule_name_alt2.res
deleted file mode 100644 (file)
index 7f85acf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Compilation error
diff --git a/tests/sav/nitg-g/fixme/base_conflict_submodule_name.res b/tests/sav/nitg-g/fixme/base_conflict_submodule_name.res
deleted file mode 100644 (file)
index 7f85acf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Compilation error
diff --git a/tests/sav/nitg-g/fixme/base_conflict_submodule_name_alt1.res b/tests/sav/nitg-g/fixme/base_conflict_submodule_name_alt1.res
deleted file mode 100644 (file)
index 7f85acf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Compilation error
diff --git a/tests/sav/nitg-g/fixme/base_conflict_submodule_name_alt2.res b/tests/sav/nitg-g/fixme/base_conflict_submodule_name_alt2.res
deleted file mode 100644 (file)
index 7f85acf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Compilation error
diff --git a/tests/sav/nitg-s/fixme/base_conflict_submodule_name.res b/tests/sav/nitg-s/fixme/base_conflict_submodule_name.res
deleted file mode 100644 (file)
index 7f85acf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Compilation error
diff --git a/tests/sav/nitg-s/fixme/base_conflict_submodule_name_alt1.res b/tests/sav/nitg-s/fixme/base_conflict_submodule_name_alt1.res
deleted file mode 100644 (file)
index 7f85acf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Compilation error
diff --git a/tests/sav/nitg-s/fixme/base_conflict_submodule_name_alt2.res b/tests/sav/nitg-s/fixme/base_conflict_submodule_name_alt2.res
deleted file mode 100644 (file)
index 7f85acf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Compilation error
diff --git a/tests/sav/nitg-sg/fixme/base_conflict_submodule_name.res b/tests/sav/nitg-sg/fixme/base_conflict_submodule_name.res
deleted file mode 100644 (file)
index 7f85acf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Compilation error
diff --git a/tests/sav/nitg-sg/fixme/base_conflict_submodule_name_alt1.res b/tests/sav/nitg-sg/fixme/base_conflict_submodule_name_alt1.res
deleted file mode 100644 (file)
index 7f85acf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Compilation error
diff --git a/tests/sav/nitg-sg/fixme/base_conflict_submodule_name_alt2.res b/tests/sav/nitg-sg/fixme/base_conflict_submodule_name_alt2.res
deleted file mode 100644 (file)
index 7f85acf..0000000
+++ /dev/null
@@ -1 +0,0 @@
-Compilation error