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
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
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
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
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