]> Repositorios git - scryer-prolog.git/commitdiff
Merge branch 'compiling_disj'
authorMark <[email protected]>
Fri, 23 Jun 2023 20:57:29 +0000 (14:57 -0600)
committerMark <[email protected]>
Fri, 23 Jun 2023 21:45:04 +0000 (15:45 -0600)
1  2 
Cargo.lock
src/fixtures.rs
src/machine/disjuncts.rs

diff --cc Cargo.lock
index 8a569c16ca3ad8674263a5313cb2bb81664e611d,28421131c112f79ed72e1c338a2a54b2a62420aa..51a8fa499b55c0d7407889b7ef760c77df81eb0b
@@@ -2,6 -2,6 +2,12 @@@
  # It is not intended for manual editing.
  version = 3
  
++[[package]]
++name = "android-tzdata"
++version = "0.1.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
++
  [[package]]
  name = "android_system_properties"
  version = "0.1.5"
@@@ -84,11 -96,11 +102,11 @@@ dependencies = 
  
  [[package]]
  name = "blake2"
--version = "0.10.4"
++version = "0.10.6"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "b9cf849ee05b2ee5fba5e36f97ff8ec2533916700fc0758d40d92136a42f3388"
++checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe"
  dependencies = [
-- "digest 0.10.5",
++ "digest 0.10.7",
  ]
  
  [[package]]
@@@ -105,11 -117,11 +123,11 @@@ dependencies = 
  
  [[package]]
  name = "block-buffer"
--version = "0.10.3"
++version = "0.10.4"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e"
++checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
  dependencies = [
-- "generic-array 0.14.6",
++ "generic-array 0.14.7",
  ]
  
  [[package]]
@@@ -134,9 -146,9 +152,9 @@@ dependencies = 
  
  [[package]]
  name = "bumpalo"
--version = "3.11.1"
++version = "3.13.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
++checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1"
  
  [[package]]
  name = "byte-tools"
@@@ -152,15 -164,15 +170,15 @@@ checksum = "14c189c53d098945499cdfa7ecc
  
  [[package]]
  name = "bytes"
--version = "1.2.1"
++version = "1.4.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db"
++checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
  
  [[package]]
  name = "cc"
--version = "1.0.76"
++version = "1.0.79"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "76a284da2e6fe2092f2353e51713435363112dfd60030e22add80be333fb928f"
++checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
  
  [[package]]
  name = "cfg-if"
@@@ -170,13 -182,13 +188,13 @@@ checksum = "baf1de4339761588bc0619e3cbc
  
  [[package]]
  name = "chrono"
