From b31b23e41ca26e9a5d85e0d9a47ddb43c4fde7d5 Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Thu, 21 Nov 2019 16:26:00 -0400 Subject: [PATCH] add conditional bracketing to equations printed by toplevel --- src/prolog/machine/machine_state.rs | 2 +- src/prolog/toplevel.pl | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/prolog/machine/machine_state.rs b/src/prolog/machine/machine_state.rs index edb5f419..c632e059 100644 --- a/src/prolog/machine/machine_state.rs +++ b/src/prolog/machine/machine_state.rs @@ -461,7 +461,7 @@ pub(crate) trait CallPolicy: Any { let b = machine_st.b - 1; let n = machine_st.or_stack[b].num_args(); - for i in 1..n + 1 { + for i in 1 .. n + 1 { machine_st.registers[i] = machine_st.or_stack[b][i].clone(); } diff --git a/src/prolog/toplevel.pl b/src/prolog/toplevel.pl index f9eba5dd..e3c8a605 100644 --- a/src/prolog/toplevel.pl +++ b/src/prolog/toplevel.pl @@ -44,11 +44,27 @@ ; write('false.'), nl ). +'$needs_bracketing'(Value, Op) :- + catch((functor(Value, F, _), + current_op(EqPrec, EqSpec, Op), + current_op(FPrec, _, F)), + _, + false), + ( EqPrec < FPrec -> true + ; EqPrec == FPrec, + memberchk(EqSpec, [fx,xfx,yfx]) + ). + '$write_goal'(G, VarList) :- ( G = (Var = Value) -> write(Var), write(' = '), - write_term(Value, [quoted(true), variable_names(VarList)]) + ( '$needs_bracketing'(Value, (=)) -> + write('('), + write_term(Value, [quoted(true), variable_names(VarList)]), + write(')') + ; write_term(Value, [quoted(true), variable_names(VarList)]) + ) ; G == [] -> write('true') ; write_term(G, [quoted(true), variable_names(VarList)]) -- 2.54.0