Taints the non-acquire RMW's store address with the load part
[oota-llvm.git] / examples / OCaml-Kaleidoscope / Chapter3 / toplevel.ml
1 (*===----------------------------------------------------------------------===
2  * Top-Level parsing and JIT Driver
3  *===----------------------------------------------------------------------===*)
4
5 open Llvm
6
7 (* top ::= definition | external | expression | ';' *)
8 let rec main_loop stream =
9   match Stream.peek stream with
10   | None -> ()
11
12   (* ignore top-level semicolons. *)
13   | Some (Token.Kwd ';') ->
14       Stream.junk stream;
15       main_loop stream
16
17   | Some token ->
18       begin
19         try match token with
20         | Token.Def ->
21             let e = Parser.parse_definition stream in
22             print_endline "parsed a function definition.";
23             dump_value (Codegen.codegen_func e);
24         | Token.Extern ->
25             let e = Parser.parse_extern stream in
26             print_endline "parsed an extern.";
27             dump_value (Codegen.codegen_proto e);
28         | _ ->
29             (* Evaluate a top-level expression into an anonymous function. *)
30             let e = Parser.parse_toplevel stream in
31             print_endline "parsed a top-level expr";
32             dump_value (Codegen.codegen_func e);
33         with Stream.Error s | Codegen.Error s ->
34           (* Skip token for error recovery. *)
35           Stream.junk stream;
36           print_endline s;
37       end;
38       print_string "ready> "; flush stdout;
39       main_loop stream