# 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"
[[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]]
[[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]]
[[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"
[[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"
[[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"
[[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"
[[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",
]
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2db40892a506901e4e8281f00e42687df82d1d3448cb0289ae9183a60cb42ec1"
dependencies = [
-- "blake2 0.10.4",
++ "blake2 0.10.6",
"rand_core",
"sha2",
]
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
dependencies = [
-- "generic-array 0.14.6",
++ "generic-array 0.14.7",
"typenum",
]
[[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]]
dependencies = [
"proc-macro2",
"quote",
-- "syn",
++ "syn 1.0.109",
]
[[package]]
[[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]]
[[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"
[[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]]
[[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]]
[[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",
[[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",
"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",
[[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"
"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",
[[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",
[[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",
[[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]]
[[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"
[[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",
]
"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"
[[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]]
dependencies = [
"proc-macro2",
"quote",
-- "syn",
++ "syn 1.0.109",
]
[[package]]
[[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]]
"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"
[[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"
[[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]]
dependencies = [
"instant",
"lock_api",
-- "parking_lot_core 0.8.5",
++ "parking_lot_core 0.8.6",
]
[[package]]
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]]
"proc-macro-hack",
"proc-macro2",
"quote",
-- "syn",
++ "syn 1.0.109",
]
[[package]]
[[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"
[[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",
]
"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"
checksum = "b033d837a7cf162d7993aded9304e30a83213c648b6e389db233191f891e5c2b"
dependencies = [
"getrandom",
-- "redox_syscall",
++ "redox_syscall 0.2.16",
"thiserror",
]
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"
[[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"
"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"
[[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]]
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"
"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",
[[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"
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]]
[[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",
[[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",
]
[[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",
]
[[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",
"proc-macro2",
"quote",
"rustversion",
-- "syn",
++ "syn 1.0.109",
]
[[package]]
[[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]]
"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",
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "45dcb7b4108a4793bdd74aa3714296c6eaf43663edf73fa8625d0d7621e68447"
dependencies = [
-- "syn",
++ "syn 1.0.109",
"to-syn-value_derive",
]
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",
[[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"
[[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"
[[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",
]
[[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",
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]]
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"
+++ /dev/null
--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(®);
-- }
--
-- 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;
-- }
-- }
-- }
--}
--- /dev/null
-/*
-================================================================================
-
-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
+ }
+ }