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 )