Ast.string_loc loc name
)
- | ETacticCtor (loc, name, _) ->
- failwithf "%a: cannot use tactic ‘%s’ in constant expression"
+ | EPredCtor (loc, name, _) ->
+ failwithf "%a: cannot use predicate ‘%s’ in constant expression"
Ast.string_loc loc name
| EGoalDefn (loc, _) ->
failwithf "%a: cannot use function in constant expression"
Ast.string_loc loc
- | ETacticDefn (loc, _) ->
- failwithf "%a: cannot use tactic in constant expression"
+ | EPredDefn (loc, _) ->
+ failwithf "%a: cannot use predicate in constant expression"
Ast.string_loc loc
and substitute env loc substs =
Ast.string_loc loc name
)
- (* Tactics expand to the first parameter. *)
- | ETacticCtor (loc, _, []) -> Filename.quote ""
- | ETacticCtor (loc, _, (arg :: _)) -> expr_to_shell_string env arg
+ (* Predicates expand to the first parameter. *)
+ | EPredCtor (loc, _, []) -> Filename.quote ""
+ | EPredCtor (loc, _, (arg :: _)) -> expr_to_shell_string env arg
| EGoalDefn (loc, _) ->
failwithf "%a: cannot use goal in shell expansion"
failwithf "%a: cannot use function in shell expansion"
Ast.string_loc loc
- | ETacticDefn (loc, _) ->
- failwithf "%a: cannot use tactic in shell expansion"
+ | EPredDefn (loc, _) ->
+ failwithf "%a: cannot use predicate in shell expansion"
Ast.string_loc loc
and run_code env loc code =
i, lines
and prepare_code env loc (code, quiet) =
- let quiet = if Cmdline.debug_flag then false else quiet in
+ 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
| EList (loc, exprs) ->
Ast.EList (loc, List.map (evaluate_goal_arg env) exprs)
- | ETacticCtor (loc, name, exprs) ->
- Ast.ETacticCtor (loc, name, List.map (evaluate_goal_arg env) exprs)
+ | EPredCtor (loc, name, exprs) ->
+ Ast.EPredCtor (loc, name, List.map (evaluate_goal_arg env) exprs)
| ECall (loc, name, args) ->
let expr = Ast.getvar env loc name in
| EConstant _
| EGoalDefn _
| EFuncDefn _
- | ETacticDefn _ as e -> e
+ | EPredDefn _ as e -> e
(* Functions are only called from goal args or when substituting
* into a shell script or constant expression (this may change if we
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 ->