Exemplo n.º 1
0
void			error(t_uint flag, char *msg)
{
	const char	*error[] = {
		": Too many args.",
		": Ouch... can't read this.",
		": What the heck is that file? Nah, just try with something else. - "
	};

	fail(g_exec_name);
	if (msg)
	{
		fail(error[get_index(flag & (t_uint)~E_NOEXIT)]);
		failn(msg);
	}
	else
		failn(error[get_index(flag & (t_uint)~E_NOEXIT)]);
	if (!(flag & E_NOEXIT))
		exit(EXIT_FAILURE);
}
value bap_llvm_load_stub(value arg) {
    CAMLparam1(arg);
    CAMLlocal1(result);
    const struct caml_ba_array* array = Caml_ba_array_val(arg);
    if ((!array->dim[0]) || (array->num_dims != 1))
        failn(1);
    const struct bap_llvm_loader *loader =
        bap_llvm_loader_create((const char*)(array->data), array->dim[0]);
    if (bap_llvm_file_not_supported(loader))
        loader_fail(loader, 2);
    if (bap_llvm_loader_failed(loader))
        loader_fail(loader, 1);
    const char *d = bap_llvm_loader_data(loader);
    result = caml_copy_string(d);
    bap_llvm_loader_destroy(loader);
    CAMLreturn(result);
}
static void loader_fail(const struct bap_llvm_loader *loader, int n) {
    bap_llvm_loader_destroy(loader);
    failn(n);
}