--version = "0.4.22"
++version = "0.4.26"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "bfd4d1b31faaa3a89d7934dbded3111da0d2ef28e3ebccdb4f0179f5929d1ef1"
++checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5"
  dependencies = [
++ "android-tzdata",
   "iana-time-zone",
   "js-sys",
-- "num-integer",
   "num-traits",
   "time",
   "wasm-bindgen",
  
  [[package]]
  name = "clipboard-win"
--version = "4.4.2"
++version = "4.5.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "c4ab1b92798304eedc095b53942963240037c0516452cb11aeba709d420b2219"
++checksum = "7191c27c2357d9b7ef96baac1773290d4ca63b24205b82a3fd8a0637afcf0362"
  dependencies = [
   "error-code",
   "str-buf",
   "winapi",
  ]
  
--[[package]]
--name = "codespan-reporting"
--version = "0.11.1"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
--dependencies = [
-- "termcolor",
-- "unicode-width",
--]
--
  [[package]]
  name = "core-foundation"
  version = "0.9.3"
@@@ -216,9 -228,9 +224,9 @@@ dependencies = 
  
  [[package]]
  name = "core-foundation-sys"
--version = "0.8.3"
++version = "0.8.4"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
++checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa"
  
  [[package]]
  name = "cpu-time"
@@@ -232,9 -244,9 +240,9 @@@ dependencies = 
  
  [[package]]
  name = "cpufeatures"
--version = "0.2.5"
++version = "0.2.8"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
++checksum = "03e69e28e9f7f77debdedbaafa2866e1de9ba56df55a8bd7cfc724c25a09987c"
  dependencies = [
   "libc",
  ]
@@@ -270,7 -282,7 +278,7 @@@ version = "0.2.0
  source = "registry+https://github.com/rust-lang/crates.io-index"
  checksum = "2db40892a506901e4e8281f00e42687df82d1d3448cb0289ae9183a60cb42ec1"
  dependencies = [
-- "blake2 0.10.4",
++ "blake2 0.10.6",
   "rand_core",
   "sha2",
  ]
@@@ -281,7 -293,7 +289,7 @@@ version = "0.1.6
  source = "registry+https://github.com/rust-lang/crates.io-index"
  checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
  dependencies = [
-- "generic-array 0.14.6",
++ "generic-array 0.14.7",
   "typenum",
  ]
  
@@@ -297,56 -309,56 +305,12 @@@ dependencies = 
  
  [[package]]
  name = "ctrlc"
--version = "3.2.3"
 -source = "registry+https://github.com/rust-lang/crates.io-index"
 -checksum = "1d91974fbbe88ec1df0c24a4f00f99583667a7e2e6272b2b92d294d81e462173"
 -dependencies = [
 - "nix 0.25.0",
 - "winapi",
 -]
 -
 -[[package]]
 -name = "cxx"
 -version = "1.0.81"
++version = "3.4.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "1d91974fbbe88ec1df0c24a4f00f99583667a7e2e6272b2b92d294d81e462173"
 -checksum = "97abf9f0eca9e52b7f81b945524e76710e6cb2366aead23b7d4fbf72e281f888"
++checksum = "2a011bbe2c35ce9c1f143b7af6f94f29a167beb4cd1d29e6740ce836f723120e"
  dependencies = [
-  "nix 0.25.0",
-  "winapi",
- ]
- [[package]]
- name = "cxx"
- version = "1.0.81"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "97abf9f0eca9e52b7f81b945524e76710e6cb2366aead23b7d4fbf72e281f888"
- dependencies = [
-- "cc",
-- "cxxbridge-flags",
-- "cxxbridge-macro",
-- "link-cplusplus",
--]
--
--[[package]]
--name = "cxx-build"
--version = "1.0.81"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "7cc32cc5fea1d894b77d269ddb9f192110069a8a9c1f1d441195fba90553dea3"
--dependencies = [
-- "cc",
-- "codespan-reporting",
-- "once_cell",
-- "proc-macro2",
-- "quote",
-- "scratch",
-- "syn",
--]
--
--[[package]]
--name = "cxxbridge-flags"
--version = "1.0.81"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "8ca220e4794c934dc6b1207c3b42856ad4c302f2df1712e9f8d2eec5afaacf1f"
--
--[[package]]
--name = "cxxbridge-macro"
--version = "1.0.81"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "b846f081361125bfc8dc9d3940c84e1fd83ba54bbca7b17cd29483c828be0704"
--dependencies = [
-- "proc-macro2",
-- "quote",
-- "syn",
++ "nix 0.26.2",
++ "windows-sys 0.48.0",
  ]
  
  [[package]]
@@@ -357,7 -369,7 +321,7 @@@ checksum = "dcdbcee2d9941369faba772587a
  dependencies = [
   "proc-macro2",
   "quote",
-- "syn",
++ "syn 1.0.109",
  ]
  
  [[package]]
@@@ -377,13 -389,13 +341,13 @@@ dependencies = 
  
  [[package]]
  name = "digest"
--version = "0.10.5"
++version = "0.10.7"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "adfbc57365a37acbd2ebf2b64d7e69bb766e2fea813521ed536f5d0520dcf86c"
++checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
  dependencies = [
-- "block-buffer 0.10.3",
++ "block-buffer 0.10.4",
   "crypto-common",
-- "subtle 2.4.1",
++ "subtle 2.5.0",
  ]
  
  [[package]]
@@@ -421,18 -433,18 +385,18 @@@ checksum = "fea41bba32d969b513997752735
  
  [[package]]
  name = "ed25519"
--version = "1.5.2"
++version = "1.5.3"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "1e9c280362032ea4203659fc489832d0204ef09f247a0506f170dafcac08c369"
++checksum = "91cff35c70bba8a626e3185d8cd48cc11b5437e1a5bcd15b9b5fa3c64b6dfee7"
  dependencies = [
   "signature",
  ]
  
  [[package]]
  name = "either"
--version = "1.8.0"
++version = "1.8.1"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
++checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91"
  
  [[package]]
  name = "endian-type"
@@@ -442,13 -454,13 +406,13 @@@ checksum = "c34f04666d835ff5d62e058c399
  
  [[package]]
  name = "errno"
--version = "0.2.8"
++version = "0.3.1"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1"
++checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
  dependencies = [
   "errno-dragonfly",
   "libc",
-- "winapi",
++ "windows-sys 0.48.0",
  ]
  
  [[package]]
@@@ -473,22 -485,22 +437,22 @@@ dependencies = 
  
  [[package]]
  name = "fastrand"
--version = "1.8.0"
++version = "1.9.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499"
++checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
  dependencies = [
   "instant",
  ]
  
  [[package]]
  name = "fd-lock"
--version = "3.0.8"
++version = "3.0.12"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "bb21c69b9fea5e15dbc1049e4b77145dd0ba1c84019c488102de0dc4ea4b0a27"
++checksum = "39ae6b3d9530211fb3b12a95374b8b0823be812f53d09e18c5675c0146b09642"
  dependencies = [
   "cfg-if",
   "rustix",
-- "windows-sys 0.42.0",
++ "windows-sys 0.48.0",
  ]
  
  [[package]]
@@@ -524,9 -542,9 +494,9 @@@ dependencies = 
  
  [[package]]
  name = "futures"
--version = "0.3.25"
++version = "0.3.28"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "38390104763dc37a5145a53c29c63c1290b5d316d6086ec32c293f6736051bb0"
++checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40"
  dependencies = [
   "futures-channel",
   "futures-core",
  
  [[package]]
  name = "futures-channel"
--version = "0.3.25"
++version = "0.3.28"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "52ba265a92256105f45b719605a571ffe2d1f0fea3807304b522c1d778f79eed"
++checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2"
  dependencies = [
   "futures-core",
   "futures-sink",
  
  [[package]]
  name = "futures-core"
--version = "0.3.25"
++version = "0.3.28"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
++checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c"
  
  [[package]]
  name = "futures-executor"
--version = "0.3.25"
++version = "0.3.28"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "7acc85df6714c176ab5edf386123fafe217be88c0840ec11f199441134a074e2"
++checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0"
  dependencies = [
   "futures-core",
   "futures-task",
  
  [[package]]
  name = "futures-io"
--version = "0.3.25"
++version = "0.3.28"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "00f5fb52a06bdcadeb54e8d3671f8888a39697dcb0b81b23b55174030427f4eb"
++checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964"
  
  [[package]]
  name = "futures-macro"
--version = "0.3.25"
++version = "0.3.28"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "bdfb8ce053d86b91919aad980c220b1fb8401a9394410e1c289ed7e66b61835d"
++checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72"
  dependencies = [
   "proc-macro2",
   "quote",
-- "syn",
++ "syn 2.0.18",
  ]
  
  [[package]]
  name = "futures-sink"
--version = "0.3.25"
++version = "0.3.28"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "39c15cf1a4aa79df40f1bb462fb39676d0ad9e366c2a33b590d7c66f4f81fcf9"
++checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e"
  
  [[package]]
  name = "futures-task"
--version = "0.3.25"
++version = "0.3.28"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "2ffb393ac5d9a6eaa9d3fdf37ae2776656b706e200c8e16b1bdb227f5198e6ea"
++checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65"
  
  [[package]]
  name = "futures-util"
--version = "0.3.25"
++version = "0.3.28"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "197676987abd2f9cadff84926f410af1c183608d36641465df73ae8211dc65d6"
++checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533"
  dependencies = [
   "futures-channel",
   "futures-core",
@@@ -631,9 -649,9 +601,9 @@@ dependencies = 
  
  [[package]]
  name = "generic-array"
--version = "0.14.6"
++version = "0.14.7"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
++checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
  dependencies = [
   "typenum",
   "version_check",
  
  [[package]]
  name = "getrandom"
--version = "0.2.8"
++version = "0.2.10"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
++checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
  dependencies = [
   "cfg-if",
   "libc",
@@@ -669,24 -687,24 +639,24 @@@ dependencies = 
   "proc-macro-hack",
   "proc-macro2",
   "quote",
-- "syn",
++ "syn 1.0.109",
  ]
  
  [[package]]
  name = "gmp-mpfr-sys"
--version = "1.4.10"
++version = "1.5.3"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "ea3f42dadb6c75f122e9aa87e757ef11d4282f664c9f2e6476a9c2c8970f9d19"
++checksum = "13eabc29d16e4a621b495e3919c71ebb7caaed24380955671e7d417370fea95d"
  dependencies = [
   "libc",
-- "winapi",
++ "windows-sys 0.42.0",
  ]
  
  [[package]]
  name = "h2"
--version = "0.3.17"
++version = "0.3.19"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "66b91535aa35fea1523ad1b86cb6b53c28e0ae566ba4a460f4457e936cad7c6f"
++checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782"
  dependencies = [
   "bytes",
   "fnv",
@@@ -718,13 -736,13 +688,19 @@@ dependencies = 
  
  [[package]]
  name = "hermit-abi"
--version = "0.1.19"
++version = "0.2.6"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
++checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7"
  dependencies = [
   "libc",
  ]
  
++[[package]]
++name = "hermit-abi"
++version = "0.3.1"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286"
++
  [[package]]
  name = "hostname"
  version = "0.3.1"
@@@ -747,14 -765,14 +723,14 @@@ dependencies = 
   "markup5ever",
   "proc-macro2",
   "quote",
-- "syn",
++ "syn 1.0.109",
  ]
  
  [[package]]
  name = "http"
--version = "0.2.8"
++version = "0.2.9"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399"
++checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482"
  dependencies = [
   "bytes",
   "fnv",
@@@ -786,9 -804,9 +762,9 @@@ checksum = "c4a1e36c821dbe04574f602848a
  
  [[package]]
  name = "hyper"
--version = "0.14.23"
++version = "0.14.26"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "034711faac9d2166cb1baf1a2fb0b60b1f277f8492fd72176c17f3515e1abd3c"
++checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4"
  dependencies = [
   "bytes",
   "futures-channel",
@@@ -823,33 -841,33 +799,32 @@@ dependencies = 
  
  [[package]]
  name = "iana-time-zone"
--version = "0.1.53"
++version = "0.1.57"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
++checksum = "2fad5b825842d2b38bd206f3e81d6957625fd7f0a361e345c30e01a0ae2dd613"
  dependencies = [
   "android_system_properties",
   "core-foundation-sys",
   "iana-time-zone-haiku",
   "js-sys",
   "wasm-bindgen",
-- "winapi",
++ "windows",
  ]
  
  [[package]]
  name = "iana-time-zone-haiku"
--version = "0.1.1"
++version = "0.1.2"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
++checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
  dependencies = [
-- "cxx",
-- "cxx-build",
++ "cc",
  ]
  
  [[package]]
  name = "indexmap"
--version = "1.9.1"
++version = "1.9.3"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e"
++checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
  dependencies = [
   "autocfg",
   "hashbrown",
@@@ -866,12 -884,12 +841,13 @@@ dependencies = 
  
  [[package]]
  name = "io-lifetimes"
--version = "1.0.1"
++version = "1.0.11"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "a7d367024b3f3414d8e01f437f704f41a9f64ab36f9067fa73e526ad4c763c87"
++checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
  dependencies = [
++ "hermit-abi 0.3.1",
   "libc",
-- "windows-sys 0.42.0",
++ "windows-sys 0.48.0",
  ]
  
  [[package]]
@@@ -885,24 -903,24 +861,27 @@@ dependencies = 
  
  [[package]]
  name = "itoa"
--version = "1.0.4"
++version = "1.0.6"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
++checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6"
  
  [[package]]
  name = "js-sys"
--version = "0.3.60"
++version = "0.3.64"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
++checksum = "c5f195fe497f702db0f318b07fdd68edb16955aed830df8363d837542f8f935a"
  dependencies = [
   "wasm-bindgen",
  ]
  
  [[package]]
  name = "keccak"
--version = "0.1.2"
++version = "0.1.4"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "f9b7d56ba4a8344d6be9729995e6b06f928af29998cdf79fe390cbf6b1fee838"
++checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940"
++dependencies = [
++ "cpufeatures",
++]
  
  [[package]]
  name = "lazy_static"
@@@ -935,15 -953,15 +914,15 @@@ dependencies = 
  
  [[package]]
  name = "libc"
--version = "0.2.137"
++version = "0.2.146"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
++checksum = "f92be4933c13fd498862a9e02a3055f8a8d9c039ce33db97306fd5a6caa7f29b"
  
  [[package]]
  name = "libffi"
--version = "3.1.0"
++version = "3.2.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "6cb06d5b4c428f3cd682943741c39ed4157ae989fffe1094a08eaf7c4014cf60"
++checksum = "ce826c243048e3d5cec441799724de52e2d42f820468431fc3fceee2341871e2"
  dependencies = [
   "libc",
   "libffi-sys",
  
  [[package]]
  name = "libffi-sys"
--version = "2.1.0"
++version = "2.3.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "11c6f11e063a27ffe040a9d15f0b661bf41edc2383b7ae0e0ad5a7e7d53d9da3"
++checksum = "f36115160c57e8529781b4183c2bb51fdc1f6d6d1ed345591d84be7703befb3c"
  dependencies = [
   "cc",
  ]
@@@ -980,26 -998,26 +959,17 @@@ dependencies = 
   "walkdir",
  ]
  
--[[package]]
--name = "link-cplusplus"
--version = "1.0.7"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369"
--dependencies = [
-- "cc",
--]
--
  [[package]]
  name = "linux-raw-sys"
--version = "0.1.2"
++version = "0.3.8"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "bb68f22743a3fb35785f1e7f844ca5a3de2dde5bd0c0ef5b372065814699b121"
++checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
  
  [[package]]
  name = "lock_api"
--version = "0.4.9"
++version = "0.4.10"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
++checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
  dependencies = [
   "autocfg",
   "scopeguard",
  
  [[package]]
  name = "log"
--version = "0.4.17"
++version = "0.4.19"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e"
--dependencies = [
-- "cfg-if",
--]
++checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
  
  [[package]]
  name = "mac"
@@@ -1082,14 -1100,14 +1049,13 @@@ dependencies = 
  
  [[package]]
  name = "mio"
--version = "0.8.5"
++version = "0.8.8"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
++checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2"
  dependencies = [
   "libc",
-- "log",
   "wasi 0.11.0+wasi-snapshot-preview1",
-- "windows-sys 0.42.0",
++ "windows-sys 0.48.0",
  ]
  
  [[package]]
@@@ -1117,7 -1135,7 +1083,7 @@@ source = "git+https://github.com/mthom/
  dependencies = [
   "proc-macro2",
   "quote",
-- "syn",
++ "syn 1.0.109",
  ]
  
  [[package]]
@@@ -1155,9 -1173,9 +1121,9 @@@ dependencies = 
  
  [[package]]
  name = "nix"
--version = "0.23.1"
++version = "0.23.2"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "9f866317acbd3a240710c63f065ffb1e4fd466259045ccb504130b7f668f35c6"
++checksum = "8f3790c00a0150112de0f4cd161e3d7fc4b2d8a5542ffc35f099a2562aecb35c"
  dependencies = [
   "bitflags",
   "cc",
  
  [[package]]
  name = "nix"
--version = "0.25.0"
++version = "0.26.2"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "e322c04a9e3440c327fca7b6c8a63e6890a32fa2ad689db972425f07e0d22abb"
++checksum = "bfdda3d196821d6af13126e40375cdf7da646a96114af134d5f417a9a1dc8e1a"
  dependencies = [
-- "autocfg",
   "bitflags",
   "cfg-if",
   "libc",
++ "static_assertions",
  ]
  
  [[package]]
@@@ -1187,16 -1205,16 +1153,6 @@@ dependencies = 
   "winapi",
  ]
  
--[[package]]
--name = "num-integer"
--version = "0.1.45"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
--dependencies = [
-- "autocfg",
-- "num-traits",
--]
--
  [[package]]
  name = "num-traits"
  version = "0.2.15"
@@@ -1208,19 -1226,19 +1164,19 @@@ dependencies = 
  
  [[package]]
  name = "num_cpus"
--version = "1.14.0"
++version = "1.15.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "f6058e64324c71e02bc2b150e4f3bc8286db6c83092132ffa3f6b1eab0f9def5"
++checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b"
  dependencies = [
-- "hermit-abi",
++ "hermit-abi 0.2.6",
   "libc",
  ]
  
  [[package]]
  name = "once_cell"
--version = "1.16.0"
++version = "1.18.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860"
++checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
  
  [[package]]
  name = "opaque-debug"
@@@ -1245,13 -1263,13 +1201,13 @@@ dependencies = 
  
  [[package]]
  name = "openssl-macros"
--version = "0.1.0"
++version = "0.1.1"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "b501e44f11665960c7e7fcf062c7d96a14ade4aa98116c004b2e37b5be7d736c"
++checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
  dependencies = [
   "proc-macro2",
   "quote",
-- "syn",
++ "syn 2.0.18",
  ]
  
  [[package]]
@@@ -1289,7 -1307,7 +1245,7 @@@ checksum = "7d17b78036a60663b797adeaee4
  dependencies = [
   "instant",
   "lock_api",
-- "parking_lot_core 0.8.5",
++ "parking_lot_core 0.8.6",
  ]
  
  [[package]]
@@@ -1299,34 -1317,34 +1255,34 @@@ source = "registry+https://github.com/r
  checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f"
  dependencies = [
   "lock_api",
-- "parking_lot_core 0.9.4",
++ "parking_lot_core 0.9.8",
  ]
  
  [[package]]
  name = "parking_lot_core"
--version = "0.8.5"
++version = "0.8.6"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
++checksum = "60a2cfe6f0ad2bfc16aefa463b497d5c7a5ecd44a23efa72aa342d90177356dc"
  dependencies = [
   "cfg-if",
   "instant",
   "libc",
-- "redox_syscall",
++ "redox_syscall 0.2.16",
   "smallvec",
   "winapi",
  ]
  
  [[package]]
  name = "parking_lot_core"
--version = "0.9.4"
++version = "0.9.8"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "4dc9e0dc2adc1c69d09143aff38d3d30c5c3f0df0dad82e6d25547af174ebec0"
++checksum = "93f00c865fe7cabf650081affecd3871070f26767e7b2070a3ffae14c654b447"
  dependencies = [
   "cfg-if",
   "libc",
-- "redox_syscall",
++ "redox_syscall 0.3.5",
   "smallvec",
-- "windows-sys 0.42.0",
++ "windows-targets",
  ]
  
  [[package]]
@@@ -1390,7 -1408,7 +1346,7 @@@ dependencies = 
   "proc-macro-hack",
   "proc-macro2",
   "quote",
-- "syn",
++ "syn 1.0.109",
  ]
  
  [[package]]
@@@ -1425,9 -1443,9 +1381,9 @@@ checksum = "8b870d8c151b6f2fb93e84a1314
  
  [[package]]
  name = "pkg-config"
--version = "0.3.26"
++version = "0.3.27"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
++checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
  
  [[package]]
  name = "ppv-lite86"
@@@ -1443,9 -1461,9 +1399,9 @@@ checksum = "925383efa346730478fb4838dbe
  
  [[package]]
  name = "predicates"
--version = "2.1.2"
++version = "2.1.5"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "ab68289ded120dcbf9d571afcf70163233229052aec9b08ab09532f698d0e1e6"
++checksum = "59230a63c37f3e18569bdb90e4a89cbf5bf8b06fea0b84e65ea10cc4df47addd"
  dependencies = [
   "difflib",
   "itertools",
  
  [[package]]
  name = "predicates-core"
--version = "1.0.4"
++version = "1.0.6"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "a6e7125585d872860e9955ca571650b27a4979c5823084168c5ed5bbfb016b56"
++checksum = "b794032607612e7abeb4db69adb4e33590fa6cf1149e95fd7cb00e634b92f174"
  
  [[package]]
  name = "predicates-tree"
--version = "1.0.6"
++version = "1.0.9"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "ad3f7fa8d61e139cbc7c3edfebf3b6678883a53f5ffac65d1259329a93ee43a5"
++checksum = "368ba315fb8c5052ab692e68a0eefec6ec57b23a36959c14496f0b0df2c0cecf"
  dependencies = [
   "predicates-core",
   "termtree",
  
  [[package]]
  name = "proc-macro-hack"
--version = "0.5.19"
++version = "0.5.20+deprecated"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5"
++checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068"
  
  [[package]]
  name = "proc-macro2"
--version = "1.0.47"
++version = "1.0.60"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "5ea3d908b0e36316caf9e9e2c4625cdde190a7e6f440d794667ed17a1855e725"
++checksum = "dec2b086b7a862cf4de201096214fa870344cf922b2b30c167badb3af3195406"
  dependencies = [
   "unicode-ident",
  ]
  
  [[package]]
  name = "quote"
--version = "1.0.21"
++version = "1.0.28"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179"
++checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488"
  dependencies = [
   "proc-macro2",
  ]
@@@ -1541,6 -1565,6 +1503,15 @@@ dependencies = 
   "bitflags",
  ]
  
++[[package]]
++name = "redox_syscall"
++version = "0.3.5"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
++dependencies = [
++ "bitflags",
++]
++
  [[package]]
  name = "redox_users"
  version = "0.4.3"
@@@ -1548,7 -1572,7 +1519,7 @@@ source = "registry+https://github.com/r
  checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
  dependencies = [
   "getrandom",
-- "redox_syscall",
++ "redox_syscall 0.2.16",
   "thiserror",
  ]
  
@@@ -1564,15 -1588,15 +1535,6 @@@ version = "0.1.10
  source = "registry+https://github.com/rust-lang/crates.io-index"
  checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
  
--[[package]]
--name = "remove_dir_all"
--version = "0.5.3"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
--dependencies = [
-- "winapi",
--]
--
  [[package]]
  name = "ring"
  version = "0.16.20"
@@@ -1610,9 -1634,9 +1572,9 @@@ dependencies = 
  
  [[package]]
  name = "rug"
--version = "1.17.0"
++version = "1.19.2"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "203180f444c95eac53586ed04793ecf6454c5d28f9eca8eead815fc19e136c47"
++checksum = "555e8b44763d034526db899c88cd56ccc4486cd38b444c8aa0e79d4e70ae5a34"
  dependencies = [
   "az",
   "gmp-mpfr-sys",
  
  [[package]]
  name = "rustix"
--version = "0.36.1"
++version = "0.37.20"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "812a2ec2043c4d6bc6482f5be2ab8244613cac2493d128d36c0759e52a626ab3"
++checksum = "b96e891d04aa506a6d1f318d2771bcb1c7dfda84e126660ace067c9b474bb2c0"
  dependencies = [
   "bitflags",
   "errno",
   "io-lifetimes",
   "libc",
   "linux-raw-sys",
-- "windows-sys 0.42.0",
++ "windows-sys 0.48.0",
  ]
  
  [[package]]
  name = "rustversion"
--version = "1.0.9"
++version = "1.0.12"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "97477e48b4cf8603ad5f7aaf897467cf42ab4218a38ef76fb14c2d6773a6d6a8"
++checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06"
  
  [[package]]
  name = "rustyline"
@@@ -1653,7 -1677,7 +1615,7 @@@ dependencies = 
   "libc",
   "log",
   "memchr",
-- "nix 0.23.1",
++ "nix 0.23.2",
   "radix_trie",
   "scopeguard",
   "smallvec",
  
  [[package]]
  name = "ryu"
--version = "1.0.11"
++version = "1.0.13"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
++checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041"
  
  [[package]]
  name = "same-file"
@@@ -1680,12 -1704,12 +1642,11 @@@ dependencies = 
  
  [[package]]
  name = "schannel"
--version = "0.1.20"
++version = "0.1.21"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2"
++checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3"
  dependencies = [
-- "lazy_static",
-- "windows-sys 0.36.1",
++ "windows-sys 0.42.0",
  ]
  
  [[package]]
@@@ -1694,12 -1718,12 +1655,6 @@@ version = "1.1.0
  source = "registry+https://github.com/rust-lang/crates.io-index"
  checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
  
--[[package]]
--name = "scratch"
--version = "1.0.2"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898"
--
  [[package]]
  name = "scryer-prolog"
  version = "0.9.1"
@@@ -1749,7 -1775,7 +1706,7 @@@ dependencies = 
   "static_assertions",
   "strum",
   "strum_macros",
-- "syn",
++ "syn 1.0.109",
   "to-syn-value",
   "to-syn-value_derive",
   "tokio",
  
  [[package]]
  name = "security-framework"
--version = "2.7.0"
++version = "2.9.1"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c"
++checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8"
  dependencies = [
   "bitflags",
   "core-foundation",
  
  [[package]]
  name = "security-framework-sys"
--version = "2.6.1"
++version = "2.9.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "0160a13a177a45bfb43ce71c01580998474f556ad854dcbca936dd2841a5c556"
++checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7"
  dependencies = [
   "core-foundation-sys",
   "libc",
@@@ -1792,9 -1818,9 +1749,9 @@@ dependencies = 
  
  [[package]]
  name = "serde"
--version = "1.0.147"
++version = "1.0.164"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "d193d69bae983fc11a79df82342761dfbf28a99fc8d203dca4c3c1b590948965"
++checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"
  
  [[package]]
  name = "serial_test"
@@@ -1815,18 -1841,18 +1772,18 @@@ checksum = "b2acd6defeddb41eb60bb468f88
  dependencies = [
   "proc-macro2",
   "quote",
-- "syn",
++ "syn 1.0.109",
  ]
  
  [[package]]
  name = "sha2"
--version = "0.10.6"
++version = "0.10.7"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
++checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
  dependencies = [
   "cfg-if",
   "cpufeatures",
-- "digest 0.10.5",
++ "digest 0.10.7",
  ]
  
  [[package]]
@@@ -1844,9 -1870,9 +1801,9 @@@ dependencies = 
  
  [[package]]
  name = "signal-hook"
--version = "0.3.14"
++version = "0.3.15"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "a253b5e89e2698464fc26b545c9edceb338e18a89effeeecfea192c3025be29d"
++checksum = "732768f1176d21d09e076c23a93123d40bba92d50c4058da34d45c8de8e682b9"
  dependencies = [
   "libc",
   "signal-hook-registry",
@@@ -1865,9 -1891,9 +1822,9 @@@ dependencies = 
  
  [[package]]
  name = "signal-hook-registry"
--version = "1.4.0"
++version = "1.4.1"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
++checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
  dependencies = [
   "libc",
  ]
@@@ -1886,9 -1912,9 +1843,9 @@@ checksum = "7bd3e3206899af3f8b12af284fa
  
  [[package]]
  name = "slab"
--version = "0.4.7"
++version = "0.4.8"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef"
++checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d"
  dependencies = [
   "autocfg",
  ]
@@@ -1901,9 -1927,9 +1858,9 @@@ checksum = "a507befe795404456341dfab10c
  
  [[package]]
  name = "socket2"
--version = "0.4.7"
++version = "0.4.9"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd"
++checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662"
  dependencies = [
   "libc",
   "winapi",
@@@ -1981,7 -2007,7 +1938,7 @@@ dependencies = 
   "proc-macro2",
   "quote",
   "rustversion",
-- "syn",
++ "syn 1.0.109",
  ]
  
  [[package]]
@@@ -1992,33 -2018,39 +1949,50 @@@ checksum = "2d67a5a62ba6e01cb2192ff3093
  
  [[package]]
  name = "subtle"
--version = "2.4.1"
++version = "2.5.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
++
++[[package]]
++name = "syn"
++version = "1.0.109"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
++checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
++dependencies = [
++ "proc-macro2",
++ "quote",
++ "unicode-ident",
++]
  
  [[package]]
  name = "syn"
--version = "1.0.103"
++version = "2.0.18"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "a864042229133ada95abf3b54fdc62ef5ccabe9515b64717bcb9a1919e59445d"
++checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e"
  dependencies = [
   "proc-macro2",
   "quote",
   "unicode-ident",
  ]
  
+ [[package]]
+ name = "tap"
+ version = "1.0.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
  [[package]]
  name = "tempfile"
--version = "3.3.0"
++version = "3.6.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "5cdb1ef4eaeeaddc8fbd371e5017057064af0911902ef36b39801f67cc6d79e4"
++checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6"
  dependencies = [
++ "autocfg",
   "cfg-if",
   "fastrand",
-- "libc",
-- "redox_syscall",
-- "remove_dir_all",
-- "winapi",
++ "redox_syscall 0.3.5",
++ "rustix",
++ "windows-sys 0.48.0",
  ]
  
  [[package]]
@@@ -2032,46 -2064,46 +2006,37 @@@ dependencies = 
   "utf-8",
  ]
  
--[[package]]
--name = "termcolor"
--version = "1.1.3"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
--dependencies = [
-- "winapi-util",
--]
--
  [[package]]
  name = "termtree"
--version = "0.4.0"
++version = "0.4.1"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "95059e91184749cb66be6dc994f67f182b6d897cb3df74a5bf66b5e709295fd8"
++checksum = "3369f5ac52d5eb6ab48c6b4ffdc8efbcad6b89c765749064ba298f2c68a16a76"
  
  [[package]]
  name = "thiserror"
--version = "1.0.37"
++version = "1.0.40"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "10deb33631e3c9018b9baf9dcbbc4f737320d2b576bac10f6aefa048fa407e3e"
++checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac"
  dependencies = [
   "thiserror-impl",
  ]
  
  [[package]]
  name = "thiserror-impl"
--version = "1.0.37"
++version = "1.0.40"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "982d17546b47146b28f7c22e3d08465f6b8903d0ea13c1660d9d84a6e7adcdbb"
++checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f"
  dependencies = [
   "proc-macro2",
   "quote",
-- "syn",
++ "syn 2.0.18",
  ]
  
  [[package]]
  name = "time"
--version = "0.1.44"
++version = "0.1.45"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
++checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a"
  dependencies = [
   "libc",
   "wasi 0.10.0+wasi-snapshot-preview1",
@@@ -2084,7 -2116,7 +2049,7 @@@ version = "0.1.0
  source = "registry+https://github.com/rust-lang/crates.io-index"
  checksum = "45dcb7b4108a4793bdd74aa3714296c6eaf43663edf73fa8625d0d7621e68447"
  dependencies = [
-- "syn",
++ "syn 1.0.109",
   "to-syn-value_derive",
  ]
  
@@@ -2096,45 -2128,45 +2061,44 @@@ checksum = "cd4fdec6de01b568c1d3721c9d4
  dependencies = [
   "proc-macro2",
   "quote",
-- "syn",
++ "syn 1.0.109",
  ]
  
  [[package]]
  name = "tokio"
--version = "1.24.2"
++version = "1.28.2"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "597a12a59981d9e3c38d216785b0c37399f6e415e8d0712047620f189371b0bb"
++checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2"
  dependencies = [
   "autocfg",
   "bytes",
   "libc",
-- "memchr",
-- "mio 0.8.5",
++ "mio 0.8.8",
   "num_cpus",
   "parking_lot 0.12.1",
   "pin-project-lite",
   "signal-hook-registry",
   "socket2",
   "tokio-macros",
-- "windows-sys 0.42.0",
++ "windows-sys 0.48.0",
  ]
  
  [[package]]
  name = "tokio-macros"
--version = "1.8.0"
++version = "2.1.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484"
++checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e"
  dependencies = [
   "proc-macro2",
   "quote",
-- "syn",
++ "syn 2.0.18",
  ]
  
  [[package]]
  name = "tokio-native-tls"
--version = "0.3.0"
++version = "0.3.1"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
++checksum = "bbae76ab933c85776efabc971569dd6119c580d8f5d448769dec1764bf796ef2"
  dependencies = [
   "native-tls",
   "tokio",
  
  [[package]]
  name = "tokio-util"
--version = "0.7.4"
++version = "0.7.8"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740"
++checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d"
  dependencies = [
   "bytes",
   "futures-core",
@@@ -2173,36 -2205,36 +2137,36 @@@ dependencies = 
  
  [[package]]
  name = "tracing-core"
--version = "0.1.30"
++version = "0.1.31"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "24eb03ba0eab1fd845050058ce5e616558e8f8d8fca633e6b163fe25c797213a"
++checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a"
  dependencies = [
   "once_cell",
  ]
  
  [[package]]
  name = "try-lock"
--version = "0.2.3"
++version = "0.2.4"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
++checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
  
  [[package]]
  name = "typenum"
--version = "1.15.0"
++version = "1.16.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
++checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
  
  [[package]]
  name = "unicode-ident"
--version = "1.0.5"
++version = "1.0.9"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "6ceab39d59e4c9499d4e5a8ee0e2735b891bb7308ac83dfb4e80cad195c9f6f3"
++checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
  
  [[package]]
  name = "unicode-segmentation"
--version = "1.10.0"
++version = "1.10.1"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "0fdbf052a0783de01e944a6ce7a8cb939e295b1e7be835a1112c3b9a7f047a5a"
++checksum = "1dd624098567895118886609431a7c3b8f516e41d30e0643f03d94592a147e36"
  
  [[package]]
  name = "unicode-width"
@@@ -2224,9 -2256,9 +2188,9 @@@ checksum = "09cc8ee72d2a9becf2f2febe020
  
  [[package]]
  name = "utf8parse"
--version = "0.2.0"
++version = "0.2.1"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "936e4b492acfd135421d8dca4b1aa80a7bfc26e702ef3af710e0752684df5372"
++checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
  
  [[package]]
  name = "vcpkg"
@@@ -2251,22 -2283,22 +2215,20 @@@ dependencies = 
  
  [[package]]
  name = "walkdir"
--version = "2.3.2"
++version = "2.3.3"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56"
++checksum = "36df944cda56c7d8d8b7496af378e6b16de9284591917d307c9b4d313c44e698"
  dependencies = [
   "same-file",
-- "winapi",
   "winapi-util",
  ]
  
  [[package]]
  name = "want"
--version = "0.3.0"
++version = "0.3.1"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
++checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
  dependencies = [
-- "log",
   "try-lock",
  ]
  
@@@ -2284,9 -2316,9 +2246,9 @@@ checksum = "9c8d87e72b64a3b4db28d11ce29
  
  [[package]]
  name = "wasm-bindgen"
--version = "0.2.83"
++version = "0.2.87"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
++checksum = "7706a72ab36d8cb1f80ffbf0e071533974a60d0a308d01a5d0375bf60499a342"
  dependencies = [
   "cfg-if",
   "wasm-bindgen-macro",
  
  [[package]]
  name = "wasm-bindgen-backend"
--version = "0.2.83"
++version = "0.2.87"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
++checksum = "5ef2b6d3c510e9625e5fe6f509ab07d66a760f0885d858736483c32ed7809abd"
  dependencies = [
   "bumpalo",
   "log",
   "once_cell",
   "proc-macro2",
   "quote",
-- "syn",
++ "syn 2.0.18",
   "wasm-bindgen-shared",
  ]
  
  [[package]]
  name = "wasm-bindgen-macro"
--version = "0.2.83"
++version = "0.2.87"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
++checksum = "dee495e55982a3bd48105a7b947fd2a9b4a8ae3010041b9e0faab3f9cd028f1d"
  dependencies = [
   "quote",
   "wasm-bindgen-macro-support",
  
  [[package]]
  name = "wasm-bindgen-macro-support"
--version = "0.2.83"
++version = "0.2.87"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
++checksum = "54681b18a46765f095758388f2d0cf16eb8d4169b639ab575a8f5693af210c7b"
  dependencies = [
   "proc-macro2",
   "quote",
-- "syn",
++ "syn 2.0.18",
   "wasm-bindgen-backend",
   "wasm-bindgen-shared",
  ]
  
  [[package]]
  name = "wasm-bindgen-shared"
--version = "0.2.83"
++version = "0.2.87"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
++checksum = "ca6ad05a4870b2bf5fe995117d3728437bd27d7cd5f06f13c17443ef369775a1"
  
  [[package]]
  name = "web-sys"
--version = "0.3.60"
++version = "0.3.64"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f"
++checksum = "9b85cbef8c220a6abc02aefd892dfc0fc23afb1c6a426316ec33253a3877249b"
  dependencies = [
   "js-sys",
   "wasm-bindgen",
@@@ -2378,16 -2410,16 +2340,12 @@@ source = "registry+https://github.com/r
  checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
  
  [[package]]
--name = "windows-sys"
--version = "0.36.1"
++name = "windows"
++version = "0.48.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2"
++checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f"
  dependencies = [
-- "windows_aarch64_msvc 0.36.1",
-- "windows_i686_gnu 0.36.1",
-- "windows_i686_msvc 0.36.1",
-- "windows_x86_64_gnu 0.36.1",
-- "windows_x86_64_msvc 0.36.1",
++ "windows-targets",
  ]
  
  [[package]]
@@@ -2396,86 -2428,95 +2354,131 @@@ version = "0.42.0
  source = "registry+https://github.com/rust-lang/crates.io-index"
  checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7"
  dependencies = [
-- "windows_aarch64_gnullvm",
-  "windows_aarch64_msvc 0.42.0",
-  "windows_i686_gnu 0.42.0",
-  "windows_i686_msvc 0.42.0",
-  "windows_x86_64_gnu 0.42.0",
 - "windows_aarch64_msvc 0.42.1",
 - "windows_i686_gnu 0.42.1",
 - "windows_i686_msvc 0.42.1",
 - "windows_x86_64_gnu 0.42.1",
-- "windows_x86_64_gnullvm",
-  "windows_x86_64_msvc 0.42.0",
 - "windows_x86_64_msvc 0.42.1",
++ "windows_aarch64_gnullvm 0.42.2",
++ "windows_aarch64_msvc 0.42.2",
++ "windows_i686_gnu 0.42.2",
++ "windows_i686_msvc 0.42.2",
++ "windows_x86_64_gnu 0.42.2",
++ "windows_x86_64_gnullvm 0.42.2",
++ "windows_x86_64_msvc 0.42.2",
++]
++
++[[package]]
++name = "windows-sys"
++version = "0.48.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
++dependencies = [
++ "windows-targets",
++]
++
++[[package]]
++name = "windows-targets"
++version = "0.48.0"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5"
++dependencies = [
++ "windows_aarch64_gnullvm 0.48.0",
++ "windows_aarch64_msvc 0.48.0",
++ "windows_i686_gnu 0.48.0",
++ "windows_i686_msvc 0.48.0",
++ "windows_x86_64_gnu 0.48.0",
++ "windows_x86_64_gnullvm 0.48.0",
++ "windows_x86_64_msvc 0.48.0",
  ]
  
  [[package]]
  name = "windows_aarch64_gnullvm"
- version = "0.42.0"
 -version = "0.42.1"
++version = "0.42.2"
 +source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "41d2aa71f6f0cbe00ae5167d90ef3cfe66527d6f613ca78ac8024c3ccab9a19e"
++checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8"
++
++[[package]]
++name = "windows_aarch64_gnullvm"
++version = "0.48.0"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
 -checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608"
++checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
  
  [[package]]
  name = "windows_aarch64_msvc"
--version = "0.36.1"
++version = "0.42.2"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47"
++checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43"
  
  [[package]]
  name = "windows_aarch64_msvc"
- version = "0.42.0"
 -version = "0.42.1"
++version = "0.48.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "dd0f252f5a35cac83d6311b2e795981f5ee6e67eb1f9a7f64eb4500fbc4dcdb4"
 -checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7"
++checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
  
  [[package]]
  name = "windows_i686_gnu"
--version = "0.36.1"
++version = "0.42.2"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6"
++checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f"
  
  [[package]]
  name = "windows_i686_gnu"
- version = "0.42.0"
 -version = "0.42.1"
++version = "0.48.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "fbeae19f6716841636c28d695375df17562ca208b2b7d0dc47635a50ae6c5de7"
 -checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640"
++checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
  
  [[package]]
  name = "windows_i686_msvc"
--version = "0.36.1"
++version = "0.42.2"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024"
++checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060"
  
  [[package]]
  name = "windows_i686_msvc"
- version = "0.42.0"
 -version = "0.42.1"
++version = "0.48.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "84c12f65daa39dd2babe6e442988fc329d6243fdce47d7d2d155b8d874862246"
 -checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605"
++checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
  
  [[package]]
  name = "windows_x86_64_gnu"
--version = "0.36.1"
++version = "0.42.2"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1"
++checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36"
  
  [[package]]
  name = "windows_x86_64_gnu"
- version = "0.42.0"
 -version = "0.42.1"
++version = "0.48.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "bf7b1b21b5362cbc318f686150e5bcea75ecedc74dd157d874d754a2ca44b0ed"
 -checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45"
++checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
  
  [[package]]
  name = "windows_x86_64_gnullvm"
--version = "0.42.0"
++version = "0.42.2"
++source = "registry+https://github.com/rust-lang/crates.io-index"
++checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3"
++
++[[package]]
++name = "windows_x86_64_gnullvm"
++version = "0.48.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "09d525d2ba30eeb3297665bd434a54297e4170c7f1a44cad4ef58095b4cd2028"
++checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
  
  [[package]]
  name = "windows_x86_64_msvc"
--version = "0.36.1"
++version = "0.42.2"
  source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680"
++checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0"
  
  [[package]]
  name = "windows_x86_64_msvc"
- version = "0.42.0"
 -version = "0.42.1"
++version = "0.48.0"
  source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "f40009d85759725a34da6d89a94e63d7bdc50a862acf0dbc7c8e488f1edcb6f5"
 -checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd"
++checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+ [[package]]
+ name = "wyz"
+ version = "0.5.1"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+ checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
+ dependencies = [
+  "tap",
+ ]
  
  [[package]]
  name = "xml5ever"
diff --cc src/fixtures.rs
index 1f812e2cffeac491854130e3b8a7b703ece87a46,1f812e2cffeac491854130e3b8a7b703ece87a46..0000000000000000000000000000000000000000
deleted file mode 100644,100644
+++ /dev/null
@@@ -1,436 -1,436 +1,0 @@@
--use crate::parser::ast::*;
--
--use crate::forms::*;
--use crate::instructions::*;
--use crate::iterators::*;
--
--use indexmap::{IndexMap, IndexSet};
--
--use std::cell::Cell;
--use std::collections::BTreeSet;
--use std::mem::swap;
--use std::rc::Rc;
--use std::vec::Vec;
--
--// labeled with chunk numbers.
--#[derive(Debug)]
--pub(crate) enum VarStatus {
--    Perm(usize),
--    Temp(usize, TempVarData), // Perm(chunk_num) | Temp(chunk_num, _)
--}
--
--pub(crate) type OccurrenceSet = BTreeSet<(GenContext, usize)>;
--
--// Perm: 0 initially, a stack register once processed.
--// Temp: labeled with chunk_num and temp offset (unassigned if 0).
--#[derive(Debug)]
--pub(crate) enum VarData {
--    Perm(usize),
--    Temp(usize, usize, TempVarData),
--}
--
--impl VarData {
--    pub(crate) fn as_reg_type(&self) -> RegType {
--        match self {
--            &VarData::Temp(_, r, _) => RegType::Temp(r),
--            &VarData::Perm(r) => RegType::Perm(r),
--        }
--    }
--}
--
--#[derive(Debug)]
--pub(crate) struct TempVarData {
--    pub(crate) last_term_arity: usize,
--    pub(crate) use_set: OccurrenceSet,
--    pub(crate) no_use_set: BTreeSet<usize>,
--    pub(crate) conflict_set: BTreeSet<usize>,
--}
--
--impl TempVarData {
--    pub(crate) fn new(last_term_arity: usize) -> Self {
--        TempVarData {
--            last_term_arity: last_term_arity,
--            use_set: BTreeSet::new(),
--            no_use_set: BTreeSet::new(),
--            conflict_set: BTreeSet::new(),
--        }
--    }
--
--    pub(crate) fn uses_reg(&self, reg: usize) -> bool {
--        for &(_, nreg) in self.use_set.iter() {
--            if reg == nreg {
--                return true;
--            }
--        }
--
--        return false;
--    }
--
--    pub(crate) fn populate_conflict_set(&mut self) {
--        if self.last_term_arity > 0 {
--            let arity = self.last_term_arity;
--            let mut conflict_set: BTreeSet<usize> = (1..arity).collect();
--
--            for &(_, reg) in self.use_set.iter() {
--                conflict_set.remove(&reg);
--            }
--
--            self.conflict_set = conflict_set;
--        }
--    }
--}
--
--type VariableFixture<'a> = (VarStatus, Vec<&'a Cell<VarReg>>);
--
--#[derive(Debug)]
--pub(crate) struct VariableFixtures<'a> {
--    perm_vars: IndexMap<Rc<String>, VariableFixture<'a>>,
--    last_chunk_temp_vars: IndexSet<Rc<String>>,
--}
--
--impl<'a> VariableFixtures<'a> {
--    pub(crate) fn new() -> Self {
--        VariableFixtures {
--            perm_vars: IndexMap::new(),
--            last_chunk_temp_vars: IndexSet::new(),
--        }
--    }
--
--    pub(crate) fn insert(&mut self, var: Rc<String>, vs: VariableFixture<'a>) {
--        self.perm_vars.insert(var, vs);
--    }
--
--    pub(crate) fn insert_last_chunk_temp_var(&mut self, var: Rc<String>) {
--        self.last_chunk_temp_vars.insert(var);
--    }
--
--    // computes no_use and conflict sets for all temp vars.
--    pub(crate) fn populate_restricting_sets(&mut self) {
--        // three stages:
--        // 1. move the use sets of each variable to a local IndexMap, use_set
--        // (iterate mutably, swap mutable refs).
--        // 2. drain use_set. For each use set of U, add into the
--        // no-use sets of appropriate variables T =/= U.
--        // 3. Move the use sets back to their original locations in the fixture.
--        // Compute the conflict set of u.
--
--        // 1.
--        let mut use_sets: IndexMap<Rc<String>, OccurrenceSet> = IndexMap::new();
--
--        for (var, &mut (ref mut var_status, _)) in self.iter_mut() {
--            if let &mut VarStatus::Temp(_, ref mut var_data) = var_status {
--                let mut use_set = OccurrenceSet::new();
--
--                swap(&mut var_data.use_set, &mut use_set);
--                use_sets.insert((*var).clone(), use_set);
--            }
--        }
--
--        for (u, use_set) in use_sets.drain(..) {
--            // 2.
--            for &(term_loc, reg) in use_set.iter() {
--                if let GenContext::Last(cn_u) = term_loc {
--                    for (ref t, &mut (ref mut var_status, _)) in self.iter_mut() {
--                        if let &mut VarStatus::Temp(cn_t, ref mut t_data) = var_status {
--                            if cn_u == cn_t && *u != ***t {
--                                if !t_data.uses_reg(reg) {
--                                    t_data.no_use_set.insert(reg);
--                                }
--                            }
--                        }
--                    }
--                }
--            }
--
--            // 3.
--            match self.get_mut(u).unwrap() {
--                &mut (VarStatus::Temp(_, ref mut u_data), _) => {
--                    u_data.use_set = use_set;
--                    u_data.populate_conflict_set();
--                }
--                _ => {}
--            };
--        }
--    }
--
--    fn get_mut(&mut self, u: Rc<String>) -> Option<&mut VariableFixture<'a>> {
--        self.perm_vars.get_mut(&u)
--    }
--
--    fn iter_mut(&mut self) -> indexmap::map::IterMut<Rc<String>, VariableFixture<'a>> {
--        self.perm_vars.iter_mut()
--    }
--
--    fn record_temp_info(&mut self, tvd: &mut TempVarData, arg_c: usize, term_loc: GenContext) {
--        match term_loc {
--            GenContext::Head | GenContext::Last(_) => {
--                tvd.use_set.insert((term_loc, arg_c));
--            }
--            _ => {}
--        };
--    }
--
--    pub(crate) fn vars_above_threshold(&self, index: usize) -> usize {
--        let mut var_count = 0;
--
--        for &(ref var_status, _) in self.values() {
--            if let &VarStatus::Perm(i) = var_status {
--                if i > index {
--                    var_count += 1;
--                }
--            }
--        }
--
--        var_count
--    }
--
--    pub(crate) fn mark_vars_in_chunk<I>(&mut self, iter: I, lt_arity: usize, term_loc: GenContext)
--    where
--        I: Iterator<Item = TermRef<'a>>,
--    {
--        let chunk_num = term_loc.chunk_num();
--        let mut arg_c = 1;
--
--        for term_ref in iter {
--            if let &TermRef::Var(lvl, cell, ref var) = &term_ref {
--                let mut status = self.perm_vars.swap_remove(var).unwrap_or((
--                    VarStatus::Temp(chunk_num, TempVarData::new(lt_arity)),
--                    Vec::new(),
--                ));
--
--                status.1.push(cell);
--
--                match status.0 {
--                    VarStatus::Temp(cn, ref mut tvd) if cn == chunk_num => {
--                        if let Level::Shallow = lvl {
--                            self.record_temp_info(tvd, arg_c, term_loc);
--                        }
--                    }
--                    _ => status.0 = VarStatus::Perm(chunk_num),
--                };
--
--                self.perm_vars.insert(var.clone(), status);
--            }
--
--            if let Level::Shallow = term_ref.level() {
--                arg_c += 1;
--            }
--        }
--    }
--
--    pub(crate) fn into_iter(self) -> indexmap::map::IntoIter<Rc<String>, VariableFixture<'a>> {
--        self.perm_vars.into_iter()
--    }
--
--    fn values(&self) -> indexmap::map::Values<Rc<String>, VariableFixture<'a>> {
--        self.perm_vars.values()
--    }
--
--    pub(crate) fn size(&self) -> usize {
--        self.perm_vars.len()
--    }
--
--    pub(crate) fn set_perm_vals(&self, has_deep_cuts: bool) {
--        let mut values_vec: Vec<_> = self
--            .values()
--            .filter_map(|ref v| match &v.0 {
--                &VarStatus::Perm(i) => Some((i, &v.1)),
--                _ => None,
--            })
--            .collect();
--
--        values_vec.sort_by_key(|ref v| v.0);
--
--        let offset = has_deep_cuts as usize;
--
--        for (i, (_, cells)) in values_vec.into_iter().rev().enumerate() {
--            for cell in cells {
--                cell.set(VarReg::Norm(RegType::Perm(i + 1 + offset)));
--            }
--        }
--    }
--}
--
--#[derive(Debug)]
--pub(crate) struct UnsafeVarMarker {
--    pub(crate) unsafe_perm_vars: IndexMap<usize, usize>,
--    pub(crate) unsafe_temp_vars: IndexSet<usize>,
--    pub(crate) safe_perm_vars: IndexSet<usize>,
--    pub(crate) safe_temp_vars: IndexSet<usize>,
--    pub(crate) temp_vars_to_perm_vars: IndexMap<usize, usize>,
--    pub(crate) perm_vars_to_temp_vars: IndexMap<usize, usize>,
--}
--
--impl UnsafeVarMarker {
--    pub(crate) fn new() -> Self {
--        UnsafeVarMarker {
--            unsafe_perm_vars: IndexMap::new(),
--            unsafe_temp_vars: IndexSet::new(),
--            safe_perm_vars: IndexSet::new(),
--            safe_temp_vars: IndexSet::new(),
--            temp_vars_to_perm_vars: IndexMap::new(),
--            perm_vars_to_temp_vars: IndexMap::new(),
--        }
--    }
--
--    pub(crate) fn from_fact_vars(safe_vars: IndexSet<RegType>) -> Self {
--        let mut unsafe_var_marker = Self::new();
--
--        for r in safe_vars {
--            unsafe_var_marker.mark_var_as_safe(r);
--        }
--
--        unsafe_var_marker
--    }
--
--    fn mark_var_as_safe(&mut self, r: RegType) {
--        match r {
--            RegType::Temp(t) => {
--                self.safe_temp_vars.insert(t);
--            }
--            RegType::Perm(p) => {
--                self.safe_perm_vars.insert(p);
--            }
--        };
--    }
--
--    fn mark_var_as_unsafe(&mut self, r: RegType, phase: usize) {
--        match r {
--            RegType::Temp(t) => {
--                self.unsafe_temp_vars.insert(t);
--            }
--            RegType::Perm(p) => {
--                self.unsafe_perm_vars.insert(p, phase);
--            }
--        }
--    }
--
--    // returns true if the instruction at *query_instr cannot be
--    // changed by mark_unsafe_vars.
--    fn mark_safe_vars(&mut self, query_instr: &Instruction) -> bool {
--        match query_instr {
--            &Instruction::PutVariable(r @ RegType::Temp(_), _) |
--            &Instruction::SetVariable(r) => {
--                self.mark_var_as_safe(r);
--                true
--            }
--            &Instruction::PutVariable(RegType::Perm(p), t) => {
--                self.temp_vars_to_perm_vars.insert(t, p);
--                true
--            }
--            &Instruction::CallIs(RegType::Temp(t), ..) => {
--                if let Some(p) = self.temp_vars_to_perm_vars.get(&t) {
--                    self.mark_var_as_safe(RegType::Perm(*p));
--                }
--
--                true
--            }
--            _ => false,
--        }
--    }
--
--    fn mark_phase(&mut self, query_instr: &Instruction, phase: usize) {
--        match query_instr {
--            &Instruction::PutValue(r @ RegType::Perm(_), _) |
--            &Instruction::SetValue(r) => {
--                self.mark_var_as_unsafe(r, phase);
--            }
--            _ => {}
--        }
--    }
--
--    fn mark_unsafe_perm_vars(&mut self, query_instr: &mut Instruction, phase: usize) {
--        match query_instr {
--            &mut Instruction::PutValue(RegType::Perm(p), arg)
--                if !self.safe_perm_vars.contains(&p) => {
--                    if let Some(ph) = self.unsafe_perm_vars.swap_remove(&p) {
--                        if ph == phase {
--                            *query_instr = Instruction::PutUnsafeValue(p, arg);
--                            self.perm_vars_to_temp_vars.insert(p, arg);
--                        } else {
--                            self.unsafe_perm_vars.insert(p, ph);
--                        }
--                    }
--                }
--            &mut Instruction::SetValue(r @ RegType::Perm(p)) =>
--                if let Some(t) = self.perm_vars_to_temp_vars.get(&p) {
--                    *query_instr = Instruction::SetValue(RegType::Temp(*t));
--                } else {
--                    *query_instr = Instruction::SetLocalValue(r);
--                }
--            _ => {}
--        }
--    }
--
--    fn mark_unsafe_temp_vars(&mut self, query_instr: &mut Instruction) {
--        match query_instr {
--            &mut Instruction::SetValue(r @ RegType::Temp(t))
--                if !self.safe_temp_vars.contains(&t) => {
--                    *query_instr = Instruction::SetLocalValue(r);
--
--                    self.safe_temp_vars.insert(t);
--                    self.unsafe_temp_vars.remove(&t);
--                }
--            _ => {
--            }
--        }
--    }
--
--    fn clear_temp_vars(&mut self) {
--        self.safe_temp_vars.clear();
--        self.unsafe_temp_vars.clear();
--        self.temp_vars_to_perm_vars.clear();
--    }
--
--    pub(crate) fn mark_unsafe_instrs(&mut self, code: &mut Code) {
--        if code.is_empty() {
--            return;
--        }
--
--        let mut code_index = 0;
--
--        for phase in 0.. {
--            while code[code_index].is_query_instr() {
--                let query_instr = &mut code[code_index];
--
--                if !self.mark_safe_vars(query_instr) {
--                    self.mark_phase(query_instr, phase);
--                    self.mark_unsafe_temp_vars(query_instr);
--                }
--
--                code_index += 1;
--            }
--
--            while code_index < code.len() && !code[code_index].is_query_instr() {
--                self.mark_safe_vars(&code[code_index]);
--                code_index += 1;
--            }
--
--            self.clear_temp_vars();
--
--            if code_index >= code.len() {
--                break;
--            }
--        }
--
--        code_index = 0;
--
--        for phase in 0.. {
--            while code[code_index].is_query_instr() {
--                let query_instr = &mut code[code_index];
--                self.mark_unsafe_perm_vars(query_instr, phase);
--                code_index += 1;
--            }
--
--            // ensure phase->instruction assignments match those of
--            // the previous for loop.
--            while code_index < code.len() && !code[code_index].is_query_instr() {
--                code_index += 1;
--            }
--
--            if code_index >= code.len() {
--                break;
--            }
--        }
--    }
--}
index 0000000000000000000000000000000000000000,a701dba32b929258587f4a7051d5b05f435f5250..3ef2bbf810483221894d62d190a3febfb714da3d
mode 000000,100644..100644
--- /dev/null
@@@ -1,0 -1,841 +1,829 @@@
 -/*
 -================================================================================
 -
 -This is a disjunction compilation experiment attempting to adapt the
 -paper "Compiling Large Disjunctions" to Scryer Prolog.
 -
 -================================================================================
 - */
 -
+ use crate::atom_table::*;
+ use crate::forms::*;
+ use crate::instructions::*;
+ use crate::iterators::*;
+ use crate::machine::loader::*;
+ use crate::machine::machine_errors::CompilationError;
+ use crate::machine::preprocessor::*;
+ use crate::parser::ast::*;
+ use crate::parser::rug::Rational;
+ use crate::variable_records::*;
+ use indexmap::{IndexMap, IndexSet};
+ use std::cell::Cell;
+ use std::cmp::Ordering;
+ use std::collections::VecDeque;
+ use std::hash::{Hash, Hasher};
+ use std::ops::{Deref, DerefMut};
+ #[derive(Debug, Clone)] //, PartialOrd, PartialEq, Eq, Hash)]
+ pub struct BranchNumber {
+     branch_num: Rational,
+     delta: Rational,
+ }
+ impl Default for BranchNumber {
+     fn default() -> Self {
+         Self {
+             branch_num: Rational::from(1usize << 63),
+             delta: Rational::from(1),
+         }
+     }
+ }
+ impl PartialEq<BranchNumber> for BranchNumber {
+     #[inline]
+     fn eq(&self, rhs: &BranchNumber) -> bool {
+         self.branch_num == rhs.branch_num
+     }
+ }
+ impl Eq for BranchNumber {}
+ impl Hash for BranchNumber {
+     #[inline(always)]
+     fn hash<H: Hasher>(&self, hasher: &mut H) {
+         self.branch_num.hash(hasher)
+     }
+ }
+ impl PartialOrd<BranchNumber> for BranchNumber {
+     #[inline]
+     fn partial_cmp(&self, rhs: &BranchNumber) -> Option<Ordering> {
+         self.branch_num.partial_cmp(&rhs.branch_num)
+     }
+ }
+ impl BranchNumber {
+     fn split(&self) -> BranchNumber {
+         BranchNumber {
+             branch_num: self.branch_num.clone() + &self.delta / Rational::from(2),
+             delta: &self.delta / Rational::from(4),
+         }
+     }
+     fn incr_by_delta(&self) -> BranchNumber {
+         BranchNumber {
+             branch_num: self.branch_num.clone() + &self.delta,
+             delta: self.delta.clone(),
+         }
+     }
+     fn halve_delta(&self) -> BranchNumber {
+         BranchNumber {
+             branch_num: self.branch_num.clone(),
+             delta : &self.delta / Rational::from(2),
+         }
+     }
+ }
+ #[derive(Debug, Clone, PartialEq, Eq, Hash)]
+ pub struct VarInfo {
+     var_ptr: VarPtr,
+     chunk_type: ChunkType,
+     classify_info: ClassifyInfo,
+     lvl: Level,
+ }
+ #[derive(Debug, Clone, PartialEq, Eq, Hash)]
+ pub struct ChunkInfo {
+     chunk_num: usize,
+     term_loc: GenContext,
+     // pointer to incidence, term occurrence arity.
+     vars: Vec<VarInfo>,
+ }
+ #[derive(Debug)]
+ pub struct BranchArm {
+     pub arm_terms: Vec<QueryTerm>,
+ }
+ #[derive(Debug, Clone, PartialEq, Eq, Hash)]
+ pub struct BranchInfo {
+     branch_num: BranchNumber,
+     chunks: Vec<ChunkInfo>,
+ }
+ impl BranchInfo {
+     fn new(branch_num: BranchNumber) -> Self {
+         Self { branch_num, chunks: vec![] }
+     }
+ }
+ type BranchMapInt = IndexMap<VarPtr, Vec<BranchInfo>>;
+ #[derive(Debug, Clone)]
+ pub struct BranchMap(BranchMapInt);
+ impl Deref for BranchMap {
+     type Target = BranchMapInt;
+     #[inline(always)]
+     fn deref(&self) -> &BranchMapInt {
+         &self.0
+     }
+ }
+ impl DerefMut for BranchMap {
+     #[inline(always)]
+     fn deref_mut(&mut self) -> &mut BranchMapInt {
+         &mut self.0
+     }
+ }
+ type RootSet = IndexSet<BranchNumber>;
+ #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+ pub struct ClassifyInfo {
+     arg_c: usize,
+     arity: usize,
+ }
+ enum TraversalState {
+     // construct a QueryTerm::Branch with number of disjuncts, reset
+     // the chunk type to that of the chunk preceding the disjunct and the chunk_num.
+     BuildDisjunct(usize),
+     // add the last disjunct to a QueryTerm::Branch, continuing from
+     // where it leaves off.
+     BuildFinalDisjunct(usize),
+     Fail,
+     GetCutPoint{ var_num: usize, prev_b: bool },
+     Cut { var_num: usize, is_global: bool },
+     ResetCallPolicy(CallPolicy),
+     Term(Term),
+     RemoveBranchNum, // pop the current_branch_num and from the root set.
+     AddBranchNum(BranchNumber), // set current_branch_num, add it to the root set
+     RepBranchNum(BranchNumber), // replace current_branch_num and the latest in the root set
+     // SetChunkType(ChunkType), // consider remaining terms as belonging to a last chunk
+ }
+ #[derive(Debug)]
+ pub struct VariableClassifier {
+     call_policy: CallPolicy,
+     current_branch_num: BranchNumber,
+     current_chunk_num: usize,
+     current_chunk_type: ChunkType,
+     branch_map: BranchMap,
+     var_num: usize,
+     root_set: RootSet,
+     global_cut_var_num: Option<usize>,
+ }
+ #[derive(Debug, Default)]
+ pub struct VarData {
+     pub records: VariableRecords,
+     pub global_cut_var_num: Option<usize>,
+     pub allocates: bool,
+ }
+ impl VarData {
+     fn emit_initial_get_level(&mut self, build_stack: &mut ChunkedTermVec) {
+         let global_cut_var_num =
+             if let &Some(global_cut_var_num) = &self.global_cut_var_num {
+                 match &self.records[global_cut_var_num].allocation {
+                     VarAlloc::Perm(..) => Some(global_cut_var_num),
+                     VarAlloc::Temp { term_loc, .. } if term_loc.chunk_num() > 0 => {
+                         Some(global_cut_var_num)
+                     }
+                     _ => None
+                 }
+             } else {
+                 None
+             };
+         if let Some(global_cut_var_num) = global_cut_var_num {
+             let term = QueryTerm::GetLevel(global_cut_var_num);
+             self.records[global_cut_var_num].allocation = VarAlloc::Perm(0, PermVarAllocation::Pending);
+             match build_stack.front_mut() {
+                 Some(ChunkedTerms::Branch(_)) => {
+                     build_stack.push_front(ChunkedTerms::Chunk(VecDeque::from(vec![term])));
+                 }
+                 Some(ChunkedTerms::Chunk(chunk)) => {
+                     chunk.push_front(term);
+                 }
+                 None => {
+                     unreachable!()
+                 }
+             }
+         }
+     }
+ }
+ pub type ClassifyFactResult = (Term, VarData);
+ pub type ClassifyRuleResult = (Term, ChunkedTermVec, VarData);
+ fn merge_branch_seq<Iter: Iterator<Item = BranchInfo>>(branches: Iter) -> BranchInfo {
+     let mut branch_info = BranchInfo::new(BranchNumber::default());
+     for mut branch in branches {
+         branch_info.branch_num = branch.branch_num;
+         /*
+         if let Some(last_chunk) = branch_info.chunks.last_mut() {
+             if let Some(first_moved_chunk) = branch.chunks.first_mut() {
+                 if last_chunk.chunk_num == first_moved_chunk.chunk_num {
+                     last_chunk.vars.extend(first_moved_chunk.vars.drain(..));
+                     branch_info.chunks.extend(branch.chunks.drain(1 ..));
+                     continue;
+                 }
+             }
+         }
+         */
+         branch_info.chunks.extend(branch.chunks.drain(..));
+     }
+     branch_info.branch_num.delta *= 2;
+     branch_info.branch_num.branch_num -= &branch_info.branch_num.delta;
+     branch_info
+ }
+ fn flatten_into_disjunct(build_stack: &mut ChunkedTermVec, preceding_len: usize) {
+     let branch_vec = build_stack.drain(preceding_len + 1 ..).collect();
+     if let ChunkedTerms::Branch(ref mut disjuncts) = &mut build_stack[preceding_len] {
+         disjuncts.push(branch_vec);
+     } else {
+         unreachable!();
+     }
+ }
+ impl VariableClassifier {
+     pub fn new(call_policy: CallPolicy) -> Self {
+         Self {
+             call_policy,
+             current_branch_num: BranchNumber::default(),
+             current_chunk_num: 0,
+             current_chunk_type: ChunkType::Head,
+             branch_map: BranchMap(BranchMapInt::new()),
+             root_set: RootSet::new(),
+             var_num: 0,
+             global_cut_var_num: None,
+         }
+     }
+     pub fn classify_fact(mut self, term: Term) -> Result<ClassifyFactResult, CompilationError> {
+         self.classify_head_variables(&term)?;
+         Ok((term, self.branch_map.separate_and_classify_variables(
+             self.var_num,
+             self.global_cut_var_num,
+             self.current_chunk_num,
+         )))
+     }
+     pub fn classify_rule<'a, LS: LoadState<'a>>(
+         mut self,
+         loader: &mut Loader<'a, LS>,
+         head: Term,
+         body: Term,
+     ) -> Result<ClassifyRuleResult, CompilationError> {
+         self.classify_head_variables(&head)?;
+         self.root_set.insert(self.current_branch_num.clone());
+         let mut query_terms = self.classify_body_variables(loader, body)?;
+         self.merge_branches();
+         let mut var_data = self.branch_map.separate_and_classify_variables(
+             self.var_num,
+             self.global_cut_var_num,
+             self.current_chunk_num,
+         );
+         var_data.emit_initial_get_level(&mut query_terms);
+         Ok((head, query_terms, var_data))
+     }
+     fn merge_branches(&mut self) {
+         for branches in self.branch_map.values_mut() {
+             let mut old_branches = std::mem::replace(branches, vec![]);
+             while let Some(last_branch_num) = old_branches.last().map(|bi| &bi.branch_num) {
+                 let mut old_branches_len = old_branches.len();
+                 for (rev_idx, bi) in old_branches.iter().rev().enumerate() {
+                     if &bi.branch_num > last_branch_num {
+                         old_branches_len = old_branches.len() - rev_idx;
+                     }
+                 }
+                 let iter = old_branches.drain(old_branches_len - 1 ..);
+                 branches.push(merge_branch_seq(iter));
+             }
+             branches.reverse();
+         }
+     }
+     fn try_set_chunk_at_inlined_boundary(&mut self) -> bool {
+         if self.current_chunk_type.is_last() {
+             self.current_chunk_type = ChunkType::Mid;
+             self.current_chunk_num += 1;
+             true
+         } else {
+             false
+         }
+     }
+     fn try_set_chunk_at_call_boundary(&mut self) -> bool {
+         if self.current_chunk_type.is_last() {
+             self.current_chunk_num += 1;
+             true
+         } else {
+             self.current_chunk_type = ChunkType::Last;
+             false
+         }
+     }
+     fn probe_body_term(&mut self, arg_c: usize, arity: usize, term: &Term) {
+         let classify_info = ClassifyInfo { arg_c, arity };
+         // second arg is true to iterate the root, which may be a variable
+         for term_ref in breadth_first_iter(term, RootIterationPolicy::Iterated) {
+             if let TermRef::Var(lvl, _, var_ptr) = term_ref {
+                 // root terms are shallow here (since we're iterating a
+                 // body term) so take the child level.
+                 let lvl = lvl.child_level();
+                 self.probe_body_var(VarInfo {
+                     var_ptr,
+                     lvl,
+                     classify_info,
+                     chunk_type: self.current_chunk_type,
+                 });
+             }
+         }
+     }
+     fn probe_body_var(&mut self, var_info: VarInfo) {
+         let term_loc = self.current_chunk_type.to_gen_context(self.current_chunk_num);
+         let branch_info_v = self.branch_map.entry(var_info.var_ptr.clone())
+             .or_insert_with(|| vec![]);
+         let needs_new_branch = if let Some(last_bi) = branch_info_v.last() {
+             !self.root_set.contains(&last_bi.branch_num)
+         } else {
+             true
+         };
+         if needs_new_branch {
+             branch_info_v.push(BranchInfo::new(self.current_branch_num.clone()));
+         }
+         let branch_info = branch_info_v.last_mut().unwrap();
+         let needs_new_chunk = if let Some(last_ci) = branch_info.chunks.last() {
+             last_ci.chunk_num != self.current_chunk_num
+         } else {
+             true
+         };
+         if needs_new_chunk {
+             branch_info.chunks.push(ChunkInfo {
+                 chunk_num: self.current_chunk_num,
+                 term_loc,
+                 vars: vec![],
+             });
+         }
+         let chunk_info = branch_info.chunks.last_mut().unwrap();
+         chunk_info.vars.push(var_info);
+     }
+     fn probe_in_situ_var(&mut self, var_num: usize) {
+         let classify_info = ClassifyInfo { arg_c: 1, arity: 1 };
+         let var_info = VarInfo {
+             var_ptr: VarPtr::from(Var::InSitu(var_num)),
+             classify_info,
+             chunk_type: self.current_chunk_type,
+             lvl: Level::Shallow,
+         };
+         self.probe_body_var(var_info);
+     }
+     fn classify_head_variables(&mut self, term: &Term) -> Result<(), CompilationError> {
+         match term {
+             Term::Clause(..) | Term::Literal(_, Literal::Atom(_)) => {
+             }
+             _ => return Err(CompilationError::InvalidRuleHead),
+         }
+         let mut classify_info = ClassifyInfo { arg_c: 1, arity: term.arity() };
+         match term {
+             Term::Clause(_, _, terms) => {
+                 for term in terms.into_iter() {
+                     for term_ref in breadth_first_iter(term, RootIterationPolicy::Iterated) {
+                         if let TermRef::Var(lvl, _, var_ptr) = term_ref {
+                             // a body term, so we need the child level here.
+                             let lvl = lvl.child_level();
+                             // the body of the if let here is an inlined
+                             // "probe_head_var". note the difference between it
+                             // and "probe_body_var".
+                             let branch_info_v = self.branch_map.entry(var_ptr.clone())
+                                 .or_insert_with(|| vec![]);
+                             let needs_new_branch = branch_info_v.is_empty();
+                             if needs_new_branch {
+                                 branch_info_v.push(BranchInfo::new(self.current_branch_num.clone()));
+                             }
+                             let branch_info = branch_info_v.last_mut().unwrap();
+                             let needs_new_chunk = branch_info.chunks.is_empty();
+                             if needs_new_chunk {
+                                 branch_info.chunks.push(ChunkInfo {
+                                     chunk_num: self.current_chunk_num,
+                                     term_loc: GenContext::Head,
+                                     vars: vec![],
+                                 });
+                             }
+                             let chunk_info = branch_info.chunks.last_mut().unwrap();
+                             let var_info = VarInfo {
+                                 var_ptr,
+                                 classify_info,
+                                 chunk_type: self.current_chunk_type,
+                                 lvl,
+                             };
+                             chunk_info.vars.push(var_info);
+                         }
+                     }
+                     classify_info.arg_c += 1;
+                 }
+             }
+             _ => {}
+         }
+         Ok(())
+     }
+     fn classify_body_variables<'a, LS: LoadState<'a>>(
+         &mut self,
+         loader: &mut Loader<'a, LS>,
+         term: Term,
+     ) -> Result<ChunkedTermVec, CompilationError> {
+         let mut state_stack = vec![TraversalState::Term(term)];
+         let mut build_stack = ChunkedTermVec::new();
+         self.current_chunk_type = ChunkType::Mid;
+         while let Some(traversal_st) = state_stack.pop() {
+             match traversal_st {
+                 TraversalState::AddBranchNum(branch_num) => {
+                     self.root_set.insert(branch_num.clone());
+                     self.current_branch_num = branch_num;
+                 }
+                 TraversalState::RemoveBranchNum => {
+                     self.root_set.pop();
+                 }
+                 TraversalState::RepBranchNum(branch_num) => {
+                     self.root_set.pop();
+                     self.root_set.insert(branch_num.clone());
+                     self.current_branch_num = branch_num;
+                 }
+                 TraversalState::ResetCallPolicy(call_policy) => {
+                     self.call_policy = call_policy;
+                 }
+                 TraversalState::BuildDisjunct(preceding_len) => {
+                     flatten_into_disjunct(&mut build_stack, preceding_len);
 -                    // self.current_chunk_type = ChunkType::Last;
+                     self.current_chunk_type = ChunkType::Mid;
+                     self.current_chunk_num += 1;
+                 }
+                 TraversalState::BuildFinalDisjunct(preceding_len) => {
+                     flatten_into_disjunct(&mut build_stack, preceding_len);
+                     self.current_chunk_type = ChunkType::Mid;
+                     self.current_chunk_num += 1;
+                 }
+                 TraversalState::GetCutPoint { var_num, prev_b } => {
+                     if self.try_set_chunk_at_inlined_boundary() {
+                         build_stack.add_chunk();
+                     }
+                     self.probe_in_situ_var(var_num);
+                     build_stack.push_chunk_term(QueryTerm::GetCutPoint { var_num, prev_b });
+                 }
+                 TraversalState::Cut { var_num, is_global } => {
+                     if self.try_set_chunk_at_inlined_boundary() {
+                         build_stack.add_chunk();
+                     }
+                     self.probe_in_situ_var(var_num);
+                     build_stack.push_chunk_term(
+                         if is_global {
+                             QueryTerm::GlobalCut(var_num)
+                         } else {
+                             QueryTerm::LocalCut(var_num)
+                         }
+                     );
+                 }
+                 TraversalState::Fail => {
+                     build_stack.push_chunk_term(QueryTerm::Fail);
+                 }
+                 TraversalState::Term(term) => {
+                     // return true iff new chunk should be added.
+                     let update_chunk_data = |classifier: &mut Self, predicate_name, arity| {
+                         if ClauseType::is_inlined(predicate_name, arity) {
+                             classifier.try_set_chunk_at_inlined_boundary()
+                         } else {
+                             classifier.try_set_chunk_at_call_boundary()
+                         }
+                     };
+                     match term {
+                         Term::Clause(_, atom!(","), mut terms) if terms.len() == 2 => {
+                             let tail = terms.pop().unwrap();
+                             let head = terms.pop().unwrap();
+                             let iter = unfold_by_str(tail, atom!(","))
+                                 .into_iter()
+                                 .rev()
+                                 .chain(std::iter::once(head))
+                                 .map(TraversalState::Term);
+                             state_stack.extend(iter);
+                         }
+                         Term::Clause(_, atom!(";"), mut terms) if terms.len() == 2 => {
+                             let tail = terms.pop().unwrap();
+                             let head = terms.pop().unwrap();
+                             let first_branch_num = self.current_branch_num.split();
+                             let branches: Vec<_> = std::iter::once(head)
+                                 .chain(unfold_by_str(tail, atom!(";")).into_iter())
+                                 .collect();
+                             let mut branch_numbers = vec![first_branch_num];
+                             for idx in 1 .. branches.len() {
+                                 let succ_branch_number = branch_numbers[idx - 1].incr_by_delta();
+                                 branch_numbers.push(if idx + 1 < branches.len() {
+                                     succ_branch_number.split()
+                                 } else {
+                                     succ_branch_number
+                                 });
+                             }
+                             let build_stack_len = build_stack.len();
+                             build_stack.reserve_branch(branches.len());
+                             state_stack.push(TraversalState::RepBranchNum(
+                                 self.current_branch_num.halve_delta(),
+                             ));
+                             let iter = branches.into_iter().zip(branch_numbers.into_iter());
+                             let final_disjunct_loc = state_stack.len();
+                             for (term, branch_num) in iter.rev() {
+                                 state_stack.push(TraversalState::BuildDisjunct(build_stack_len));
+                                 state_stack.push(TraversalState::RemoveBranchNum);
+                                 state_stack.push(TraversalState::Term(term));
+                                 state_stack.push(TraversalState::AddBranchNum(branch_num));
+                             }
+                             if let TraversalState::BuildDisjunct(build_stack_len) = state_stack[final_disjunct_loc] {
+                                 state_stack[final_disjunct_loc] = TraversalState::BuildFinalDisjunct(build_stack_len);
+                             }
+                         }
+                         Term::Clause(_, atom!("->"), mut terms) if terms.len() == 2 => {
+                             let then_term = terms.pop().unwrap();
+                             let if_term = terms.pop().unwrap();
+                             let prev_b = if matches!(state_stack.last(), Some(TraversalState::RemoveBranchNum)) {
+                                 // check if the second-to-last element is a regular BuildDisjunct, as we don't
+                                 // want to add GetPrevLevel in case of a TrustMe.
+                                 matches!(state_stack.iter().rev().nth(1), Some(TraversalState::BuildDisjunct(..)))
+                             } else {
+                                 false
+                             };
+                             state_stack.push(TraversalState::Term(then_term));
+                             state_stack.push(TraversalState::Cut { var_num: self.var_num, is_global: false });
+                             state_stack.push(TraversalState::Term(if_term));
+                             state_stack.push(TraversalState::GetCutPoint { var_num: self.var_num, prev_b });
+                             self.var_num += 1;
+                         }
+                         Term::Clause(_, atom!("\\+"), mut terms) if terms.len() == 1 => {
+                             let not_term = terms.pop().unwrap();
+                             let build_stack_len = build_stack.len();
+                             build_stack.reserve_branch(2);
+                             state_stack.push(TraversalState::BuildFinalDisjunct(build_stack_len));
+                             state_stack.push(TraversalState::Term(Term::Clause(Cell::default(), atom!("$succeed"), vec![])));
+                             state_stack.push(TraversalState::BuildDisjunct(build_stack_len));
+                             state_stack.push(TraversalState::Fail);
+                             state_stack.push(TraversalState::Cut { var_num: self.var_num, is_global: false });
+                             state_stack.push(TraversalState::Term(not_term));
+                             state_stack.push(TraversalState::GetCutPoint { var_num: self.var_num, prev_b: true });
+                             self.var_num += 1;
+                         }
+                         Term::Clause(_, atom!(":"), mut terms) if terms.len() == 2 => {
+                             let predicate_name = terms.pop().unwrap();
+                             let module_name = terms.pop().unwrap();
+                             match (module_name, predicate_name) {
+                                 (
+                                     Term::Literal(_, Literal::Atom(module_name)),
+                                     Term::Literal(_, Literal::Atom(predicate_name)),
+                                 ) => {
+                                     if update_chunk_data(self, predicate_name, 0) {
+                                         build_stack.add_chunk();
+                                     }
+                                     build_stack.push_chunk_term(
+                                         qualified_clause_to_query_term(
+                                             loader,
+                                             module_name,
+                                             predicate_name,
+                                             vec![],
+                                             self.call_policy,
+                                         ),
+                                     );
+                                 }
+                                 (
+                                     Term::Literal(_, Literal::Atom(module_name)),
+                                     Term::Clause(_, name, terms),
+                                 ) => {
+                                     if update_chunk_data(self, name, terms.len()) {
+                                         build_stack.add_chunk();
+                                     }
+                                     for (arg_c, term) in terms.iter().enumerate() {
+                                         self.probe_body_term(arg_c + 1, terms.len(), term);
+                                     }
+                                     build_stack.push_chunk_term(
+                                         qualified_clause_to_query_term(
+                                             loader,
+                                             module_name,
+                                             name,
+                                             terms,
+                                             self.call_policy,
+                                         ),
+                                     );
+                                 }
+                                 (module_name, predicate_name) => {
+                                     if update_chunk_data(self, atom!("call"), 2) {
+                                         build_stack.add_chunk();
+                                     }
+                                     self.probe_body_term(1, 0, &module_name);
+                                     self.probe_body_term(2, 0, &predicate_name);
+                                     terms.push(module_name);
+                                     terms.push(predicate_name);
+                                     build_stack.push_chunk_term(
+                                         clause_to_query_term(
+                                             loader,
+                                             atom!("call"),
+                                             vec![Term::Clause(Cell::default(), atom!(":"), terms)],
+                                             self.call_policy,
+                                         ),
+                                     );
+                                 }
+                             }
+                         }
+                         Term::Clause(_, atom!("$call_with_inference_counting"), mut terms) if terms.len() == 1 => {
+                             state_stack.push(TraversalState::ResetCallPolicy(self.call_policy));
+                             state_stack.push(TraversalState::Term(terms.pop().unwrap()));
+                             self.call_policy = CallPolicy::Counted;
+                         }
+                         Term::Clause(_, name, terms) => {
+                             if update_chunk_data(self, name, terms.len()) {
+                                 build_stack.add_chunk();
+                             }
+                             for (arg_c, term) in terms.iter().enumerate() {
+                                 self.probe_body_term(arg_c + 1, terms.len(), term);
+                             }
+                             build_stack.push_chunk_term(
+                                 clause_to_query_term(
+                                     loader,
+                                     name,
+                                     terms,
+                                     self.call_policy,
+                                 ),
+                             );
+                         }
+                         Term::Literal(_, Literal::Atom(atom!("!")) | Literal::Char('!')) => {
+                             if self.global_cut_var_num.is_none() {
+                                 self.global_cut_var_num = Some(self.var_num);
+                                 self.var_num += 1;
+                             }
+                             self.probe_in_situ_var(self.global_cut_var_num.unwrap());
+                             state_stack.push(TraversalState::Cut {
+                                 var_num: self.global_cut_var_num.unwrap(),
+                                 is_global: true,
+                             });
+                         }
+                         Term::Literal(_, Literal::Atom(name)) => {
+                             if update_chunk_data(self, name, 0) {
+                                 build_stack.add_chunk();
+                             }
+                             build_stack.push_chunk_term(
+                                 clause_to_query_term(
+                                     loader,
+                                     name,
+                                     vec![],
+                                     self.call_policy,
+                                 ),
+                             );
+                         }
+                         _ => {
+                             return Err(CompilationError::InadmissibleQueryTerm);
+                         }
+                     }
+                 }
+             }
+         }
+         Ok(build_stack)
+     }
+ }
+ impl BranchMap {
+     pub fn separate_and_classify_variables(
+         &mut self,
+         var_num: usize,
+         global_cut_var_num: Option<usize>,
+         current_chunk_num: usize,
+     ) -> VarData {
+         let mut var_data = VarData {
+             records: VariableRecords::new(var_num),
+             global_cut_var_num,
+             allocates: current_chunk_num > 0,
+         };
+         for (var, branches) in self.iter_mut() {
+             let (mut var_num, var_num_incr) =
+                 if let Var::InSitu(var_num) = *var.borrow() {
+                     (var_num, false)
+                 } else {
+                     (var_data.records.len(), true)
+                 };
+             for branch in branches.iter_mut() {
+                 if var_num_incr {
+                     var_num = var_data.records.len();
+                     var_data.records.push(VariableRecord::default());
+                 }
+                 if branch.chunks.len() <= 1 { // true iff var is a temporary variable.
+                     debug_assert_eq!(branch.chunks.len(), 1);
+                     let chunk = &mut branch.chunks[0];
+                     let mut temp_var_data = TempVarData::new();
+                     for var_info in chunk.vars.iter_mut() {
+                         if var_info.lvl == Level::Shallow {
+                             let term_loc = var_info.chunk_type.to_gen_context(chunk.chunk_num);
+                             temp_var_data.use_set.insert((term_loc, var_info.classify_info.arg_c));
+                         }
+                     }
+                     var_data.records[var_num].allocation = VarAlloc::Temp {
+                         term_loc: chunk.term_loc,
+                         temp_reg: 0,
+                         temp_var_data,
+                         safety: VarSafetyStatus::Needed,
+                         to_perm_var_num: None,
+                     };
+                 } // else VarAlloc is already a Perm variant, as it's the default.
+                 for chunk in branch.chunks.iter_mut() {
+                     var_data.records[var_num].num_occurrences += chunk.vars.len();
+                     for var_info in chunk.vars.iter_mut() {
+                         var_info.var_ptr.set(Var::Generated(var_num));
+                     }
+                 }
+             }
+         }
 -        // debug_assert_eq!(var_data.records.len(), var_num);
 -
+         var_data.records.populate_restricting_sets();
+         var_data
+     }
+ }