build: %version instead of using autoconf @PACKAGE_VERSION@.
[goals.git] / src / eval.ml
index b614ddc..3363eef 100644 (file)
@@ -186,10 +186,11 @@ and run_code_to_string_list env loc code =
   i, lines
 
 and prepare_code env loc (code, quiet) =
+  let quiet = if Cmdline.debug_flag () then false else quiet in
   let code = to_shell_script env loc code in
   "source " ^ Filename.quote Cmdline.prelude_sh_file ^ "\n" ^
   "set -e\n" ^
-  (if not quiet then "set -x\n" else "") ^
+  (if not (Cmdline.silent ()) && not quiet then "set -x\n" else "") ^
   "\n" ^
   code
 
@@ -269,18 +270,18 @@ and call_function_really env loc name returning code =
   match returning with
   | RetExpr ->
      let r, b = run_code_to_string env loc code in
-     if r <> 0 then (
-       eprintf "*** function ‘%s’ failed with exit code %d\n" name r;
-       exit 1
-     );
+     if r <> 0 then
+       failwithf "function ‘%s’ failed with exit code %d" name r;
      Parse.parse_expr (sprintf "function:%s" name) b
 
   | RetString ->
      let r, b = run_code_to_string env loc code in
-     if r <> 0 then (
-       eprintf "*** function ‘%s’ failed with exit code %d\n" name r;
-       exit 1
-     );
+     if r <> 0 then
+       failwithf "function ‘%s’ failed with exit code %d" name r;
+     (* Remove a single trailing \n if present. *)
+     let b =
+       let len = String.length b in
+       if len > 0 && b.[len-1] = '\n' then String.sub b 0 (len-1) else b in
      Ast.EConstant (loc, Ast.CString b)
 
   | RetStrings ->