]> Repositorios git - scryer-prolog.git/commitdiff
Enhanced version
authornotoria <[email protected]>
Fri, 1 May 2020 14:46:31 +0000 (16:46 +0200)
committernotoria <[email protected]>
Fri, 1 May 2020 14:46:31 +0000 (16:46 +0200)
src/main.rs
src/prolog/clause_types.rs
src/prolog/machine/system_calls.rs
src/prolog/toplevel.pl

index c8866b38e6bcb55c2a4c65be2aba2b65e2c9a1c5..fc85a95910bddcd91c5116b52aee73b3ca1e97be 100644 (file)
@@ -36,11 +36,6 @@ 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();
 }
index 9b550c35b859e5aed1d0415545ab6980fc2ea83b..83e144ebda0309dbe8ad855e3aa6924d498d0bce 100644 (file)
@@ -264,6 +264,7 @@ pub enum SystemClauseType {
     WAMInstructions,
     WriteTerm,
     WriteTermToChars,
+    ScryerPrologVersion,
 }
 
 impl SystemClauseType {
@@ -418,6 +419,7 @@ 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"),
         }
     }
 
@@ -552,6 +554,7 @@ 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,
         }
     }
index a0e5762a7c6b31d47e3c54f809745e5d71d056aa..144bcd8b2140adf2665cc7ed712dbacaf2b08104 100644 (file)
@@ -3515,6 +3515,15 @@ 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)
index 05cb6b6eb01d98950ad39e8a07242e9e660b72ed..d691c66efacfd0e266c9df4b48509916de377a37 100644 (file)
@@ -54,7 +54,8 @@ print_help(Args) :-
     halt.
 
 print_version(Args) :-
-    write('v0.8.120'), nl, % TODO: Something better is required here.
+    '$scryer_prolog_version'(Version),
+    write(Version), nl,
     halt.
 
 gather_goal(Type, Args0, Goals) :-