diff options
Diffstat (limited to 'contrib/llvm/examples/OCaml-Kaleidoscope/Chapter7/toplevel.ml')
-rw-r--r-- | contrib/llvm/examples/OCaml-Kaleidoscope/Chapter7/toplevel.ml | 49 |
1 files changed, 0 insertions, 49 deletions
diff --git a/contrib/llvm/examples/OCaml-Kaleidoscope/Chapter7/toplevel.ml b/contrib/llvm/examples/OCaml-Kaleidoscope/Chapter7/toplevel.ml deleted file mode 100644 index 01d24ed..0000000 --- a/contrib/llvm/examples/OCaml-Kaleidoscope/Chapter7/toplevel.ml +++ /dev/null @@ -1,49 +0,0 @@ -(*===----------------------------------------------------------------------=== - * Top-Level parsing and JIT Driver - *===----------------------------------------------------------------------===*) - -open Llvm -open Llvm_executionengine - -(* top ::= definition | external | expression | ';' *) -let rec main_loop the_fpm the_execution_engine stream = - match Stream.peek stream with - | None -> () - - (* ignore top-level semicolons. *) - | Some (Token.Kwd ';') -> - Stream.junk stream; - main_loop the_fpm the_execution_engine stream - - | Some token -> - begin - try match token with - | Token.Def -> - let e = Parser.parse_definition stream in - print_endline "parsed a function definition."; - dump_value (Codegen.codegen_func the_fpm e); - | Token.Extern -> - let e = Parser.parse_extern stream in - print_endline "parsed an extern."; - dump_value (Codegen.codegen_proto e); - | _ -> - (* Evaluate a top-level expression into an anonymous function. *) - let e = Parser.parse_toplevel stream in - print_endline "parsed a top-level expr"; - let the_function = Codegen.codegen_func the_fpm e in - dump_value the_function; - - (* JIT the function, returning a function pointer. *) - let result = ExecutionEngine.run_function the_function [||] - the_execution_engine in - - print_string "Evaluated to "; - print_float (GenericValue.as_float Codegen.double_type result); - print_newline (); - with Stream.Error s | Codegen.Error s -> - (* Skip token for error recovery. *) - Stream.junk stream; - print_endline s; - end; - print_string "ready> "; flush stdout; - main_loop the_fpm the_execution_engine stream |