X-Git-Url: http://nitlanguage.org diff --git a/src/compiling/compiling_base.nit b/src/compiling/compiling_base.nit index 24d4fcb..e6f7f9a 100644 --- a/src/compiling/compiling_base.nit +++ b/src/compiling/compiling_base.nit @@ -43,7 +43,7 @@ class CProgram do _program = p _compdir = p.tc.compdir.as(not null) - _build_file = "{compdir}/{program.main_module.name}._build.sh" + _build_file = "{compdir}/{program.main_module.cname}._build.sh" end # The Nit program compiled to C @@ -67,7 +67,7 @@ class CProgram if _module_include.has_key(m) then return _module_include[m] end - var filename = "{m.name}.{get_file_ending}.h" + var filename = "{m.cname}.{get_file_ending}.h" _module_include[m] = filename return filename end @@ -94,7 +94,7 @@ class CProgram end f.write("#!/bin/sh\n") - f.write("# This shell script is generated by NIT to compile the program {program.main_module.name}.\n") + f.write("# This shell script is generated by NIT to compile the program {program.main_module.full_name}.\n") f.write("CLIBDIR=\"{tc.clibdir.as(not null)}\"\n") f.write("{tc.bindir.as(not null)}/gccx {verbose} -d {compdir} -I $CLIBDIR {include_dirs.join(" ")}") if tc.output_file != null then @@ -249,25 +249,68 @@ redef class MMGlobalProperty end redef class MMGlobalClass + # Cacher result of cname + var _cname_cache: nullable String + + # The mangled name of the global class + fun cname: String + do + var cname = _cname_cache + if cname == null then + cname = intro.mmmodule.cname + "___" + cmangle(intro.name) + _cname_cache = cname + end + return cname + end + # C symbol refering the identifier of the class fun id_id: String do - return "ID_{intro.name}" + return "ID_{cname}" end # C symbol refering the color of the class (for subtype tests) fun color_id: String do - return "COLOR_{intro.name}" + return "COLOR_{cname}" end # C symbol refering the init table position of the class (for constructor linearization) fun init_table_pos_id: String do - return "INIT_TABLE_POS_{intro.name}" + return "INIT_TABLE_POS_{cname}" + end +end + +redef class MMModule + # Cacher result of cname + var _cname_cache: nullable String + + # The mangled name of the module + fun cname: String + do + var cname = _cname_cache + if cname == null then + var l = new List[String] + var m: nullable MMModule = self + while m != null do + l.unshift(cmangle(m.name)) + var d: nullable MMDirectory = m.directory + while d != null and d.owner == m do d = d.parent + if d == null then m = null else m = d.owner + end + cname = l.to_a.join("___") + _cname_cache = cname + end + return cname end end +redef class MMLocalClass + # The mangled name of the global class + fun cname: String do return global.cname +end + redef class MMLocalProperty # Cacher result of cname var _cname_cache: nullable String @@ -277,7 +320,7 @@ redef class MMLocalProperty do var cname = _cname_cache if cname == null then - cname = cmangle(mmmodule.name, local_class.name, name) + cname = mmmodule.cname + "___" + cmangle(local_class.name, name) _cname_cache = cname end return cname