+ # The full-name of mpropdefs combine the information about the `classdef` and the `mproperty`.
+ #
+ # Therefore the combination of identifiers is awful,
+ # the worst case being
+ #
+ # ~~~nitish
+ # "{mclassdef.mmodule.full_name}#{mclassdef.mclass.intro_mmodule.full_name}::{mclassdef.name}#{mproperty.intro_mclassdef.mmodule.full_name}::{mproperty.intro_mclassdef.name}::{name}"
+ # ~~~
+ #
+ # Fortunately, the full-name is simplified when entities are repeated.
+ # The simplest form is "my_module#MyClass#my_property".
+ redef var full_name is lazy do
+ var res = new FlatBuffer
+ res.append mclassdef.mmodule.full_name
+ res.append "#"
+ if not mclassdef.is_intro then
+ res.append mclassdef.mclass.intro_mmodule.full_name
+ res.append "::"
+ end
+ res.append mclassdef.name
+ res.append "#"
+ if mproperty.intro_mclassdef.mmodule != mclassdef.mmodule then
+ res.append mproperty.intro_mclassdef.mmodule.full_name
+ res.append "::"
+ end
+ if mclassdef.mclass != mproperty.intro_mclassdef.mclass then
+ res.append mproperty.intro_mclassdef.mclass.name
+ res.append "::"
+ end
+ res.append name
+ 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
+