From: Mark Thom Date: Fri, 1 May 2020 21:43:20 +0000 (-0600) Subject: Revert "Enhanced command line" X-Git-Tag: v0.8.123~79^2 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=refs%2Fheads%2Frevert-419-cli;p=scryer-prolog.git Revert "Enhanced command line" --- diff --git a/src/main.rs b/src/main.rs index fc85a959..c8866b38 100644 --- a/src/main.rs +++ b/src/main.rs @@ -36,6 +36,11 @@ fn main() { let handler = signal::SigHandler::Handler(handle_sigint); unsafe { signal::signal(signal::Signal::SIGINT, handler) }.unwrap(); + if env::args().skip(1).any(|a| a == "-v" || a == "--version") { + println!("{:}", git_version!(cargo_prefix = "cargo:", fallback = "unknown")); + return; + } + let mut wam = Machine::new(readline::input_stream(), Stream::stdout()); wam.run_top_level(); } diff --git a/src/prolog/clause_types.rs b/src/prolog/clause_types.rs index 83e144eb..9b550c35 100644 --- a/src/prolog/clause_types.rs +++ b/src/prolog/clause_types.rs @@ -264,7 +264,6 @@ pub enum SystemClauseType { WAMInstructions, WriteTerm, WriteTermToChars, - ScryerPrologVersion, } impl SystemClauseType { @@ -419,7 +418,6 @@ impl SystemClauseType { &SystemClauseType::WAMInstructions => clause_name!("$wam_instructions"), &SystemClauseType::WriteTerm => clause_name!("$write_term"), &SystemClauseType::WriteTermToChars => clause_name!("$write_term_to_chars"), - &SystemClauseType::ScryerPrologVersion => clause_name!("$scryer_prolog_version"), } } @@ -554,7 +552,6 @@ impl SystemClauseType { ("$wam_instructions", 3) => Some(SystemClauseType::WAMInstructions), ("$write_term", 6) => Some(SystemClauseType::WriteTerm), ("$write_term_to_chars", 7) => Some(SystemClauseType::WriteTermToChars), - ("$scryer_prolog_version", 1) => Some(SystemClauseType::ScryerPrologVersion), _ => None, } } diff --git a/src/prolog/machine/system_calls.rs b/src/prolog/machine/system_calls.rs index a976423f..d3932626 100644 --- a/src/prolog/machine/system_calls.rs +++ b/src/prolog/machine/system_calls.rs @@ -3543,15 +3543,6 @@ impl MachineState { unreachable!() } } - &SystemClauseType::ScryerPrologVersion => { - use crate::git_version::git_version; - let version = self[temp_v!(1)]; - let buffer = - git_version!(cargo_prefix = "cargo:", fallback = "unknown"); - let chars = buffer.chars().map(|c| Addr::Char(c)); - let result = Addr::HeapCell(self.heap.to_list(chars)); - self.unify(version, result); - } }; return_from_clause!(self.last_call, self) diff --git a/src/prolog/toplevel.pl b/src/prolog/toplevel.pl index d3202fb2..7072017d 100644 --- a/src/prolog/toplevel.pl +++ b/src/prolog/toplevel.pl @@ -1,135 +1,18 @@ -:- module('$toplevel', ['$repl'/1, consult/1, use_module/1, use_module/2, - argv/1]). +:- module('$toplevel', ['$repl'/1, consult/1, use_module/1, use_module/2]). :- use_module(library(charsio)). :- use_module(library(lists)). :- use_module(library(si)). -:- dynamic(argv/1). +'$repl'([_|Args]) :- + maplist(use_list_of_modules, Args), + false. +'$repl'(_) :- repl. -'$repl'([_|Args0]) :- - \+ argv(_), - ( append(Args1, ["--"|Args2], Args0) -> - asserta(argv(Args2)), - Args = Args1 - ; asserta(argv([])), - Args = Args0 - ), - delegate_task(Args, []), - repl. -'$repl'(_) :- - ( \+ argv(_) -> asserta(argv([])) - ; true - ), - repl. - -delegate_task([], []). -delegate_task([], Goals0) :- - reverse(Goals0, Goals), - run_goals(Goals), - repl. -delegate_task([Arg0|Args], Goals0) :- - ( member(Arg0, ["-h", "--help"]) -> print_help(Args) - ; member(Arg0, ["-v", "--version"]) -> print_version(Args) - ; member(Arg0, ["-g", "--goal"]) -> gather_goal(g, Args, Goals0) - ; member(Arg0, ["-t", "--toplevel"]) -> gather_goal(t, Args, Goals0) - ; atom_chars(Mod, Arg0), - catch(use_module(Mod), E, print_exception(E)) - ), - delegate_task(Args, Goals0). - -print_help(_) :- - write('Usage: scryer-prolog [OPTIONS] [FILES] [-- ARGUMENTS]'), - nl, nl, - write('Options:'), nl, - write(' -h, --help '), - write('Display this message'), nl, - write(' -v, --version '), - write('Print version information and exit'), nl, - write(' -g, --goal GOAL '), - write('Run the query GOAL'), nl, - write(' -t, --toplevel GOAL '), - % write(' '), - write('Run the query GOAL and halt'), nl, - halt. - -print_version(_) :- - '$scryer_prolog_version'(Version), - write(Version), nl, - halt. - -gather_goal(Type, Args0, Goals) :- - length(Args0, N), - ( N < 1 -> print_help(_), halt - ; true - ), - [Gs1|Args] = Args0, - ( member(Type, [g, t]) -> Gs =.. [Type, Gs1] - ; write('caught: '), - write(error(domain_error(arg_type, Type), gather_goal/3)), nl, - halt - ), - delegate_task(Args, [Gs|Goals]). - -arg_type(g). -arg_type(t). -arg_type(g(_)). -arg_type(t(_)). - -ends_with_dot(Ls0) :- - reverse(Ls0, Ls), - layout_and_dot(Ls). - -layout_and_dot(['.'|_]). -layout_and_dot([C|Cs]) :- - char_type(C, layout), - layout_and_dot(Cs). - -run_goals([]). -run_goals([g(Gs0)|Goals]) :- - ( ends_with_dot(Gs0) -> Gs1 = Gs0 - ; append(Gs0, ".", Gs1) - ), - read_term_from_chars(Gs1, Goal), - ( catch( - Goal, - Exception, - (write(Gs0), write(' causes: '), write(Exception), nl) % halt? - ) - ; write('Warning: initialization failed for '), - write(Gs0), nl - ), - run_goals(Goals). -run_goals([t(Gs0)|_]) :- - ( ends_with_dot(Gs0) -> Gs1 = Gs0 - ; append(Gs0, ".", Gs1) - ), - read_term_from_chars(Gs1, Goal), - ( catch( - Goal, - Exception, - (write(Gs0), write(' causes: '), write(Exception), nl, halt) - ) - ; write('Warning: initialization failed for '), - write(Gs0), nl - ), - halt. -run_goals([Goal|_]) :- - write('caught: '), - write(error(domain_error(arg_type, Goal), run_goals/1)), nl, - halt. - -print_exception_warning(E) :- - ( E == error('$interrupt_thrown', repl) -> nl % print the - % exception on a - % newline to evade - % "^C". - ; true - ), - write_term('Warning: ', [quoted(false), max_depth(20)]), - writeq(E), - nl. +use_list_of_modules(Mod0) :- + atom_chars(Mod, Mod0), + catch(use_module(Mod), E, print_exception(E)). repl :- catch(read_and_match, E, print_exception(E)),