Alien-LibJIT
view release on metacpan or search on metacpan
libjit/jitdynamic/jit-cpp-mangle.c view on Meta::CPAN
}
break;
#endif
}
return end_mangler(&mangler);
}
/*@
* @deftypefun {char *} jit_mangle_member_function (const char *@var{class_name}, const char *@var{name}, jit_type_t @var{signature}, int @var{form}, int @var{flags})
* Mangle the name of a C++ member function using the specified @var{form}.
* Returns NULL if out of memory, or if the form is not supported.
* The following flags may be specified to modify the mangling rules:
*
* @table @code
* @vindex JIT_MANGLE_PUBLIC
* @item JIT_MANGLE_PUBLIC
* The method has @code{public} access within its containing class.
*
* @vindex JIT_MANGLE_PROTECTED
* @item JIT_MANGLE_PROTECTED
* The method has @code{protected} access within its containing class.
*
* @vindex JIT_MANGLE_PRIVATE
* @item JIT_MANGLE_PRIVATE
* The method has @code{private} access within its containing class.
*
* @vindex JIT_MANGLE_STATIC
* @item JIT_MANGLE_STATIC
* The method is @code{static}.
*
* @vindex JIT_MANGLE_VIRTUAL
* @item JIT_MANGLE_VIRTUAL
* The method is a virtual instance method. If neither
* @code{JIT_MANGLE_STATIC} nor @code{JIT_MANGLE_VIRTUAL} are supplied,
* then the method is assumed to be a non-virtual instance method.
*
* @vindex JIT_MANGLE_CONST
* @item JIT_MANGLE_CONST
* The method is an instance method with the @code{const} qualifier.
*
* @vindex JIT_MANGLE_EXPLICIT_THIS
* @item JIT_MANGLE_EXPLICIT_THIS
* The @var{signature} includes an extra pointer parameter at the start
* that indicates the type of the @code{this} pointer. This parameter won't
* be included in the final mangled name.
*
* @vindex JIT_MANGLE_IS_CTOR
* @item JIT_MANGLE_IS_CTOR
* The method is a constructor. The @var{name} parameter will be ignored.
*
* @vindex JIT_MANGLE_IS_DTOR
* @item JIT_MANGLE_IS_DTOR
* The method is a destructor. The @var{name} parameter will be ignored.
*
* @vindex JIT_MANGLE_BASE
* @item JIT_MANGLE_BASE
* Fetch the "base" constructor or destructor entry point, rather than
* the "complete" entry point.
* @end table
*
* The @var{class_name} may include namespace and nested parent qualifiers
* by separating them with @code{::} or @code{.}. Class names that involve
* template parameters are not supported yet.
* @end deftypefun
@*/
char *jit_mangle_member_function
(const char *class_name, const char *name,
jit_type_t signature, int form, int flags)
{
struct jit_mangler mangler;
init_mangler(&mangler);
switch(form)
{
#ifdef MANGLING_FORM_GCC_2
case MANGLING_FORM_GCC_2:
{
if((flags & JIT_MANGLE_IS_CTOR) != 0)
{
add_string(&mangler, GCC2_CTOR_PREFIX);
mangle_name_gcc2(&mangler, class_name);
mangle_signature_gcc2(&mangler, signature);
}
else if((flags & JIT_MANGLE_IS_DTOR) != 0)
{
add_string(&mangler, GCC2_DTOR_PREFIX);
mangle_name_gcc2(&mangler, class_name);
}
else
{
add_string(&mangler, name);
add_string(&mangler, "__");
mangle_signature_gcc2(&mangler, signature);
}
}
break;
#endif
#ifdef MANGLING_FORM_GCC_3
case MANGLING_FORM_GCC_3:
{
if((flags & JIT_MANGLE_IS_CTOR) != 0)
{
add_string(&mangler, "_Z");
if((flags & JIT_MANGLE_BASE) != 0)
{
mangle_name_gcc3(&mangler, class_name, "C2");
}
else
{
mangle_name_gcc3(&mangler, class_name, "C1");
}
mangle_signature_gcc3(&mangler, signature);
}
else if((flags & JIT_MANGLE_IS_DTOR) != 0)
{
add_string(&mangler, "_Z");
if((flags & JIT_MANGLE_BASE) != 0)
{
mangle_name_gcc3(&mangler, class_name, "D2");
}
else
( run in 0.302 second using v1.01-cache-2.11-cpan-4991d5b9bd9 )