# Example: `"owner::module::MyClass"`
redef var full_name is lazy do return "{self.intro_mmodule.full_name}::{name}"
+ redef var c_name is lazy do return "{intro_mmodule.c_name}__{name.to_cmangle}"
+
# The number of generic formal parameters
# 0 if the class is not generic
var arity: Int is noinit
end
end
+ redef var c_name is lazy do
+ if is_intro then
+ return mclass.c_name
+ else
+ return "{mmodule.c_name}__{mclass.c_name.to_cmangle}"
+ end
+ end
+
redef fun model do return mmodule.model
# All declared super-types
redef fun full_name do return mclass.full_name
+ redef fun c_name do return mclass.c_name
+
redef fun need_anchor do return false
redef fun anchor_to(mmodule: MModule, anchor: MClassType): MClassType
return "{mclass.full_name}[{args.join(", ")}]}"
end
+ redef var c_name is lazy do
+ var res = mclass.c_name
+ # Note: because the arity is known, a prefix notation is enough
+ for t in arguments do
+ res += "__"
+ res += t.c_name
+ end
+ return res.to_s
+ end
+
redef var need_anchor: Bool is noinit
redef fun resolve_for(mtype, anchor, mmodule, cleanup_virtual)
redef fun to_s do return self.mproperty.to_s
redef fun full_name do return self.mproperty.full_name
+
+ redef fun c_name do return self.mproperty.c_name
end
# The type associated to a formal parameter generic type of a class
redef var full_name is lazy do return "{mclass.full_name}::{name}"
+ redef var c_name is lazy do return mclass.c_name + "__" + "#{name}".to_cmangle
+
redef fun lookup_bound(mmodule: MModule, resolved_receiver: MType): MType
do
assert not resolved_receiver.need_anchor
redef var full_name is lazy do return "nullable {mtype.full_name}"
+ redef var c_name is lazy do return "nullable__{mtype.c_name}"
+
redef fun need_anchor do return mtype.need_anchor
redef fun as_nullable do return self
redef fun as_notnullable do return mtype
redef var model: Model
redef fun to_s do return "null"
redef fun full_name do return "null"
+ redef fun c_name do return "null"
redef fun as_nullable do return self
redef fun need_anchor do return false
redef fun resolve_for(mtype, anchor, mmodule, cleanup_virtual) do return self
return "{intro_mclassdef.mmodule.full_name}::{intro_mclassdef.mclass.name}::{name}"
end
+ redef var c_name is lazy do
+ return "{intro_mclassdef.mmodule.c_name}__{intro_mclassdef.mclass.c_name}__{name.to_cmangle}"
+ end
+
# The visibility of the property
var visibility: MVisibility
return res.to_s
end
+ redef var c_name is lazy do
+ var res = new FlatBuffer
+ res.append mclassdef.c_name
+ res.append "__"
+ if is_intro then
+ res.append name.to_cmangle
+ else
+ res.append mproperty.c_name.to_cmangle
+ end
+ return res.to_s
+ end
+
redef fun model do return mclassdef.model
# Internal name combining the module, the class and the property