From f935060b2b9393c28e62c7f2b6918a9b85618f9b Mon Sep 17 00:00:00 2001 From: Mark Thom Date: Sun, 28 Feb 2021 11:03:55 -0700 Subject: [PATCH] restore .scryerrc loading --- src/clause_types.rs | 3 +++ src/machine/mod.rs | 28 ---------------------------- src/machine/system_calls.rs | 22 ++++++++++++++++++++++ src/toplevel.pl | 9 +++++++++ 4 files changed, 34 insertions(+), 28 deletions(-) diff --git a/src/clause_types.rs b/src/clause_types.rs index dc2d0150..abbacbf5 100644 --- a/src/clause_types.rs +++ b/src/clause_types.rs @@ -307,6 +307,7 @@ pub enum SystemClauseType { IsSTOEnabled, SetSTOAsUnify, SetNSTOAsUnify, + HomeDirectory, } impl SystemClauseType { @@ -591,6 +592,7 @@ impl SystemClauseType { &SystemClauseType::IsSTOEnabled => clause_name!("$is_sto_enabled"), &SystemClauseType::SetSTOAsUnify => clause_name!("$set_sto_as_unify"), &SystemClauseType::SetNSTOAsUnify => clause_name!("$set_nsto_as_unify"), + &SystemClauseType::HomeDirectory => clause_name!("$home_directory"), } } @@ -839,6 +841,7 @@ impl SystemClauseType { ("$is_sto_enabled", 1) => Some(SystemClauseType::IsSTOEnabled), ("$set_sto_as_unify", 0) => Some(SystemClauseType::SetSTOAsUnify), ("$set_nsto_as_unify", 0) => Some(SystemClauseType::SetNSTOAsUnify), + ("$home_directory", 1) => Some(SystemClauseType::HomeDirectory), _ => None, } } diff --git a/src/machine/mod.rs b/src/machine/mod.rs index b0f607f2..41940154 100644 --- a/src/machine/mod.rs +++ b/src/machine/mod.rs @@ -126,34 +126,6 @@ fn current_dir() -> PathBuf { include!(concat!(env!("OUT_DIR"), "/libraries.rs")); impl Machine { - /* - fn compile_scryerrc(&mut self) { - let mut path = match dirs_next::home_dir() { - Some(path) => path, - None => return, - }; - - path.push(".scryerrc"); - - if path.is_file() { - let file_src = match File::open(&path) { - Ok(file_handle) => Stream::from_file_as_input( - clause_name!(".scryerrc"), - file_handle, - ), - Err(_) => return, - }; - - let rc_src = ListingSource::from_file_and_path( - clause_name!(".scryerrc"), - path.to_path_buf(), - ); - - compile_user_module(self, file_src, rc_src); - } - } - */ - fn run_module_predicate(&mut self, module_name: ClauseName, key: PredicateKey) { if let Some(module) = self.indices.modules.get(&module_name) { if let Some(ref code_index) = module.code_dir.get(&key) { diff --git a/src/machine/system_calls.rs b/src/machine/system_calls.rs index 0dacd2aa..bc6724a5 100644 --- a/src/machine/system_calls.rs +++ b/src/machine/system_calls.rs @@ -5454,6 +5454,28 @@ impl MachineState { &SystemClauseType::SetNSTOAsUnify => { self.unify_fn = MachineState::unify; } + &SystemClauseType::HomeDirectory => { + let path = match dirs_next::home_dir() { + Some(path) => path, + None => { + self.fail = true; + return Ok(()); + } + }; + + if path.is_dir() { + if let Some(path) = path.to_str() { + let path_atom = self.heap.to_unifiable( + HeapCellValue::Atom(clause_name!(path.to_string(), self.atom_tbl), None), + ); + + (self.unify_fn)(self, self[temp_v!(1)], path_atom); + return return_from_clause!(self.last_call, self); + } + } + + self.fail = true; + } }; return_from_clause!(self.last_call, self) diff --git a/src/toplevel.pl b/src/toplevel.pl index 4a861259..daf03525 100644 --- a/src/toplevel.pl +++ b/src/toplevel.pl @@ -9,6 +9,13 @@ :- use_module(library('$project_atts')). :- use_module(library('$atts')). +load_scryerrc :- + ( '$home_directory'(HomeDir) -> + atom_concat(HomeDir, '/.scryerrc', ScryerrcFile), + catch(use_module(ScryerrcFile), E, print_exception(E)) + ; true + ). + :- dynamic(argv/1). '$repl'([_|Args0]) :- @@ -19,12 +26,14 @@ ; asserta('$toplevel':argv([])), Args = Args0 ), + load_scryerrc, delegate_task(Args, []), repl. '$repl'(_) :- ( \+ argv(_) -> asserta('$toplevel':argv([])) ; true ), + load_scryerrc, repl. delegate_task([], []). -- 2.54.0