From 206a3dbd3566b1485c01f2557935229ccdc23203 Mon Sep 17 00:00:00 2001 From: Christian Rinderknecht Date: Tue, 2 Apr 2019 17:21:08 +0200 Subject: [PATCH] Added traces for system and command errors. Added handling of #include. --- src/ligo/contracts/included.ligo | 1 + src/ligo/contracts/includer.ligo | 3 +++ src/ligo/ligo-helpers/trace.ml | 12 ++++++++++++ src/ligo/ligo-parser/ParserMain.ml | 18 ------------------ src/ligo/ligo.ml | 14 ++++++++++++-- src/ligo/test/integration_tests.ml | 9 +++++++++ 6 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 src/ligo/contracts/included.ligo create mode 100644 src/ligo/contracts/includer.ligo diff --git a/src/ligo/contracts/included.ligo b/src/ligo/contracts/included.ligo new file mode 100644 index 000000000..3f0a2d1ca --- /dev/null +++ b/src/ligo/contracts/included.ligo @@ -0,0 +1 @@ +const foo : int = 144 diff --git a/src/ligo/contracts/includer.ligo b/src/ligo/contracts/includer.ligo new file mode 100644 index 000000000..e68975796 --- /dev/null +++ b/src/ligo/contracts/includer.ligo @@ -0,0 +1,3 @@ +#include "included.ligo" + +const bar : int = foo diff --git a/src/ligo/ligo-helpers/trace.ml b/src/ligo/ligo-helpers/trace.ml index 6d2ffb7a9..6a4733aaa 100644 --- a/src/ligo/ligo-helpers/trace.ml +++ b/src/ligo/ligo-helpers/trace.ml @@ -153,6 +153,18 @@ let specific_try handler f = ok @@ f () ) with exn -> fail (handler exn) +let sys_try f = + let handler = function + | Sys_error str -> error "Sys_error" str + | exn -> raise exn + in + specific_try handler f + +let sys_command command = + sys_try (fun () -> Sys.command command) >>? function + | 0 -> ok () + | n -> fail (error "Nonzero return code" (string_of_int n)) + let sequence f lst = let rec aux acc = function | hd :: tl -> ( diff --git a/src/ligo/ligo-parser/ParserMain.ml b/src/ligo/ligo-parser/ParserMain.ml index 9f5420e71..7f4b7a633 100644 --- a/src/ligo/ligo-parser/ParserMain.ml +++ b/src/ligo/ligo-parser/ParserMain.ml @@ -98,21 +98,3 @@ let () = let () = close_all () in print_error ~offsets EvalOpt.mode error | Sys_error msg -> Utils.highlight msg - - (* -(* Temporary: force dune to build AST2.ml *) -let () = - let open AST2 in - let _ = s_ast in - () - - (* -(* Temporary: force dune to build AST2.ml *) -let () = - if false then - let _ = Typecheck2.annotate in - () - else - () - *) - *) diff --git a/src/ligo/ligo.ml b/src/ligo/ligo.ml index 73a0d8ec7..6b1972ca1 100644 --- a/src/ligo/ligo.ml +++ b/src/ligo/ligo.ml @@ -10,10 +10,20 @@ module Typer = Typer module Transpiler = Transpiler open Ligo_helpers.Trace -let parse_file (source:string) : AST_Raw.t result = + +let parse_file (source: string) : AST_Raw.t result = + let pp_input = + let prefix = Filename.(source |> basename |> remove_extension) + and suffix = ".pp.ligo" + in prefix ^ suffix in + + let cpp_cmd = Printf.sprintf "cpp -traditional-cpp %s -o %s" + source pp_input in + let%bind () = sys_command cpp_cmd in + let%bind channel = generic_try (simple_error "error opening file") @@ - (fun () -> open_in source) in + (fun () -> open_in pp_input) in let lexbuf = Lexing.from_channel channel in let module Lexer = Lexer.Make(LexToken) in let Lexer.{read ; close} = diff --git a/src/ligo/test/integration_tests.ml b/src/ligo/test/integration_tests.ml index c69951803..8be8f3af1 100644 --- a/src/ligo/test/integration_tests.ml +++ b/src/ligo/test/integration_tests.ml @@ -76,6 +76,14 @@ let unit_expression () : unit result = get_a_unit result in ok () +let include_ () : unit result = + let%bind program = type_file "./contracts/includer.ligo" in + let%bind result = easy_evaluate_typed "bar" program in + let%bind n = + trace (simple_error "Include failed") @@ + AST_Typed.Combinators.get_a_int result in + Assert.assert_equal_int 144 n + let record_ez_int names n = let open AST_Typed.Combinators in ez_e_a_record @@ List.map (fun x -> x, e_a_int n) names @@ -337,4 +345,5 @@ let main = "Integration (End to End)", [ test "declarations" declarations ; test "quote declaration" quote_declaration ; test "quote declarations" quote_declarations ; + test "#include directives" include_ ; ]