From: Mark Date: Fri, 23 Jun 2023 20:57:29 +0000 (-0600) Subject: Merge branch 'compiling_disj' X-Git-Tag: v0.9.2~123 X-Git-Url: https://git.sagredo.dev/?a=commitdiff_plain;h=7f45ac3f7a947e3d7b6556cddea9110622b675fd;p=scryer-prolog.git Merge branch 'compiling_disj' --- 7f45ac3f7a947e3d7b6556cddea9110622b675fd diff --cc Cargo.lock index 8a569c16,28421131..51a8fa49 --- a/Cargo.lock +++ b/Cargo.lock @@@ -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", @@@ -185,25 -197,25 +203,15 @@@ [[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", @@@ -539,9 -557,9 +509,9 @@@ [[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", @@@ -549,15 -567,15 +519,15 @@@ [[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", @@@ -566,38 -584,38 +536,38 @@@ [[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", @@@ -641,9 -659,9 +611,9 @@@ [[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", @@@ -951,9 -969,9 +930,9 @@@ [[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", @@@ -1007,12 -1025,12 +977,9 @@@ [[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", @@@ -1168,14 -1186,14 +1134,14 @@@ [[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", @@@ -1454,15 -1472,15 +1410,15 @@@ [[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", @@@ -1470,24 -1488,24 +1426,24 @@@ [[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", @@@ -1621,23 -1645,23 +1583,23 @@@ [[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", @@@ -1665,9 -1689,9 +1627,9 @@@ [[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", @@@ -1758,9 -1784,9 +1715,9 @@@ [[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", @@@ -1771,9 -1797,9 +1728,9 @@@ [[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", @@@ -2142,9 -2174,9 +2106,9 @@@ [[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", @@@ -2294,24 -2326,24 +2256,24 @@@ [[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", @@@ -2319,28 -2351,28 +2281,28 @@@ [[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 1f812e2c,1f812e2c..00000000 deleted file mode 100644,100644 --- a/src/fixtures.rs +++ /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, -- pub(crate) conflict_set: BTreeSet, --} -- --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 = (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>); -- --#[derive(Debug)] --pub(crate) struct VariableFixtures<'a> { -- perm_vars: IndexMap, VariableFixture<'a>>, -- last_chunk_temp_vars: IndexSet>, --} -- --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, vs: VariableFixture<'a>) { -- self.perm_vars.insert(var, vs); -- } -- -- pub(crate) fn insert_last_chunk_temp_var(&mut self, var: Rc) { -- 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, 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) -> Option<&mut VariableFixture<'a>> { -- self.perm_vars.get_mut(&u) -- } -- -- fn iter_mut(&mut self) -> indexmap::map::IterMut, 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(&mut self, iter: I, lt_arity: usize, term_loc: GenContext) -- where -- I: Iterator>, -- { -- 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, VariableFixture<'a>> { -- self.perm_vars.into_iter() -- } -- -- fn values(&self) -> indexmap::map::Values, 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, -- pub(crate) unsafe_temp_vars: IndexSet, -- pub(crate) safe_perm_vars: IndexSet, -- pub(crate) safe_temp_vars: IndexSet, -- pub(crate) temp_vars_to_perm_vars: IndexMap, -- pub(crate) perm_vars_to_temp_vars: IndexMap, --} -- --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) -> 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; -- } -- } -- } --} diff --cc src/machine/disjuncts.rs index 00000000,a701dba3..3ef2bbf8 mode 000000,100644..100644 --- a/src/machine/disjuncts.rs +++ b/src/machine/disjuncts.rs @@@ -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 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(&self, hasher: &mut H) { + self.branch_num.hash(hasher) + } + } + + impl PartialOrd for BranchNumber { + #[inline] + fn partial_cmp(&self, rhs: &BranchNumber) -> Option { + 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, + } + + #[derive(Debug)] + pub struct BranchArm { + pub arm_terms: Vec, + } + + #[derive(Debug, Clone, PartialEq, Eq, Hash)] + pub struct BranchInfo { + branch_num: BranchNumber, + chunks: Vec, + } + + impl BranchInfo { + fn new(branch_num: BranchNumber) -> Self { + Self { branch_num, chunks: vec![] } + } + } + + type BranchMapInt = IndexMap>; + + #[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; + + #[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, + } + + #[derive(Debug, Default)] + pub struct VarData { + pub records: VariableRecords, + pub global_cut_var_num: Option, + 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>(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 { + 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 { + 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 { + 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, + 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 + } + }