mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-04 17:58:22 +00:00
49457b8158
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97966 91177308-0d34-0410-b5e6-96231b3b80d8
35 lines
1.1 KiB
OCaml
35 lines
1.1 KiB
OCaml
(*===----------------------------------------------------------------------===
|
|
* Top-Level parsing and JIT Driver
|
|
*===----------------------------------------------------------------------===*)
|
|
|
|
(* top ::= definition | external | expression | ';' *)
|
|
let rec main_loop stream =
|
|
match Stream.peek stream with
|
|
| None -> ()
|
|
|
|
(* ignore top-level semicolons. *)
|
|
| Some (Token.Kwd ';') ->
|
|
Stream.junk stream;
|
|
main_loop stream
|
|
|
|
| Some token ->
|
|
begin
|
|
try match token with
|
|
| Token.Def ->
|
|
ignore(Parser.parse_definition stream);
|
|
print_endline "parsed a function definition.";
|
|
| Token.Extern ->
|
|
ignore(Parser.parse_extern stream);
|
|
print_endline "parsed an extern.";
|
|
| _ ->
|
|
(* Evaluate a top-level expression into an anonymous function. *)
|
|
ignore(Parser.parse_toplevel stream);
|
|
print_endline "parsed a top-level expr";
|
|
with Stream.Error s ->
|
|
(* Skip token for error recovery. *)
|
|
Stream.junk stream;
|
|
print_endline s;
|
|
end;
|
|
print_string "ready> "; flush stdout;
|
|
main_loop stream
|