NOTE: we do not return a RuntimeVariable
"CString" as the class may not exist in the module/program
# Return a "const char*" variable associated to the classname of the dynamic type of an object
# NOTE: we do not return a `RuntimeVariable` "CString" as the class may not exist in the module/program
fun class_name_string(value: RuntimeVariable): String is abstract
src/compiler/abstract_compiler.nit:1606,2--1608,66
redef fun class_name_string(value)
do
var res = self.get_name("var_class_name")
self.add_decl("const char* {res};")
if not value.mtype.is_c_primitive then
self.add "{res} = {value} == NULL ? \"null\" : {type_info(value)}->name;"
else if value.mtype isa MClassType and value.mtype.as(MClassType).mclass.kind == extern_kind and
value.mtype.as(MClassType).name != "CString" then
self.add "{res} = \"{value.mtype.as(MClassType).mclass}\";"
else
self.require_declaration("type_{value.mtype.c_name}")
self.add "{res} = type_{value.mtype.c_name}.name;"
end
return res
end
src/compiler/separate_compiler.nit:1969,2--1983,4
redef fun class_name_string(value)
do
var res = self.get_name("var_class_name")
self.add_decl("const char* {res};")
if not value.mtype.is_c_primitive then
self.add "{res} = class_names[{value}->classid];"
else
self.add "{res} = class_names[{self.compiler.classid(value.mtype.as(MClassType))}];"
end
return res
end
src/compiler/global_compiler.nit:936,2--946,4
redef fun class_name_string(value)
do
var res = self.get_name("var_class_name")
self.add_decl("const char* {res};")
if not value.mtype.is_c_primitive then
self.add "{res} = {value} == NULL ? \"null\" : {value}->class->name;"
else
self.require_declaration("class_{value.mtype.c_name}")
self.add "{res} = class_{value.mtype.c_name}.name;"
end
return res
end
src/compiler/separate_erasure_compiler.nit:698,2--709,4