From b33099c82843fde8a5df35f82cc72cbdc8e8486f Mon Sep 17 00:00:00 2001 From: Dennis Ranke Date: Sat, 28 Jan 2023 02:11:25 +0100 Subject: [PATCH] update more dependencies --- Cargo.lock | 45 +++---- platform/Cargo.lock | 186 ++++++++++++++++++++++------ platform/Cargo.toml | 2 +- uw8-tool/Cargo.lock | 136 +++++++++++++++++++-- uw8-tool/Cargo.toml | 8 +- uw8-tool/src/base_module.rs | 13 +- uw8-tool/src/pack.rs | 238 ++++++++++++++++++------------------ 7 files changed, 423 insertions(+), 205 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 2b36758..8a76dad 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1692,6 +1692,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" +[[package]] +name = "lexopt" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478ee9e62aaeaf5b140bd4138753d1f109765488581444218d3ddda43234f3e8" + [[package]] name = "libc" version = "0.2.139" @@ -3340,13 +3346,13 @@ checksum = "f962df74c8c05a667b5ee8bcf162993134c104e96440b663c8daa176dc772d8c" [[package]] name = "upkr" -version = "0.1.0" -source = "git+https://github.com/exoticorn/upkr.git?rev=d93aec186c9fb91d962c488682a2db125c61306c#d93aec186c9fb91d962c488682a2db125c61306c" +version = "0.2.1" +source = "git+https://github.com/exoticorn/upkr.git?rev=080db40d0088bbee2bdf3c5c75288ac7853d6b7a#080db40d0088bbee2bdf3c5c75288ac7853d6b7a" dependencies = [ "anyhow", "cdivsufsort", - "pbr", - "pico-args 0.4.2", + "lexopt", + "thiserror", ] [[package]] @@ -3396,11 +3402,11 @@ version = "0.1.0" dependencies = [ "anyhow", "pbr", - "pico-args 0.4.2", + "pico-args 0.5.0", "upkr", "walrus", - "wasm-encoder 0.8.0", - "wasmparser 0.81.0", + "wasm-encoder 0.22.0", + "wasmparser 0.99.0", ] [[package]] @@ -3593,15 +3599,6 @@ version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" -[[package]] -name = "wasm-encoder" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db0c351632e46cc06a58a696a6c11e4cf90cad4b9f8f07a0b59128d616c29bb0" -dependencies = [ - "leb128", -] - [[package]] name = "wasm-encoder" version = "0.10.0" @@ -3626,12 +3623,6 @@ version = "0.77.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b35c86d22e720a07d954ebbed772d01180501afe7d03d464f413bb5f8914a8d6" -[[package]] -name = "wasmparser" -version = "0.81.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98930446519f63d00a836efdc22f67766ceae8dbcc1571379f2bcabc6b2b9abc" - [[package]] name = "wasmparser" version = "0.83.0" @@ -3648,6 +3639,16 @@ dependencies = [ "url", ] +[[package]] +name = "wasmparser" +version = "0.99.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ef3b717afc67f848f412d4f02c127dd3e35a0eecd58c684580414df4fde01d3" +dependencies = [ + "indexmap", + "url", +] + [[package]] name = "wasmtime" version = "5.0.0" diff --git a/platform/Cargo.lock b/platform/Cargo.lock index 981983f..c5f0e1f 100644 --- a/platform/Cargo.lock +++ b/platform/Cargo.lock @@ -110,9 +110,9 @@ dependencies = [ [[package]] name = "crc32fast" -version = "1.3.0" +version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "738c290dfaea84fc1ca15ad9c168d083b05a714e1efddd8edaab678dc28d2836" +checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" dependencies = [ "cfg-if", ] @@ -151,32 +151,39 @@ dependencies = [ "anyhow", "ariadne", "chumsky", - "pico-args", + "pico-args 0.4.2", "wasm-encoder 0.10.0", "wasmparser 0.83.0", ] [[package]] name = "fallible_collections" -version = "0.4.4" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "52db5973b6a19247baf19b30f41c23a1bfffc2e9ce0a5db2f60e3cd5dc8895f7" +checksum = "3f57ccc32870366ae684be48b32a1a2e196f98a42a9b4361fe77e13fd4a34755" dependencies = [ "hashbrown", ] [[package]] name = "flate2" -version = "1.0.22" +version = "1.0.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" +checksum = "a8a2db397cb1c8772f31494cb8917e48cd1e64f0fa7efac59fbd741a0a8ce841" dependencies = [ - "cfg-if", "crc32fast", - "libc", "miniz_oxide", ] +[[package]] +name = "form_urlencoded" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +dependencies = [ + "percent-encoding", +] + [[package]] name = "getrandom" version = "0.2.3" @@ -190,9 +197,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.11.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ "ahash 0.7.6", ] @@ -212,6 +219,26 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +dependencies = [ + "autocfg", + "hashbrown", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -225,17 +252,24 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] -name = "libc" -version = "0.2.112" +name = "lexopt" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125" +checksum = "478ee9e62aaeaf5b140bd4138753d1f109765488581444218d3ddda43234f3e8" + +[[package]] +name = "libc" +version = "0.2.139" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" [[package]] name = "lodepng" -version = "3.4.7" +version = "3.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24844d5c0b922ddd52fb5bf0964a4c7f8e799a946ec01bb463771eb04fc1a323" +checksum = "f0ad39f75bbaa4b10bb6f2316543632a8046a5bcf9c785488d79720b21f044f8" dependencies = [ + "crc32fast", "fallible_collections", "flate2", "libc", @@ -253,12 +287,11 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.4.4" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" +checksum = "b275950c28b37e794e8c55d88aeb5e139d0ce23fdbbeda68f8d7174abdf9e8fa" dependencies = [ "adler", - "autocfg", ] [[package]] @@ -288,12 +321,24 @@ dependencies = [ "winapi", ] +[[package]] +name = "percent-encoding" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" + [[package]] name = "pico-args" version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468" +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" + [[package]] name = "platform" version = "0.1.0" @@ -330,9 +375,9 @@ dependencies = [ [[package]] name = "rgb" -version = "0.8.31" +version = "0.8.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a374af9a0e5fdcdd98c1c7b64f05004f9ea2555b6c75f211daa81268a3c50f1" +checksum = "3603b7d71ca82644f79b5a06d1220e9a58ede60bd32255f698cb1af8838b8db3" dependencies = [ "bytemuck", ] @@ -357,6 +402,26 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "thiserror" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "time" version = "0.1.43" @@ -376,6 +441,36 @@ dependencies = [ "crunchy", ] +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "unicode-bidi" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + [[package]] name = "unicode-segmentation" version = "1.9.0" @@ -390,13 +485,24 @@ checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" [[package]] name = "upkr" -version = "0.1.0" -source = "git+https://github.com/exoticorn/upkr.git?rev=d93aec186c9fb91d962c488682a2db125c61306c#d93aec186c9fb91d962c488682a2db125c61306c" +version = "0.2.1" +source = "git+https://github.com/exoticorn/upkr.git?rev=080db40d0088bbee2bdf3c5c75288ac7853d6b7a#080db40d0088bbee2bdf3c5c75288ac7853d6b7a" dependencies = [ "anyhow", "cdivsufsort", - "pbr", - "pico-args", + "lexopt", + "thiserror", +] + +[[package]] +name = "url" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", ] [[package]] @@ -405,11 +511,11 @@ version = "0.1.0" dependencies = [ "anyhow", "pbr", - "pico-args", + "pico-args 0.5.0", "upkr", "walrus", - "wasm-encoder 0.8.0", - "wasmparser 0.81.0", + "wasm-encoder 0.22.0", + "wasmparser 0.99.0", ] [[package]] @@ -452,18 +558,18 @@ checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" [[package]] name = "wasm-encoder" -version = "0.8.0" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db0c351632e46cc06a58a696a6c11e4cf90cad4b9f8f07a0b59128d616c29bb0" +checksum = "aa9d9bf45fc46f71c407837c9b30b1e874197f2dc357588430b21e5017d290ab" dependencies = [ "leb128", ] [[package]] name = "wasm-encoder" -version = "0.10.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa9d9bf45fc46f71c407837c9b30b1e874197f2dc357588430b21e5017d290ab" +checksum = "ef126be0e14bdf355ac1a8b41afc89195289e5c7179f80118e3abddb472f0810" dependencies = [ "leb128", ] @@ -474,18 +580,22 @@ version = "0.77.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b35c86d22e720a07d954ebbed772d01180501afe7d03d464f413bb5f8914a8d6" -[[package]] -name = "wasmparser" -version = "0.81.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98930446519f63d00a836efdc22f67766ceae8dbcc1571379f2bcabc6b2b9abc" - [[package]] name = "wasmparser" version = "0.83.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "718ed7c55c2add6548cca3ddd6383d738cd73b892df400e96b9aa876f0141d7a" +[[package]] +name = "wasmparser" +version = "0.99.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ef3b717afc67f848f412d4f02c127dd3e35a0eecd58c684580414df4fde01d3" +dependencies = [ + "indexmap", + "url", +] + [[package]] name = "winapi" version = "0.3.9" diff --git a/platform/Cargo.toml b/platform/Cargo.toml index c05c603..1f97dc6 100644 --- a/platform/Cargo.toml +++ b/platform/Cargo.toml @@ -9,4 +9,4 @@ edition = "2021" curlywas = { git="https://github.com/exoticorn/curlywas.git", rev="0e7ea50" } uw8-tool = { path="../uw8-tool" } anyhow = "1" -lodepng = "3.4" \ No newline at end of file +lodepng = "3.7.2" \ No newline at end of file diff --git a/uw8-tool/Cargo.lock b/uw8-tool/Cargo.lock index 3bd1117..a3053b4 100644 --- a/uw8-tool/Cargo.lock +++ b/uw8-tool/Cargo.lock @@ -56,6 +56,21 @@ dependencies = [ "lazy_static", ] +[[package]] +name = "form_urlencoded" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" + [[package]] name = "heck" version = "0.3.3" @@ -71,6 +86,26 @@ version = "2.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "25a2bc672d1148e28034f176e01fffebb08b35768468cc954630da77a1449005" +[[package]] +name = "idna" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "indexmap" +version = "1.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1885e79c1fc4b10f0e172c475f458b7f7b93061064d98c3293e98c5ba0c8b399" +dependencies = [ + "autocfg", + "hashbrown", +] + [[package]] name = "lazy_static" version = "1.4.0" @@ -83,6 +118,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" +[[package]] +name = "lexopt" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "478ee9e62aaeaf5b140bd4138753d1f109765488581444218d3ddda43234f3e8" + [[package]] name = "libc" version = "0.2.112" @@ -120,10 +161,16 @@ dependencies = [ ] [[package]] -name = "pico-args" -version = "0.4.2" +name = "percent-encoding" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db8bcd96cb740d03149cbad5518db9fd87126a10ab519c011893b1754134c468" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" + +[[package]] +name = "pico-args" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" [[package]] name = "proc-macro2" @@ -163,6 +210,26 @@ dependencies = [ "unicode-xid", ] +[[package]] +name = "thiserror" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "time" version = "0.1.44" @@ -174,6 +241,36 @@ dependencies = [ "winapi", ] +[[package]] +name = "tinyvec" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" + +[[package]] +name = "unicode-bidi" +version = "0.3.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d54675592c1dbefd78cbd98db9bacd89886e1ca50692a0692baefffdeb92dd58" + +[[package]] +name = "unicode-normalization" +version = "0.1.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +dependencies = [ + "tinyvec", +] + [[package]] name = "unicode-segmentation" version = "1.8.0" @@ -188,13 +285,24 @@ checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" [[package]] name = "upkr" -version = "0.1.0" -source = "git+https://github.com/exoticorn/upkr.git?rev=d93aec186c9fb91d962c488682a2db125c61306c#d93aec186c9fb91d962c488682a2db125c61306c" +version = "0.2.1" +source = "git+https://github.com/exoticorn/upkr.git?rev=080db40d0088bbee2bdf3c5c75288ac7853d6b7a#080db40d0088bbee2bdf3c5c75288ac7853d6b7a" dependencies = [ "anyhow", "cdivsufsort", - "pbr", - "pico-args", + "lexopt", + "thiserror", +] + +[[package]] +name = "url" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +dependencies = [ + "form_urlencoded", + "idna", + "percent-encoding", ] [[package]] @@ -207,7 +315,7 @@ dependencies = [ "upkr", "walrus", "wasm-encoder", - "wasmparser 0.81.0", + "wasmparser 0.99.0", ] [[package]] @@ -244,9 +352,9 @@ checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" [[package]] name = "wasm-encoder" -version = "0.8.0" +version = "0.22.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db0c351632e46cc06a58a696a6c11e4cf90cad4b9f8f07a0b59128d616c29bb0" +checksum = "ef126be0e14bdf355ac1a8b41afc89195289e5c7179f80118e3abddb472f0810" dependencies = [ "leb128", ] @@ -259,9 +367,13 @@ checksum = "b35c86d22e720a07d954ebbed772d01180501afe7d03d464f413bb5f8914a8d6" [[package]] name = "wasmparser" -version = "0.81.0" +version = "0.99.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98930446519f63d00a836efdc22f67766ceae8dbcc1571379f2bcabc6b2b9abc" +checksum = "9ef3b717afc67f848f412d4f02c127dd3e35a0eecd58c684580414df4fde01d3" +dependencies = [ + "indexmap", + "url", +] [[package]] name = "winapi" diff --git a/uw8-tool/Cargo.toml b/uw8-tool/Cargo.toml index ec7d252..e4b9248 100644 --- a/uw8-tool/Cargo.toml +++ b/uw8-tool/Cargo.toml @@ -6,10 +6,10 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -wasmparser = "0.81" -wasm-encoder = "0.8" +wasmparser = "0.99" +wasm-encoder = "0.22" walrus = "0.19" anyhow = "1" -pico-args = "0.4" -upkr = { git = "https://github.com/exoticorn/upkr.git", rev = "d93aec186c9fb91d962c488682a2db125c61306c" } +pico-args = "0.5" +upkr = { git = "https://github.com/exoticorn/upkr.git", rev = "080db40d0088bbee2bdf3c5c75288ac7853d6b7a" } pbr = "1" \ No newline at end of file diff --git a/uw8-tool/src/base_module.rs b/uw8-tool/src/base_module.rs index abb2ad3..9b86735 100644 --- a/uw8-tool/src/base_module.rs +++ b/uw8-tool/src/base_module.rs @@ -3,7 +3,7 @@ use std::{collections::HashMap, fs::File, path::Path}; use anyhow::{bail, Result}; use std::io::prelude::*; use wasm_encoder::{ - CodeSection, EntityType, Export, ExportSection, Function, FunctionSection, ImportSection, + CodeSection, EntityType, ExportKind, ExportSection, Function, FunctionSection, ImportSection, Instruction, MemoryType, Module, TypeSection, ValType, }; use ValType::*; @@ -218,13 +218,13 @@ impl BaseModule { let mut imports = ImportSection::new(); for (module, name, type_) in &self.function_imports { - imports.import(*module, Some(name.as_str()), EntityType::Function(*type_)); + imports.import(*module, name.as_str(), EntityType::Function(*type_)); } for (module, name, import) in &self.global_imports { imports.import( *module, - Some(name.as_str()), + name.as_str(), EntityType::Global(wasm_encoder::GlobalType { val_type: import.type_, mutable: import.mutable, @@ -234,11 +234,12 @@ impl BaseModule { imports.import( "env", - Some("memory"), + "memory", MemoryType { minimum: self.memory as u64, maximum: None, memory64: false, + shared: false, }, ); @@ -259,7 +260,7 @@ impl BaseModule { let mut exports = ExportSection::new(); for (name, fnc) in &self.exports { - exports.export(*name, Export::Function(*fnc)); + exports.export(*name, ExportKind::Func, *fnc); } module.section(&exports); @@ -287,7 +288,7 @@ impl BaseModule { pub fn create_binary(path: &Path) -> Result<()> { let base1 = BaseModule::for_format_version(1)?.to_wasm(); - let data = upkr::pack(&base1, 4, false, None); + let data = upkr::pack(&base1, 4, &upkr::Config::default(), None); File::create(path)?.write_all(&data)?; Ok(()) } diff --git a/uw8-tool/src/pack.rs b/uw8-tool/src/pack.rs index 1135a95..b941e0a 100644 --- a/uw8-tool/src/pack.rs +++ b/uw8-tool/src/pack.rs @@ -10,7 +10,7 @@ use std::{ use wasm_encoder as enc; use wasmparser::{ BinaryReader, ExportSectionReader, ExternalKind, FunctionBody, FunctionSectionReader, - ImportSectionEntryType, ImportSectionReader, TableSectionReader, TypeSectionReader, + ImportSectionReader, TableSectionReader, TypeRef, TypeSectionReader, }; pub struct PackConfig { @@ -63,7 +63,7 @@ pub fn pack(data: &[u8], config: &PackConfig) -> Result> { uw8.extend_from_slice(&upkr::pack( &result[8..], level, - false, + &upkr::Config::default(), Some(&mut |pos| { pb.set(pos as u64); }), @@ -90,7 +90,10 @@ pub fn unpack(data: Vec) -> Result> { let (version, data) = match data[0] { 0 => return Ok(data), 1 => (1, data[1..].to_vec()), - 2 => (1, upkr::unpack(&data[1..], false)), + 2 => ( + 1, + upkr::unpack(&data[1..], &upkr::Config::default(), 4 * 1024 * 1024)?, + ), other => bail!("Uknown format version {}", other), }; @@ -133,8 +136,8 @@ pub fn unpack(data: Vec) -> Result> { Ok(dest) } -fn to_val_type(type_: &wasmparser::Type) -> Result { - use wasmparser::Type::*; +fn to_val_type(type_: &wasmparser::ValType) -> Result { + use wasmparser::ValType::*; Ok(match *type_ { I32 => ValType::I32, I64 => ValType::I64, @@ -144,7 +147,7 @@ fn to_val_type(type_: &wasmparser::Type) -> Result { }) } -fn to_val_type_vec(types: &[wasmparser::Type]) -> Result> { +fn to_val_type_vec(types: &[wasmparser::ValType]) -> Result> { types.into_iter().map(to_val_type).collect() } @@ -202,7 +205,7 @@ impl<'a> ParsedModule<'a> { import_section = Some(Section::new(range, ImportSection::parse(reader)?)); } Payload::GlobalSection(reader) => { - global_section = Some(Section::new(range, reader.get_count())); + global_section = Some(Section::new(range, reader.count())); } Payload::FunctionSection(reader) => { function_section = Some(Section::new(range, read_function_section(reader)?)); @@ -221,21 +224,21 @@ impl<'a> ParsedModule<'a> { table_section = Some(Section::new(range, ())); } Payload::MemorySection(reader) => { - if reader.get_count() != 0 { + if reader.count() != 0 { bail!("Found non-empty MemorySection. Memory has to be imported!"); } } - Payload::ElementSection(mut reader) => { - let mut elements = Vec::with_capacity(reader.get_count() as usize); - for _ in 0..reader.get_count() { - elements.push(Element::parse(reader.read()?)?); + Payload::ElementSection(reader) => { + let mut elements = Vec::with_capacity(reader.count() as usize); + for element in reader { + elements.push(Element::parse(element?)?); } element_section = Some(elements); } Payload::CodeSectionStart { .. } => (), Payload::CodeSectionEntry(body) => function_bodies.push(body), Payload::CustomSection { .. } => (), - Payload::End => break, + Payload::End(..) => break, other => bail!("Unsupported section: {:?}", other), } @@ -463,7 +466,7 @@ impl<'a> ParsedModule<'a> { { let mut export_section = enc::ExportSection::new(); for (name, fnc) in my_exports { - export_section.export(&name, enc::Export::Function(fnc)); + export_section.export(&name, enc::ExportKind::Func, fnc); } module.section(&export_section); } @@ -486,7 +489,7 @@ impl<'a> ParsedModule<'a> { } element_section.active( None, - &wasm_encoder::Instruction::I32Const(element.start_index as i32), + &wasm_encoder::ConstExpr::i32_const(element.start_index as i32), ValType::FuncRef, wasm_encoder::Elements::Functions(&functions), ); @@ -535,28 +538,27 @@ fn read_type_section(reader: TypeSectionReader) -> Result { - if fnc.returns.len() > 1 { + wasmparser::Type::Func(fnc) => { + if fnc.results().len() > 1 { bail!("Multi-value not supported"); } - let params = to_val_type_vec(&fnc.params)?; - let result = to_val_type_vec(&fnc.returns)?.into_iter().next(); + let params = to_val_type_vec(fnc.params())?; + let result = to_val_type_vec(fnc.results())?.into_iter().next(); function_types.push(FunctionType { params, result }); } - t => bail!("Unsupported type def {:?}", t), } } Ok(function_types) } -fn validate_table_section(mut reader: TableSectionReader) -> Result<()> { - if reader.get_count() != 1 { +fn validate_table_section(reader: TableSectionReader) -> Result<()> { + if reader.count() != 1 { bail!("Only up to one table supported"); } - let type_ = reader.read()?; - if type_.element_type != wasmparser::Type::FuncRef { + let type_ = reader.into_iter().next().unwrap()?; + if type_.element_type != wasmparser::ValType::FuncRef { bail!("Only one funcref table is supported"); } @@ -590,45 +592,38 @@ impl ImportSection { for import in reader { let import = import?; - if let Some(field) = import.field { - match import.ty { - ImportSectionEntryType::Function(type_) => { - functions.push(FunctionImport { - module: import.module.to_string(), - field: field.to_string(), - type_, - }); - } - ImportSectionEntryType::Memory(mem) => { - if import.module != "env" || field != "memory" { - bail!( - "Wrong name of memory import {}.{}, should be env.memory", - import.module, - field - ); - } - if mem.memory64 || mem.shared { - bail!("Wrong memory import options: {:?}", import.ty); - } - memory = mem.maximum.unwrap_or(mem.initial) as u32; - } - ImportSectionEntryType::Global(glbl) => { - globals.push(GlobalImport { - module: import.module.to_string(), - field: field.to_string(), - type_: GlobalType { - type_: to_val_type(&glbl.content_type)?, - mutable: glbl.mutable, - }, - }); - } - _ => bail!("Unsupported import item {:?}", import.ty), + match import.ty { + TypeRef::Func(type_) => { + functions.push(FunctionImport { + module: import.module.to_string(), + field: import.name.to_string(), + type_, + }); } - } else { - bail!( - "Found import without field, only module '{}'", - import.module - ); + TypeRef::Memory(mem) => { + if import.module != "env" || import.name != "memory" { + bail!( + "Wrong name of memory import {}.{}, should be env.memory", + import.module, + import.name + ); + } + if mem.memory64 || mem.shared { + bail!("Wrong memory import options: {:?}", import.ty); + } + memory = mem.maximum.unwrap_or(mem.initial) as u32; + } + TypeRef::Global(glbl) => { + globals.push(GlobalImport { + module: import.module.to_string(), + field: import.name.to_string(), + type_: GlobalType { + type_: to_val_type(&glbl.content_type)?, + mutable: glbl.mutable, + }, + }); + } + _ => bail!("Unsupported import item {:?}", import.ty), } } @@ -648,40 +643,37 @@ struct Element { impl Element { fn parse(element: wasmparser::Element) -> Result { - if element.ty != wasmparser::Type::FuncRef { - bail!("Table element type is not FuncRef"); - } + match element.items { + wasmparser::ElementItems::Functions(funcs_reader) => { + let start_index = if let wasmparser::ElementKind::Active { + offset_expr, + table_index: 0, + } = element.kind + { + let mut init_reader = offset_expr.get_operators_reader(); + if let wasmparser::Operator::I32Const { value: start_index } = + init_reader.read()? + { + start_index as u32 + } else { + bail!("Table element start index is not a integer constant"); + } + } else { + bail!("Unsupported table element kind"); + }; - let start_index = if let wasmparser::ElementKind::Active { - init_expr, - table_index: 0, - } = element.kind - { - let mut init_reader = init_expr.get_operators_reader(); - if let wasmparser::Operator::I32Const { value: start_index } = init_reader.read()? { - start_index as u32 - } else { - bail!("Table element start index is not a integer constant"); - } - } else { - bail!("Unsupported table element kind"); - }; - - let mut items_reader = element.items.get_items_reader()?; - - let mut functions = Vec::with_capacity(items_reader.get_count() as usize); - for _ in 0..items_reader.get_count() { - if let wasmparser::ElementItem::Func(index) = items_reader.read()? { - functions.push(index); - } else { - bail!("Table element item is not a function"); + let mut functions = Vec::with_capacity(funcs_reader.count() as usize); + for index in funcs_reader { + functions.push(index?); + } + + Ok(Element { + start_index, + functions, + }) } + _ => bail!("Table element type is not FuncRef"), } - - Ok(Element { - start_index, - functions, - }) } } @@ -712,8 +704,8 @@ fn read_export_section(reader: ExportSectionReader) -> Result for export in reader { let export = export?; match export.kind { - ExternalKind::Function => { - function_exports.push((export.field.to_string(), export.index)); + ExternalKind::Func => { + function_exports.push((export.name.to_string(), export.index)); } _ => (), // just ignore all other kinds since MicroW8 doesn't expect any exports other than functions } @@ -734,13 +726,11 @@ fn remap_function( } let mut function = enc::Function::new(locals); - let block_type = |ty: wasmparser::TypeOrFuncType| -> Result { + let block_type = |ty: wasmparser::BlockType| -> Result { Ok(match ty { - wasmparser::TypeOrFuncType::Type(wasmparser::Type::EmptyBlockType) => { - enc::BlockType::Empty - } - wasmparser::TypeOrFuncType::Type(ty) => enc::BlockType::Result(to_val_type(&ty)?), - wasmparser::TypeOrFuncType::FuncType(ty) => enc::BlockType::FunctionType( + wasmparser::BlockType::Empty => enc::BlockType::Empty, + wasmparser::BlockType::Type(ty) => enc::BlockType::Result(to_val_type(&ty)?), + wasmparser::BlockType::FuncType(ty) => enc::BlockType::FunctionType( *type_map .get(&ty) .ok_or_else(|| anyhow!("Function type index out of range: {}", ty))?, @@ -754,7 +744,7 @@ fn remap_function( .ok_or_else(|| anyhow!("Global index out of range: {}", idx))?) }; - fn mem(m: wasmparser::MemoryImmediate) -> enc::MemArg { + fn mem(m: wasmparser::MemArg) -> enc::MemArg { enc::MemArg { offset: m.offset, align: m.align as u32, @@ -769,9 +759,9 @@ fn remap_function( function.instruction(&match op? { De::Unreachable => En::Unreachable, De::Nop => En::Nop, - De::Block { ty } => En::Block(block_type(ty)?), - De::Loop { ty } => En::Loop(block_type(ty)?), - De::If { ty } => En::If(block_type(ty)?), + De::Block { blockty } => En::Block(block_type(blockty)?), + De::Loop { blockty } => En::Loop(block_type(blockty)?), + De::If { blockty } => En::If(block_type(blockty)?), De::Else => En::Else, De::Try { .. } | De::Catch { .. } | De::Throw { .. } | De::Rethrow { .. } => todo!(), De::End => En::End, @@ -784,9 +774,13 @@ fn remap_function( .get(&function_index) .ok_or_else(|| anyhow!("Function index out of range: {}", function_index))?, ), - De::CallIndirect { index, table_index } => En::CallIndirect { + De::CallIndirect { + type_index, + table_index, + table_byte: _, // what is this supposed to be? + } => En::CallIndirect { ty: *type_map - .get(&index) + .get(&type_index) .ok_or_else(|| anyhow!("Unknown function type in call indirect"))?, table: table_index, }, @@ -806,16 +800,16 @@ fn remap_function( De::I64Load { memarg } => En::I64Load(mem(memarg)), De::F32Load { memarg } => En::F32Load(mem(memarg)), De::F64Load { memarg } => En::F64Load(mem(memarg)), - De::I32Load8S { memarg } => En::I32Load8_S(mem(memarg)), - De::I32Load8U { memarg } => En::I32Load8_U(mem(memarg)), - De::I32Load16S { memarg } => En::I32Load16_S(mem(memarg)), - De::I32Load16U { memarg } => En::I32Load16_U(mem(memarg)), - De::I64Load8S { memarg } => En::I64Load8_S(mem(memarg)), - De::I64Load8U { memarg } => En::I64Load8_U(mem(memarg)), - De::I64Load16S { memarg } => En::I64Load16_S(mem(memarg)), - De::I64Load16U { memarg } => En::I64Load16_U(mem(memarg)), - De::I64Load32S { memarg } => En::I64Load32_S(mem(memarg)), - De::I64Load32U { memarg } => En::I64Load32_U(mem(memarg)), + De::I32Load8S { memarg } => En::I32Load8S(mem(memarg)), + De::I32Load8U { memarg } => En::I32Load8U(mem(memarg)), + De::I32Load16S { memarg } => En::I32Load16S(mem(memarg)), + De::I32Load16U { memarg } => En::I32Load16U(mem(memarg)), + De::I64Load8S { memarg } => En::I64Load8S(mem(memarg)), + De::I64Load8U { memarg } => En::I64Load8U(mem(memarg)), + De::I64Load16S { memarg } => En::I64Load16S(mem(memarg)), + De::I64Load16U { memarg } => En::I64Load16U(mem(memarg)), + De::I64Load32S { memarg } => En::I64Load32S(mem(memarg)), + De::I64Load32U { memarg } => En::I64Load32U(mem(memarg)), De::I32Store { memarg } => En::I32Store(mem(memarg)), De::I64Store { memarg } => En::I64Store(mem(memarg)), De::F32Store { memarg } => En::F32Store(mem(memarg)), @@ -834,7 +828,7 @@ fn remap_function( De::RefNull { .. } | De::RefIsNull { .. } | De::RefFunc { .. } => todo!(), De::I32Eqz => En::I32Eqz, De::I32Eq => En::I32Eq, - De::I32Ne => En::I32Neq, + De::I32Ne => En::I32Ne, De::I32LtS => En::I32LtS, De::I32LtU => En::I32LtU, De::I32GtS => En::I32GtS, @@ -845,7 +839,7 @@ fn remap_function( De::I32GeU => En::I32GeU, De::I64Eqz => En::I64Eqz, De::I64Eq => En::I64Eq, - De::I64Ne => En::I64Neq, + De::I64Ne => En::I64Ne, De::I64LtS => En::I64LtS, De::I64LtU => En::I64LtU, De::I64GtS => En::I64GtS, @@ -855,13 +849,13 @@ fn remap_function( De::I64GeS => En::I64GeS, De::I64GeU => En::I64GeU, De::F32Eq => En::F32Eq, - De::F32Ne => En::F32Neq, + De::F32Ne => En::F32Ne, De::F32Lt => En::F32Lt, De::F32Gt => En::F32Gt, De::F32Le => En::F32Le, De::F32Ge => En::F32Ge, De::F64Eq => En::F64Eq, - De::F64Ne => En::F64Neq, + De::F64Ne => En::F64Ne, De::F64Lt => En::F64Lt, De::F64Gt => En::F64Gt, De::F64Le => En::F64Le, @@ -968,7 +962,7 @@ fn remap_function( De::I64TruncSatF32U => En::I64TruncSatF32U, De::I64TruncSatF64S => En::I64TruncSatF64S, De::I64TruncSatF64U => En::I64TruncSatF64U, - De::MemoryCopy { src, dst } => En::MemoryCopy { src, dst }, + De::MemoryCopy { src_mem, dst_mem } => En::MemoryCopy { src_mem, dst_mem }, De::MemoryFill { mem } => En::MemoryFill(mem), other => bail!("Unsupported instruction {:?}", other), });