IsSTOEnabled,
SetSTOAsUnify,
SetNSTOAsUnify,
+ HomeDirectory,
}
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"),
}
}
("$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,
}
}
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) {
&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)
:- 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]) :-
; asserta('$toplevel':argv([])),
Args = Args0
),
+ load_scryerrc,
delegate_task(Args, []),
repl.
'$repl'(_) :-
( \+ argv(_) -> asserta('$toplevel':argv([]))
; true
),
+ load_scryerrc,
repl.
delegate_task([], []).