]> Repositorios git - scryer-prolog.git/commitdiff
properly handle cuts in conditionals
authorMark Thom <[email protected]>
Sun, 8 Apr 2018 06:33:54 +0000 (00:33 -0600)
committerMark Thom <[email protected]>
Sun, 8 Apr 2018 06:33:54 +0000 (00:33 -0600)
src/prolog/builtins.rs
src/prolog/io.rs
src/prolog/machine/machine_state.rs
src/prolog/machine/machine_state_impl.rs

index b42d3876d0e9050701431811e26d907a40542e34..b379acba61d9fad402cd11faa7bd0db1823189d8 100644 (file)
@@ -93,7 +93,7 @@ fn get_builtins() -> Code {
          fact![get_value!(temp_v!(1), 2)], // =/2, 73.
          proceed!(),
          proceed!(), // true/0, 75.
-         get_cp!(temp_v!(3)), // ','/2, 76
+         get_cp!(temp_v!(3)), // ','/2, 76.
          try_me_else!(18), // ','/3, 77.
          switch_on_term!(4, 1, 0, 0),
          indexed_try!(4),
@@ -116,7 +116,7 @@ fn get_builtins() -> Code {
          set_cp!(temp_v!(3)),
          query![put_value!(temp_v!(2), 1)],
          execute_n!(1),
-         retry_me_else!(8),
+         retry_me_else!(8), // 95.
          allocate!(3),
          fact![get_structure!(",", 2, temp_v!(2), Some(infix!())),
                unify_variable!(perm_v!(2)),
@@ -148,40 +148,57 @@ fn get_builtins() -> Code {
          deallocate!(),
          execute_n!(1),
          get_cp!(temp_v!(3)), // ';'/2, 120.
-         try_me_else!(12),
-         switch_on_term!(4, 0, 0, 1),
-         indexed_try!(3),
+         try_me_else!(16), // ';'/3, 121.
+         switch_on_term!(0, 12, 0, 1), // Fail on variable input.
+         indexed_try!(2),
          trust!(5),
-         try_me_else!(3),
          fact![get_structure!("->", 2, temp_v!(1), Some(infix!())),
                unify_variable!(temp_v!(1)),
-               unify_variable!(temp_v!(2))],
-         goto_execute!(139, 3),
-         trust_me!(),
+               unify_variable!(temp_v!(4))],
+         query![put_value!(temp_v!(4), 2)],
+         goto_execute!(147, 3), // goto '->'/3.
+         retry_me_else!(5),
          fact![get_structure!("->", 2, temp_v!(1), Some(infix!())),
                unify_void!(2)],
+         set_cp!(temp_v!(3)),
          query![put_value!(temp_v!(2), 1)],
-         neck_cut!(),
          execute_n!(1),
+         retry_me_else!(4),
+         fact![get_constant!(atom!("!"), temp_v!(1))],
+         set_cp!(temp_v!(3)),
+         proceed!(),
+         retry_me_else!(4),
+         fact![get_constant!(atom!("!"), temp_v!(2))],
+         set_cp!(temp_v!(3)),
+         proceed!(),
          retry_me_else!(2),
          execute_n!(1),
          trust_me!(),
          query![put_value!(temp_v!(2), 1)],
          execute_n!(1),
-         get_cp!(temp_v!(3)), // '->'/2, 138.
-         allocate!(2), // '->'/3, 139.
+         get_cp!(temp_v!(3)), // '->'/2, 146.
+         try_me_else!(7), // '->'/3, 147.
+         allocate!(1),
+         fact![get_constant!(atom!("!"), temp_v!(2)),
+               get_var_in_fact!(perm_v!(1), 3)],
+         call_n!(1),
+         set_cp!(perm_v!(1)),
+         deallocate!(),
+         proceed!(),
+         trust_me!(),
+         allocate!(2),
          fact![get_var_in_fact!(perm_v!(1), 2),
-               get_var_in_fact!(perm_v!(2), 3)], // cut point.
+               get_var_in_fact!(perm_v!(2), 3)],
          call_n!(1),
          set_cp!(perm_v!(2)),
          query![put_unsafe_value!(1, 1)],
          deallocate!(),
          execute_n!(1),
-         functor_execute!(), // functor/3, 146.
-         is_integer!(temp_v!(1)), // integer/1, 147.
+         functor_execute!(), // functor/3, 162.
+         is_integer!(temp_v!(1)), // integer/1, 163.
          proceed!(),
-         get_arg_execute!(), // get_arg/3, 149.
-         try_me_else!(10), // arg/3, 150.
+         get_arg_execute!(), // get_arg/3, 165.
+         try_me_else!(10), // arg/3, 166.
          allocate!(4),
          fact![get_var_in_fact!(perm_v!(1), 1),
                get_var_in_fact!(perm_v!(2), 2),
@@ -198,7 +215,7 @@ fn get_builtins() -> Code {
                 put_value!(perm_v!(2), 4),
                 put_value!(perm_v!(4), 5)],
          deallocate!(),
-         goto_execute!(173, 5), // goto arg_/3.
+         goto_execute!(189, 5), // goto arg_/5, 175.
          retry_me_else!(10),
          allocate!(3),
          fact![get_var_in_fact!(perm_v!(1), 1),
@@ -214,25 +231,25 @@ fn get_builtins() -> Code {
                 put_value!(perm_v!(2), 2),
                 put_value!(perm_v!(3), 3)],
          deallocate!(),
-         goto_execute!(149, 3), // goto get_arg/3.
+         goto_execute!(165, 3), // goto get_arg/3, 185.
          trust_me!(),
          query![get_var_in_query!(temp_v!(4), 1),
                 put_structure!("type_error", 1, temp_v!(1), None),
                 set_constant!(atom!("integer_expected"))],
          goto_execute!(59, 1), // goto throw/1.
-         try_me_else!(5), // arg_/5, 173.
+         try_me_else!(5), // arg_/5, 189.
          fact![get_value!(temp_v!(1), 2),
                get_value!(temp_v!(1), 3)],
          neck_cut!(),
          query![put_value!(temp_v!(4), 2),
                 put_value!(temp_v!(5), 3)],
-         goto_execute!(149, 3), // goto get_arg/3.
+         goto_execute!(165, 3), // goto get_arg/3.
          retry_me_else!(4),
          fact![get_value!(temp_v!(1), 2)],
          query![put_value!(temp_v!(4), 2),
                 get_var_in_query!(temp_v!(6), 3),
                 put_value!(temp_v!(5), 3)],
-         goto_execute!(149, 3), // goto get_arg/3
+         goto_execute!(165, 3), // goto get_arg/3, 197.
          trust_me!(),
          allocate!(5),
          fact![get_var_in_fact!(perm_v!(2), 1),
@@ -253,24 +270,24 @@ fn get_builtins() -> Code {
                 put_value!(perm_v!(3), 4),
                 put_value!(perm_v!(5), 5)],
          deallocate!(),
-         goto_execute!(173, 5), // goto arg_/5.
-         display!(), // display/1, 192.
+         goto_execute!(189, 5), // goto arg_/5, 207.
+         display!(), // display/1, 208.
          proceed!(),
-         dynamic_is!(), // is/2, 194.
+         dynamic_is!(), // is/2, 210.
          proceed!(),
-         dynamic_num_test!(cmp_gt!()), // >/2, 196.
+         dynamic_num_test!(cmp_gt!()), // >/2, 212.
          proceed!(),
-         dynamic_num_test!(cmp_lt!()), // </2, 198.
+         dynamic_num_test!(cmp_lt!()), // </2, 214.
          proceed!(),
-         dynamic_num_test!(cmp_gte!()), // >=/2, 200.
+         dynamic_num_test!(cmp_gte!()), // >=/2, 216.
          proceed!(),
-         dynamic_num_test!(cmp_lte!()), // =</2, 202.
+         dynamic_num_test!(cmp_lte!()), // =</2, 218.
          proceed!(),
-         dynamic_num_test!(cmp_ne!()), // =\=, 204.
+         dynamic_num_test!(cmp_ne!()), // =\=, 220.
          proceed!(),
-         dynamic_num_test!(cmp_eq!()), // =:=, 206.
+         dynamic_num_test!(cmp_eq!()), // =:=, 222.
          proceed!(),
-         try_me_else!(5), // =.., 208.
+         try_me_else!(5), // =.., 224.
          fact![get_var_in_fact!(temp_v!(3), 1),
                get_list!(Level::Shallow, temp_v!(2)),
                unify_value!(temp_v!(3)),
@@ -295,7 +312,7 @@ fn get_builtins() -> Code {
                 put_constant!(Level::Shallow, integer!(1), temp_v!(3)),
                 put_unsafe_value!(2, 4)],
          deallocate!(),
-         goto_execute!(236, 4), // goto get_args/4.
+         goto_execute!(252, 4), // goto get_args/4, 239.
          trust_me!(),
          allocate!(5),
          get_level!(perm_v!(1)),
@@ -305,7 +322,7 @@ fn get_builtins() -> Code {
                unify_variable!(perm_v!(4))],
          query![put_value!(perm_v!(4), 1),
                 put_var!(perm_v!(2), 2)],
-         goto_call!(261, 2), // goto length/2.
+         goto_call!(277, 2), // goto length/2, 245.
          query![put_value!(perm_v!(3), 1),
                 put_value!(perm_v!(5), 2),
                 put_value!(perm_v!(2), 3)],
@@ -316,14 +333,14 @@ fn get_builtins() -> Code {
                 put_constant!(Level::Shallow, integer!(1), temp_v!(3)),
                 put_unsafe_value!(2, 4)],
          deallocate!(),
-         goto_execute!(236, 4), // goto get_args/4, 236.
-         try_me_else!(5), // get_args/4, 236.
+         goto_execute!(252, 4), // goto get_args/4, 252.
+         try_me_else!(5), // get_args/4, 252.
          fact![get_var_in_fact!(temp_v!(5), 1),
                get_constant!(integer!(0), temp_v!(4))],
          neck_cut!(),
          query![put_value!(temp_v!(5), 1),
                 put_constant!(Level::Shallow, Constant::EmptyList, temp_v!(2))],
-         goto_execute!(73, 2), // goto =/2.
+         goto_execute!(73, 2), // goto =/2, 256.
          trust_me!(),
          switch_on_term!(3, 0, 1, 0),
          indexed_try!(3),
@@ -361,15 +378,15 @@ fn get_builtins() -> Code {
                 put_unsafe_value!(2, 3),
                 put_value!(perm_v!(1), 4)],
          deallocate!(),
-         goto_execute!(236, 4), // goto get_args/4, 236.
-         try_me_else!(6), // length/2, 261.
+         goto_execute!(252, 4), // goto get_args/4, 276.
+         try_me_else!(6), // length/2, 277.
          fact![get_var_in_fact!(temp_v!(4), 1),
                get_var_in_fact!(temp_v!(3), 2)],
          is_var!(temp_v!(3)),
          neck_cut!(),
          query![put_value!(temp_v!(4), 1),
                 put_constant!(Level::Shallow, integer!(0), temp_v!(2))],
-         goto_execute!(281, 3), // goto length/3, 281.
+         goto_execute!(297, 3), // goto length/3, 282.
          retry_me_else!(10),
          allocate!(1),
          get_level!(perm_v!(1)),
@@ -378,7 +395,7 @@ fn get_builtins() -> Code {
          is_integer!(temp_v!(3)),
          query![put_value!(temp_v!(4), 1),
                 put_constant!(Level::Shallow, integer!(0), temp_v!(2))],
-         goto_call!(281, 3), // goto length/3, 281.
+         goto_call!(297, 3), // goto length/3, 289.
          cut!(perm_v!(1)),
          deallocate!(),
          proceed!(),
@@ -388,8 +405,8 @@ fn get_builtins() -> Code {
          query![put_structure!("type_error", 2, temp_v!(1), None),
                 set_constant!(atom!("integer_expected")),
                 set_value!(temp_v!(4))],
-         goto_execute!(59, 1), // goto throw/1, 59.
-         switch_on_term!(1,2,5,0), // length/3, 281.
+         goto_execute!(59, 1), // goto throw/1, 296.
+         switch_on_term!(1, 2, 5, 0), // length/3, 297.
          try_me_else!(3),
          fact![get_constant!(Constant::EmptyList, temp_v!(1)),
                get_var_in_fact!(temp_v!(4), 2),
@@ -411,8 +428,8 @@ fn get_builtins() -> Code {
                 put_unsafe_value!(2, 2),
                 put_value!(perm_v!(3), 3)],
          deallocate!(),
-         goto_execute!(281, 3), // goto length/3, 281.
-         allocate!(4), // setup_call_cleanup/3, 294.
+         goto_execute!(297, 3), // goto length/3, 309.
+         allocate!(4), // setup_call_cleanup/3, 310.
          get_level!(perm_v!(1)),
          fact![get_var_in_fact!(perm_v!(2), 2),
                get_var_in_fact!(perm_v!(3), 3)],
@@ -425,7 +442,7 @@ fn get_builtins() -> Code {
                 put_value!(perm_v!(2), 3)],
          deallocate!(),
          jmp_execute!(3, 1, 0),
-         try_me_else!(5), // 304.
+         try_me_else!(5), // 320.
          is_var!(temp_v!(1)),
          neck_cut!(),
          query![put_constant!(Level::Shallow,
@@ -437,8 +454,8 @@ fn get_builtins() -> Code {
                 put_value!(temp_v!(3), 2),
                 get_var_in_query!(temp_v!(5), 3),
                 put_value!(temp_v!(4), 3)],
-         goto_execute!(312, 3),
-         try_me_else!(13), // sgc_helper/3, 312.
+         goto_execute!(328, 3),
+         try_me_else!(13), // sgc_helper/3, 328.
          allocate!(4),
          fact![get_var_in_fact!(perm_v!(4), 1),
                get_var_in_fact!(perm_v!(3), 2),
@@ -462,16 +479,16 @@ fn get_builtins() -> Code {
          get_ball!(),
          get_level!(perm_v!(2)),
          default_set_cp!(perm_v!(2)),
-         goto_call!(342, 0), // goto run_cleaners_with_handling/0, 342.
+         goto_call!(358, 0), // goto run_cleaners_with_handling/0, 349.
          query![put_unsafe_value!(1, 1)],
          deallocate!(),
          goto_execute!(59, 1), // goto throw/1, 59.
          default_trust_me!(),
          allocate!(0),
-         goto_call!(354, 0), // goto run_cleaners_without_handling/0, 354.
+         goto_call!(370, 0), // goto run_cleaners_without_handling/0, 355.
          deallocate!(),
          fail!(),
-         try_me_else!(10), // run_cleaners_with_handling/0, 342.
+         try_me_else!(10), // run_cleaners_with_handling/0, 358.
          allocate!(2),
          get_level!(perm_v!(1)),
          query![put_var!(perm_v!(2), 1)],
@@ -482,10 +499,10 @@ fn get_builtins() -> Code {
          goto_call!(5, 3), // goto catch/3, 5.
          default_set_cp!(perm_v!(1)),
          deallocate!(),
-         goto_execute!(342, 0), // goto run_cleaners_with_handling/0, 342.
+         goto_execute!(358, 0), // goto run_cleaners_with_handling/0, 367.
          default_trust_me!(),
-         goto_execute!(382, 0), // goto restore_cut_points/0, 382.
-         try_me_else!(10), // run_cleaners_without_handling/1, 354.
+         goto_execute!(398, 0), // goto restore_cut_points/0, 369.
+         try_me_else!(10), // run_cleaners_without_handling/0, 370.
          allocate!(2),
          get_level!(perm_v!(1)),
          query![put_var!(perm_v!(2), 1)],
@@ -494,37 +511,37 @@ fn get_builtins() -> Code {
          call_n!(1),
          default_set_cp!(perm_v!(1)),
          deallocate!(),
-         goto_execute!(354, 0), // goto run_cleaners_without_handling/0, 354.
+         goto_execute!(370, 0), // goto run_cleaners_without_handling/0, 379.
          default_trust_me!(),
-         goto_execute!(382, 0), // goto restore_cut_points/0, 382.
-         allocate!(1), // sgc_on_success/2, 366.
+         goto_execute!(398, 0), // goto restore_cut_points/0, 381.
+         allocate!(1), // sgc_on_success/2, 382.
          fact![get_var_in_fact!(perm_v!(1), 2)],
          reset_block!(),
          cut!(perm_v!(1)),
          deallocate!(),
          proceed!(),
-         is_compound!(temp_v!(1)), // compound/1, 372.
+         is_compound!(temp_v!(1)), // compound/1, 388.
          proceed!(),
-         is_rational!(temp_v!(1)), // rational/1, 374.
+         is_rational!(temp_v!(1)), // rational/1, 390.
          proceed!(),
-         is_string!(temp_v!(1)), // string/1, 376.
+         is_string!(temp_v!(1)), // string/1, 392.
          proceed!(),
-         is_float!(temp_v!(1)), // float/1, 378.
+         is_float!(temp_v!(1)), // float/1, 394.
          proceed!(),
-         is_nonvar!(temp_v!(1)), // nonvar/1, 380.
+         is_nonvar!(temp_v!(1)), // nonvar/1, 396.
          proceed!(),
-         restore_cut_policy!(), // restore_cut_policy/0, 382.
+         restore_cut_policy!(), // restore_cut_policy/0, 398.
          proceed!(),
-         ground_execute!(), // ground/1, 384.
-         eq_execute!(), // (==)/2, 385.
-         not_eq_execute!(), // (\==)/2, 386.
-         compare_term_execute!(term_cmp_gte!()), // (@>=)/2, 387.
-         compare_term_execute!(term_cmp_lte!()), // (@=<)/2, 388.
-         compare_term_execute!(term_cmp_gt!()), // (@>)/2, 389.
-         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!(5), // call_with_inference_limit/3, 393.
+         ground_execute!(), // ground/1, 400.
+         eq_execute!(), // (==)/2, 401.
+         not_eq_execute!(), // (\==)/2, 402.
+         compare_term_execute!(term_cmp_gte!()), // (@>=)/2, 403.
+         compare_term_execute!(term_cmp_lte!()), // (@=<)/2, 404.
+         compare_term_execute!(term_cmp_gt!()), // (@>)/2, 405.
+         compare_term_execute!(term_cmp_lt!()), // (@<)/2, 406.
+         compare_term_execute!(term_cmp_eq!()), // (=@=)/2, 407.
+         compare_term_execute!(term_cmp_ne!()), // (\=@=)/2, 408.
+         allocate!(5), // call_with_inference_limit/3, 409.
          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)],
@@ -536,12 +553,12 @@ fn get_builtins() -> Code {
                 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/5, 404.
+         goto_call!(420, 5), // goto call_with_inference_limit/5, 415
          query![put_value!(perm_v!(1), 1)],
          deallocate!(),
          remove_call_policy_check!(),
          proceed!(),
-         try_me_else!(19), // call_with_inference_limit/5, 404.
+         try_me_else!(19), // call_with_inference_limit/5, 420.
          allocate!(9),
          fact![get_var_in_fact!(perm_v!(9), 1),
                get_var_in_fact!(perm_v!(5), 2),
@@ -570,8 +587,8 @@ fn get_builtins() -> Code {
                 put_value!(perm_v!(1), 3),
                 put_value!(perm_v!(2), 4)],
          deallocate!(),
-         goto_execute!(452, 4), // goto end_block/4, 452
-         default_trust_me!(), // 423
+         goto_execute!(468, 4), // goto end_block/4, 468
+         default_trust_me!(), // 439
          allocate!(3),
          fact![get_var_in_fact!(perm_v!(1), 3),
                get_var_in_fact!(perm_v!(3), 5)],
@@ -587,7 +604,7 @@ fn get_builtins() -> Code {
                 put_unsafe_value!(2, 2),
                 put_value!(perm_v!(1), 3)],
          deallocate!(),
-         goto_execute!(444, 3), // goto handle_ile/3, 442.
+         goto_execute!(460, 3), // goto handle_ile/3, 451.
          try_me_else!(5), // the inner clause.
          query![put_value!(temp_v!(2), 1)],
          get_ball!(),
@@ -596,7 +613,7 @@ fn get_builtins() -> Code {
          default_trust_me!(),
          remove_call_policy_check!(),
          fail!(),
-         try_me_else!(4), // handle_ile/3, 444.
+         try_me_else!(4), // handle_ile/3, 460.
          fact![get_structure!("inference_limit_exceeded", 1, temp_v!(2), None),
                unify_value!(temp_v!(1)),
                get_constant!(atom!("inference_limit_exceeded"), temp_v!(3))],
@@ -606,7 +623,7 @@ fn get_builtins() -> Code {
          remove_call_policy_check!(),
          query![put_value!(temp_v!(2), 1)],
          goto_execute!(59, 1), // goto throw/1, 59.
-         try_me_else!(6), // end_block/4, 452.
+         try_me_else!(6), // end_block/4, 468.
          query![put_value!(temp_v!(3), 1)],
          clean_up_block!(),
          query![put_value!(temp_v!(2), 1)],
@@ -620,13 +637,13 @@ fn get_builtins() -> Code {
          query![put_value!(temp_v!(5), 1)],
          reset_block!(),
          fail!(),
-         compare_execute!(), // compare/3, 464.
-         is_atom!(temp_v!(1)), // atom/1, 465.
+         compare_execute!(), // compare/3, 480.
+         is_atom!(temp_v!(1)), // atom/1, 481.
          proceed!(),
-         sort_execute!(), // sort/2, 467.
-         keysort_execute!(), // keysort/2, 468.
-         acyclic_term_execute!(), // acyclic_term/1, 469.
-         cyclic_term_execute!(), // cyclic_term/1, 470.
+         sort_execute!(), // sort/2, 483.
+         keysort_execute!(), // keysort/2, 484.
+         acyclic_term_execute!(), // acyclic_term/1, 485.
+         cyclic_term_execute!(), // cyclic_term/1, 486.
     ]
 }
 
@@ -703,50 +720,50 @@ pub fn build_code_and_op_dirs() -> (CodeDir, OpDir)
 
     code_dir.insert((clause_name!(","), 2), CodeIndex::from((76, builtin.clone())));
     code_dir.insert((clause_name!(";"), 2), CodeIndex::from((120, builtin.clone())));
-    code_dir.insert((clause_name!("->"), 2), CodeIndex::from((138, builtin.clone())));
+    code_dir.insert((clause_name!("->"), 2), CodeIndex::from((146, builtin.clone())));
 
-    code_dir.insert((clause_name!("functor"), 3), CodeIndex::from((146, builtin.clone())));
-    code_dir.insert((clause_name!("arg"), 3), CodeIndex::from((150, builtin.clone())));
-    code_dir.insert((clause_name!("integer"), 1), CodeIndex::from((147, builtin.clone())));
-    code_dir.insert((clause_name!("display"), 1), CodeIndex::from((192, builtin.clone())));
+    code_dir.insert((clause_name!("functor"), 3), CodeIndex::from((162, builtin.clone())));
+    code_dir.insert((clause_name!("arg"), 3), CodeIndex::from((166, builtin.clone())));
+    code_dir.insert((clause_name!("integer"), 1), CodeIndex::from((163, builtin.clone())));
+    code_dir.insert((clause_name!("display"), 1), CodeIndex::from((208, builtin.clone())));
 
-    code_dir.insert((clause_name!("is"), 2), CodeIndex::from((194, builtin.clone())));
-    code_dir.insert((clause_name!(">"), 2), CodeIndex::from((196, builtin.clone())));
-    code_dir.insert((clause_name!("<"), 2), CodeIndex::from((198, builtin.clone())));
-    code_dir.insert((clause_name!(">="), 2), CodeIndex::from((200, builtin.clone())));
-    code_dir.insert((clause_name!("=<"), 2), CodeIndex::from((202, builtin.clone())));
-    code_dir.insert((clause_name!("=\\="), 2), CodeIndex::from((204, builtin.clone())));
-    code_dir.insert((clause_name!("=:="), 2), CodeIndex::from((206, builtin.clone())));
-    code_dir.insert((clause_name!("=.."), 2), CodeIndex::from((208, builtin.clone())));
+    code_dir.insert((clause_name!("is"), 2), CodeIndex::from((210, builtin.clone())));
+    code_dir.insert((clause_name!(">"), 2), CodeIndex::from((212, builtin.clone())));
+    code_dir.insert((clause_name!("<"), 2), CodeIndex::from((214, builtin.clone())));
+    code_dir.insert((clause_name!(">="), 2), CodeIndex::from((216, builtin.clone())));
+    code_dir.insert((clause_name!("=<"), 2), CodeIndex::from((218, builtin.clone())));
+    code_dir.insert((clause_name!("=\\="), 2), CodeIndex::from((220, builtin.clone())));
+    code_dir.insert((clause_name!("=:="), 2), CodeIndex::from((222, builtin.clone())));
+    code_dir.insert((clause_name!("=.."), 2), CodeIndex::from((224, builtin.clone())));
 
-    code_dir.insert((clause_name!("length"), 2), CodeIndex::from((261, builtin.clone())));
+    code_dir.insert((clause_name!("length"), 2), CodeIndex::from((277, builtin.clone())));
     code_dir.insert((clause_name!("setup_call_cleanup"), 3),
-                    CodeIndex::from((294, builtin.clone())));
+                    CodeIndex::from((310, builtin.clone())));
     code_dir.insert((clause_name!("call_with_inference_limit"), 3),
-                    CodeIndex::from((393, builtin.clone())));
+                    CodeIndex::from((409, builtin.clone())));
+
+    code_dir.insert((clause_name!("compound"), 1), CodeIndex::from((388, builtin.clone())));
+    code_dir.insert((clause_name!("rational"), 1), CodeIndex::from((390, builtin.clone())));
+    code_dir.insert((clause_name!("string"), 1), CodeIndex::from((392, builtin.clone())));
+    code_dir.insert((clause_name!("float"), 1), CodeIndex::from((394, builtin.clone())));
+    code_dir.insert((clause_name!("nonvar"), 1), CodeIndex::from((396, builtin.clone())));
 
-    code_dir.insert((clause_name!("compound"), 1), CodeIndex::from((372, builtin.clone())));
-    code_dir.insert((clause_name!("rational"), 1), CodeIndex::from((374, builtin.clone())));
-    code_dir.insert((clause_name!("string"), 1), CodeIndex::from((376, builtin.clone())));
-    code_dir.insert((clause_name!("float"), 1), CodeIndex::from((378, builtin.clone())));
-    code_dir.insert((clause_name!("nonvar"), 1), CodeIndex::from((380, builtin.clone())));
+    code_dir.insert((clause_name!("ground"), 1), CodeIndex::from((400, builtin.clone())));
+    code_dir.insert((clause_name!("=="), 2), CodeIndex::from((401, builtin.clone())));
+    code_dir.insert((clause_name!("\\=="), 2), CodeIndex::from((402, builtin.clone())));
+    code_dir.insert((clause_name!("@>="), 2), CodeIndex::from((403, builtin.clone())));
+    code_dir.insert((clause_name!("@=<"), 2), CodeIndex::from((404, builtin.clone())));
+    code_dir.insert((clause_name!("@>"), 2), CodeIndex::from((405, builtin.clone())));
+    code_dir.insert((clause_name!("@<"), 2), CodeIndex::from((406, builtin.clone())));
+    code_dir.insert((clause_name!("=@="), 2), CodeIndex::from((407, builtin.clone())));
+    code_dir.insert((clause_name!("\\=@="), 2), CodeIndex::from((408, builtin.clone())));
+    code_dir.insert((clause_name!("compare"), 3), CodeIndex::from((480, builtin.clone())));
+    code_dir.insert((clause_name!("atom"), 1), CodeIndex::from((481, builtin.clone())));
+    code_dir.insert((clause_name!("sort"), 2), CodeIndex::from((483, builtin.clone())));
+    code_dir.insert((clause_name!("keysort"), 2), CodeIndex::from((484, builtin.clone())));
+    code_dir.insert((clause_name!("acyclic_term"), 1), CodeIndex::from((485, builtin.clone())));
+    code_dir.insert((clause_name!("cyclic_term"), 1), CodeIndex::from((486, builtin.clone())));
 
-    code_dir.insert((clause_name!("ground"), 1), CodeIndex::from((384, builtin.clone())));
-    code_dir.insert((clause_name!("=="), 2), CodeIndex::from((385, builtin.clone())));
-    code_dir.insert((clause_name!("\\=="), 2), CodeIndex::from((386, builtin.clone())));
-    code_dir.insert((clause_name!("@>="), 2), CodeIndex::from((387, builtin.clone())));
-    code_dir.insert((clause_name!("@=<"), 2), CodeIndex::from((388, builtin.clone())));
-    code_dir.insert((clause_name!("@>"), 2), CodeIndex::from((389, builtin.clone())));
-    code_dir.insert((clause_name!("@<"), 2), CodeIndex::from((390, builtin.clone())));
-    code_dir.insert((clause_name!("=@="), 2), CodeIndex::from((391, builtin.clone())));
-    code_dir.insert((clause_name!("\\=@="), 2), CodeIndex::from((392, builtin.clone())));
-    code_dir.insert((clause_name!("compare"), 3), CodeIndex::from((464, builtin.clone())));
-    code_dir.insert((clause_name!("atom"), 1), CodeIndex::from((465, builtin.clone())));
-    code_dir.insert((clause_name!("sort"), 2), CodeIndex::from((467, builtin.clone())));
-    code_dir.insert((clause_name!("keysort"), 2), CodeIndex::from((468, builtin.clone())));
-    code_dir.insert((clause_name!("acyclic_term"), 1), CodeIndex::from((469, builtin.clone())));
-    code_dir.insert((clause_name!("cyclic_term"), 1), CodeIndex::from((470, builtin.clone())));
-    
     (code_dir, op_dir)
 }
 
index 4dbe7043f5961c040d541d07c99aebe690114231..690b09b5c800ed79259b24604defa8404a163112 100644 (file)
@@ -540,8 +540,6 @@ fn compile_query(terms: Vec<QueryTerm>, queue: Vec<TopLevel>, code_size: usize,
     let query_info = QueryInfo {};
     query_info.label_clauses(code_size, code_dir, &mut code);
 
-    print_code(&code);
-    
     Ok((code, cg.take_vars()))
 }
 
@@ -573,8 +571,6 @@ fn compile_decl(wam: &mut Machine, tl: TopLevel, queue: Vec<TopLevel>) -> EvalSe
 
             decl_info.label_clauses(wam.code_size(), &mut wam.code_dir, &mut code);
 
-            print_code(&code);
-            
             if !code.is_empty() {
                 wam.add_user_code(name, tl.arity(), code, tl.as_predicate().ok().unwrap())
             } else {
index 27f94a684c9929e3f5b123798ac222fdef8e17ad..ab3f4c7817d978d05c399cecf92dc549674af283 100644 (file)
@@ -395,7 +395,7 @@ pub(crate) trait CallPolicy: Any {
 
                 machine_st.num_of_args = 3;
                 machine_st.b0 = machine_st.b;
-                machine_st.p  = CodePtr::DirEntry(150, clause_name!("builtin"));
+                machine_st.p  = CodePtr::DirEntry(166, clause_name!("builtin"));
 
                 Ok(())
             },
@@ -522,11 +522,11 @@ pub(crate) trait CallPolicy: Any {
             &ClauseType::Named(_, ref idx) | &ClauseType::Op(_, _, ref idx) =>
                 self.context_call(machine_st, arity, idx.clone(), lco),
             &ClauseType::CallWithInferenceLimit => {
-                machine_st.goto_ptr(CodePtr::DirEntry(393, clause_name!("builtin")), 3, lco);
+                machine_st.goto_ptr(CodePtr::DirEntry(409, clause_name!("builtin")), 3, lco);
                 Ok(())
             },
             &ClauseType::SetupCallCleanup => {
-                machine_st.goto_ptr(CodePtr::DirEntry(294, clause_name!("builtin")), 3, lco);
+                machine_st.goto_ptr(CodePtr::DirEntry(310, clause_name!("builtin")), 3, lco);
                 Ok(())
             },
             &ClauseType::Is => {
@@ -723,8 +723,8 @@ impl CutPolicy for SetupCallCleanupCutPolicy {
             machine_st.cp = machine_st.p.clone();
             machine_st.num_of_args = 0;
             machine_st.b0 = machine_st.b;
-            // goto_call run_cleaners_without_handling/0, 354.
-            machine_st.p = CodePtr::DirEntry(354, clause_name!("builtin"));
+            // goto_call run_cleaners_without_handling/0, 370.
+            machine_st.p = CodePtr::DirEntry(370, clause_name!("builtin"));
         }
     }
 }
index bbdcae7dfbdefe47540be47a9e336c52872cf8be..cbbbe9ee033d1a429792fd139bbf9cd60455aaef 100644 (file)
@@ -1857,8 +1857,8 @@ impl MachineState {
                     _ => {
                         self.num_of_args = 2;
                         self.b0 = self.b;
-                        // goto sgc_on_success/2, 366.
-                        self.p = CodePtr::DirEntry(366, clause_name!("builtin"));
+                        // goto sgc_on_success/2, 382.
+                        self.p = CodePtr::DirEntry(382, clause_name!("builtin"));
                     }
                 };
             },