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 )