add halt/0
This commit is contained in:
@@ -174,6 +174,7 @@ The following predicates are built-in to Scryer.
|
||||
* `gen_nat/1`
|
||||
* `goal_expansion/2`
|
||||
* `ground/1`
|
||||
* `halt/0`
|
||||
* `integer/1`
|
||||
* `is_list/1`
|
||||
* `is_partial_string/1`
|
||||
|
||||
@@ -160,6 +160,7 @@ pub enum SystemClauseType {
|
||||
GetClause,
|
||||
GetCurrentPredicateList,
|
||||
GetModuleClause,
|
||||
Halt,
|
||||
ModuleHeadIsDynamic,
|
||||
GetLiftedHeapFromOffset,
|
||||
GetLiftedHeapFromOffsetDiff,
|
||||
@@ -234,6 +235,7 @@ impl SystemClauseType {
|
||||
&SystemClauseType::GetDoubleQuotes => clause_name!("$get_double_quotes"),
|
||||
&SystemClauseType::GetModuleClause => clause_name!("$get_module_clause"),
|
||||
&SystemClauseType::GetSCCCleaner => clause_name!("$get_scc_cleaner"),
|
||||
&SystemClauseType::Halt => clause_name!("$halt"),
|
||||
&SystemClauseType::HeadIsDynamic => clause_name!("$head_is_dynamic"),
|
||||
&SystemClauseType::InstallSCCCleaner => clause_name!("$install_scc_cleaner"),
|
||||
&SystemClauseType::InstallInferenceCounter => clause_name!("$install_inference_counter"),
|
||||
@@ -302,6 +304,7 @@ impl SystemClauseType {
|
||||
("$get_lh_from_offset_diff", 3) => Some(SystemClauseType::GetLiftedHeapFromOffsetDiff),
|
||||
("$get_double_quotes", 1) => Some(SystemClauseType::GetDoubleQuotes),
|
||||
("$get_scc_cleaner", 1) => Some(SystemClauseType::GetSCCCleaner),
|
||||
("$halt", 0) => Some(SystemClauseType::Halt),
|
||||
("$head_is_dynamic", 1) => Some(SystemClauseType::HeadIsDynamic),
|
||||
("$install_scc_cleaner", 2) => Some(SystemClauseType::InstallSCCCleaner),
|
||||
("$install_inference_counter", 3) => Some(SystemClauseType::InstallInferenceCounter),
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
assertz/1, bagof/3, bb_b_put/2, bb_get/2, bb_put/2,
|
||||
call_cleanup/2, call_with_inference_limit/3, catch/3,
|
||||
clause/2, current_predicate/1, current_prolog_flag/2,
|
||||
expand_goal/2, expand_term/2, findall/3, findall/4, once/1,
|
||||
repeat/0, retract/1, set_prolog_flag/2, setof/3,
|
||||
expand_goal/2, expand_term/2, findall/3, findall/4, halt/0,
|
||||
once/1, repeat/0, retract/1, set_prolog_flag/2, setof/3,
|
||||
setup_call_cleanup/3, term_variables/2, throw/1, true/0,
|
||||
false/0, write/1, write_canonical/1, writeq/1, write_term/2]).
|
||||
|
||||
@@ -753,3 +753,5 @@ reset_global_var_at_key(Key) :- '$reset_global_var_at_key'(Key).
|
||||
|
||||
bb_get(Key, Value) :- atom(Key), !, '$fetch_global_var'(Key, Value).
|
||||
bb_get(Key, _) :- throw(error(type_error(atom, Key), bb_get/2)).
|
||||
|
||||
halt :- '$halt'.
|
||||
|
||||
@@ -628,6 +628,8 @@ impl MachineState {
|
||||
|
||||
self.fail = true;
|
||||
},
|
||||
&SystemClauseType::Halt =>
|
||||
std::process::exit(0),
|
||||
&SystemClauseType::InstallSCCCleaner => {
|
||||
let addr = self[temp_v!(1)].clone();
|
||||
let b = self.b;
|
||||
|
||||
Reference in New Issue
Block a user