fix bugs in call_with_inference_limit
This commit is contained in:
@@ -548,74 +548,89 @@ fn get_builtins(atom_tbl: TabledData<Atom>) -> Code {
|
||||
compare_term_execute!(term_cmp_lt!()), // (@<)/2, 390.
|
||||
compare_term_execute!(term_cmp_eq!()), // (=@=)/2, 391.
|
||||
compare_term_execute!(term_cmp_ne!()), // (\=@=)/2, 392.
|
||||
allocate!(4), // call_with_inference_limit/3, 393.
|
||||
fact![get_var_in_fact!(perm_v!(3), 1),
|
||||
get_var_in_fact!(perm_v!(2), 2),
|
||||
get_var_in_fact!(perm_v!(1), 3)],
|
||||
query![put_var!(perm_v!(4), 1)],
|
||||
allocate!(5), // call_with_inference_limit/3, 393.
|
||||
fact![get_var_in_fact!(perm_v!(4), 1),
|
||||
get_var_in_fact!(perm_v!(3), 2),
|
||||
get_var_in_fact!(perm_v!(2), 3)],
|
||||
query![put_var!(perm_v!(5), 1)],
|
||||
get_current_block!(),
|
||||
query![put_value!(perm_v!(3), 1),
|
||||
put_value!(perm_v!(2), 2),
|
||||
put_value!(perm_v!(1), 3),
|
||||
put_value!(perm_v!(4), 4)],
|
||||
get_cp!(perm_v!(1)),
|
||||
query![put_value!(perm_v!(4), 1),
|
||||
put_value!(perm_v!(3), 2),
|
||||
put_value!(perm_v!(2), 3),
|
||||
put_value!(perm_v!(5), 4),
|
||||
put_value!(perm_v!(1), 5)],
|
||||
goto_call!(404, 5), // goto call_with_inference_limit/4, 404.
|
||||
query![put_value!(perm_v!(1), 1)],
|
||||
deallocate!(),
|
||||
goto_execute!(400, 4), // goto call_with_inference_limit/4, 400.
|
||||
try_me_else!(16), // call_with_inference_limit/4, 400.
|
||||
allocate!(7),
|
||||
fact![get_var_in_fact!(perm_v!(6), 1),
|
||||
get_var_in_fact!(perm_v!(7), 2),
|
||||
get_var_in_fact!(perm_v!(4), 3),
|
||||
get_var_in_fact!(perm_v!(3), 4)],
|
||||
remove_call_policy_check!(),
|
||||
proceed!(),
|
||||
try_me_else!(18), // call_with_inference_limit/5, 404.
|
||||
allocate!(9),
|
||||
fact![get_var_in_fact!(perm_v!(9), 1),
|
||||
get_var_in_fact!(perm_v!(6), 2),
|
||||
get_var_in_fact!(perm_v!(5), 3),
|
||||
get_var_in_fact!(perm_v!(3), 4),
|
||||
get_var_in_fact!(perm_v!(4), 5)],
|
||||
query![put_var!(perm_v!(1), 1)],
|
||||
install_new_block!(),
|
||||
install_inference_counter!(perm_v!(7)),
|
||||
get_cp!(perm_v!(5)),
|
||||
query![put_value!(perm_v!(6), 1)],
|
||||
install_inference_counter!(perm_v!(4), perm_v!(6), perm_v!(8)),
|
||||
query![put_value!(perm_v!(9), 1)],
|
||||
call_n!(1),
|
||||
query![put_var!(perm_v!(2), 3)],
|
||||
remove_inference_counter!(perm_v!(2)),
|
||||
query![put_value!(perm_v!(4), 1),
|
||||
put_value!(perm_v!(5), 2)],
|
||||
remove_inference_counter!(perm_v!(4), perm_v!(7)),
|
||||
sub!(ArithmeticTerm::Reg(perm_v!(7)),
|
||||
ArithmeticTerm::Reg(perm_v!(8)),
|
||||
1),
|
||||
sub!(ArithmeticTerm::Reg(perm_v!(6)),
|
||||
ArithmeticTerm::Interm(1),
|
||||
1),
|
||||
query![put_value!(perm_v!(2), 1)],
|
||||
is_call!(temp_v!(1), ArithmeticTerm::Interm(1)),
|
||||
query![put_value!(perm_v!(5), 1),
|
||||
put_value!(perm_v!(4), 2)],
|
||||
inference_level!(),
|
||||
query![put_value!(perm_v!(3), 1),
|
||||
put_value!(perm_v!(1), 2),
|
||||
put_value!(perm_v!(2), 3)],
|
||||
query![put_value!(perm_v!(4), 1),
|
||||
put_value!(perm_v!(3), 2),
|
||||
put_value!(perm_v!(1), 3),
|
||||
put_value!(perm_v!(2), 4)],
|
||||
deallocate!(),
|
||||
goto_execute!(436, 3), // goto end_block/3, 436.
|
||||
default_trust_me!(), // 416.
|
||||
allocate!(2),
|
||||
fact![get_var_in_fact!(perm_v!(1), 3)],
|
||||
goto_execute!(442, 4), // goto end_block/4, 442.
|
||||
default_trust_me!(), // 422.
|
||||
allocate!(3),
|
||||
fact![get_var_in_fact!(perm_v!(1), 3),
|
||||
get_var_in_fact!(perm_v!(3), 5)],
|
||||
query![put_value!(temp_v!(4), 1)],
|
||||
reset_block!(),
|
||||
query![put_var!(temp_v!(2), 1)],
|
||||
remove_inference_counter!(temp_v!(1)),
|
||||
query![put_var!(temp_v!(3), 2)],
|
||||
remove_inference_counter!(perm_v!(3), temp_v!(2)),
|
||||
query![put_var!(perm_v!(2), 1)],
|
||||
get_ball!(),
|
||||
erase_ball!(),
|
||||
query![put_unsafe_value!(2, 1),
|
||||
put_value!(perm_v!(1), 2)],
|
||||
query![put_value!(perm_v!(3), 1),
|
||||
put_unsafe_value!(2, 2),
|
||||
put_value!(perm_v!(1), 3)],
|
||||
deallocate!(),
|
||||
goto_execute!(429, 2), // goto handle_ile/2, 429.
|
||||
try_me_else!(5), // handle_ile/2, 429.
|
||||
switch_on_term!(1, 1, 0, 0),
|
||||
fact![get_constant!(atom!("inference_limit_exceeded", atom_tbl), temp_v!(1)),
|
||||
get_constant!(atom!("inference_limit_exceeded", atom_tbl), temp_v!(2))],
|
||||
goto_execute!(435, 3), // goto handle_ile/3, 435.
|
||||
try_me_else!(4), // handle_ile/3, 435.
|
||||
fact![get_structure!(atom_tbl, "inference_limit_exceeded", 1, temp_v!(2), None),
|
||||
unify_value!(temp_v!(1)),
|
||||
get_constant!(atom!("inference_limit_exceeded", atom_tbl), temp_v!(3))],
|
||||
neck_cut!(),
|
||||
proceed!(),
|
||||
default_trust_me!(),
|
||||
goto_execute!(59, 1), // goto throw/1, 59.
|
||||
try_me_else!(9), // end_block/3, 436.
|
||||
allocate!(1),
|
||||
fact![get_var_in_fact!(perm_v!(1), 1)],
|
||||
query![put_value!(temp_v!(2), 1)],
|
||||
goto_execute!(59, 1), // goto throw/1, 59.
|
||||
try_me_else!(6), // end_block/4, 442.
|
||||
query![put_value!(temp_v!(3), 1)],
|
||||
clean_up_block!(),
|
||||
query![put_value!(perm_v!(1), 1)],
|
||||
deallocate!(),
|
||||
query![put_value!(temp_v!(2), 1)],
|
||||
reset_block!(),
|
||||
proceed!(),
|
||||
default_trust_me!(),
|
||||
install_inference_counter!(temp_v!(3)),
|
||||
query![put_value!(temp_v!(2), 1)],
|
||||
query![put_value!(temp_v!(4), 2),
|
||||
put_var!(temp_v!(4), 4)],
|
||||
install_inference_counter!(temp_v!(1), temp_v!(2), temp_v!(4)),
|
||||
query![put_value!(temp_v!(3), 1)],
|
||||
reset_block!(),
|
||||
fail!()
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user