]> Repositorios git - scryer-prolog.git/commitdiff
use max_depth at toplevel, allowing full printing of terms with the 'w' keypress...
authorMark Thom <[email protected]>
Sun, 15 Mar 2020 06:35:59 +0000 (00:35 -0600)
committerMark Thom <[email protected]>
Sun, 15 Mar 2020 06:35:59 +0000 (00:35 -0600)
src/prolog/heap_print.rs
src/prolog/machine/system_calls.rs
src/prolog/toplevel.pl

index 4897c7ae6f1bdd69aef5aeed97f3861eff44c913..d49a8709ac155edd447781a769b946a77e5fb342 100644 (file)
@@ -842,7 +842,7 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> {
                         return iter.next();
                     } else {
                         iter.stack().pop();
-                        
+
                         push_space_if_amb!(self, &var, {
                             self.append_str(&var);
                         });
@@ -1192,11 +1192,7 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> {
             let cell = Rc::new(Cell::new((true, 0)));
 
             self.state_stack.push(TokenOrRedirect::CloseList(cell.clone()));
-
             self.state_stack.push(TokenOrRedirect::Atom(clause_name!("...")));
-            self.state_stack.push(TokenOrRedirect::HeadTailSeparator); // bar
-            self.state_stack.push(TokenOrRedirect::Atom(clause_name!("...")));
-
             self.state_stack.push(TokenOrRedirect::OpenList(cell));
 
             return;
index c4cf4b2b86f748eb93867bf599e5ab2fdc2e07b4..2b521d405581b27effb162eb3c3f5a7033969a78 100644 (file)
@@ -33,6 +33,7 @@ use crate::crossterm::terminal::{enable_raw_mode, disable_raw_mode};
 pub enum ContinueResult {
     ContinueQuery,
     Conclude,
+    PrintWithoutMaxDepth,
 }
 
 pub fn next_keypress() -> ContinueResult {
@@ -40,6 +41,9 @@ pub fn next_keypress() -> ContinueResult {
         match read() {
             Ok(Event::Key(KeyEvent { code, .. })) => {
                 match code {
+                    KeyCode::Char('w') => {
+                        return ContinueResult::PrintWithoutMaxDepth;
+                    }
                     KeyCode::Char(' ') | KeyCode::Char(';') | KeyCode::Char('n') => {
                         return ContinueResult::ContinueQuery;
                     }
@@ -2342,7 +2346,8 @@ impl MachineState {
 
                 let c = match keypress {
                     ContinueResult::ContinueQuery => ';',
-                    ContinueResult::Conclude => '.'
+                    ContinueResult::Conclude => '.',
+                    ContinueResult::PrintWithoutMaxDepth => 'w',
                 };
 
                 let target = self[temp_v!(1)].clone();
@@ -2667,7 +2672,7 @@ impl MachineState {
                 let ignore_ops = self.store(self.deref(self[temp_v!(2)].clone()));
                 let numbervars = self.store(self.deref(self[temp_v!(3)].clone()));
                 let quoted = self.store(self.deref(self[temp_v!(4)].clone()));
-                let max_depth = self.store(self.deref(self[temp_v!(6)].clone()));                
+                let max_depth = self.store(self.deref(self[temp_v!(6)].clone()));
 
                 let mut printer = HCPrinter::new(&self, &indices.op_dir, PrinterOutputter::new());
 
index 59d1884d6d958d884a94f67b9b0e9489387b19bd..edf00883fbb1acca10632d772f5ff96103f30508 100644 (file)
@@ -46,7 +46,7 @@
     (  expand_goals(Term0, Term) -> true
     ;  Term0 = Term
     ),
-    (  '$get_b_value'(B), call(Term), '$write_eqs_and_read_input'(B, VarList),
+    (  '$get_b_value'(B), write('   '), call(Term), '$write_eqs_and_read_input'(B, VarList),
        !
     %  clear attribute goal lists, which may be populated by
     %  copy_term/3 prior to failure.
@@ -94,7 +94,7 @@
     ;  VarName = VarName0,
        N1 is N + 1
     ).
-    
+
 '$extend_var_list'(Value, VarList, NewVarList) :-
     term_variables(Value, Vars),
     '$extend_var_list_'(Vars, 0, VarList, NewVarList).
        '$extend_var_list_'(Vs, N1, VarList, NewVarList0)
     ).
 
-'$write_goal'(G, VarList) :-
+'$write_goal'(G, VarList, MaxDepth) :-
     (  G = (Var = Value) ->
        write(Var),
        write(' = '),
        (  '$needs_bracketing'(Value, (=)) ->
          write('('),
-         write_term(Value, [quoted(true), variable_names(VarList), max_depth(0)]),
+         write_term(Value, [quoted(true), variable_names(VarList), max_depth(MaxDepth)]),
          write(')')
-       ;  write_term(Value, [quoted(true), variable_names(VarList), max_depth(0)])
+       ;  write_term(Value, [quoted(true), variable_names(VarList), max_depth(MaxDepth)])
        )
     ;  G == [] ->
        write('true')
-    ;  write_term(G, [quoted(true), variable_names(VarList)])
+    ;  write_term(G, [quoted(true), variable_names(VarList), max_depth(MaxDepth)])
     ).
 
-'$write_last_goal'(G, VarList) :-
+'$write_last_goal'(G, VarList, MaxDepth) :-
     (  G = (Var = Value) ->
        write(Var),
        write(' = '),
        (  '$needs_bracketing'(Value, (=)) ->
          write('('),
-         write_term(Value, [quoted(true), variable_names(VarList), max_depth(0)]),
+         write_term(Value, [quoted(true), variable_names(VarList), max_depth(MaxDepth)]),
          write(')')
-       ;  write_term(Value, [quoted(true), variable_names(VarList), max_depth(0)]),
+       ;  write_term(Value, [quoted(true), variable_names(VarList), max_depth(MaxDepth)]),
          (  '$trailing_period_is_ambiguous'(Value) ->
             write(' ')
          ;  true
        )
     ;  G == [] ->
        write('true')
-    ;  write_term(G, [quoted(true), variable_names(VarList), max_depth(0)])
+    ;  write_term(G, [quoted(true), variable_names(VarList), max_depth(MaxDepth)])
     ).
 
-'$write_eq'((G1, G2), VarList) :-
+'$write_eq'((G1, G2), VarList, MaxDepth) :-
     !,
-    '$write_goal'(G1, VarList),
+    '$write_goal'(G1, VarList, MaxDepth),
     write(', '),
-    '$write_eq'(G2, VarList).
-'$write_eq'(G, VarList) :-
-    '$write_last_goal'(G, VarList).
+    '$write_eq'(G2, VarList, MaxDepth).
+'$write_eq'(G, VarList, MaxDepth) :-
+    '$write_last_goal'(G, VarList, MaxDepth).
 
 '$graphic_token_char'(C) :-
     memberchk(C, ['#', '$', '&', '*', '+', '-', '.', ('/'), ':',
        (  Goals == [] ->
          write('true.'), nl
        ;  thread_goals(Goals, ThreadedGoals, (',')),
-         '$write_eq'(ThreadedGoals, NewVarList),
+         '$write_eq'(ThreadedGoals, NewVarList, 20),
          write('.'),
          nl
        )
     ;  thread_goals(Goals, ThreadedGoals, (',')),
-       '$write_eq'(ThreadedGoals, NewVarList),
-       '$raw_input_read_char'(C),
-       (  C == (';'), !,
-         write(' ;'), nl, false
-       ;  C == ('.'), !,
-         write(' ...'), nl
-       )
+       '$write_eq'(ThreadedGoals, NewVarList, 20),
+       '$read_input'(ThreadedGoals, NewVarList)
+    ).
+
+'$read_input'(ThreadedGoals, NewVarList) :-
+    '$raw_input_read_char'(C),
+    (  C == ('w'), !,
+       nl,
+       write('   '),
+       '$write_eq'(ThreadedGoals, NewVarList, 0),
+       '$read_input'(ThreadedGoals, NewVarList)
+    ;  C == (';'), !,
+       nl, write(';  '), false
+    ;  C == ('.'), !,
+       nl, write('   ...'), nl
     ).
 
 '$gather_query_vars'([_ = Var | Vars], QueryVars) :-