Alien-LibJIT

 view release on metacpan or  search on metacpan

libjit/dpas/dpas-function.c  view on Meta::CPAN

		dpas_out_of_memory();
	}
	function_stack = (jit_function_t *)jit_realloc
		(function_stack, sizeof(jit_function_t) * (function_stack_size + 1));
	if(!function_stack)
	{
		dpas_out_of_memory();
	}
	function_stack[function_stack_size++] = func;
	return func;
}

void dpas_pop_function(void)
{
	if(function_stack_size > 0)
	{
		--function_stack_size;
	}
}

int dpas_function_is_nested(void)
{
	return (function_stack_size > 1);
}

dpas_semvalue dpas_lvalue_to_rvalue(dpas_semvalue value)
{
	if(dpas_sem_is_lvalue_ea(value))
	{
		jit_type_t type = dpas_sem_get_type(value);
		jit_value_t rvalue = dpas_sem_get_value(value);
		rvalue = jit_insn_load_relative
			(dpas_current_function(), rvalue, 0, type);
		if(!rvalue)
		{
			dpas_out_of_memory();
		}
		dpas_sem_set_rvalue(value, type, rvalue);
	}
	return value;
}

void dpas_add_main_function(jit_function_t func)
{
	main_list = (jit_function_t *)jit_realloc
		(main_list, sizeof(jit_function_t) * (main_list_size + 1));
	if(!main_list)
	{
		dpas_out_of_memory();
	}
	main_list[main_list_size++] = func;
}

int dpas_run_main_functions(void)
{
	int index;
	for(index = 0; index < main_list_size; ++index)
	{
		if(!jit_function_apply(main_list[index], 0, 0))
		{
			fprintf(stderr, "Exception 0x%lx thrown past top level\n",
					(long)(jit_nint)(jit_exception_get_last()));
			return 0;
		}
	}
	return 1;
}



( run in 0.365 second using v1.01-cache-2.11-cpan-119454b85a5 )