Alien-LibJIT
view release on metacpan or search on metacpan
libjit/jitdynamic/jit-cpp-mangle.c view on Meta::CPAN
case JIT_TYPE_INT:
case JIT_TYPE_UINT:
case JIT_TYPE_NINT:
case JIT_TYPE_NUINT:
case JIT_TYPE_LONG:
case JIT_TYPE_ULONG:
{
/* Will only happen if the primitive numeric type
does not correspond to one of the system types */
jit_nuint size = jit_type_get_size(type);
add_ch(mangler, 'I');
add_ch(mangler, hexchars[(size >> 4) & 0x0F]);
add_ch(mangler, hexchars[size & 0x0F]);
}
break;
case JIT_TYPE_FLOAT32: add_ch(mangler, 'f'); break;
case JIT_TYPE_FLOAT64: add_ch(mangler, 'd'); break;
#ifdef JIT_NFLOAT_IS_DOUBLE
case JIT_TYPE_NFLOAT: add_ch(mangler, 'd'); break;
#else
case JIT_TYPE_NFLOAT: add_ch(mangler, 'r'); break;
#endif
case JIT_TYPE_STRUCT:
case JIT_TYPE_UNION:
{
/* These should have been tagged with a name */
add_ch(mangler, '?');
}
break;
case JIT_TYPE_SIGNATURE:
{
add_ch(mangler, 'F');
mangle_signature_gcc2(mangler, type);
add_ch(mangler, '_');
mangle_type_gcc2(mangler, jit_type_get_return(type));
}
break;
case JIT_TYPE_PTR:
{
add_ch(mangler, 'P');
mangle_type_gcc2(mangler, jit_type_get_ref(type));
}
break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_NAME:
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_STRUCT_NAME:
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_UNION_NAME:
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_ENUM_NAME:
{
/* Output the qualified name of the type */
mangle_name_gcc2
(mangler, (const char *)jit_type_get_tagged_data(type));
}
break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_REFERENCE:
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_OUTPUT:
{
add_ch(mangler, 'R');
mangle_type_gcc2
(mangler, jit_type_get_ref(jit_type_remove_tags(type)));
}
break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_BOOL:
add_ch(mangler, 'b'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_CHAR:
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_UCHAR:
add_ch(mangler, 'c'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_SCHAR:
add_ch(mangler, 'S');
add_ch(mangler, 'c'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_SHORT:
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_USHORT:
add_ch(mangler, 's'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_INT:
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_UINT:
add_ch(mangler, 'i'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_LONG:
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_ULONG:
add_ch(mangler, 'l'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_LONGLONG:
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_ULONGLONG:
add_ch(mangler, 'x'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_FLOAT:
add_ch(mangler, 'f'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_DOUBLE:
add_ch(mangler, 'd'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_LONGDOUBLE:
add_ch(mangler, 'r'); break;
default: break;
}
}
/*
* Mangle a function signature, using gcc 3.x rules.
*/
static void mangle_signature_gcc3(jit_mangler_t mangler, jit_type_t type)
{
unsigned int num_params;
unsigned int param;
num_params = jit_type_num_params(type);
if(num_params == 0 && jit_type_get_abi(type) != jit_abi_vararg)
{
add_ch(mangler, 'v');
}
for(param = 0; param < num_params; ++param)
{
mangle_type_gcc3(mangler, jit_type_get_param(type, param));
}
if(jit_type_get_abi(type) == jit_abi_vararg)
{
add_ch(mangler, 'z');
}
}
libjit/jitdynamic/jit-cpp-mangle.c view on Meta::CPAN
case JIT_TYPE_NUINT:
case JIT_TYPE_LONG:
case JIT_TYPE_ULONG:
{
/* Will only happen if the primitive numeric type
does not correspond to one of the system types */
jit_nuint size = jit_type_get_size(type);
if(is_unsigned(type))
add_string(mangler, "uU");
else
add_string(mangler, "uI");
add_ch(mangler, hexchars[(size >> 4) & 0x0F]);
add_ch(mangler, hexchars[size & 0x0F]);
}
break;
case JIT_TYPE_FLOAT32: add_ch(mangler, 'f'); break;
case JIT_TYPE_FLOAT64: add_ch(mangler, 'd'); break;
#ifdef JIT_NFLOAT_IS_DOUBLE
case JIT_TYPE_NFLOAT: add_ch(mangler, 'd'); break;
#else
case JIT_TYPE_NFLOAT: add_ch(mangler, 'e'); break;
#endif
case JIT_TYPE_STRUCT:
case JIT_TYPE_UNION:
{
/* These should have been tagged with a name */
add_ch(mangler, '?');
}
break;
case JIT_TYPE_SIGNATURE:
{
add_ch(mangler, 'F');
mangle_type_gcc3(mangler, jit_type_get_return(type));
mangle_signature_gcc3(mangler, type);
add_ch(mangler, 'E');
}
break;
case JIT_TYPE_PTR:
{
add_ch(mangler, 'P');
mangle_type_gcc3(mangler, jit_type_get_ref(type));
}
break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_NAME:
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_STRUCT_NAME:
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_UNION_NAME:
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_ENUM_NAME:
{
/* Output the qualified name of the type */
mangle_name_gcc3
(mangler, (const char *)jit_type_get_tagged_data(type), 0);
}
break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_REFERENCE:
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_OUTPUT:
{
add_ch(mangler, 'R');
mangle_type_gcc3
(mangler, jit_type_get_ref(jit_type_remove_tags(type)));
}
break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_BOOL:
add_ch(mangler, 'b'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_CHAR:
add_ch(mangler, 'c'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_SCHAR:
add_ch(mangler, 'a'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_UCHAR:
add_ch(mangler, 'h'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_SHORT:
add_ch(mangler, 's'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_USHORT:
add_ch(mangler, 't'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_INT:
add_ch(mangler, 'i'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_UINT:
add_ch(mangler, 'j'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_LONG:
add_ch(mangler, 'l'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_ULONG:
add_ch(mangler, 'm'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_LONGLONG:
add_ch(mangler, 'x'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_ULONGLONG:
add_ch(mangler, 'y'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_FLOAT:
add_ch(mangler, 'f'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_DOUBLE:
add_ch(mangler, 'd'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_LONGDOUBLE:
add_ch(mangler, 'e'); break;
default: break;
}
}
#if defined(JIT_WIN32_PLATFORM)
/*
* Forward declaration.
*/
static void mangle_type_msvc6(jit_mangler_t mangler, jit_type_t type);
/*
* Mangle a function signature, using MSVC 6.0 rules.
*/
static void mangle_signature_msvc6(jit_mangler_t mangler, jit_type_t type,
int output_return, int is_this_call,
int has_explicit_this)
{
unsigned int num_params;
unsigned int param;
jit_abi_t abi = jit_type_get_abi(type);
if(is_this_call)
libjit/jitdynamic/jit-cpp-mangle.c view on Meta::CPAN
{
if(jit_type_has_tag(sub_type, JIT_TYPETAG_VOLATILE))
{
add_ch(mangler, 'D');
}
else
{
add_ch(mangler, 'B');
}
}
else if(jit_type_has_tag(sub_type, JIT_TYPETAG_VOLATILE))
{
add_ch(mangler, 'C');
}
else
{
add_ch(mangler, 'A');
}
mangle_type_msvc6(mangler, sub_type);
}
break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_NAME:
{
add_ch(mangler, 'V');
mangle_name_msvc6
(mangler, (const char *)jit_type_get_tagged_data(type));
add_string(mangler, "@@");
}
break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_STRUCT_NAME:
{
add_ch(mangler, 'U');
mangle_name_msvc6
(mangler, (const char *)jit_type_get_tagged_data(type));
add_string(mangler, "@@");
}
break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_UNION_NAME:
{
add_ch(mangler, 'T');
mangle_name_msvc6
(mangler, (const char *)jit_type_get_tagged_data(type));
add_string(mangler, "@@");
}
break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_ENUM_NAME:
{
add_ch(mangler, 'W');
add_ch(mangler, (int)('0' + jit_type_get_size(type)));
mangle_name_msvc6
(mangler, (const char *)jit_type_get_tagged_data(type));
add_string(mangler, "@@");
}
break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_REFERENCE:
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_OUTPUT:
{
add_ch(mangler, 'A');
sub_type = jit_type_get_ref(jit_type_remove_tags(type));
if(jit_type_has_tag(sub_type, JIT_TYPETAG_CONST))
{
if(jit_type_has_tag(sub_type, JIT_TYPETAG_VOLATILE))
{
add_ch(mangler, 'D');
}
else
{
add_ch(mangler, 'B');
}
}
else if(jit_type_has_tag(sub_type, JIT_TYPETAG_VOLATILE))
{
add_ch(mangler, 'C');
}
else
{
add_ch(mangler, 'A');
}
mangle_type_msvc6(mangler, sub_type);
}
break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_CONST:
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_VOLATILE:
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_RESTRICT:
{
/* These are handled in the pointer and reference cases */
mangle_type_msvc6(mangler, jit_type_get_tagged_type(type));
}
break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_BOOL:
add_ch(mangler, 'D'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_CHAR:
add_ch(mangler, 'D'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_SCHAR:
add_ch(mangler, 'C'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_UCHAR:
add_ch(mangler, 'E'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_SHORT:
add_ch(mangler, 'F'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_USHORT:
add_ch(mangler, 'G'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_INT:
add_ch(mangler, 'H'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_UINT:
add_ch(mangler, 'I'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_LONG:
add_ch(mangler, 'J'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_ULONG:
add_ch(mangler, 'K'); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_LONGLONG:
add_string(mangler, "_J"); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_ULONGLONG:
add_string(mangler, "_K"); break;
case JIT_TYPE_FIRST_TAGGED + JIT_TYPETAG_SYS_FLOAT:
( run in 0.446 second using v1.01-cache-2.11-cpan-8644d7adfcd )