Alien-LibJIT
view release on metacpan or search on metacpan
libjit/jitdynamic/jit-cpp-mangle.c view on Meta::CPAN
mangler->num_names = 0;
mangler->max_names = 0;
}
/*
* End a mangling operation, and return the final string.
*/
static char *end_mangler(jit_mangler_t mangler)
{
unsigned int index;
for(index = 0; index < mangler->num_names; ++index)
{
jit_free(mangler->names[index]);
}
jit_free(mangler->names);
if(!(mangler->buf) || mangler->out_of_memory)
{
jit_free(mangler->buf);
return 0;
}
return mangler->buf;
}
/*
* Add a character to a mangling buffer.
*/
static void add_ch(jit_mangler_t mangler, int ch)
{
char *new_buf;
if(mangler->buf_len >= mangler->buf_max)
{
if(mangler->out_of_memory)
{
return;
}
new_buf = (char *)jit_realloc
(mangler->buf, mangler->buf_len + 32);
if(!new_buf)
{
mangler->out_of_memory = 1;
return;
}
mangler->buf = new_buf;
mangler->buf_max += 32;
}
mangler->buf[(mangler->buf_len)++] = (char)ch;
}
/*
* Add a string to a mangling buffer.
*/
static void add_string(jit_mangler_t mangler, const char *str)
{
while(*str != '\0')
{
add_ch(mangler, *str++);
}
}
/*
* Add a length-prefixed string to a mangling buffer.
*/
static void add_len_string(jit_mangler_t mangler, const char *str)
{
char buf[32];
sprintf(buf, "%u", jit_strlen(str));
add_string(mangler, buf);
add_string(mangler, str);
}
/*
* Add a name to the name list in "mangler". Returns the index
* of a previous occurrence, or -1 if there was no previous version.
*/
static int add_name(jit_mangler_t mangler, const char *name,
unsigned int name_len)
{
unsigned int index;
unsigned int len;
char **new_names;
for(index = 0; index < mangler->num_names; ++index)
{
len = jit_strlen(mangler->names[index]);
if(len == name_len && !jit_strncmp(name, mangler->names[index], len))
{
return (int)index;
}
}
if(mangler->num_names >= mangler->max_names)
{
if(mangler->out_of_memory)
{
return -1;
}
new_names = (char **)jit_realloc
(mangler->names, (mangler->num_names + 8));
if(!new_names)
{
mangler->out_of_memory = 1;
return -1;
}
mangler->names = new_names;
mangler->max_names += 8;
}
mangler->names[mangler->num_names] = jit_strndup(name, name_len);
if(!(mangler->names[mangler->num_names]))
{
mangler->out_of_memory = 1;
}
else
{
++(mangler->num_names);
}
return -1;
}
/*
* Get a system integer type of a particular size.
*/
static jit_type_t get_system_type(jit_type_t type, int size, int is_signed)
{
( run in 1.057 second using v1.01-cache-2.11-cpan-140bd7fdf52 )