diff options
| author | Gordon Henriksen <gordonhenriksen@mac.com> | 2007-12-11 00:20:48 +0000 | 
|---|---|---|
| committer | Gordon Henriksen <gordonhenriksen@mac.com> | 2007-12-11 00:20:48 +0000 | 
| commit | 688bc4baec728b6a4fb7bd05d891408f7331f4e1 (patch) | |
| tree | c0a9de6590c68d7d5cbd907da5ec03c723201e56 /bindings/ocaml/bitreader/bitreader_ocaml.c | |
| parent | a1429f24307dcb50784ee8d0a141161d96ab21b2 (diff) | |
| download | external_llvm-688bc4baec728b6a4fb7bd05d891408f7331f4e1.zip external_llvm-688bc4baec728b6a4fb7bd05d891408f7331f4e1.tar.gz external_llvm-688bc4baec728b6a4fb7bd05d891408f7331f4e1.tar.bz2 | |
Adding Ocaml bindings for the bitreader as requested by Sarah
Thompson. Usage should be something like this:
open Llvm
open Llvm_bitreader
match read_bitcode_file fn with
  | Bitreader_failure msg ->
      prerr_endline msg
  | Bitreader_success m -> 
      ...;
      dispose_module m
Compile with: ocamlc llvm.cma llvm_bitreader.cma
              ocamlopt llvm.cmxa llvm_bitreader.cmxa
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@44824 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'bindings/ocaml/bitreader/bitreader_ocaml.c')
| -rw-r--r-- | bindings/ocaml/bitreader/bitreader_ocaml.c | 46 | 
1 files changed, 46 insertions, 0 deletions
| diff --git a/bindings/ocaml/bitreader/bitreader_ocaml.c b/bindings/ocaml/bitreader/bitreader_ocaml.c new file mode 100644 index 0000000..7088fa5 --- /dev/null +++ b/bindings/ocaml/bitreader/bitreader_ocaml.c @@ -0,0 +1,46 @@ +/*===-- bitwriter_ocaml.c - LLVM Ocaml Glue ---------------------*- C++ -*-===*\ +|*                                                                            *| +|*                     The LLVM Compiler Infrastructure                       *| +|*                                                                            *| +|* This file was developed by Gordon Henriksen and is distributed under the   *| +|* University of Illinois Open Source License. See LICENSE.TXT for details.   *| +|*                                                                            *| +|*===----------------------------------------------------------------------===*| +|*                                                                            *| +|* This file glues LLVM's ocaml interface to its C interface. These functions *| +|* are by and large transparent wrappers to the corresponding C functions.    *| +|*                                                                            *| +\*===----------------------------------------------------------------------===*/ + +#include "llvm-c/BitReader.h" +#include "caml/alloc.h" +#include "caml/mlvalues.h" +#include "caml/memory.h" + +/*===-- Modules -----------------------------------------------------------===*/ + +/* string -> bitreader_result + +   type bitreader_result = +   | Bitreader_success of Llvm.llmodule +   | Bitreader_failure of string + */ +CAMLprim value llvm_read_bitcode_file(value Path) { +  LLVMModuleRef M; +  char *Message; +  CAMLparam1(Path); +  CAMLlocal2(Variant, MessageVal); +   +  if (LLVMReadBitcodeFromFile(String_val(Path), &M, &Message)) { +    MessageVal = copy_string(Message); +    LLVMDisposeBitcodeReaderMessage(Message); +     +    Variant = alloc(1, 1); +    Field(Variant, 0) = MessageVal; +  } else { +    Variant = alloc(1, 0); +    Field(Variant, 0) = Val_op(M); +  } +   +  CAMLreturn(Variant); +} | 
