CAMLparam1(Name);
LLVMValueRef GlobalVar;
if ((GlobalVar = LLVMGetNamedGlobal(M, String_val(Name)))) {
- value Option = alloc(1, 1);
+ value Option = alloc(1, 0);
Field(Option, 0) = (value) GlobalVar;
CAMLreturn(Option);
}
CAMLparam1(Name);
LLVMValueRef Fn;
if ((Fn = LLVMGetNamedFunction(M, String_val(Name)))) {
- value Option = alloc(1, 1);
+ value Option = alloc(1, 0);
Field(Option, 0) = (value) Fn;
CAMLreturn(Option);
}
return Val_unit;
}
+/* llvalue -> string option */
+CAMLprim value llvm_collector(LLVMValueRef Fn) {
+ const char *Collector;
+ CAMLparam0();
+ CAMLlocal2(Name, Option);
+
+ if ((Collector = LLVMGetCollector(Fn))) {
+ Name = copy_string(Collector);
+
+ Option = alloc(1, 0);
+ Field(Option, 0) = Name;
+ CAMLreturn(Option);
+ } else {
+ CAMLreturn(Val_int(0));
+ }
+}
+
+/* string option -> llvalue -> unit */
+CAMLprim value llvm_set_collector(value GC, LLVMValueRef Fn) {
+ LLVMSetCollector(Fn, GC == Val_int(0)? 0 : String_val(Field(GC, 0)));
+ return Val_unit;
+}
+
/*--... Operations on basic blocks .........................................--*/
/* llvalue -> llbasicblock array */
return LLVMBuildShuffleVector(Builder_val(B), V1, V2, Mask, String_val(Name));
}
+
+/*===-- Module Providers --------------------------------------------------===*/
+
+/* llmoduleprovider -> unit */
+CAMLprim value llvm_dispose_module_provider(LLVMModuleProviderRef MP) {
+ LLVMDisposeModuleProvider(MP);
+ return Val_unit;
+}