diff --git a/.gitignore b/.gitignore index a6a5784..15933f4 100644 --- a/.gitignore +++ b/.gitignore @@ -311,3 +311,220 @@ thunderbird-langpacks-3.1.2-20100803.tar.bz2 /cbindgen-vendor-0.14.3.tar.xz /thunderbird-78.4.0.source.tar.xz /thunderbird-langpacks-78.4.0-20201022.tar.xz +/thunderbird-78.4.3.source.tar.xz +/thunderbird-langpacks-78.4.3-20201112.tar.xz +/thunderbird-78.5.0.source.tar.xz +/thunderbird-langpacks-78.5.0-20201125.tar.xz +/thunderbird-78.6.0.source.tar.xz +/thunderbird-langpacks-78.6.0-20201215.tar.xz +/thunderbird-78.6.1.source.tar.xz +/thunderbird-langpacks-78.6.1-20210114.tar.xz +/thunderbird-78.7.0.source.tar.xz +/thunderbird-langpacks-78.7.0-20210127.tar.xz +/thunderbird-78.8.0.source.tar.xz +/thunderbird-langpacks-78.8.0-20210218.tar.xz +/thunderbird-78.8.1.source.tar.xz +/thunderbird-langpacks-78.8.1-20210315.tar.xz +/thunderbird-78.10.1.source.tar.xz +/thunderbird-langpacks-78.10.1-20210504.tar.xz +/thunderbird-78.11.0.source.tar.xz +/thunderbird-langpacks-78.11.0-20210602.tar.xz +/thunderbird-78.12.0.source.tar.xz +/thunderbird-langpacks-78.12.0-20210721.tar.xz +/thunderbird-91.0.2.source.tar.xz +/thunderbird-langpacks-91.0.2-20210823.tar.xz +/thunderbird-91.0.3.source.tar.xz +/thunderbird-langpacks-91.0.3-20210826.tar.xz +/thunderbird-91.1.0.source.tar.xz +/thunderbird-langpacks-91.1.0-20210907.tar.xz +/thunderbird-91.2.0.source.tar.xz +/thunderbird-langpacks-91.2.0-20211015.tar.xz +/thunderbird-91.3.0.source.tar.xz +/thunderbird-langpacks-91.3.0-20211109.tar.xz +/thunderbird-91.4.0.source.tar.xz +/thunderbird-langpacks-91.4.0-20211215.tar.xz +/thunderbird-91.5.0.source.tar.xz +/thunderbird-langpacks-91.5.0-20220118.tar.xz +/thunderbird-91.6.0.source.tar.xz +/thunderbird-langpacks-91.6.0-20220209.tar.xz +/thunderbird-91.6.1.source.tar.xz +/thunderbird-langpacks-91.6.1-20220228.tar.xz +/thunderbird-langpacks-91.6.2-20220307.tar.xz +/thunderbird-91.6.2.source.tar.xz +/thunderbird-langpacks-91.7.0-20220308.tar.xz +/thunderbird-91.7.0.source.tar.xz +/thunderbird-91.8.0.source.tar.xz +/thunderbird-langpacks-91.8.0-20220405.tar.xz +/thunderbird-91.9.0.source.tar.xz +/thunderbird-langpacks-91.9.0-20220503.tar.xz +/thunderbird-91.9.1.source.tar.xz +/thunderbird-langpacks-91.9.1-20220523.tar.xz +/thunderbird-91.10.0.source.tar.xz +/thunderbird-langpacks-91.10.0-20220530.tar.xz +/thunderbird-91.11.0.source.tar.xz +/thunderbird-langpacks-91.11.0-20220628.tar.xz +/thunderbird-91.12.0.source.tar.xz +/thunderbird-langpacks-91.12.0-20220725.tar.xz +/thunderbird-102.1.0.source.tar.xz +/thunderbird-langpacks-102.1.0-20220803.tar.xz +/thunderbird-102.2.0.source.tar.xz +/thunderbird-langpacks-102.2.0-20220823.tar.xz +/thunderbird-102.2.1.source.tar.xz +/thunderbird-langpacks-102.2.1-20220901.tar.xz +/thunderbird-102.3.0.source.tar.xz +/thunderbird-langpacks-102.3.0-20220916.tar.xz +/thunderbird-102.3.1.source.tar.xz +/thunderbird-langpacks-102.3.1-20220929.tar.xz +/thunderbird-102.4.0.source.tar.xz +/thunderbird-langpacks-102.4.0-20221017.tar.xz +/thunderbird-102.4.1.source.tar.xz +/thunderbird-langpacks-102.4.1-20221102.tar.xz +/thunderbird-102.5.0.source.tar.xz +/thunderbird-langpacks-102.5.0-20221115.tar.xz +/thunderbird-102.5.1.source.tar.xz +/thunderbird-langpacks-102.5.1-20221201.tar.xz +/thunderbird-102.6.0.source.tar.xz +/thunderbird-langpacks-102.6.0-20221213.tar.xz +/thunderbird-102.7.1.source.tar.xz +/thunderbird-langpacks-102.7.1-20230124.tar.xz +/thunderbird-langpacks-102.7.1-20230131.tar.xz +/thunderbird-102.7.2.source.tar.xz +/thunderbird-langpacks-102.7.2-20230208.tar.xz +/thunderbird-102.8.0.source.tar.xz +/thunderbird-langpacks-102.8.0-20230215.tar.xz +/thunderbird-102.9.0.source.tar.xz +/thunderbird-langpacks-102.9.0-20230313.tar.xz +/thunderbird-102.9.1.source.tar.xz +/thunderbird-langpacks-102.9.1-20230329.tar.xz +/thunderbird-102.10.0.source.tar.xz +/thunderbird-langpacks-102.10.0-20230411.tar.xz +/thunderbird-102.11.0.source.tar.xz +/thunderbird-langpacks-102.11.0-20230504.tar.xz +/thunderbird-102.11.1.source.tar.xz +/thunderbird-langpacks-102.11.1-20230525.tar.xz +/thunderbird-102.12.0.source.tar.xz +/thunderbird-langpacks-102.12.0-20230605.tar.xz +/thunderbird-102.13.0.source.tar.xz +/thunderbird-langpacks-102.13.0-20230707.tar.xz +/thunderbird-langpacks-115.0.1-20230720.tar.xz +/thunderbird-115.0.1.source.tar.xz +/thunderbird-langpacks-115.1.1-20230815.tar.xz +/thunderbird-115.1.1.source.tar.xz +/thunderbird-115.2.2.source.tar.xz +/thunderbird-langpacks-115.2.2-20230920.tar.xz +/thunderbird-115.3.0.source.tar.xz +/thunderbird-langpacks-115.3.0-20230926.tar.xz +/thunderbird-langpacks-115.3.1-20230929.tar.xz +/thunderbird-115.3.1.source.tar.xz +/thunderbird-115.3.2.source.tar.xz +/thunderbird-langpacks-115.3.2-20231011.tar.xz +/thunderbird-115.4.0.source.tar.xz +/thunderbird-langpacks-115.4.0-20231024.tar.xz +/thunderbird-115.4.1.source.tar.xz +/thunderbird-langpacks-115.4.1-20231025.tar.xz +/thunderbird-115.4.2.source.tar.xz +/thunderbird-langpacks-115.4.2-20231108.tar.xz +/thunderbird-115.4.3.source.tar.xz +/thunderbird-langpacks-115.4.3-20231115.tar.xz +/thunderbird-115.5.0.source.tar.xz +/thunderbird-langpacks-115.5.0-20231121.tar.xz +/thunderbird-115.5.1.source.tar.xz +/thunderbird-langpacks-115.5.1-20231128.tar.xz +/thunderbird-115.5.2.source.tar.xz +/thunderbird-langpacks-115.5.2-20231212.tar.xz +/thunderbird-115.6.0.source.tar.xz +/thunderbird-langpacks-115.6.0-20231218.tar.xz +/thunderbird-115.6.1.source.tar.xz +/thunderbird-langpacks-115.6.1-20240110.tar.xz +/thunderbird-115.7.0.source.tar.xz +/thunderbird-langpacks-115.7.0-20240122.tar.xz +/thunderbird-115.8.0.source.tar.xz +/thunderbird-langpacks-115.8.0-20240219.tar.xz +/thunderbird-115.8.1.source.tar.xz +/thunderbird-langpacks-115.8.1-20240305.tar.xz +/thunderbird-115.10.0.source.tar.xz +/thunderbird-langpacks-115.10.0-20240415.tar.xz +/thunderbird-115.10.1.source.tar.xz +/thunderbird-langpacks-115.10.1-20240422.tar.xz +/thunderbird-115.11.0.source.tar.xz +/thunderbird-langpacks-115.11.0-20240513.tar.xz +/thunderbird-115.11.1.source.tar.xz +/thunderbird-langpacks-115.11.1-20240529.tar.xz +/thunderbird-115.11.2.source.tar.xz +/thunderbird-langpacks-115.11.2-20240603.tar.xz +/thunderbird-115.12.0.source.tar.xz +/thunderbird-langpacks-115.12.0-20240611.tar.xz +/thunderbird-115.12.1.source.tar.xz +/thunderbird-langpacks-115.12.1-20240618.tar.xz +/thunderbird-115.13.0.source.tar.xz +/thunderbird-langpacks-115.13.0-20240716.tar.xz +/thunderbird-128.0esr.source.tar.xz +/thunderbird-langpacks-128.0esr-20240717.tar.xz +/thunderbird-128.1.0esr.source.tar.xz +/thunderbird-langpacks-128.1.0esr-20240806.tar.xz +/thunderbird-128.2.0esr.source.tar.xz +/thunderbird-langpacks-128.2.0esr-20240905.tar.xz +/thunderbird-128.3.0esr.source.tar.xz +/thunderbird-langpacks-128.3.0esr-20240930.tar.xz +/thunderbird-128.3.1esr.source.tar.xz +/thunderbird-langpacks-128.3.1esr-20241009.tar.xz +/thunderbird-128.3.2esr.source.tar.xz +/thunderbird-langpacks-128.3.2esr-20241017.tar.xz +/thunderbird-128.3.3esr.source.tar.xz +/thunderbird-langpacks-128.3.3esr-20241022.tar.xz +/thunderbird-128.4.0esr.source.tar.xz +/thunderbird-langpacks-128.4.0esr-20241028.tar.xz +/thunderbird-128.4.2esr.source.tar.xz +/thunderbird-langpacks-128.4.2esr-20241107.tar.xz +/thunderbird-128.4.3esr.source.tar.xz +/thunderbird-langpacks-128.4.3esr-20241113.tar.xz +/thunderbird-128.5.0esr.source.tar.xz +/thunderbird-langpacks-128.5.0esr-20241126.tar.xz +/thunderbird-128.5.2esr.source.tar.xz +/thunderbird-langpacks-128.5.2esr-20241211.tar.xz +/thunderbird-128.6.0esr.source.tar.xz +/thunderbird-langpacks-128.6.0esr-20250108.tar.xz +/thunderbird-128.6.1esr.source.tar.xz +/thunderbird-langpacks-128.6.1esr-20250128.tar.xz +/thunderbird-128.7.1esr.source.tar.xz +/thunderbird-langpacks-128.7.1esr-20250219.tar.xz +/thunderbird-128.8.0esr.source.tar.xz +/thunderbird-langpacks-128.8.0esr-20250305.tar.xz +/thunderbird-128.9.0esr.source.tar.xz +/thunderbird-langpacks-128.9.0esr-20250331.tar.xz +/thunderbird-128.9.2esr.source.tar.xz +/thunderbird-langpacks-128.9.2esr-20250416.tar.xz +/thunderbird-128.10.0esr.source.tar.xz +/thunderbird-langpacks-128.10.0esr-20250428.tar.xz +/thunderbird-128.10.1esr.source.tar.xz +/thunderbird-langpacks-128.10.1esr-20250519.tar.xz +/thunderbird-128.10.2esr.source.tar.xz +/thunderbird-langpacks-128.10.2esr-20250521.tar.xz +/thunderbird-128.11.0esr.source.tar.xz +/thunderbird-langpacks-128.11.0esr-20250526.tar.xz +/thunderbird-128.11.1esr.source.tar.xz +/thunderbird-langpacks-128.11.1esr-20250611.tar.xz +/thunderbird-128.12.0esr.source.tar.xz +/thunderbird-langpacks-128.12.0esr-20250630.tar.xz +/thunderbird-128.13.0esr.source.tar.xz +/thunderbird-langpacks-128.13.0esr-20250723.tar.xz +/thunderbird-140.1.0esr.source.tar.xz +/thunderbird-langpacks-140.1.0esr-20250731.tar.xz +/thunderbird-140.2.1esr.source.tar.xz +/thunderbird-langpacks-140.2.1esr-20250904.tar.xz +/thunderbird-langpacks-140.3.0esr-20250924.tar.xz +/thunderbird-140.3.0esr.source.tar.xz +/thunderbird-143.0.1.source.tar.xz +/thunderbird-langpacks-143.0.1-20251002.tar.xz +/thunderbird-144.0.source.tar.xz +/thunderbird-langpacks-144.0-20251016.tar.xz +/thunderbird-144.0.1.source.tar.xz +/thunderbird-langpacks-144.0.1-20251021.tar.xz +/thunderbird-145.0.source.tar.xz +/thunderbird-langpacks-145.0-20251119.tar.xz +/thunderbird-146.0.source.tar.xz +/thunderbird-langpacks-146.0-20251215.tar.xz +/thunderbird-146.0.1.source.tar.xz +/thunderbird-langpacks-146.0.1-20251218.tar.xz +/thunderbird-147.0.source.tar.xz +/thunderbird-langpacks-147.0-20260114.tar.xz diff --git a/0001-GLIBCXX-fix-for-GCC-12.patch b/0001-GLIBCXX-fix-for-GCC-12.patch new file mode 100644 index 0000000..feb2d17 --- /dev/null +++ b/0001-GLIBCXX-fix-for-GCC-12.patch @@ -0,0 +1,23 @@ +diff -up thunderbird-128.1.0/build/unix/stdc++compat/stdc++compat.cpp.0001-GLIBCXX-fix-for-GCC-12 thunderbird-128.1.0/build/unix/stdc++compat/stdc++compat.cpp +--- thunderbird-128.1.0/build/unix/stdc++compat/stdc++compat.cpp.0001-GLIBCXX-fix-for-GCC-12 2024-08-09 12:24:05.444162943 +0200 ++++ thunderbird-128.1.0/build/unix/stdc++compat/stdc++compat.cpp 2024-08-09 12:24:05.460162972 +0200 +@@ -83,6 +83,19 @@ __glibcxx_assert_fail(const char* __file + } // namespace std + #endif + ++#if _GLIBCXX_RELEASE >= 12 ++namespace std { ++ ++/* This avoids the GLIBCXX_3.4.30 symbol version. */ ++void __attribute__((weak)) ++__glibcxx_assert_fail(const char* __file, int __line, const char* __function, ++ const char* __condition) { ++ MOZ_CRASH(); ++} ++ ++} // namespace std ++#endif ++ + /* While we generally don't build with exceptions, we have some host tools + * that do use them. libstdc++ from GCC 5.0 added exception constructors with + * char const* argument. Older versions only have a constructor with diff --git a/Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch b/Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch deleted file mode 100644 index 0663ffe..0000000 --- a/Bug-1238661---fix-mozillaSignalTrampoline-to-work-.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up thunderbird-60.5.0/mfbt/LinuxSignal.h.mozilla-1238661 thunderbird-60.5.0/mfbt/LinuxSignal.h ---- thunderbird-60.5.0/mfbt/LinuxSignal.h.mozilla-1238661 2019-01-30 11:33:21.447003175 +0100 -+++ thunderbird-60.5.0/mfbt/LinuxSignal.h 2019-01-30 11:35:13.848537051 +0100 -@@ -22,7 +22,7 @@ __attribute__((naked)) void SignalTrampo - void* aContext) { - asm volatile("nop; nop; nop; nop" : : : "memory"); - -- asm volatile("b %0" : : "X"(H) : "memory"); -+ asm volatile("bx %0" : : "r"(H), "l"(aSignal), "l"(aInfo), "l"(aContext) : "memory"); - } - - #define MOZ_SIGNAL_TRAMPOLINE(h) (mozilla::SignalTrampoline) diff --git a/build-aarch64-skia.patch b/build-aarch64-skia.patch new file mode 100644 index 0000000..b3abe7a --- /dev/null +++ b/build-aarch64-skia.patch @@ -0,0 +1,35 @@ +diff -up firefox-128.0/gfx/skia/skia/modules/skcms/src/Transform_inl.h.aarch64-skia firefox-128.0/gfx/skia/skia/modules/skcms/src/Transform_inl.h +--- firefox-128.0/gfx/skia/skia/modules/skcms/src/Transform_inl.h.aarch64-skia 2024-07-02 11:10:25.047099913 +0200 ++++ firefox-128.0/gfx/skia/skia/modules/skcms/src/Transform_inl.h 2024-07-02 11:15:43.855410571 +0200 +@@ -151,7 +151,7 @@ SI U32 to_fixed(F f) { return (U32)cast + + + SI F F_from_Half(U16 half) { +-#if defined(USING_NEON_F16C) ++#if 0 // defined(USING_NEON_F16C) + return vcvt_f32_f16((float16x4_t)half); + #elif defined(USING_AVX512F) + return (F)_mm512_cvtph_ps((__m256i)half); +@@ -178,7 +178,7 @@ SI F F_from_Half(U16 half) { + __attribute__((no_sanitize("unsigned-integer-overflow"))) + #endif + SI U16 Half_from_F(F f) { +-#if defined(USING_NEON_F16C) ++#if 0 //defined(USING_NEON_F16C) + return (U16)vcvt_f16_f32(f); + #elif defined(USING_AVX512F) + return (U16)_mm512_cvtps_ph((__m512 )f, _MM_FROUND_CUR_DIRECTION ); +diff -up firefox-128.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h.aarch64-skia firefox-128.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h +--- firefox-128.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h.aarch64-skia 2024-07-02 11:10:25.048099949 +0200 ++++ firefox-128.0/gfx/skia/skia/src/opts/SkRasterPipeline_opts.h 2024-07-02 11:13:33.384783413 +0200 +@@ -1425,8 +1425,8 @@ SI F from_half(U16 h) { + } + + SI U16 to_half(F f) { +-#if defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) +- return (U16)vcvt_f16_f32(f); ++#if 0 //defined(JUMPER_IS_NEON) && defined(SK_CPU_ARM64) ++ return (U16)vcvt_f16_f32(f); + + #elif defined(JUMPER_IS_SKX) + return (U16)_mm512_cvtps_ph(f, _MM_FROUND_CUR_DIRECTION); diff --git a/build-aarch64-user_vfp.patch b/build-aarch64-user_vfp.patch deleted file mode 100644 index 85e72c7..0000000 --- a/build-aarch64-user_vfp.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up thunderbird-68.0/js/src/wasm/WasmSignalHandlers.cpp.aarch64-user_vfp thunderbird-68.0/js/src/wasm/WasmSignalHandlers.cpp ---- thunderbird-68.0/js/src/wasm/WasmSignalHandlers.cpp.aarch64-user_vfp 2019-09-05 08:57:46.443137916 +0200 -+++ thunderbird-68.0/js/src/wasm/WasmSignalHandlers.cpp 2019-09-05 08:58:07.776196823 +0200 -@@ -244,7 +244,7 @@ using mozilla::DebugOnly; - // emulation here. - - #if defined(__linux__) && defined(__arm__) --# define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS -+//# define WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS - #endif - - #ifdef WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS diff --git a/build-arm-libopus.patch b/build-arm-libopus.patch new file mode 100644 index 0000000..1b3f31b --- /dev/null +++ b/build-arm-libopus.patch @@ -0,0 +1,12 @@ +diff -up firefox-66.0/media/libopus/silk/arm/arm_silk_map.c.old firefox-66.0/media/libopus/silk/arm/arm_silk_map.c +--- firefox-66.0/media/libopus/silk/arm/arm_silk_map.c.old 2019-03-12 21:07:35.356677522 +0100 ++++ firefox-66.0/media/libopus/silk/arm/arm_silk_map.c 2019-03-12 21:07:42.937693394 +0100 +@@ -28,7 +28,7 @@ POSSIBILITY OF SUCH DAMAGE. + # include "config.h" + #endif + +-#include "main_FIX.h" ++#include "fixed/main_FIX.h" + #include "NSQ.h" + #include "SigProc_FIX.h" + diff --git a/build-botan-target.patch b/build-botan-target.patch new file mode 100644 index 0000000..3033a1d --- /dev/null +++ b/build-botan-target.patch @@ -0,0 +1,12 @@ +diff -up thunderbird-147.0/comm/third_party/openpgp.configure.build-botan thunderbird-147.0/comm/third_party/openpgp.configure +--- thunderbird-147.0/comm/third_party/openpgp.configure.build-botan 2026-01-08 22:45:29.000000000 +0100 ++++ thunderbird-147.0/comm/third_party/openpgp.configure 2026-01-14 15:43:34.946025500 +0100 +@@ -348,7 +348,7 @@ with only_when(in_tree_librnp): + + botan_flags = [ + "--cc-bin={}".format(cxx_compiler.compiler), +- "--cc-abi-flags={}".format(" ".join(abi_flags)), ++ #"--cc-abi-flags={}".format(" ".join(abi_flags)), + "--cpu={}".format(target.cpu), + "--os={}".format(botan_os), + "--with-build-dir={}".format(botan_objdir), diff --git a/build-c11-threads-avail.patch b/build-c11-threads-avail.patch new file mode 100644 index 0000000..59d2f08 --- /dev/null +++ b/build-c11-threads-avail.patch @@ -0,0 +1,62 @@ +diff -up thunderbird-147.0/comm/third_party/rust/glslopt/.cargo-checksum.json.build-c11-threads-avail thunderbird-147.0/comm/third_party/rust/glslopt/.cargo-checksum.json +--- thunderbird-147.0/comm/third_party/rust/glslopt/.cargo-checksum.json.build-c11-threads-avail 2026-01-08 22:45:29.000000000 +0100 ++++ thunderbird-147.0/comm/third_party/rust/glslopt/.cargo-checksum.json 2026-01-14 15:56:41.496818688 +0100 +@@ -1 +1 @@ +-{"files":{".cargo_vcs_info.json":"7075d1c5c5e19288cefb431f16462eaa23229d02791120f4885ab1d20470cb7e",".gitmodules":"ffc0cce90e856d4f4bdb3bd3c950c9e59501a45ebd5022b91cfe8c07c79ef1ac","Cargo.lock":"f7970552595dc803ace9ef19b5f5d7b1fc784aac30cb27b2ebc3002d97122b9d","Cargo.toml":"7c53ee20d848f9913cacbfcb3ab2e89e30deee8d619d173c95130c7c5d065827","README.md":"4468e08c64c19977707d792bfab0080e35ff927b64990eab77873f8ba056ba1c","build.rs":"92e29699487c21389fc823c50b410cfbfc74cc774265d24958489909ee48a076","glsl-optimizer/.editorconfig":"dca7ff05a95f608849c4dc640af7f83a0f415618e327a2ecb6a0afa0d9d2bacb","glsl-optimizer/.gitignore":"8ba554a4ca510ea7d9684475aa043edbeba7d15a5c9c4a04d8b1379a04ec6270","glsl-optimizer/CMakeLists.txt":"42ce94744e82ffa000da8b64d81fc140e293b9f5da7dd4cf6b49e7404a2448d9","glsl-optimizer/README.md":"b18eef11a92d267d88a937b1154f7670ee433c730b102fdf7e2da0b02722b146","glsl-optimizer/contrib/glslopt/Main.cpp":"14ba213210c62e234b8d9b0052105fed28eedd83d535ebe85acc10bda7322dd4","glsl-optimizer/contrib/glslopt/Readme":"65d2a6f1aa1dc61e903e090cdade027abad33e02e7c9c81e07dc80508acadec4","glsl-optimizer/generateParsers.sh":"878a97db5d3b69eb3b4c3a95780763b373cfcc0c02e0b28894f162dbbd1b8848","glsl-optimizer/include/GL/gl.h":"1989b51365b6d7d0c48ff6e8b181ef75e2cdf71bfb1626b1cc4362e2f54854a3","glsl-optimizer/include/GL/glext.h":"2ac3681045a35a2194a81a960cad395c04bef1c8a20ef46b799fb24af3ec5f70","glsl-optimizer/include/KHR/khrplatform.h":"1448141a0c054d7f46edfb63f4fe6c203acf9591974049481c32442fb03fd6ed","glsl-optimizer/include/c11/.editorconfig":"f96a2354e5f2b90367d643e6d9e980ce76278d4d47afd8b2713b595753aa8b4b","glsl-optimizer/include/c11/threads.h":"56e9e592b28df19f0db432125223cb3eb5c0c1f960c22db96a15692e14776337","glsl-optimizer/include/c11/threads_posix.h":"f8ad2b69fa472e332b50572c1b2dcc1c8a0fa783a1199aad245398d3df421b4b","glsl-optimizer/include/c11/threads_win32.h":"95bf19d7fc14d328a016889afd583e4c49c050a93bcfb114bd2e9130a4532488","glsl-optimizer/include/c11_compat.h":"103fedb48f658d36cb416c9c9e5ea4d70dff181aab551fcb1028107d098ffa3e","glsl-optimizer/include/c99_compat.h":"aafad02f1ea90a7857636913ea21617a0fcd6197256dcfc6dd97bb3410ba892e","glsl-optimizer/include/no_extern_c.h":"40069dbb6dd2843658d442f926e609c7799b9c296046a90b62b570774fd618f5","glsl-optimizer/license.txt":"e26a745226f4a46b3ca00ffbe8be18507362189a2863d04b4f563ba176a9a836","glsl-optimizer/src/compiler/builtin_type_macros.h":"5b4fc4d4da7b07f997b6eb569e37db79fa0735286575ef1fab08d419e76776ff","glsl-optimizer/src/compiler/glsl/README":"e7d408b621c1b605857c4cab63902f615edb06b530142b91ac040808df6e22f7","glsl-optimizer/src/compiler/glsl/TODO":"dd3b7a098e6f9c85ca8c99ce6dea49d65bb75d4cea243b917f29e4ad2c974603","glsl-optimizer/src/compiler/glsl/ast.h":"3e68ff374350c49211a9931f7f55a485d8d89fc4b21caaffbf6655009ad95bf8","glsl-optimizer/src/compiler/glsl/ast_array_index.cpp":"92b4d501f33e0544c00d14e4f8837753afd916c2b42e076ccc95c9e8fc37ba94","glsl-optimizer/src/compiler/glsl/ast_expr.cpp":"afd712a7b1beb2b633888f4a0911b0a8e4ae5eb5ab9c1e3f247d518cdaaa56d6","glsl-optimizer/src/compiler/glsl/ast_function.cpp":"74f4fbd490e366b37f4715168bb3465ecd9334d4130942f75dcc8e80e8e7f027","glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp":"d0f798eb09271d41d068b9e7b18220d37f1ed0083300ab51eba30989698fe23d","glsl-optimizer/src/compiler/glsl/ast_type.cpp":"8eb790b24b26dfb72bdc333744b566c26d8464c5d47d20eae659461f5c4899f7","glsl-optimizer/src/compiler/glsl/builtin_functions.cpp":"454189d643c220fcb49116ee5c8a34f7b349aa67564040deb8607f6a41a15e70","glsl-optimizer/src/compiler/glsl/builtin_functions.h":"a37cad7ed09b522c5b8bec7b80115a36846e7ba6e0874a2a858e32f7f202c665","glsl-optimizer/src/compiler/glsl/builtin_int64.h":"619def6f3aebf180da3944ef08f159ab12a58b24767e41d8b985ac37ded54d62","glsl-optimizer/src/compiler/glsl/builtin_types.cpp":"afec060b62d6f3b00bfbf94e9fa5f96341ce096c128d1eef322791e6ed9cea4d","glsl-optimizer/src/compiler/glsl/builtin_variables.cpp":"6563bfb1345cbca4c77e00eef09ad152f3e1dc271d246a08c5ce9e1f4ce4250a","glsl-optimizer/src/compiler/glsl/float64.glsl":"1072fd888be48c2a7a5117cd2d92a65f034965a66375f598bb856bff5d7be766","glsl-optimizer/src/compiler/glsl/generate_ir.cpp":"e5f0175370a0d07f93c48d3f0f1b8233d12c64a7b02de02dcc753ef7b398ef0f","glsl-optimizer/src/compiler/glsl/glcpp/README":"a0332a1b221d047e9cce5181a64d4ac4056046fd878360ec8ae3a7b1e062bcff","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c":"2d179879b1ffe84f58875eee5b0c19b6bae9c973b0c48e6bcd99978f2f501c80","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l":"e4c5744c837200dafd7c15a912d13f650308ea552454d4fa67271bc0a5bde118","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.c":"03494f9ce1cb82260506e2559e73a3eeb622c4bd51b65eaa0a2c3351862bd4c8","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.h":"264d9a18421cde255ce34a0a62b3d8e73465359f0d167e64aa3973062aae5bdd","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.y":"fafb66e3a8f149d19e085f18a4273ba6d4c11af9e9a01d665cc784dddf97b79f","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.c":"37ed294403c2abfd17fd999d1ae8d11b170e5e9c878979fefac74a31195c96b0","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.h":"85ac8b444bcbd0822b66448a1da407b6ae5467b649f5afaf5c58325bd7569468","glsl-optimizer/src/compiler/glsl/glcpp/pp.c":"a52d94f1bcb3fb2747a95709c4a77c25de7eea8354d2b83bb18efd96976a4473","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.c":"d11aeb3acfe966d1b78f1ee49804093f2434214c41391d139ffcb67b69dc9862","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.h":"abbf1f36ec5a92d035bfbb841b9452287d147616e56373cdbee1c0e55af46406","glsl-optimizer/src/compiler/glsl/glsl_lexer.cpp":"272b9fc1383d72b81bfc03fa11fdf82270ed91a294e523f9ce2b4554bd3effa9","glsl-optimizer/src/compiler/glsl/glsl_lexer.ll":"2b57d9f9eb830c3d7961d4533048a158ee6f458c8d05c65bea7b7cfbc36e4458","glsl-optimizer/src/compiler/glsl/glsl_optimizer.cpp":"f8095d20629d0af70be930b0612e169edb274551a1d25a3cd1bf9995a11ce2e8","glsl-optimizer/src/compiler/glsl/glsl_optimizer.h":"22e843b4ec53ba5f6cd85ca5f7bad33922dca8061b19fb512d46f1caca8d4757","glsl-optimizer/src/compiler/glsl/glsl_parser.cpp":"126baf368d525aba301854e3d91ba60b5aee32e1102376af71416f32cb95ec48","glsl-optimizer/src/compiler/glsl/glsl_parser.h":"2ea9a50716098a8f7bef782d2a030d757b68da73afb01b4d4940d3e8381d44e8","glsl-optimizer/src/compiler/glsl/glsl_parser.yy":"6b1fd1576b29fce005dff744a6dbd0219e4c695c361d61864e1f3a8d6fa6b764","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.cpp":"aad64b5b66467da650091430681e8c6a820cf3cadc4db3c160bf2f15875390ae","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.h":"71fd0e92bbdb193dfb067d7bfdb1200d77392be2fbd0cbfc9ca89d1bb4c7e741","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.cpp":"6660fb83c0ddddbbd64581d46ccfdb9c84bfaa99d13348c289e6442ab00df046","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.h":"24682b8304e0ea3f6318ddb8c859686bd1faee23cd0511d1760977ae975d41bf","glsl-optimizer/src/compiler/glsl/hir_field_selection.cpp":"72a039b0fcab4161788def9e4bedac7ac06a20d8e13146529c6d246bd5202afd","glsl-optimizer/src/compiler/glsl/int64.glsl":"303dbe95dde44b91aee3e38b115b92028400d6a92f9268975d607471984e13eb","glsl-optimizer/src/compiler/glsl/ir.cpp":"2b4741cce90b5d4abff5d719c7324e2693c67294d4d99736cb241554adb281bc","glsl-optimizer/src/compiler/glsl/ir.h":"990b1c74447c4eb4835353ccb0ed9aea644f97fc1129ef1739cd935075d85d2e","glsl-optimizer/src/compiler/glsl/ir_array_refcount.cpp":"8cdc1cffe01e42e0566fa2193a75f789628e8025ad1b82f0ee6f204451b7f9f7","glsl-optimizer/src/compiler/glsl/ir_array_refcount.h":"75f06ec81342b379096ca52e1dc0fd5f19a11ff8e9b58203c20628179d644c12","glsl-optimizer/src/compiler/glsl/ir_basic_block.cpp":"1e2920b1c0ecb08424c745c558f84d0d7e44b74585cf2cc2265dc4dfede3fa2f","glsl-optimizer/src/compiler/glsl/ir_basic_block.h":"81be7da0fc0ee547cd13ec60c1fcd7d3ce3d70d7e5e988f01a3b43a827acdf05","glsl-optimizer/src/compiler/glsl/ir_builder.cpp":"daba29c5a1efdd5a9754f420eb3e2ebdf73485273497f40d4863dadeddb23c0d","glsl-optimizer/src/compiler/glsl/ir_builder.h":"2822e74dd3f6e3df8b300af27d5b11ea2dd99d0e5e7ca809b7bbcce9833c483c","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp":"8c6df5abf2fe313363f285f171c19ca6c8ee4f3bc2ed79d33c0c88cc8be45c48","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.h":"799852adc3a0e54d04080655e7cebfa0d3bf5b6ffed5d8414f141380665d4db7","glsl-optimizer/src/compiler/glsl/ir_clone.cpp":"d897a4e1f5bbec4a6a2f15044c1be9a4d13899c73be77335b041049a4589aa5d","glsl-optimizer/src/compiler/glsl/ir_constant_expression.cpp":"78bd87ddb09db67f6c499067728d72aef4f16aa02721a99a4b769d1e0cfa9010","glsl-optimizer/src/compiler/glsl/ir_equals.cpp":"bca28533a6310b0fc152b56d80872368f1510dc62ed6e8ac199b9ffa7fac02e7","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.cpp":"7e918d4e1f237eca01396004015865ce345afe32a876c9dbc6728576a1a7eae4","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.h":"f45b66aa9497520e7e08e612d24b308477c34477fbd963ee9320eac664957f16","glsl-optimizer/src/compiler/glsl/ir_expression_operation.h":"cc9f10727dbd26cac506804f51456302c702650f9eeb59054a7e1575d5cf6687","glsl-optimizer/src/compiler/glsl/ir_expression_operation.py":"7b86c96021b9fbe165957f4ecb0b612fefcde1c2cf3c6d75e3cdb22e369216ba","glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h":"9ad3346416392e3efa11e12ecf2feca7453c5253d241eb96c91dfb85d4f2b971","glsl-optimizer/src/compiler/glsl/ir_expression_operation_strings.h":"a6826daf496a8b9e89885bc2a161ac3445d501b23c6e0ac33e2c01b506b273c8","glsl-optimizer/src/compiler/glsl/ir_function.cpp":"7537365fc0fbe4b37a26b9a2146cc64d3e9a774d60eab63b65002ad165ae8fc7","glsl-optimizer/src/compiler/glsl/ir_function_can_inline.cpp":"faddbf112187a048d502716a3fb82570a322299ba2a3abd79388382c82040bfc","glsl-optimizer/src/compiler/glsl/ir_function_detect_recursion.cpp":"9176973eaf5c0a984701f953bb7a80f37dca43d59b5bce50fc69b3f02f2902d7","glsl-optimizer/src/compiler/glsl/ir_function_inlining.h":"9739493f99c489987d650762fccdd3fb3d432f6481d67f6c799176685bd59632","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.cpp":"3725861fbe2b98e0617f52d3b14cf6d3b25fb5ec00f5ef5d308b03642f592767","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.h":"e0560210e966c0c31e4ca843e80ea154e64db5a444b8c2df845b6ba5b3a43fc1","glsl-optimizer/src/compiler/glsl/ir_hv_accept.cpp":"caf7ce2cd9494aadd3c58bcf77f29de58368dc9e347a362bbf37f8bda9509b80","glsl-optimizer/src/compiler/glsl/ir_optimization.h":"8b3dcfc7f9e96b21a8dd47a0040d90be483a9e67a2cdce3a697188fb758d4630","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp":"f8e34a983452be0dcb5a695e9c8e895eead24f9e540992a8afe510ae85da4c4c","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.h":"1ad1bd3efd1ace39051c13f904c05fd80425d329444f9a8d47fd6d948faf46e0","glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp":"643f5a68aae3fb37267fd793f1216d1cfdeb2c09338c26b1f30e4c6deaef4de5","glsl-optimizer/src/compiler/glsl/ir_print_visitor.h":"4573eb93268a2654c14b505253dd651e2695d43dc745904d824da18305269b95","glsl-optimizer/src/compiler/glsl/ir_reader.cpp":"06bfba802c8354e5a8b2334b6d78d6297de18235bedd3f8fbb382c89870b02f2","glsl-optimizer/src/compiler/glsl/ir_reader.h":"63e3f7f1597936a7011d5b520e171b197bf82bee6c1560d822c3edf5aaa6f9e9","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.cpp":"84b5c5d746555adca85759c2912fe48010232b7c1c0bd2cf03bd04067a85e66f","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.h":"fd8c561b71085d3211fff85ed514fecb299d8ce19a04bc063419a55b6d840525","glsl-optimizer/src/compiler/glsl/ir_set_program_inouts.cpp":"ab9f115ce9e7f312d9c7978340ced0dc4ae6d13a80e08442ba9709d11d50cae5","glsl-optimizer/src/compiler/glsl/ir_uniform.h":"683ae6896b1a08470c090be5f822fc31cd434eab9216e954b9bba24a46975109","glsl-optimizer/src/compiler/glsl/ir_unused_structs.cpp":"9c1620c45f2fc071fe5ed828472040b14c5f42effe06aa0e3b8352c95ef78786","glsl-optimizer/src/compiler/glsl/ir_unused_structs.h":"13387b49c23093575276b25b9dfd31fedd8f131c5c4f3128ab04cf03e15b5295","glsl-optimizer/src/compiler/glsl/ir_validate.cpp":"6b232be5999a86ea278f4f15b2832d76843246509118d924243055a3b9b0299f","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.cpp":"2764a3cad937d53f36db7447c3a5b98b04bf153acf81074d971857fc5bca460d","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.h":"b0668e3eb1501ef65e38fe12830742ecb3d28e6039f30e366c8924efc29b4a39","glsl-optimizer/src/compiler/glsl/ir_visitor.h":"f21b3534c3d66d5fb707d1581fece7e1eb043523afbaedf89918cfb031c6df94","glsl-optimizer/src/compiler/glsl/link_atomics.cpp":"360f0209e11f367ba358223597b0a118bae095bff16337cf03f1fb89c5b80ca6","glsl-optimizer/src/compiler/glsl/link_functions.cpp":"de7895da8aa33a1e3c2c1eb2fdaf267ab5d1fbfdb79ae2e67f95211e946e294c","glsl-optimizer/src/compiler/glsl/link_interface_blocks.cpp":"1926cfa73810704eb19b916c1b2cdb9321155e2f98b2a0a57c7c3c6e960540cd","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.cpp":"1e14e06ca3b2c1089cfba2e8eaf0c1f373d9d6374b6082f320962dd71ae09611","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.h":"fd58c155af645295bb6aec08797889de586f4d919731de2bce57e8dce59bb048","glsl-optimizer/src/compiler/glsl/link_uniform_blocks.cpp":"09589f49776dce32e6c4044937de7e0c839a9754ad31960148f8f9e010658997","glsl-optimizer/src/compiler/glsl/link_uniform_initializers.cpp":"bf98e08c12db466acf9623cbeb8fa8e3b4002512722e7a6521287f558a099f37","glsl-optimizer/src/compiler/glsl/link_uniforms.cpp":"84bad5b1377362cecf259b05124239be5220b03ce1c0c61b59bd9a47e4379af2","glsl-optimizer/src/compiler/glsl/link_varyings.cpp":"a5f1a53e7c80d635515fe808ff223d89fef1767abb0f2b7aa28fa6773dca353f","glsl-optimizer/src/compiler/glsl/link_varyings.h":"b9dbe018f038df69763df2e928742ce81bbc6e3aaba26f50621e30a6d9aa6220","glsl-optimizer/src/compiler/glsl/linker.cpp":"40b1ecd5d4f6c7f13d5a87ce390561a51fdf6f3fcd9b2197b9c88b03a773ba94","glsl-optimizer/src/compiler/glsl/linker.h":"ecf94b4ad75ef461c27c557fda4bd25f34c91930822b8e1d729ec84520d4a049","glsl-optimizer/src/compiler/glsl/linker_util.cpp":"1663ad88e2a369305659aeeffaedb5bd752cf76340a2ba5797fc0bf600633cf9","glsl-optimizer/src/compiler/glsl/linker_util.h":"6db788daf9c8e87ae2764b61a8b37ebe419e69c1b82ddee01986e37c978c6993","glsl-optimizer/src/compiler/glsl/list.h":"b1f46ce0e552fe7c45b2a19408a9d97662e23e4b182ab335491c26f8cf25886f","glsl-optimizer/src/compiler/glsl/loop_analysis.cpp":"57ecd573477c68091c7cc99537faa7139a8f395935e3d4f10144cefdefb5a611","glsl-optimizer/src/compiler/glsl/loop_analysis.h":"a85f045a038ee5b5176063e85d7988865862c44ab0580f771b993a042d0b69cc","glsl-optimizer/src/compiler/glsl/loop_unroll.cpp":"bd4292ea2809f5a669bcb76ceaa1ac365772dcd638c579c3ed10275214901a54","glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp":"8cfbef140d9c4b4d2f57bfa05c9c374d31a121d0f87afce94333f049023b654a","glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp":"1ae221c3c7a95aeb867207e7a742be635f91b406c157747bfd6ddf10274d97fb","glsl-optimizer/src/compiler/glsl/lower_buffer_access.h":"807886953a576a323591798cbca5e2df24295ea893b28affd8ffb5926cebaa04","glsl-optimizer/src/compiler/glsl/lower_builtins.cpp":"4d81afc32cf58e1481fcb5e42888ab93dbe6820310a20ff7a9982b77b2152d9b","glsl-optimizer/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp":"608403f0eeeedf21cfcd3014116e0f44e28cbdf6c4c32aac7e613e64e30205e1","glsl-optimizer/src/compiler/glsl/lower_cs_derived.cpp":"179905cd47a294122adeb5b0abfed6f2f67782dcde21b544d1ee2c1985154e66","glsl-optimizer/src/compiler/glsl/lower_discard.cpp":"3b361b2db0004d544d64611cb50d5a6e364cf6c5f2e60c449085d7d753dd7fb0","glsl-optimizer/src/compiler/glsl/lower_discard_flow.cpp":"f5c29b6a27690bb5c91f196d1a1cf9f6be4f1025292311fe2dac561ce6774dee","glsl-optimizer/src/compiler/glsl/lower_distance.cpp":"a118c85493d5d22b2c059a930c51a5854896d4b1dade76598eaa985e5a3dff8c","glsl-optimizer/src/compiler/glsl/lower_if_to_cond_assign.cpp":"469e617757fd1728709cce021aac5c8da05ee503bf5366977bdc4ef7a6d83950","glsl-optimizer/src/compiler/glsl/lower_instructions.cpp":"6ff5c396abe40d8a2145d571e99e2bbe9143393e15aafc28adc2803a01d821b6","glsl-optimizer/src/compiler/glsl/lower_int64.cpp":"d1ed41196880dd53c7b13e2782f9423f8442bf1d46186e8be92b1b66218a83ee","glsl-optimizer/src/compiler/glsl/lower_jumps.cpp":"34de7b493f281589fb0c2c0f6e885d0a0fabbe7a4e97a73de374dd714777a58c","glsl-optimizer/src/compiler/glsl/lower_mat_op_to_vec.cpp":"dff7a308edc4846c348ed4225c6699a9c75abac68d88f41f85954276552779f4","glsl-optimizer/src/compiler/glsl/lower_named_interface_blocks.cpp":"16063ac127bff75a68272070ab11c21c25101edbff62b4c68f4983b4cd941af0","glsl-optimizer/src/compiler/glsl/lower_offset_array.cpp":"3b00773399135aea85746a5a68b96ef000bc6841be1a2c8e6f25c516628b0949","glsl-optimizer/src/compiler/glsl/lower_output_reads.cpp":"a0fc9975d5aa1617e21fc6c353659a9802da9e83779a3eef4ec584f74b4dadc5","glsl-optimizer/src/compiler/glsl/lower_packed_varyings.cpp":"7550099d4ae123d71541c2fc88bc04fbfe9271ec75d7e210987d1c8cac3cf3ea","glsl-optimizer/src/compiler/glsl/lower_packing_builtins.cpp":"79a13d161fe505a410ab948d92769395708693ec888153630fa240e5b97e356f","glsl-optimizer/src/compiler/glsl/lower_precision.cpp":"f82a185b879872b977a1787d8061b9a80bc4cf8db1b970db6efba2ad9cc20fa2","glsl-optimizer/src/compiler/glsl/lower_shared_reference.cpp":"ea2dccf50a83bc19391bf6b7ab6aa53c0005f427af4066d25140340af9a4beef","glsl-optimizer/src/compiler/glsl/lower_subroutine.cpp":"f69fa53650eeb6f2944fce4d36a6e0a423e6705f3a3bd3389c7fadb83cfc8802","glsl-optimizer/src/compiler/glsl/lower_tess_level.cpp":"b196c9d424c0569f3e85d75c2d125af21566cb113d69036db87c0990703e0fa7","glsl-optimizer/src/compiler/glsl/lower_texture_projection.cpp":"4d247f244272adc8250fd888d8d932a140dd5de4d1efc7a58492c3c2b8291527","glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp":"89bdbc6c1669230c644c0857db1ce2781ec61d349ecd08c7914146e1f4750a4a","glsl-optimizer/src/compiler/glsl/lower_variable_index_to_cond_assign.cpp":"fce930f29ac9405b297d1f749d68f59506b89c70b4ee1b1ab8cf49a34cc71ecf","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp":"3c67d851a11a55fad1c49a550f3a0cfe50892d33a3f238ce266cd829eba510a8","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_swizzle.cpp":"f5ec666b73e1415cbab32519a53605ed385f3b03e889560373dbce69dda5000e","glsl-optimizer/src/compiler/glsl/lower_vector.cpp":"f7c13f5572ebe09b6a71553133b2cf003cd4b77b9657600672ee3b21bf890725","glsl-optimizer/src/compiler/glsl/lower_vector_derefs.cpp":"b05793da6dd620a531b43df5af8b2ecbc37b9db0c88910f5724ea10bcd057e19","glsl-optimizer/src/compiler/glsl/lower_vector_insert.cpp":"fee772ec17eea5e86a529bf9c5fa2ee0d29a5982bb75ebc6d68ed36cd19aa299","glsl-optimizer/src/compiler/glsl/lower_vertex_id.cpp":"690e8715182e03fead5cc5a35251fb4f41b357e4c71a1dfbc4bd7be19862b56d","glsl-optimizer/src/compiler/glsl/lower_xfb_varying.cpp":"58c0e8b270e4bbde54250be03cdb2f36966bcafb785372ad2e2b786835df7f9f","glsl-optimizer/src/compiler/glsl/main.cpp":"ae5e88abbbc8a12f769e1296bad938b9d7398cc6da0d3d0caeceeeb876536850","glsl-optimizer/src/compiler/glsl/opt_add_neg_to_sub.h":"f5054944bfd068810629080d0ea11df78b3f57a8f86df75e13ca50157ad1964d","glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp":"25f45b20e1972ee8c789177a1aeda6e4286c25db2eae3a43ff83029ae64969c0","glsl-optimizer/src/compiler/glsl/opt_array_splitting.cpp":"19d3ce0e815438f4df9ab2890e767b03a4f3f191b53bb30c0217cf2ae6a95430","glsl-optimizer/src/compiler/glsl/opt_conditional_discard.cpp":"0e44e0e126711a3725c1f3a2aa65ff03c381fed08680ffc30101aae60f716c4e","glsl-optimizer/src/compiler/glsl/opt_constant_folding.cpp":"a088d04d9b45f9e55e235835648f614c89b7803c03a6d4f6a6d1a6bc1f0228bd","glsl-optimizer/src/compiler/glsl/opt_constant_propagation.cpp":"8a9440d77ecd6dcf13e683cbb99943aab6311c8fd4b5f6a9189a8d4f270746f4","glsl-optimizer/src/compiler/glsl/opt_constant_variable.cpp":"63d3ccd4dd09f19c9cf1a2f51592111bed41284504f29f3c0de4cadebc439a37","glsl-optimizer/src/compiler/glsl/opt_copy_propagation_elements.cpp":"ffa0f50863995e0d2e31f55a52e82319edc71e520987bebd7f7e561ea331c64b","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_variables.cpp":"84e8747b948232f01dd56b428b9315f96f9511f605f240119fc446fae28981a9","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_varyings.cpp":"761523e88f5b3ba785170f4d7205e94fa99acb7e74d29efbe40e1c010e1dbdb3","glsl-optimizer/src/compiler/glsl/opt_dead_code.cpp":"fd1ba2da7337d4e5dad17f5c2d73d9cc8880305f423e85d64cf94553588fa401","glsl-optimizer/src/compiler/glsl/opt_dead_code_local.cpp":"969a598b4df322baf222258a66cd64a326ea20e5b3125be9d8d1771f522c69e0","glsl-optimizer/src/compiler/glsl/opt_dead_functions.cpp":"774cae6536d02edf26e996a2a895e1f62d5098f16dc96b44798b4fc731a9a95f","glsl-optimizer/src/compiler/glsl/opt_flatten_nested_if_blocks.cpp":"3696a5c55f02e20056e085bc2714f73ac992f221b6f3387d655068e86b512046","glsl-optimizer/src/compiler/glsl/opt_flip_matrices.cpp":"44f0fe05b49329667671f88c96dc86ab3fe1459ff7b87f2b2d88de2d49829f9f","glsl-optimizer/src/compiler/glsl/opt_function_inlining.cpp":"fb56a33c90419a01676b57cbd91d0674a54cca40e6defaacc88dd33facebc131","glsl-optimizer/src/compiler/glsl/opt_if_simplification.cpp":"ac406eb35e379c357641d6c5749f50c65961455924d3dc884e2b90046fa92c5c","glsl-optimizer/src/compiler/glsl/opt_minmax.cpp":"8abd59d3b14ef60ff14a9c69660e6945f5cf10b97edb4afebe56be3f81d96316","glsl-optimizer/src/compiler/glsl/opt_rebalance_tree.cpp":"8bb6329dc0f299042368fc81934c2df019b45ab9f7aa0415d4e57b8d1ff98c9f","glsl-optimizer/src/compiler/glsl/opt_redundant_jumps.cpp":"222c73e2ac7a938ebb6428cc6c780c908ff6156d8ff935b04fed93a48fc10496","glsl-optimizer/src/compiler/glsl/opt_structure_splitting.cpp":"2edc79cc13f3177934e0443ad62f5976a1991f01f86ea303a803434849b13a47","glsl-optimizer/src/compiler/glsl/opt_swizzle.cpp":"015d0abddfe507f67c4b96c82988d861d018ededf7bf055e2bcbe9ea92da694e","glsl-optimizer/src/compiler/glsl/opt_tree_grafting.cpp":"46d28ac983ea244a4315bdc0e8892979ec4d1f9b9a96ac8a8a08006d9bc5e878","glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp":"d80ee43bb97d9f016fb9c5e1e06f5b2afa569811f368ba067be794ec11d085fb","glsl-optimizer/src/compiler/glsl/program.h":"2982447e2abd35371e273ad87951722782a8b21c08294f67c39d987da1e1c55f","glsl-optimizer/src/compiler/glsl/propagate_invariance.cpp":"080943e21baa32494723a2eefb185915d2daae1f46d6df420145c5ad6857e119","glsl-optimizer/src/compiler/glsl/s_expression.cpp":"1ced972bc6ecc8eab4116ea71fb0212ab9ae5bcc0be3b47aa5d9d903566b3af1","glsl-optimizer/src/compiler/glsl/s_expression.h":"65b847e30e22a809b57d0bc70243049c99d9c6318803c5b8d0826aba55dc217e","glsl-optimizer/src/compiler/glsl/serialize.cpp":"be0eb4251348a9d921acb839a5c48c6023a2e9d116d602bb0432787ab623655d","glsl-optimizer/src/compiler/glsl/serialize.h":"57425732eba1233d928e5f07f88b623ce65af46b3bb034bf147f0a4b7f94f9a1","glsl-optimizer/src/compiler/glsl/shader_cache.cpp":"e0c5c433f2df3fccdf1d61281bfcb0ee5633433339b97c697d64db99611cbaaf","glsl-optimizer/src/compiler/glsl/shader_cache.h":"9217164d8d7f54aca0fe5922c7187095a6ae0cb703b196b79805aeef07a7e697","glsl-optimizer/src/compiler/glsl/standalone.cpp":"8e6c416a14d631261917a5fe4cc91880c287b22b2dfd70eb22028289a8fa5364","glsl-optimizer/src/compiler/glsl/standalone.h":"a7c397d1dfdd1e7fb2cfe99db35cd9df93251e642059208533202b7f20497f83","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.cpp":"970d14b7a9d58e5270321f97bf5d57795558b1c570a56678e04a65b26c60bf4f","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.h":"d921a617ea82b9e49413314492a645c44356de503581b1be3f1b57de236e480d","glsl-optimizer/src/compiler/glsl/string_to_uint_map.cpp":"d824bf5b839bd39498dc9e457103cdbe3e5289ddf7564107c27b1505948dd31f","glsl-optimizer/src/compiler/glsl/string_to_uint_map.h":"e2f18e66359c9d620e085de7f4a334a47df9c66e65a5bfe8b734c627bec04104","glsl-optimizer/src/compiler/glsl/test_optpass.h":"b27b8f35f5387e7ce4982bb51c7b63ccf14f91757f3108a5d02ed006925bb8a0","glsl-optimizer/src/compiler/glsl/xxd.py":"376484142f27f45090ea8203ae2621abf73f06175cb0ee8d96f44a3b9327f4bd","glsl-optimizer/src/compiler/glsl_types.cpp":"044bb6754f45419a3151e7a25c39202a82009ae3c6bc54ff7f0bb4258a5deefe","glsl-optimizer/src/compiler/glsl_types.h":"fd899a42f34ddeb8601bc3cd6c5e3aed82fc8aef4042dde1b39b3c01e1dcc219","glsl-optimizer/src/compiler/shader_enums.c":"436bff5216b11b0980bdfada5885fc6ac9afa2037a3027fcd6eea2a8635597ac","glsl-optimizer/src/compiler/shader_enums.h":"13220442a5c02e83540cf2c0ad4f8417b2fbda5f2586dec4e92082544c937cdd","glsl-optimizer/src/compiler/shader_info.h":"4c5453e81197ca83593ee4f365074b23530f2ab21c78e1733b63dec6f344c12a","glsl-optimizer/src/gallium/auxiliary/util/u_half.h":"3c2b37bda3ccb64387e44b723d29cf9046decab1a893bf42d842e9603398bdee","glsl-optimizer/src/gallium/include/pipe/p_compiler.h":"c75620096ce8523dae90599e50aa2ef6468d3b0e368a77795edeb20dd1abfc0c","glsl-optimizer/src/gallium/include/pipe/p_config.h":"a27692fc35f9e55df3224b7529e66b3001e911e94e6bc5f8f569e493e1ee3fb7","glsl-optimizer/src/gallium/include/pipe/p_defines.h":"be26d68c0acc67c5e44788c6299716a9eee415fd81d7d747e3738a829e3b6b38","glsl-optimizer/src/gallium/include/pipe/p_format.h":"5674215fc41d27496f037cf837717daefbf23ebb38d40ace7c0c414bc08182b0","glsl-optimizer/src/gallium/include/pipe/p_state.h":"d600593aba5f5a17072a6c38f6baa81e01c7994b0174250f7e433bb41684b702","glsl-optimizer/src/mapi/glapi/glapi.h":"73632a625c0ddabc401205e8b5a81eb8af8506868efe4b170d7979ec3619e9c5","glsl-optimizer/src/mesa/main/config.h":"5800259373099e5405de2eb52619f9de242552a479902a3a642a333c8cb3c1e7","glsl-optimizer/src/mesa/main/context.c":"2f3208473d99c94f734b1137ba91889d4a1babb9e7534bf1dc85d851ee98274e","glsl-optimizer/src/mesa/main/context.h":"cc7e4194797db9d007f01884e23d786c453b3860821f7f2ddcdf0f1bf3f8ffb1","glsl-optimizer/src/mesa/main/dd.h":"6a964acd06b6c2d88700e69fb75fe3c6b3b3d45bbc41db24f3f897a29695fe0c","glsl-optimizer/src/mesa/main/debug_output.h":"7312422e90b8c0e34028ac27280e438139b5cba525c99deb3ac883cd3d87e452","glsl-optimizer/src/mesa/main/draw.h":"7eaef3a9e27a60ea6f7937109bf3a6190b831162fde0479abb12077ce27c353d","glsl-optimizer/src/mesa/main/enums.h":"87d562a6764f51c014a2274fa7c3aca17c04441537ddd56b2554f13c6fffea92","glsl-optimizer/src/mesa/main/errors.h":"c79444b5df289c90fbb22a33b2d0c23917d9fc4510960088f0b79e53bb56b1b2","glsl-optimizer/src/mesa/main/extensions.h":"a38b2f87cc93c513994281350d69e06c84ff8eded5313ec0a1be33f375e0ebbd","glsl-optimizer/src/mesa/main/extensions_table.c":"17642d1a8c9a0bf2bd61060052d33ff14a005d2b962e6cf91465797a50851e85","glsl-optimizer/src/mesa/main/extensions_table.h":"2c879571c238d2e14461031ac740372fd0f9ac3a34c0d5541bb9b7ed4c0376c8","glsl-optimizer/src/mesa/main/formats.h":"02e2f7ec3e39286cf9f27e2641043e6df8ecb1dfde9e643313210e214af2a929","glsl-optimizer/src/mesa/main/glheader.h":"58217b33eead6aa6b23cd4a291cefeaa6cb84e465f4960daffca97c44d6d1c35","glsl-optimizer/src/mesa/main/glthread.h":"51fb2711f77e7eafcfc52d29d5b844978832b24c930d88accd48d143a6eb9c6f","glsl-optimizer/src/mesa/main/hash.h":"7e7f782034c16a8e693de48e00c31d4a90b0129f4029fd074033d7d16ccbe718","glsl-optimizer/src/mesa/main/macros.h":"73d15ddfd64f2b57b9b2ffeeb993b9c2c0899a80563e9d6ff337b11ccbe6eee5","glsl-optimizer/src/mesa/main/menums.h":"5dfac0e2279d60b0cd0c7b9fc2a5021620d0f6282ed2e738c420214e3af152d3","glsl-optimizer/src/mesa/main/mesa_private.h":"edda678b93438944279a551f663b8858ad84814a9fc88ba9672ef195599c24ae","glsl-optimizer/src/mesa/main/mtypes.h":"6efddefa099e4d2e3fdd97f0055644f47aba21711385edfeabc2d9b0676f2eec","glsl-optimizer/src/mesa/main/shaderobj.h":"9f0dfe96d0c2154201adef942bd36053533ac7b2492fb3786acda5bea514c75e","glsl-optimizer/src/mesa/main/uniforms.h":"4e331e6ad6e9cbded978b4082dbe0a57c1f8f01327446bb6892bfc179976c38b","glsl-optimizer/src/mesa/main/version.h":"9d0a13a758099302dc55cf7d045791834a89b0f9d4cf17b2692259b369a8a9a1","glsl-optimizer/src/mesa/math/m_matrix.h":"a37b19f182e070db3df93b0ede43c22fb8be8c2906504133ee6dbd7db1185d8b","glsl-optimizer/src/mesa/program/dummy_errors.c":"1820e305515b4c5e041f5e1623266a48ec8f076a155310be7d60637101f593e4","glsl-optimizer/src/mesa/program/ir_to_mesa.h":"b47f58d22e3ca2ae42d52501ea769d15c4476834944fa97eeccd3a3439211d00","glsl-optimizer/src/mesa/program/prog_instruction.h":"ab3832152a7e144b59e5a2264b2c29db56d93be31e76bbd958527a56771b40eb","glsl-optimizer/src/mesa/program/prog_parameter.h":"ba18c743284eadbc837c2c364c73e5d372321a7637a76e589d8d39fe8b5de225","glsl-optimizer/src/mesa/program/prog_statevars.h":"fc413698f84bc52d45fdeae0471934ee9904bfb7eac1a2b5f70446e54bcbbdca","glsl-optimizer/src/mesa/program/program.h":"1f01026a4eff440a3f122fd9b519d03546fe7f7d8be60dca834e95a2f8fbbfd2","glsl-optimizer/src/mesa/program/symbol_table.c":"6611cb9f078035bf5ff8c9112093a6c7d99f8af99a3931d0c07f227cc72283ea","glsl-optimizer/src/mesa/program/symbol_table.h":"631dc35ac48d5e87962d45507461920f6575610960ffcc42a08cefeb43300cda","glsl-optimizer/src/mesa/vbo/vbo.h":"6eb1dcd9a08c92f276c5fe08da184ff9d455d1be421913b8ad732a7b65e858fb","glsl-optimizer/src/util/bitscan.h":"9e49e694e6b34fe035bc685f32588827eb8cbe7d82878963c7ab52843e1c16aa","glsl-optimizer/src/util/bitset.h":"c40f78515c6230fed18345c6751ce33833a49da7a27901c7e6d7340cbdcbc5e7","glsl-optimizer/src/util/blob.c":"8f729846f66efc9c15485cc5fc24c6ec861fc1fecb2f652573f2a237d481b791","glsl-optimizer/src/util/blob.h":"93e1eaac866b9a7cd6fc03b533c18fb2edf0e97f03395eff4f3a605c4fc14d0c","glsl-optimizer/src/util/compiler.h":"79e3bf40a5bab704e6c949f23a1352759607bb57d80e5d8df2ef159755f10b68","glsl-optimizer/src/util/crc32.c":"2f3467a046b3a76784ecb9aa55d527698c8607fd0b12c622f6691aaa77b58505","glsl-optimizer/src/util/crc32.h":"59bd81865e51042b73a86f8fb117c312418df095fed2d828c5c1d1c8b6fc6cd4","glsl-optimizer/src/util/debug.c":"c3d68e9752ccc19e66c669562cd113cf1d0ac83cbb30174789e7fb8d1df58f9c","glsl-optimizer/src/util/debug.h":"50068d745c4199ccbd33d68dd4c8a36d2b5179c7869a21e75906ddd0718ca456","glsl-optimizer/src/util/detect_os.h":"343a8790d17a3710c6dd015ee367f84e3902ff3f2e36faca2bf93f9d725d3574","glsl-optimizer/src/util/disk_cache.c":"f533937e5a4fffe76e2739ef4b6b1e1da097d96d63eb808e68ebbc7027641c23","glsl-optimizer/src/util/disk_cache.h":"e83314fb14134a8e079b15e470a6376ba5a8253701f048c890a62b7e55d64bc8","glsl-optimizer/src/util/fast_urem_by_const.h":"e108fce804616c47d071dfe4a04163eec1126e448ed1aa89abb6b3a6d772bd5b","glsl-optimizer/src/util/fnv1a.h":"ab2596f19c6adf431ae27618f62c5743e24ad23ef83bb359a4c4c218245ab459","glsl-optimizer/src/util/format/u_format.h":"4cdfc0c59cbc99a092e5ec5a396910f2d93b9643e5d8141050b011e66f11e45b","glsl-optimizer/src/util/futex.h":"26f7c9d86e9ffef4c0fa2761f1aaa1918337302e20bd6ca10e61dc3c47356deb","glsl-optimizer/src/util/half_float.c":"11bc2584493d5d9d46e8c8a619a0307cf150bf5ab5d0f96bb764b061dc37a00e","glsl-optimizer/src/util/half_float.h":"7f7c380f126da1400a91758cc0392f24bf967bce1672890b62be26fe9fbd922b","glsl-optimizer/src/util/hash_table.c":"0ca40352e35dedab0a84c64c903f1b16d47e950bb5f43b4d22bb57d499bfea6e","glsl-optimizer/src/util/hash_table.h":"217191bb360592e2232f187473c10287d2cda8ae6fa5c53d0ef74c8c206118b4","glsl-optimizer/src/util/list.h":"9fab03c6a78186bb5f173269f825f6ce976b409d931852e3d93bac632e07989a","glsl-optimizer/src/util/macros.h":"63faf65b51058c483b17f1f77da51d1c53c8beab52678cb6bd01f1228a63b6b0","glsl-optimizer/src/util/mesa-sha1.c":"00c692ec353ebc02c06c57c5a71de0ab7a119f86a4146f452e65ec87e4944417","glsl-optimizer/src/util/mesa-sha1.h":"bff4c29f4bf7cdbcefb30fa0c996a7604a380eba8976467c2a60e7cd328f7e26","glsl-optimizer/src/util/mesa-sha1_test.c":"25da89a59d51469f77b4c468ca23ffdce0a7a1166a70b6cc23026a6800b0143c","glsl-optimizer/src/util/os_memory.h":"64555faf1760ae6954f42c83727c38dfc4c278e9152115779ffaad58b42adacf","glsl-optimizer/src/util/os_memory_aligned.h":"12d86fa94be38c13f7eeebdf313795e1267dd5a7187d2f0072e0e896f41702f6","glsl-optimizer/src/util/os_memory_stdc.h":"07360363b88c927065e10df71bebf6c8a0cc3b9167c9dfce55f2d65f11e6f787","glsl-optimizer/src/util/os_misc.c":"a9936e613ec84803abd59ad47c192c8e3939993c950ac91973fdc4cec1801bb8","glsl-optimizer/src/util/os_misc.h":"cc68eb12e05b5e749c54298cb4a6f4cd20cc5af7db3403e70b3c27b56090c740","glsl-optimizer/src/util/os_time.h":"73e775f7335244ff5964c678c27eedf1aea6abea44c4169d327ea8c7ce4a3a88","glsl-optimizer/src/util/ralloc.c":"4b51189595ef67bcef52c40cbf654d969041dbd15e15d4a893ad494ac060aeca","glsl-optimizer/src/util/ralloc.h":"e573c45875ff1530f0dbee9a93ae55535fdac8d5cc88a79ebc327c688824bde5","glsl-optimizer/src/util/rounding.h":"0450722353caf83de07e67f335949dbe95fe53b534052d4ee9d28d2781387614","glsl-optimizer/src/util/set.c":"86f8c9a830bead5a5a79bc970b0ff97809312af07b3beb39ef9d90af04d40a1b","glsl-optimizer/src/util/set.h":"3e39ca161e7ed4ec7c436cc9c7919ed9a55ed1b71edbf2caf6f9bcfd9bc578ed","glsl-optimizer/src/util/sha1/README":"00af7419af05247081858acb2902efd99fcda2ce16e331079f701645bb3729c0","glsl-optimizer/src/util/sha1/sha1.c":"1403bbe0aad42ba3e6be7e09f7cad87a6a8c4ad5b63962f7b92b9f37d8133b04","glsl-optimizer/src/util/sha1/sha1.h":"68d9f240eab2918026ecdf22be36811abbd4f1389f6c36e31258041aeaedd247","glsl-optimizer/src/util/simple_mtx.h":"12c6c3c4b7db9168bc656d5b3c65912075084d2b388c415d5c3d3f5953a9d6c7","glsl-optimizer/src/util/softfloat.c":"a97e51a96fe5e6a052c02aa6bbec683fe73fb88a8c087d9c930503e2120d8a2e","glsl-optimizer/src/util/softfloat.h":"66664b0250e83bf5dd4cc743acd119d076efcea624a0eab3d6b60718e6ee8811","glsl-optimizer/src/util/string_buffer.c":"63a1d1b1e34926c88ea00159cafbcd56568b805c4f64d1e8c97169fe313921fc","glsl-optimizer/src/util/string_buffer.h":"7b88d1b1d9c6cfb8e93331813535c127289437c75f822029e9a3bca8ea6b52ee","glsl-optimizer/src/util/strndup.h":"0273c4fdb7482cd7746881a63d3998648c6d63415ba85af1d1860f0e0dc504c6","glsl-optimizer/src/util/strtod.c":"5cf610d8a37373cf37cfb7aae903525d943b2674b1f32594c70b0eb19a8c9697","glsl-optimizer/src/util/strtod.h":"237396def4e264d35ed4bedea00ef9a4ceab6d7a11a18c770d9747d22c69ed2d","glsl-optimizer/src/util/u_atomic.h":"c02e809526c6c09ba8fe51f50b2490d1b6c8e5c7f3c4031ae958250d098fc3bb","glsl-optimizer/src/util/u_debug.c":"8c060e379b816618f3dd22c9ea523c68b9425c76c36a7dfe5d6d375b337f5f4a","glsl-optimizer/src/util/u_debug.h":"e11e26edd9b9e4e6f8e6a435e69f4d9edda27e9a379f68f4c82ea2525aaaea68","glsl-optimizer/src/util/u_dynarray.h":"853d0fa6ff2261614488be624deb8a2b01e57c2c8eabc28578cbeed4ccc95694","glsl-optimizer/src/util/u_endian.h":"3ccea7e529740318d8a4b05c00db3adc9d1e292a52bdc56a05c9fae99209720f","glsl-optimizer/src/util/u_math.c":"c868a8c0886dc78f1b06b13404ba8b253090449045774dd56893ac9d75795184","glsl-optimizer/src/util/u_math.h":"a04e32e126db016413f9de0a2028a3e71737137463b1289eae576f884b06fcf1","glsl-optimizer/src/util/u_memory.h":"c5db17c724c70283ddbe04165722f6988d4e0eb9aa3602ae472feff016649af9","glsl-optimizer/src/util/u_queue.h":"92930ce236c0528a98b695f5cea8c5c6aa9683beaf71a2227bdc5d33d1b21506","glsl-optimizer/src/util/u_string.h":"c5a2f4ef576d1547bda12c4ea219179fefa54414977743ac094abcaf696ef6ca","glsl-optimizer/src/util/u_thread.h":"00b708459b27f9910d18db92c18cc65cfc618ac2b3cd144e45f8640057b10d58","glsl-optimizer/src/util/xxhash.h":"2f2aff2fc6c0c929f52cf6ae7314122124c5be026d41ad1c357608383c4a37ad","src/bindings.rs":"79993db2058bde39f99ef483d02560d33b1cb882f6a552319e8b86eb6f9021e1","src/lib.rs":"04be1554cd829eb40864b06d80b491dd48117a4e3a601c7d482117f7a0391e67","wrapper.hpp":"f3ea34cc496f7d90b9bfcada3250b37b314c3524dac693b2ece9517bc7d274ac"},"package":"8ba4741358604ca0848c27ecc069d68e62e11cde81e38aac1da3c54b79ab5adf"} +\ No newline at end of file ++{"files":{".cargo_vcs_info.json":"7075d1c5c5e19288cefb431f16462eaa23229d02791120f4885ab1d20470cb7e","Cargo.lock":"f7970552595dc803ace9ef19b5f5d7b1fc784aac30cb27b2ebc3002d97122b9d","Cargo.toml":"7c53ee20d848f9913cacbfcb3ab2e89e30deee8d619d173c95130c7c5d065827","README.md":"4468e08c64c19977707d792bfab0080e35ff927b64990eab77873f8ba056ba1c","build.rs":"92e29699487c21389fc823c50b410cfbfc74cc774265d24958489909ee48a076","glsl-optimizer/.editorconfig":"dca7ff05a95f608849c4dc640af7f83a0f415618e327a2ecb6a0afa0d9d2bacb","glsl-optimizer/.gitignore":"8ba554a4ca510ea7d9684475aa043edbeba7d15a5c9c4a04d8b1379a04ec6270","glsl-optimizer/CMakeLists.txt":"42ce94744e82ffa000da8b64d81fc140e293b9f5da7dd4cf6b49e7404a2448d9","glsl-optimizer/README.md":"b18eef11a92d267d88a937b1154f7670ee433c730b102fdf7e2da0b02722b146","glsl-optimizer/contrib/glslopt/Main.cpp":"14ba213210c62e234b8d9b0052105fed28eedd83d535ebe85acc10bda7322dd4","glsl-optimizer/contrib/glslopt/Readme":"65d2a6f1aa1dc61e903e090cdade027abad33e02e7c9c81e07dc80508acadec4","glsl-optimizer/generateParsers.sh":"878a97db5d3b69eb3b4c3a95780763b373cfcc0c02e0b28894f162dbbd1b8848","glsl-optimizer/include/GL/gl.h":"1989b51365b6d7d0c48ff6e8b181ef75e2cdf71bfb1626b1cc4362e2f54854a3","glsl-optimizer/include/GL/glext.h":"2ac3681045a35a2194a81a960cad395c04bef1c8a20ef46b799fb24af3ec5f70","glsl-optimizer/include/KHR/khrplatform.h":"1448141a0c054d7f46edfb63f4fe6c203acf9591974049481c32442fb03fd6ed","glsl-optimizer/include/c11/.editorconfig":"f96a2354e5f2b90367d643e6d9e980ce76278d4d47afd8b2713b595753aa8b4b","glsl-optimizer/include/c11/threads.h":"56e9e592b28df19f0db432125223cb3eb5c0c1f960c22db96a15692e14776337","glsl-optimizer/include/c11/threads_posix.h":"af71966cbf585ff16786900de5d9466bd360d4f7dae8ba7d123beda3f7eafa5c","glsl-optimizer/include/c11/threads_win32.h":"95bf19d7fc14d328a016889afd583e4c49c050a93bcfb114bd2e9130a4532488","glsl-optimizer/include/c11_compat.h":"103fedb48f658d36cb416c9c9e5ea4d70dff181aab551fcb1028107d098ffa3e","glsl-optimizer/include/c99_compat.h":"aafad02f1ea90a7857636913ea21617a0fcd6197256dcfc6dd97bb3410ba892e","glsl-optimizer/include/no_extern_c.h":"40069dbb6dd2843658d442f926e609c7799b9c296046a90b62b570774fd618f5","glsl-optimizer/license.txt":"e26a745226f4a46b3ca00ffbe8be18507362189a2863d04b4f563ba176a9a836","glsl-optimizer/src/compiler/builtin_type_macros.h":"5b4fc4d4da7b07f997b6eb569e37db79fa0735286575ef1fab08d419e76776ff","glsl-optimizer/src/compiler/glsl/README":"e7d408b621c1b605857c4cab63902f615edb06b530142b91ac040808df6e22f7","glsl-optimizer/src/compiler/glsl/TODO":"dd3b7a098e6f9c85ca8c99ce6dea49d65bb75d4cea243b917f29e4ad2c974603","glsl-optimizer/src/compiler/glsl/ast.h":"3e68ff374350c49211a9931f7f55a485d8d89fc4b21caaffbf6655009ad95bf8","glsl-optimizer/src/compiler/glsl/ast_array_index.cpp":"92b4d501f33e0544c00d14e4f8837753afd916c2b42e076ccc95c9e8fc37ba94","glsl-optimizer/src/compiler/glsl/ast_expr.cpp":"afd712a7b1beb2b633888f4a0911b0a8e4ae5eb5ab9c1e3f247d518cdaaa56d6","glsl-optimizer/src/compiler/glsl/ast_function.cpp":"74f4fbd490e366b37f4715168bb3465ecd9334d4130942f75dcc8e80e8e7f027","glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp":"d0f798eb09271d41d068b9e7b18220d37f1ed0083300ab51eba30989698fe23d","glsl-optimizer/src/compiler/glsl/ast_type.cpp":"8eb790b24b26dfb72bdc333744b566c26d8464c5d47d20eae659461f5c4899f7","glsl-optimizer/src/compiler/glsl/builtin_functions.cpp":"454189d643c220fcb49116ee5c8a34f7b349aa67564040deb8607f6a41a15e70","glsl-optimizer/src/compiler/glsl/builtin_functions.h":"a37cad7ed09b522c5b8bec7b80115a36846e7ba6e0874a2a858e32f7f202c665","glsl-optimizer/src/compiler/glsl/builtin_int64.h":"619def6f3aebf180da3944ef08f159ab12a58b24767e41d8b985ac37ded54d62","glsl-optimizer/src/compiler/glsl/builtin_types.cpp":"afec060b62d6f3b00bfbf94e9fa5f96341ce096c128d1eef322791e6ed9cea4d","glsl-optimizer/src/compiler/glsl/builtin_variables.cpp":"6563bfb1345cbca4c77e00eef09ad152f3e1dc271d246a08c5ce9e1f4ce4250a","glsl-optimizer/src/compiler/glsl/float64.glsl":"1072fd888be48c2a7a5117cd2d92a65f034965a66375f598bb856bff5d7be766","glsl-optimizer/src/compiler/glsl/generate_ir.cpp":"e5f0175370a0d07f93c48d3f0f1b8233d12c64a7b02de02dcc753ef7b398ef0f","glsl-optimizer/src/compiler/glsl/glcpp/README":"a0332a1b221d047e9cce5181a64d4ac4056046fd878360ec8ae3a7b1e062bcff","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c":"2d179879b1ffe84f58875eee5b0c19b6bae9c973b0c48e6bcd99978f2f501c80","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l":"e4c5744c837200dafd7c15a912d13f650308ea552454d4fa67271bc0a5bde118","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.c":"03494f9ce1cb82260506e2559e73a3eeb622c4bd51b65eaa0a2c3351862bd4c8","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.h":"264d9a18421cde255ce34a0a62b3d8e73465359f0d167e64aa3973062aae5bdd","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.y":"fafb66e3a8f149d19e085f18a4273ba6d4c11af9e9a01d665cc784dddf97b79f","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.c":"37ed294403c2abfd17fd999d1ae8d11b170e5e9c878979fefac74a31195c96b0","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.h":"85ac8b444bcbd0822b66448a1da407b6ae5467b649f5afaf5c58325bd7569468","glsl-optimizer/src/compiler/glsl/glcpp/pp.c":"a52d94f1bcb3fb2747a95709c4a77c25de7eea8354d2b83bb18efd96976a4473","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.c":"d11aeb3acfe966d1b78f1ee49804093f2434214c41391d139ffcb67b69dc9862","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.h":"abbf1f36ec5a92d035bfbb841b9452287d147616e56373cdbee1c0e55af46406","glsl-optimizer/src/compiler/glsl/glsl_lexer.cpp":"272b9fc1383d72b81bfc03fa11fdf82270ed91a294e523f9ce2b4554bd3effa9","glsl-optimizer/src/compiler/glsl/glsl_lexer.ll":"2b57d9f9eb830c3d7961d4533048a158ee6f458c8d05c65bea7b7cfbc36e4458","glsl-optimizer/src/compiler/glsl/glsl_optimizer.cpp":"f8095d20629d0af70be930b0612e169edb274551a1d25a3cd1bf9995a11ce2e8","glsl-optimizer/src/compiler/glsl/glsl_optimizer.h":"22e843b4ec53ba5f6cd85ca5f7bad33922dca8061b19fb512d46f1caca8d4757","glsl-optimizer/src/compiler/glsl/glsl_parser.cpp":"126baf368d525aba301854e3d91ba60b5aee32e1102376af71416f32cb95ec48","glsl-optimizer/src/compiler/glsl/glsl_parser.h":"2ea9a50716098a8f7bef782d2a030d757b68da73afb01b4d4940d3e8381d44e8","glsl-optimizer/src/compiler/glsl/glsl_parser.yy":"6b1fd1576b29fce005dff744a6dbd0219e4c695c361d61864e1f3a8d6fa6b764","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.cpp":"aad64b5b66467da650091430681e8c6a820cf3cadc4db3c160bf2f15875390ae","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.h":"71fd0e92bbdb193dfb067d7bfdb1200d77392be2fbd0cbfc9ca89d1bb4c7e741","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.cpp":"6660fb83c0ddddbbd64581d46ccfdb9c84bfaa99d13348c289e6442ab00df046","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.h":"24682b8304e0ea3f6318ddb8c859686bd1faee23cd0511d1760977ae975d41bf","glsl-optimizer/src/compiler/glsl/hir_field_selection.cpp":"72a039b0fcab4161788def9e4bedac7ac06a20d8e13146529c6d246bd5202afd","glsl-optimizer/src/compiler/glsl/int64.glsl":"303dbe95dde44b91aee3e38b115b92028400d6a92f9268975d607471984e13eb","glsl-optimizer/src/compiler/glsl/ir.cpp":"2b4741cce90b5d4abff5d719c7324e2693c67294d4d99736cb241554adb281bc","glsl-optimizer/src/compiler/glsl/ir.h":"990b1c74447c4eb4835353ccb0ed9aea644f97fc1129ef1739cd935075d85d2e","glsl-optimizer/src/compiler/glsl/ir_array_refcount.cpp":"8cdc1cffe01e42e0566fa2193a75f789628e8025ad1b82f0ee6f204451b7f9f7","glsl-optimizer/src/compiler/glsl/ir_array_refcount.h":"75f06ec81342b379096ca52e1dc0fd5f19a11ff8e9b58203c20628179d644c12","glsl-optimizer/src/compiler/glsl/ir_basic_block.cpp":"1e2920b1c0ecb08424c745c558f84d0d7e44b74585cf2cc2265dc4dfede3fa2f","glsl-optimizer/src/compiler/glsl/ir_basic_block.h":"81be7da0fc0ee547cd13ec60c1fcd7d3ce3d70d7e5e988f01a3b43a827acdf05","glsl-optimizer/src/compiler/glsl/ir_builder.cpp":"daba29c5a1efdd5a9754f420eb3e2ebdf73485273497f40d4863dadeddb23c0d","glsl-optimizer/src/compiler/glsl/ir_builder.h":"2822e74dd3f6e3df8b300af27d5b11ea2dd99d0e5e7ca809b7bbcce9833c483c","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp":"8c6df5abf2fe313363f285f171c19ca6c8ee4f3bc2ed79d33c0c88cc8be45c48","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.h":"799852adc3a0e54d04080655e7cebfa0d3bf5b6ffed5d8414f141380665d4db7","glsl-optimizer/src/compiler/glsl/ir_clone.cpp":"d897a4e1f5bbec4a6a2f15044c1be9a4d13899c73be77335b041049a4589aa5d","glsl-optimizer/src/compiler/glsl/ir_constant_expression.cpp":"78bd87ddb09db67f6c499067728d72aef4f16aa02721a99a4b769d1e0cfa9010","glsl-optimizer/src/compiler/glsl/ir_equals.cpp":"bca28533a6310b0fc152b56d80872368f1510dc62ed6e8ac199b9ffa7fac02e7","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.cpp":"7e918d4e1f237eca01396004015865ce345afe32a876c9dbc6728576a1a7eae4","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.h":"f45b66aa9497520e7e08e612d24b308477c34477fbd963ee9320eac664957f16","glsl-optimizer/src/compiler/glsl/ir_expression_operation.h":"cc9f10727dbd26cac506804f51456302c702650f9eeb59054a7e1575d5cf6687","glsl-optimizer/src/compiler/glsl/ir_expression_operation.py":"7b86c96021b9fbe165957f4ecb0b612fefcde1c2cf3c6d75e3cdb22e369216ba","glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h":"9ad3346416392e3efa11e12ecf2feca7453c5253d241eb96c91dfb85d4f2b971","glsl-optimizer/src/compiler/glsl/ir_expression_operation_strings.h":"a6826daf496a8b9e89885bc2a161ac3445d501b23c6e0ac33e2c01b506b273c8","glsl-optimizer/src/compiler/glsl/ir_function.cpp":"7537365fc0fbe4b37a26b9a2146cc64d3e9a774d60eab63b65002ad165ae8fc7","glsl-optimizer/src/compiler/glsl/ir_function_can_inline.cpp":"faddbf112187a048d502716a3fb82570a322299ba2a3abd79388382c82040bfc","glsl-optimizer/src/compiler/glsl/ir_function_detect_recursion.cpp":"9176973eaf5c0a984701f953bb7a80f37dca43d59b5bce50fc69b3f02f2902d7","glsl-optimizer/src/compiler/glsl/ir_function_inlining.h":"9739493f99c489987d650762fccdd3fb3d432f6481d67f6c799176685bd59632","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.cpp":"3725861fbe2b98e0617f52d3b14cf6d3b25fb5ec00f5ef5d308b03642f592767","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.h":"e0560210e966c0c31e4ca843e80ea154e64db5a444b8c2df845b6ba5b3a43fc1","glsl-optimizer/src/compiler/glsl/ir_hv_accept.cpp":"caf7ce2cd9494aadd3c58bcf77f29de58368dc9e347a362bbf37f8bda9509b80","glsl-optimizer/src/compiler/glsl/ir_optimization.h":"8b3dcfc7f9e96b21a8dd47a0040d90be483a9e67a2cdce3a697188fb758d4630","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp":"f8e34a983452be0dcb5a695e9c8e895eead24f9e540992a8afe510ae85da4c4c","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.h":"1ad1bd3efd1ace39051c13f904c05fd80425d329444f9a8d47fd6d948faf46e0","glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp":"643f5a68aae3fb37267fd793f1216d1cfdeb2c09338c26b1f30e4c6deaef4de5","glsl-optimizer/src/compiler/glsl/ir_print_visitor.h":"4573eb93268a2654c14b505253dd651e2695d43dc745904d824da18305269b95","glsl-optimizer/src/compiler/glsl/ir_reader.cpp":"06bfba802c8354e5a8b2334b6d78d6297de18235bedd3f8fbb382c89870b02f2","glsl-optimizer/src/compiler/glsl/ir_reader.h":"63e3f7f1597936a7011d5b520e171b197bf82bee6c1560d822c3edf5aaa6f9e9","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.cpp":"84b5c5d746555adca85759c2912fe48010232b7c1c0bd2cf03bd04067a85e66f","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.h":"fd8c561b71085d3211fff85ed514fecb299d8ce19a04bc063419a55b6d840525","glsl-optimizer/src/compiler/glsl/ir_set_program_inouts.cpp":"ab9f115ce9e7f312d9c7978340ced0dc4ae6d13a80e08442ba9709d11d50cae5","glsl-optimizer/src/compiler/glsl/ir_uniform.h":"683ae6896b1a08470c090be5f822fc31cd434eab9216e954b9bba24a46975109","glsl-optimizer/src/compiler/glsl/ir_unused_structs.cpp":"9c1620c45f2fc071fe5ed828472040b14c5f42effe06aa0e3b8352c95ef78786","glsl-optimizer/src/compiler/glsl/ir_unused_structs.h":"13387b49c23093575276b25b9dfd31fedd8f131c5c4f3128ab04cf03e15b5295","glsl-optimizer/src/compiler/glsl/ir_validate.cpp":"6b232be5999a86ea278f4f15b2832d76843246509118d924243055a3b9b0299f","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.cpp":"2764a3cad937d53f36db7447c3a5b98b04bf153acf81074d971857fc5bca460d","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.h":"b0668e3eb1501ef65e38fe12830742ecb3d28e6039f30e366c8924efc29b4a39","glsl-optimizer/src/compiler/glsl/ir_visitor.h":"f21b3534c3d66d5fb707d1581fece7e1eb043523afbaedf89918cfb031c6df94","glsl-optimizer/src/compiler/glsl/link_atomics.cpp":"360f0209e11f367ba358223597b0a118bae095bff16337cf03f1fb89c5b80ca6","glsl-optimizer/src/compiler/glsl/link_functions.cpp":"de7895da8aa33a1e3c2c1eb2fdaf267ab5d1fbfdb79ae2e67f95211e946e294c","glsl-optimizer/src/compiler/glsl/link_interface_blocks.cpp":"1926cfa73810704eb19b916c1b2cdb9321155e2f98b2a0a57c7c3c6e960540cd","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.cpp":"1e14e06ca3b2c1089cfba2e8eaf0c1f373d9d6374b6082f320962dd71ae09611","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.h":"fd58c155af645295bb6aec08797889de586f4d919731de2bce57e8dce59bb048","glsl-optimizer/src/compiler/glsl/link_uniform_blocks.cpp":"09589f49776dce32e6c4044937de7e0c839a9754ad31960148f8f9e010658997","glsl-optimizer/src/compiler/glsl/link_uniform_initializers.cpp":"bf98e08c12db466acf9623cbeb8fa8e3b4002512722e7a6521287f558a099f37","glsl-optimizer/src/compiler/glsl/link_uniforms.cpp":"84bad5b1377362cecf259b05124239be5220b03ce1c0c61b59bd9a47e4379af2","glsl-optimizer/src/compiler/glsl/link_varyings.cpp":"a5f1a53e7c80d635515fe808ff223d89fef1767abb0f2b7aa28fa6773dca353f","glsl-optimizer/src/compiler/glsl/link_varyings.h":"b9dbe018f038df69763df2e928742ce81bbc6e3aaba26f50621e30a6d9aa6220","glsl-optimizer/src/compiler/glsl/linker.cpp":"40b1ecd5d4f6c7f13d5a87ce390561a51fdf6f3fcd9b2197b9c88b03a773ba94","glsl-optimizer/src/compiler/glsl/linker.h":"ecf94b4ad75ef461c27c557fda4bd25f34c91930822b8e1d729ec84520d4a049","glsl-optimizer/src/compiler/glsl/linker_util.cpp":"1663ad88e2a369305659aeeffaedb5bd752cf76340a2ba5797fc0bf600633cf9","glsl-optimizer/src/compiler/glsl/linker_util.h":"6db788daf9c8e87ae2764b61a8b37ebe419e69c1b82ddee01986e37c978c6993","glsl-optimizer/src/compiler/glsl/list.h":"b1f46ce0e552fe7c45b2a19408a9d97662e23e4b182ab335491c26f8cf25886f","glsl-optimizer/src/compiler/glsl/loop_analysis.cpp":"57ecd573477c68091c7cc99537faa7139a8f395935e3d4f10144cefdefb5a611","glsl-optimizer/src/compiler/glsl/loop_analysis.h":"a85f045a038ee5b5176063e85d7988865862c44ab0580f771b993a042d0b69cc","glsl-optimizer/src/compiler/glsl/loop_unroll.cpp":"bd4292ea2809f5a669bcb76ceaa1ac365772dcd638c579c3ed10275214901a54","glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp":"8cfbef140d9c4b4d2f57bfa05c9c374d31a121d0f87afce94333f049023b654a","glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp":"1ae221c3c7a95aeb867207e7a742be635f91b406c157747bfd6ddf10274d97fb","glsl-optimizer/src/compiler/glsl/lower_buffer_access.h":"807886953a576a323591798cbca5e2df24295ea893b28affd8ffb5926cebaa04","glsl-optimizer/src/compiler/glsl/lower_builtins.cpp":"4d81afc32cf58e1481fcb5e42888ab93dbe6820310a20ff7a9982b77b2152d9b","glsl-optimizer/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp":"608403f0eeeedf21cfcd3014116e0f44e28cbdf6c4c32aac7e613e64e30205e1","glsl-optimizer/src/compiler/glsl/lower_cs_derived.cpp":"179905cd47a294122adeb5b0abfed6f2f67782dcde21b544d1ee2c1985154e66","glsl-optimizer/src/compiler/glsl/lower_discard.cpp":"3b361b2db0004d544d64611cb50d5a6e364cf6c5f2e60c449085d7d753dd7fb0","glsl-optimizer/src/compiler/glsl/lower_discard_flow.cpp":"f5c29b6a27690bb5c91f196d1a1cf9f6be4f1025292311fe2dac561ce6774dee","glsl-optimizer/src/compiler/glsl/lower_distance.cpp":"a118c85493d5d22b2c059a930c51a5854896d4b1dade76598eaa985e5a3dff8c","glsl-optimizer/src/compiler/glsl/lower_if_to_cond_assign.cpp":"469e617757fd1728709cce021aac5c8da05ee503bf5366977bdc4ef7a6d83950","glsl-optimizer/src/compiler/glsl/lower_instructions.cpp":"6ff5c396abe40d8a2145d571e99e2bbe9143393e15aafc28adc2803a01d821b6","glsl-optimizer/src/compiler/glsl/lower_int64.cpp":"d1ed41196880dd53c7b13e2782f9423f8442bf1d46186e8be92b1b66218a83ee","glsl-optimizer/src/compiler/glsl/lower_jumps.cpp":"34de7b493f281589fb0c2c0f6e885d0a0fabbe7a4e97a73de374dd714777a58c","glsl-optimizer/src/compiler/glsl/lower_mat_op_to_vec.cpp":"dff7a308edc4846c348ed4225c6699a9c75abac68d88f41f85954276552779f4","glsl-optimizer/src/compiler/glsl/lower_named_interface_blocks.cpp":"16063ac127bff75a68272070ab11c21c25101edbff62b4c68f4983b4cd941af0","glsl-optimizer/src/compiler/glsl/lower_offset_array.cpp":"3b00773399135aea85746a5a68b96ef000bc6841be1a2c8e6f25c516628b0949","glsl-optimizer/src/compiler/glsl/lower_output_reads.cpp":"a0fc9975d5aa1617e21fc6c353659a9802da9e83779a3eef4ec584f74b4dadc5","glsl-optimizer/src/compiler/glsl/lower_packed_varyings.cpp":"7550099d4ae123d71541c2fc88bc04fbfe9271ec75d7e210987d1c8cac3cf3ea","glsl-optimizer/src/compiler/glsl/lower_packing_builtins.cpp":"79a13d161fe505a410ab948d92769395708693ec888153630fa240e5b97e356f","glsl-optimizer/src/compiler/glsl/lower_precision.cpp":"f82a185b879872b977a1787d8061b9a80bc4cf8db1b970db6efba2ad9cc20fa2","glsl-optimizer/src/compiler/glsl/lower_shared_reference.cpp":"ea2dccf50a83bc19391bf6b7ab6aa53c0005f427af4066d25140340af9a4beef","glsl-optimizer/src/compiler/glsl/lower_subroutine.cpp":"f69fa53650eeb6f2944fce4d36a6e0a423e6705f3a3bd3389c7fadb83cfc8802","glsl-optimizer/src/compiler/glsl/lower_tess_level.cpp":"b196c9d424c0569f3e85d75c2d125af21566cb113d69036db87c0990703e0fa7","glsl-optimizer/src/compiler/glsl/lower_texture_projection.cpp":"4d247f244272adc8250fd888d8d932a140dd5de4d1efc7a58492c3c2b8291527","glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp":"89bdbc6c1669230c644c0857db1ce2781ec61d349ecd08c7914146e1f4750a4a","glsl-optimizer/src/compiler/glsl/lower_variable_index_to_cond_assign.cpp":"fce930f29ac9405b297d1f749d68f59506b89c70b4ee1b1ab8cf49a34cc71ecf","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp":"3c67d851a11a55fad1c49a550f3a0cfe50892d33a3f238ce266cd829eba510a8","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_swizzle.cpp":"f5ec666b73e1415cbab32519a53605ed385f3b03e889560373dbce69dda5000e","glsl-optimizer/src/compiler/glsl/lower_vector.cpp":"f7c13f5572ebe09b6a71553133b2cf003cd4b77b9657600672ee3b21bf890725","glsl-optimizer/src/compiler/glsl/lower_vector_derefs.cpp":"b05793da6dd620a531b43df5af8b2ecbc37b9db0c88910f5724ea10bcd057e19","glsl-optimizer/src/compiler/glsl/lower_vector_insert.cpp":"fee772ec17eea5e86a529bf9c5fa2ee0d29a5982bb75ebc6d68ed36cd19aa299","glsl-optimizer/src/compiler/glsl/lower_vertex_id.cpp":"690e8715182e03fead5cc5a35251fb4f41b357e4c71a1dfbc4bd7be19862b56d","glsl-optimizer/src/compiler/glsl/lower_xfb_varying.cpp":"58c0e8b270e4bbde54250be03cdb2f36966bcafb785372ad2e2b786835df7f9f","glsl-optimizer/src/compiler/glsl/main.cpp":"ae5e88abbbc8a12f769e1296bad938b9d7398cc6da0d3d0caeceeeb876536850","glsl-optimizer/src/compiler/glsl/opt_add_neg_to_sub.h":"f5054944bfd068810629080d0ea11df78b3f57a8f86df75e13ca50157ad1964d","glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp":"25f45b20e1972ee8c789177a1aeda6e4286c25db2eae3a43ff83029ae64969c0","glsl-optimizer/src/compiler/glsl/opt_array_splitting.cpp":"19d3ce0e815438f4df9ab2890e767b03a4f3f191b53bb30c0217cf2ae6a95430","glsl-optimizer/src/compiler/glsl/opt_conditional_discard.cpp":"0e44e0e126711a3725c1f3a2aa65ff03c381fed08680ffc30101aae60f716c4e","glsl-optimizer/src/compiler/glsl/opt_constant_folding.cpp":"a088d04d9b45f9e55e235835648f614c89b7803c03a6d4f6a6d1a6bc1f0228bd","glsl-optimizer/src/compiler/glsl/opt_constant_propagation.cpp":"8a9440d77ecd6dcf13e683cbb99943aab6311c8fd4b5f6a9189a8d4f270746f4","glsl-optimizer/src/compiler/glsl/opt_constant_variable.cpp":"63d3ccd4dd09f19c9cf1a2f51592111bed41284504f29f3c0de4cadebc439a37","glsl-optimizer/src/compiler/glsl/opt_copy_propagation_elements.cpp":"ffa0f50863995e0d2e31f55a52e82319edc71e520987bebd7f7e561ea331c64b","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_variables.cpp":"84e8747b948232f01dd56b428b9315f96f9511f605f240119fc446fae28981a9","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_varyings.cpp":"761523e88f5b3ba785170f4d7205e94fa99acb7e74d29efbe40e1c010e1dbdb3","glsl-optimizer/src/compiler/glsl/opt_dead_code.cpp":"fd1ba2da7337d4e5dad17f5c2d73d9cc8880305f423e85d64cf94553588fa401","glsl-optimizer/src/compiler/glsl/opt_dead_code_local.cpp":"969a598b4df322baf222258a66cd64a326ea20e5b3125be9d8d1771f522c69e0","glsl-optimizer/src/compiler/glsl/opt_dead_functions.cpp":"774cae6536d02edf26e996a2a895e1f62d5098f16dc96b44798b4fc731a9a95f","glsl-optimizer/src/compiler/glsl/opt_flatten_nested_if_blocks.cpp":"3696a5c55f02e20056e085bc2714f73ac992f221b6f3387d655068e86b512046","glsl-optimizer/src/compiler/glsl/opt_flip_matrices.cpp":"44f0fe05b49329667671f88c96dc86ab3fe1459ff7b87f2b2d88de2d49829f9f","glsl-optimizer/src/compiler/glsl/opt_function_inlining.cpp":"fb56a33c90419a01676b57cbd91d0674a54cca40e6defaacc88dd33facebc131","glsl-optimizer/src/compiler/glsl/opt_if_simplification.cpp":"ac406eb35e379c357641d6c5749f50c65961455924d3dc884e2b90046fa92c5c","glsl-optimizer/src/compiler/glsl/opt_minmax.cpp":"8abd59d3b14ef60ff14a9c69660e6945f5cf10b97edb4afebe56be3f81d96316","glsl-optimizer/src/compiler/glsl/opt_rebalance_tree.cpp":"8bb6329dc0f299042368fc81934c2df019b45ab9f7aa0415d4e57b8d1ff98c9f","glsl-optimizer/src/compiler/glsl/opt_redundant_jumps.cpp":"222c73e2ac7a938ebb6428cc6c780c908ff6156d8ff935b04fed93a48fc10496","glsl-optimizer/src/compiler/glsl/opt_structure_splitting.cpp":"2edc79cc13f3177934e0443ad62f5976a1991f01f86ea303a803434849b13a47","glsl-optimizer/src/compiler/glsl/opt_swizzle.cpp":"015d0abddfe507f67c4b96c82988d861d018ededf7bf055e2bcbe9ea92da694e","glsl-optimizer/src/compiler/glsl/opt_tree_grafting.cpp":"46d28ac983ea244a4315bdc0e8892979ec4d1f9b9a96ac8a8a08006d9bc5e878","glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp":"d80ee43bb97d9f016fb9c5e1e06f5b2afa569811f368ba067be794ec11d085fb","glsl-optimizer/src/compiler/glsl/program.h":"2982447e2abd35371e273ad87951722782a8b21c08294f67c39d987da1e1c55f","glsl-optimizer/src/compiler/glsl/propagate_invariance.cpp":"080943e21baa32494723a2eefb185915d2daae1f46d6df420145c5ad6857e119","glsl-optimizer/src/compiler/glsl/s_expression.cpp":"1ced972bc6ecc8eab4116ea71fb0212ab9ae5bcc0be3b47aa5d9d903566b3af1","glsl-optimizer/src/compiler/glsl/s_expression.h":"65b847e30e22a809b57d0bc70243049c99d9c6318803c5b8d0826aba55dc217e","glsl-optimizer/src/compiler/glsl/serialize.cpp":"be0eb4251348a9d921acb839a5c48c6023a2e9d116d602bb0432787ab623655d","glsl-optimizer/src/compiler/glsl/serialize.h":"57425732eba1233d928e5f07f88b623ce65af46b3bb034bf147f0a4b7f94f9a1","glsl-optimizer/src/compiler/glsl/shader_cache.cpp":"e0c5c433f2df3fccdf1d61281bfcb0ee5633433339b97c697d64db99611cbaaf","glsl-optimizer/src/compiler/glsl/shader_cache.h":"9217164d8d7f54aca0fe5922c7187095a6ae0cb703b196b79805aeef07a7e697","glsl-optimizer/src/compiler/glsl/standalone.cpp":"8e6c416a14d631261917a5fe4cc91880c287b22b2dfd70eb22028289a8fa5364","glsl-optimizer/src/compiler/glsl/standalone.h":"a7c397d1dfdd1e7fb2cfe99db35cd9df93251e642059208533202b7f20497f83","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.cpp":"970d14b7a9d58e5270321f97bf5d57795558b1c570a56678e04a65b26c60bf4f","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.h":"d921a617ea82b9e49413314492a645c44356de503581b1be3f1b57de236e480d","glsl-optimizer/src/compiler/glsl/string_to_uint_map.cpp":"d824bf5b839bd39498dc9e457103cdbe3e5289ddf7564107c27b1505948dd31f","glsl-optimizer/src/compiler/glsl/string_to_uint_map.h":"e2f18e66359c9d620e085de7f4a334a47df9c66e65a5bfe8b734c627bec04104","glsl-optimizer/src/compiler/glsl/test_optpass.h":"b27b8f35f5387e7ce4982bb51c7b63ccf14f91757f3108a5d02ed006925bb8a0","glsl-optimizer/src/compiler/glsl/xxd.py":"376484142f27f45090ea8203ae2621abf73f06175cb0ee8d96f44a3b9327f4bd","glsl-optimizer/src/compiler/glsl_types.cpp":"044bb6754f45419a3151e7a25c39202a82009ae3c6bc54ff7f0bb4258a5deefe","glsl-optimizer/src/compiler/glsl_types.h":"fd899a42f34ddeb8601bc3cd6c5e3aed82fc8aef4042dde1b39b3c01e1dcc219","glsl-optimizer/src/compiler/shader_enums.c":"436bff5216b11b0980bdfada5885fc6ac9afa2037a3027fcd6eea2a8635597ac","glsl-optimizer/src/compiler/shader_enums.h":"13220442a5c02e83540cf2c0ad4f8417b2fbda5f2586dec4e92082544c937cdd","glsl-optimizer/src/compiler/shader_info.h":"4c5453e81197ca83593ee4f365074b23530f2ab21c78e1733b63dec6f344c12a","glsl-optimizer/src/gallium/auxiliary/util/u_half.h":"3c2b37bda3ccb64387e44b723d29cf9046decab1a893bf42d842e9603398bdee","glsl-optimizer/src/gallium/include/pipe/p_compiler.h":"c75620096ce8523dae90599e50aa2ef6468d3b0e368a77795edeb20dd1abfc0c","glsl-optimizer/src/gallium/include/pipe/p_config.h":"a27692fc35f9e55df3224b7529e66b3001e911e94e6bc5f8f569e493e1ee3fb7","glsl-optimizer/src/gallium/include/pipe/p_defines.h":"be26d68c0acc67c5e44788c6299716a9eee415fd81d7d747e3738a829e3b6b38","glsl-optimizer/src/gallium/include/pipe/p_format.h":"5674215fc41d27496f037cf837717daefbf23ebb38d40ace7c0c414bc08182b0","glsl-optimizer/src/gallium/include/pipe/p_state.h":"d600593aba5f5a17072a6c38f6baa81e01c7994b0174250f7e433bb41684b702","glsl-optimizer/src/mapi/glapi/glapi.h":"73632a625c0ddabc401205e8b5a81eb8af8506868efe4b170d7979ec3619e9c5","glsl-optimizer/src/mesa/main/config.h":"5800259373099e5405de2eb52619f9de242552a479902a3a642a333c8cb3c1e7","glsl-optimizer/src/mesa/main/context.c":"2f3208473d99c94f734b1137ba91889d4a1babb9e7534bf1dc85d851ee98274e","glsl-optimizer/src/mesa/main/context.h":"cc7e4194797db9d007f01884e23d786c453b3860821f7f2ddcdf0f1bf3f8ffb1","glsl-optimizer/src/mesa/main/dd.h":"6a964acd06b6c2d88700e69fb75fe3c6b3b3d45bbc41db24f3f897a29695fe0c","glsl-optimizer/src/mesa/main/debug_output.h":"7312422e90b8c0e34028ac27280e438139b5cba525c99deb3ac883cd3d87e452","glsl-optimizer/src/mesa/main/draw.h":"7eaef3a9e27a60ea6f7937109bf3a6190b831162fde0479abb12077ce27c353d","glsl-optimizer/src/mesa/main/enums.h":"87d562a6764f51c014a2274fa7c3aca17c04441537ddd56b2554f13c6fffea92","glsl-optimizer/src/mesa/main/errors.h":"c79444b5df289c90fbb22a33b2d0c23917d9fc4510960088f0b79e53bb56b1b2","glsl-optimizer/src/mesa/main/extensions.h":"a38b2f87cc93c513994281350d69e06c84ff8eded5313ec0a1be33f375e0ebbd","glsl-optimizer/src/mesa/main/extensions_table.c":"17642d1a8c9a0bf2bd61060052d33ff14a005d2b962e6cf91465797a50851e85","glsl-optimizer/src/mesa/main/extensions_table.h":"2c879571c238d2e14461031ac740372fd0f9ac3a34c0d5541bb9b7ed4c0376c8","glsl-optimizer/src/mesa/main/formats.h":"02e2f7ec3e39286cf9f27e2641043e6df8ecb1dfde9e643313210e214af2a929","glsl-optimizer/src/mesa/main/glheader.h":"58217b33eead6aa6b23cd4a291cefeaa6cb84e465f4960daffca97c44d6d1c35","glsl-optimizer/src/mesa/main/glthread.h":"51fb2711f77e7eafcfc52d29d5b844978832b24c930d88accd48d143a6eb9c6f","glsl-optimizer/src/mesa/main/hash.h":"7e7f782034c16a8e693de48e00c31d4a90b0129f4029fd074033d7d16ccbe718","glsl-optimizer/src/mesa/main/macros.h":"73d15ddfd64f2b57b9b2ffeeb993b9c2c0899a80563e9d6ff337b11ccbe6eee5","glsl-optimizer/src/mesa/main/menums.h":"5dfac0e2279d60b0cd0c7b9fc2a5021620d0f6282ed2e738c420214e3af152d3","glsl-optimizer/src/mesa/main/mesa_private.h":"edda678b93438944279a551f663b8858ad84814a9fc88ba9672ef195599c24ae","glsl-optimizer/src/mesa/main/mtypes.h":"6efddefa099e4d2e3fdd97f0055644f47aba21711385edfeabc2d9b0676f2eec","glsl-optimizer/src/mesa/main/shaderobj.h":"9f0dfe96d0c2154201adef942bd36053533ac7b2492fb3786acda5bea514c75e","glsl-optimizer/src/mesa/main/uniforms.h":"4e331e6ad6e9cbded978b4082dbe0a57c1f8f01327446bb6892bfc179976c38b","glsl-optimizer/src/mesa/main/version.h":"9d0a13a758099302dc55cf7d045791834a89b0f9d4cf17b2692259b369a8a9a1","glsl-optimizer/src/mesa/math/m_matrix.h":"a37b19f182e070db3df93b0ede43c22fb8be8c2906504133ee6dbd7db1185d8b","glsl-optimizer/src/mesa/program/dummy_errors.c":"1820e305515b4c5e041f5e1623266a48ec8f076a155310be7d60637101f593e4","glsl-optimizer/src/mesa/program/ir_to_mesa.h":"b47f58d22e3ca2ae42d52501ea769d15c4476834944fa97eeccd3a3439211d00","glsl-optimizer/src/mesa/program/prog_instruction.h":"ab3832152a7e144b59e5a2264b2c29db56d93be31e76bbd958527a56771b40eb","glsl-optimizer/src/mesa/program/prog_parameter.h":"ba18c743284eadbc837c2c364c73e5d372321a7637a76e589d8d39fe8b5de225","glsl-optimizer/src/mesa/program/prog_statevars.h":"fc413698f84bc52d45fdeae0471934ee9904bfb7eac1a2b5f70446e54bcbbdca","glsl-optimizer/src/mesa/program/program.h":"1f01026a4eff440a3f122fd9b519d03546fe7f7d8be60dca834e95a2f8fbbfd2","glsl-optimizer/src/mesa/program/symbol_table.c":"6611cb9f078035bf5ff8c9112093a6c7d99f8af99a3931d0c07f227cc72283ea","glsl-optimizer/src/mesa/program/symbol_table.h":"631dc35ac48d5e87962d45507461920f6575610960ffcc42a08cefeb43300cda","glsl-optimizer/src/mesa/vbo/vbo.h":"6eb1dcd9a08c92f276c5fe08da184ff9d455d1be421913b8ad732a7b65e858fb","glsl-optimizer/src/util/bitscan.h":"9e49e694e6b34fe035bc685f32588827eb8cbe7d82878963c7ab52843e1c16aa","glsl-optimizer/src/util/bitset.h":"c40f78515c6230fed18345c6751ce33833a49da7a27901c7e6d7340cbdcbc5e7","glsl-optimizer/src/util/blob.c":"8f729846f66efc9c15485cc5fc24c6ec861fc1fecb2f652573f2a237d481b791","glsl-optimizer/src/util/blob.h":"93e1eaac866b9a7cd6fc03b533c18fb2edf0e97f03395eff4f3a605c4fc14d0c","glsl-optimizer/src/util/compiler.h":"79e3bf40a5bab704e6c949f23a1352759607bb57d80e5d8df2ef159755f10b68","glsl-optimizer/src/util/crc32.c":"2f3467a046b3a76784ecb9aa55d527698c8607fd0b12c622f6691aaa77b58505","glsl-optimizer/src/util/crc32.h":"59bd81865e51042b73a86f8fb117c312418df095fed2d828c5c1d1c8b6fc6cd4","glsl-optimizer/src/util/debug.c":"c3d68e9752ccc19e66c669562cd113cf1d0ac83cbb30174789e7fb8d1df58f9c","glsl-optimizer/src/util/debug.h":"50068d745c4199ccbd33d68dd4c8a36d2b5179c7869a21e75906ddd0718ca456","glsl-optimizer/src/util/detect_os.h":"343a8790d17a3710c6dd015ee367f84e3902ff3f2e36faca2bf93f9d725d3574","glsl-optimizer/src/util/disk_cache.c":"f533937e5a4fffe76e2739ef4b6b1e1da097d96d63eb808e68ebbc7027641c23","glsl-optimizer/src/util/disk_cache.h":"e83314fb14134a8e079b15e470a6376ba5a8253701f048c890a62b7e55d64bc8","glsl-optimizer/src/util/fast_urem_by_const.h":"e108fce804616c47d071dfe4a04163eec1126e448ed1aa89abb6b3a6d772bd5b","glsl-optimizer/src/util/fnv1a.h":"ab2596f19c6adf431ae27618f62c5743e24ad23ef83bb359a4c4c218245ab459","glsl-optimizer/src/util/format/u_format.h":"4cdfc0c59cbc99a092e5ec5a396910f2d93b9643e5d8141050b011e66f11e45b","glsl-optimizer/src/util/futex.h":"26f7c9d86e9ffef4c0fa2761f1aaa1918337302e20bd6ca10e61dc3c47356deb","glsl-optimizer/src/util/half_float.c":"11bc2584493d5d9d46e8c8a619a0307cf150bf5ab5d0f96bb764b061dc37a00e","glsl-optimizer/src/util/half_float.h":"7f7c380f126da1400a91758cc0392f24bf967bce1672890b62be26fe9fbd922b","glsl-optimizer/src/util/hash_table.c":"0ca40352e35dedab0a84c64c903f1b16d47e950bb5f43b4d22bb57d499bfea6e","glsl-optimizer/src/util/hash_table.h":"217191bb360592e2232f187473c10287d2cda8ae6fa5c53d0ef74c8c206118b4","glsl-optimizer/src/util/list.h":"9fab03c6a78186bb5f173269f825f6ce976b409d931852e3d93bac632e07989a","glsl-optimizer/src/util/macros.h":"63faf65b51058c483b17f1f77da51d1c53c8beab52678cb6bd01f1228a63b6b0","glsl-optimizer/src/util/mesa-sha1.c":"00c692ec353ebc02c06c57c5a71de0ab7a119f86a4146f452e65ec87e4944417","glsl-optimizer/src/util/mesa-sha1.h":"bff4c29f4bf7cdbcefb30fa0c996a7604a380eba8976467c2a60e7cd328f7e26","glsl-optimizer/src/util/mesa-sha1_test.c":"25da89a59d51469f77b4c468ca23ffdce0a7a1166a70b6cc23026a6800b0143c","glsl-optimizer/src/util/os_memory.h":"64555faf1760ae6954f42c83727c38dfc4c278e9152115779ffaad58b42adacf","glsl-optimizer/src/util/os_memory_aligned.h":"12d86fa94be38c13f7eeebdf313795e1267dd5a7187d2f0072e0e896f41702f6","glsl-optimizer/src/util/os_memory_stdc.h":"07360363b88c927065e10df71bebf6c8a0cc3b9167c9dfce55f2d65f11e6f787","glsl-optimizer/src/util/os_misc.c":"a9936e613ec84803abd59ad47c192c8e3939993c950ac91973fdc4cec1801bb8","glsl-optimizer/src/util/os_misc.h":"cc68eb12e05b5e749c54298cb4a6f4cd20cc5af7db3403e70b3c27b56090c740","glsl-optimizer/src/util/os_time.h":"73e775f7335244ff5964c678c27eedf1aea6abea44c4169d327ea8c7ce4a3a88","glsl-optimizer/src/util/ralloc.c":"4b51189595ef67bcef52c40cbf654d969041dbd15e15d4a893ad494ac060aeca","glsl-optimizer/src/util/ralloc.h":"e573c45875ff1530f0dbee9a93ae55535fdac8d5cc88a79ebc327c688824bde5","glsl-optimizer/src/util/rounding.h":"0450722353caf83de07e67f335949dbe95fe53b534052d4ee9d28d2781387614","glsl-optimizer/src/util/set.c":"86f8c9a830bead5a5a79bc970b0ff97809312af07b3beb39ef9d90af04d40a1b","glsl-optimizer/src/util/set.h":"3e39ca161e7ed4ec7c436cc9c7919ed9a55ed1b71edbf2caf6f9bcfd9bc578ed","glsl-optimizer/src/util/sha1/README":"00af7419af05247081858acb2902efd99fcda2ce16e331079f701645bb3729c0","glsl-optimizer/src/util/sha1/sha1.c":"1403bbe0aad42ba3e6be7e09f7cad87a6a8c4ad5b63962f7b92b9f37d8133b04","glsl-optimizer/src/util/sha1/sha1.h":"68d9f240eab2918026ecdf22be36811abbd4f1389f6c36e31258041aeaedd247","glsl-optimizer/src/util/simple_mtx.h":"12c6c3c4b7db9168bc656d5b3c65912075084d2b388c415d5c3d3f5953a9d6c7","glsl-optimizer/src/util/softfloat.c":"a97e51a96fe5e6a052c02aa6bbec683fe73fb88a8c087d9c930503e2120d8a2e","glsl-optimizer/src/util/softfloat.h":"66664b0250e83bf5dd4cc743acd119d076efcea624a0eab3d6b60718e6ee8811","glsl-optimizer/src/util/string_buffer.c":"63a1d1b1e34926c88ea00159cafbcd56568b805c4f64d1e8c97169fe313921fc","glsl-optimizer/src/util/string_buffer.h":"7b88d1b1d9c6cfb8e93331813535c127289437c75f822029e9a3bca8ea6b52ee","glsl-optimizer/src/util/strndup.h":"0273c4fdb7482cd7746881a63d3998648c6d63415ba85af1d1860f0e0dc504c6","glsl-optimizer/src/util/strtod.c":"5cf610d8a37373cf37cfb7aae903525d943b2674b1f32594c70b0eb19a8c9697","glsl-optimizer/src/util/strtod.h":"237396def4e264d35ed4bedea00ef9a4ceab6d7a11a18c770d9747d22c69ed2d","glsl-optimizer/src/util/u_atomic.h":"c02e809526c6c09ba8fe51f50b2490d1b6c8e5c7f3c4031ae958250d098fc3bb","glsl-optimizer/src/util/u_debug.c":"8c060e379b816618f3dd22c9ea523c68b9425c76c36a7dfe5d6d375b337f5f4a","glsl-optimizer/src/util/u_debug.h":"e11e26edd9b9e4e6f8e6a435e69f4d9edda27e9a379f68f4c82ea2525aaaea68","glsl-optimizer/src/util/u_dynarray.h":"853d0fa6ff2261614488be624deb8a2b01e57c2c8eabc28578cbeed4ccc95694","glsl-optimizer/src/util/u_endian.h":"3ccea7e529740318d8a4b05c00db3adc9d1e292a52bdc56a05c9fae99209720f","glsl-optimizer/src/util/u_math.c":"c868a8c0886dc78f1b06b13404ba8b253090449045774dd56893ac9d75795184","glsl-optimizer/src/util/u_math.h":"a04e32e126db016413f9de0a2028a3e71737137463b1289eae576f884b06fcf1","glsl-optimizer/src/util/u_memory.h":"c5db17c724c70283ddbe04165722f6988d4e0eb9aa3602ae472feff016649af9","glsl-optimizer/src/util/u_queue.h":"92930ce236c0528a98b695f5cea8c5c6aa9683beaf71a2227bdc5d33d1b21506","glsl-optimizer/src/util/u_string.h":"c5a2f4ef576d1547bda12c4ea219179fefa54414977743ac094abcaf696ef6ca","glsl-optimizer/src/util/u_thread.h":"00b708459b27f9910d18db92c18cc65cfc618ac2b3cd144e45f8640057b10d58","glsl-optimizer/src/util/xxhash.h":"2f2aff2fc6c0c929f52cf6ae7314122124c5be026d41ad1c357608383c4a37ad","src/bindings.rs":"79993db2058bde39f99ef483d02560d33b1cb882f6a552319e8b86eb6f9021e1","src/lib.rs":"04be1554cd829eb40864b06d80b491dd48117a4e3a601c7d482117f7a0391e67","wrapper.hpp":"f3ea34cc496f7d90b9bfcada3250b37b314c3524dac693b2ece9517bc7d274ac"},"package":"8ba4741358604ca0848c27ecc069d68e62e11cde81e38aac1da3c54b79ab5adf"} +\ No newline at end of file +diff -up thunderbird-147.0/comm/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h.build-c11-threads-avail thunderbird-147.0/comm/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h +--- thunderbird-147.0/comm/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h.build-c11-threads-avail 2026-01-08 22:45:29.000000000 +0100 ++++ thunderbird-147.0/comm/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h 2026-01-14 15:46:09.864020742 +0100 +@@ -66,7 +66,7 @@ typedef pthread_cond_t cnd_t; + typedef pthread_t thrd_t; + typedef pthread_key_t tss_t; + typedef pthread_mutex_t mtx_t; +-typedef pthread_once_t once_flag; ++//typedef pthread_once_t once_flag; + + + /* +@@ -90,11 +90,13 @@ impl_thrd_routine(void *p) + + /*--------------- 7.25.2 Initialization functions ---------------*/ + // 7.25.2.1 ++/* + static inline void + call_once(once_flag *flag, void (*func)(void)) + { + pthread_once(flag, func); + } ++*/ + + + /*------------- 7.25.3 Condition variable functions -------------*/ +diff -up thunderbird-147.0/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h.build-c11-threads-avail thunderbird-147.0/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h +--- thunderbird-147.0/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h.build-c11-threads-avail 2026-01-08 22:45:13.000000000 +0100 ++++ thunderbird-147.0/third_party/rust/glslopt/glsl-optimizer/include/c11/threads_posix.h 2026-01-14 15:46:09.864193606 +0100 +@@ -66,7 +66,7 @@ typedef pthread_cond_t cnd_t; + typedef pthread_t thrd_t; + typedef pthread_key_t tss_t; + typedef pthread_mutex_t mtx_t; +-typedef pthread_once_t once_flag; ++//typedef pthread_once_t once_flag; + + + /* +@@ -90,12 +90,13 @@ impl_thrd_routine(void *p) + + /*--------------- 7.25.2 Initialization functions ---------------*/ + // 7.25.2.1 +-static inline void ++// ++/*static inline void + call_once(once_flag *flag, void (*func)(void)) + { + pthread_once(flag, func); + } +- ++*/ + + /*------------- 7.25.3 Condition variable functions -------------*/ + // 7.25.3.1 diff --git a/build-disable-elfhack.patch b/build-disable-elfhack.patch index 0856e5c..67bb731 100644 --- a/build-disable-elfhack.patch +++ b/build-disable-elfhack.patch @@ -1,12 +1,12 @@ -diff -up thunderbird-68.0/toolkit/moz.configure.elfhack thunderbird-68.0/toolkit/moz.configure ---- thunderbird-68.0/toolkit/moz.configure.elfhack 2019-08-29 16:33:28.491708653 +0200 -+++ thunderbird-68.0/toolkit/moz.configure 2019-08-29 16:33:58.019805525 +0200 -@@ -1130,7 +1130,7 @@ with only_when('--enable-compile-environ - help='{Enable|Disable} elf hacks') +diff -up firefox-115.0.2/toolkit/moz.configure.disable-elfhack firefox-115.0.2/toolkit/moz.configure +--- firefox-115.0.2/toolkit/moz.configure.disable-elfhack 2023-07-18 12:21:22.507358334 +0200 ++++ firefox-115.0.2/toolkit/moz.configure 2023-07-18 12:52:55.972727498 +0200 +@@ -1520,7 +1520,7 @@ with only_when("--enable-compile-environ + "Cannot enable elfhack with lld." + " Use --enable-linker=bfd, --enable-linker=gold, or --disable-elf-hack" + ) +- return True ++ return False - set_config('USE_ELF_HACK', -- depends_if('--enable-elf-hack')(lambda _: True)) -+ depends_if('--enable-elf-hack')(lambda _: False)) + set_config("USE_ELF_HACK", use_elf_hack) - - @depends(check_build_environment) diff --git a/build-libcubeb.patch b/build-libcubeb.patch new file mode 100644 index 0000000..f911105 --- /dev/null +++ b/build-libcubeb.patch @@ -0,0 +1,8 @@ +diff -up thunderbird-147.0/comm/third_party/rust/cubeb-sys/.cargo-checksum.json.libcubeb thunderbird-147.0/comm/third_party/rust/cubeb-sys/.cargo-checksum.json +--- thunderbird-147.0/comm/third_party/rust/cubeb-sys/.cargo-checksum.json.libcubeb 2026-01-15 09:15:30.740378149 +0100 ++++ thunderbird-147.0/comm/third_party/rust/cubeb-sys/.cargo-checksum.json 2026-01-15 09:15:37.540231029 +0100 +@@ -1 +1 @@ +-{"files":{".cargo_vcs_info.json":"21c314647aed58ae4288dbae8dfe62a2c0617680e4e6f592cb72dafda7364d80","Cargo.lock":"78da21219e75ef238bf1df34221cf8cbe37ea0289ff0d750d776d544fdc9fb75","Cargo.toml":"f90fb04b9e0d54ef9e1529753b946689a5151b8fc25f29e26f1b435972858fb5","LICENSE":"8c044baa5d883274736eeece0b955249076c2697b826e576fce59496235b2cf5","build.rs":"188f2371401406862eadcdf7d2b5fbcc395c77a1a8ca5e29c3c7f6273734b52c","libcubeb/.clang-format":"9897a643853cadfb2d771b525a6e54832a8aaa6e1c589efffc6369c125764110","libcubeb/.github/workflows/build.yml":"8e228609cc41d02fc1777e046eaf53f577f2e8741013736c497d6f82acfd9e16","libcubeb/.github/workflows/docs.yml":"11afbc5de737985e73177123f7844095cf849b8916c3463deeaf7417193443a0","libcubeb/.gitignore":"30e326935b8d1ca90f4b6c7a021313cd7cd20b274e6558de4081c0840adb5846","libcubeb/.gitmodules":"65c86aa240aea1d6cb8559a0db73839f9a2f0d7a93d143c5fba0c485396874a0","libcubeb/AUTHORS":"829e45d138c7c8827799f302806fa4be8cd8bd4bad70a2fe26c3a27a5cf36948","libcubeb/CMakeLists.txt":"c14fe691bd5f7fb40fd4bd8caf95f6713a169268baba09e3875bced85028da2b","libcubeb/Config.cmake.in":"a156fb5cd30208aedcb9ef025d94187df82142fd4442e3a7d0e2a688668a3da9","libcubeb/INSTALL.md":"1fa77e15423e6f583c30861528cd2732d52a028982020cd3a7a9da4a452d7311","libcubeb/LICENSE":"44c6b5ae5ec3fe2fbc608b00e6f4896f4d2d5c7e525fcbaa3eaa3cf2f3d5a983","libcubeb/README.md":"1445df3577d2664f4baee1bb5a993cd41fc046f490eb15ba9da5aa6316d8916c","libcubeb/cmake/compile_tests/oss_is_v4.c":"482bcd4c569e8a26f4ab0fe3a3bed25e9d4b296bf678896a2cc1dc8abbad492d","libcubeb/cmake/sanitizers-cmake/.gitignore":"0ecc0e025e47a2c0d21866a6759177523f973b4232c747a283b9b1f2b572e037","libcubeb/cmake/sanitizers-cmake/CMakeLists.txt":"89b282c19b3897ff666f7847d5e679ae928ca7e76ffd0d23f7c58c9464048b61","libcubeb/cmake/sanitizers-cmake/LICENSE":"4b67e7ae8c91e68e1a929eb1cbaa4c773c6d19aa91aaa12c390cf9560d1c9799","libcubeb/cmake/sanitizers-cmake/README.md":"f3b85a594e1601ae65bb09393c56fbc8a98e3f3f49234e56f86bd78803c3544e","libcubeb/cmake/sanitizers-cmake/cmake/FindASan.cmake":"bd30b1c3cb0682b8a2b0b599f6c51fbf99ef4908b00eba8826f0d484c623b01b","libcubeb/cmake/sanitizers-cmake/cmake/FindMSan.cmake":"55e40f0994b47f8e779622af2007c69252d9456be99f4aa4fba7dd49c23d5580","libcubeb/cmake/sanitizers-cmake/cmake/FindSanitizers.cmake":"2ffd9717a49e3e9de848ec0d91097bdbab3f75a7866211d902f9659f59271ffc","libcubeb/cmake/sanitizers-cmake/cmake/FindTSan.cmake":"ceace234abd5a463ad1b8134ad06c4c8004895b2e8fc9edb67e64620ea97ca47","libcubeb/cmake/sanitizers-cmake/cmake/FindUBSan.cmake":"4720ec96ea42a2a9c07d887c1fc5562ed3e8c222f5778a18b78c46678b23f156","libcubeb/cmake/sanitizers-cmake/cmake/asan-wrapper":"4e543936e6374e24b80a0f92135c07c2e2101c0d110e51bddaf0e70ae8ec391e","libcubeb/cmake/sanitizers-cmake/cmake/sanitize-helpers.cmake":"c0c225f22bebd27eb68b807b2a61962d28afc61609735fe652c2fde6aa6a005b","libcubeb/cmake/sanitizers-cmake/tests/CMakeLists.txt":"64b7aea469a043f27414e3d652aaa89a03a11843d152c4cd42f30561e6ef51bc","libcubeb/cmake/sanitizers-cmake/tests/asan_test.cpp":"a25de95282aaee22d977d0b474468b946c1422b80b15424c04266dba038eba2e","libcubeb/cmake/sanitizers-cmake/tests/shortest.ext.test.cpp":"a25de95282aaee22d977d0b474468b946c1422b80b15424c04266dba038eba2e","libcubeb/cmake/toolchain-cross-mingw.cmake":"1c26749465364061ddf37aaa00f363eaf057c4b6a70181086e13b0a4d09bd376","libcubeb/cubeb.supp":"19f33e59f8dc91a327c923e44c2c3f9af0a043ce1d6a8cac275ba094b4bfe0da","libcubeb/docs/Doxyfile.in":"e721a50ccf3a010b9b5169b97f93a24f66bd4b88cade17b5b5088de19fa89716","libcubeb/include/cubeb/cubeb.h":"9d89beed6b79a1f3e0db052fa82fe4f8ce1f6939d0aed75f98d99c77dad90628","libcubeb/libcubeb.pc.in":"ad777cd17ee95516109555153541578692de40c719de22744f816c7dde863e67","libcubeb/scan-build-install.sh":"1ecf22aca367a4d02f810c4cb78db8636e08a12787e94e30c441ce439cf4a265","libcubeb/scripts/run-clang-format.sh":"f8cf4840b56f4b4a1732188eda36a3562a5fca79d353e38fd3eeaf2de2fb2ffe","libcubeb/src/android/audiotrack_definitions.h":"7cbb2a68924d20ec651cead5a923f63eb20192f109b597a3fa1594a79196693b","libcubeb/src/android/cubeb-output-latency.h":"a3862d9caf60d5c805a61e94bd696f6687ee30d2daa4acc25bd686be38497670","libcubeb/src/android/cubeb_media_library.h":"fa2a26a31adc727f35e9f746c287734ecbc7e15ceb52baf821429919a06c2e52","libcubeb/src/android/sles_definitions.h":"4c9c3cedfc06c8df479cc675fbadb1f158b8219223a96b9cffbcbfac738d7f28","libcubeb/src/cubeb-coreaudio-rs/.circleci/config.yml":"7f3dc865105ca8f33965a7958b1fe2e627ae2d5a703f3b2a4ab6e2e796018597","libcubeb/src/cubeb-coreaudio-rs/.editorconfig":"4e53b182bcc78b83d7e1b5c03efa14d22d4955c4ed2514d1ba4e99c1eb1a50ba","libcubeb/src/cubeb-coreaudio-rs/.githooks/pre-push":"8b8b26544cd56f54c0c33812551f786bb25cb08c86dbfeb6bf3daad881c826a1","libcubeb/src/cubeb-coreaudio-rs/.github/workflows/test.yml":"0184de4ad18c405b0b3c8145592e3f1c39ff916ade02749b44fe3b823f443c77","libcubeb/src/cubeb-coreaudio-rs/.gitignore":"9fe0b70e2daf21ec657a9abe5cf30d0cb91fb79eb84b1f205655f13aca9dbfac","libcubeb/src/cubeb-coreaudio-rs/.travis.yml":"dc07bac53f70f16c9bdf52264bdc58500ae6018c1b4c567bc7642f6b4ca3cc35","libcubeb/src/cubeb-coreaudio-rs/Cargo.lock":"422a0fa0cbefa12940bfaed0dd17548ee1462348c12b0e8b2c907c230a736486","libcubeb/src/cubeb-coreaudio-rs/Cargo.toml.in":"87a351640edc60ef0ce84868defa78c2527237ee1cc49c5e90c55c808a483f54","libcubeb/src/cubeb-coreaudio-rs/LICENSE":"6e6f56aff5bbf3cbc60747e152fb1a719bd0716aaf6d711c554f57d92e96297c","libcubeb/src/cubeb-coreaudio-rs/README.md":"0007782a05a5330f739ad789c19c82562c82e32386b0447000fc72c0d48405bc","libcubeb/src/cubeb-coreaudio-rs/build-audiounit-rust-in-cubeb.sh":"d228a05985dcd02ec1ecac66a2b64dae5a530804a25a7054ccc95905aedfb7ef","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/Cargo.lock":"5c95f50ac83e532b19d99c64eb5def6c508000d028e33a40d8b0bec653bea0e3","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/Cargo.toml.in":"9d8afec2aa957db8c47ca09340a47e5d9913549bdc226fb5fe88f7f707b0e22e","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/src/aggregate_device.rs":"7d2bd5f5fd7f3d008ebb69ad81f522ca0cb73db6d7b3e50ed1a63ea26ff721f4","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/src/audio_device_extensions.rs":"1b49e566d87bcd0b33e9402fb52f407f5b78902657c6c322b6964600eae24cc9","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/src/audio_object.rs":"cb527a92a3ee291cad55a6e44411d133e7e815e6904f9829f294b1234ef438c4","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/src/audio_unit.rs":"fe4198926bed493abe85c99ce31028520d7c768a4095cd3495817739330afa33","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/src/cf_mutable_dict.rs":"fc42edd270c6dfb02f123214d2d8e487bbd62b5bd923b71eec13190fd0104d2a","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/src/dispatch.rs":"1da419c7b79dd62544dd2a985350a6fde4ab0b4f92567b77b18ea493410fcbc6","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/src/lib.rs":"c93ed1411dd6cc39db44f57e0d7683bbc54745f84a3c9f9533a088895ec97abe","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/src/string.rs":"1ada92eef1c7f4e77495e21ee1efb0c9f90fb395a886f3687159b12a88a9f4d4","libcubeb/src/cubeb-coreaudio-rs/install_git_hook.sh":"d38c8e51e636f6b90b489621ac34ccd1d1b1f40dccce3d178ed1da1c5068f16d","libcubeb/src/cubeb-coreaudio-rs/install_rustfmt_clippy.sh":"4ae90d8dcb9757cb3ae4ae142ef80e5377c0dde61c63f4a3c32418646e80ca7b","libcubeb/src/cubeb-coreaudio-rs/run_device_tests.sh":"01f4c965443e0cd2d8a55df3a41fcc38aede5c8a0081ddf3101507a68a05dca5","libcubeb/src/cubeb-coreaudio-rs/run_sanitizers.sh":"84e93a0da137803018f37403511e8c92760be730426bf6cea34419d93d1a7ff8","libcubeb/src/cubeb-coreaudio-rs/run_tests.sh":"42444e9003905a44add6b7c165dbf87c2dbee290a964651fcf362ae9d894cf90","libcubeb/src/cubeb-coreaudio-rs/src/backend/aggregate_device.rs":"37a8f19af165a4413c512669ea4538b20adb128de0a490a13d5f54c2558c8327","libcubeb/src/cubeb-coreaudio-rs/src/backend/auto_release.rs":"050fdcee74cf46b9a8a85a877e166d72a853d33220f59cf734cbb6ea09daa441","libcubeb/src/cubeb-coreaudio-rs/src/backend/buffer_manager.rs":"0d1f9af94271ed4042e8cf0bb9658604c9f2e1ff9d931f50c1904d5ee372cb72","libcubeb/src/cubeb-coreaudio-rs/src/backend/device_property.rs":"4afd8961b4f722791f5c35a0934352a0a452f9d610e49c53820492788c9a77c1","libcubeb/src/cubeb-coreaudio-rs/src/backend/intern.rs":"11ca424e4eb77f8eb9fd5a6717d1e791facf9743156a8534f0016fcf64d57b0f","libcubeb/src/cubeb-coreaudio-rs/src/backend/mixer.rs":"c4d09291598cbffb2217b551770ec590f34b6dd6b461dd99b019d5bb70f0eef3","libcubeb/src/cubeb-coreaudio-rs/src/backend/mod.rs":"fe60523a82b31df4db41f1fc5fdd33464f3fea224e8b8974f3890cec26c225a4","libcubeb/src/cubeb-coreaudio-rs/src/backend/resampler.rs":"48bf8f56ae8d60dbabca6417b768000619abee8731ac3902164b45651ac08a4d","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/aggregate_device.rs":"22c28c48fc5f5aa760858ebe7311bdbcf07569a11d687590eb05002d97d70204","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/api.rs":"fd9eec01014e7f42e2c86ec098fe025f9f9cd9a8caff3abfc46559ddf96b6168","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/backlog.rs":"3b189a7e036543c467cc242af0ed3332721179ee2b1c8847a6db563546f1ac52","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/device_change.rs":"e09e75a5e654b1ac8359d086e6d28002fa4519debbedb8e1e7d091eba50e33f9","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/device_property.rs":"3a25dc22ef3e3dfee884538ad1be5a5789540a10da3915850b41680a0a3b1f07","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/interfaces.rs":"caa4383895aba2570d260432aa37018d8ddd6e3dca896b607bc27f82d91fc19d","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/manual.rs":"f5c3b54aea2af17f0f74fdd730852bf49bfeba8acd86fac3c69779a10b87a015","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/mod.rs":"8dba770023d7f9c4228f0e11915347f0e07da5fd818e3ee4478c4b197af9aa2a","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/parallel.rs":"a7ebd579339c40ca64c0757cc9da6baec641e670f226e1b2ec5049894700bd7a","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/tone.rs":"b028c67777b6453a26190b6a49785dfe28556adcbe179cb10862ce0d47ee8509","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/utils.rs":"33568e881e9e944949a2d58ebbb18b1e5e23dc097cbf7706fa2dd60d7730c500","libcubeb/src/cubeb-coreaudio-rs/src/backend/utils.rs":"6c3ffbcd602e6cc9f56deb9ecb07b2eef2e6f074ef924178e466f380aae5c595","libcubeb/src/cubeb-coreaudio-rs/src/capi.rs":"21b66b70545bf04ec719928004d1d9adb45b24ced51288f5b2993d79aaf78f5f","libcubeb/src/cubeb-coreaudio-rs/src/lib.rs":"a2c8a665cae5e26e6eee4c93b480f7ed708eeb6ba9ccf6f82b41c262f4b60015","libcubeb/src/cubeb-coreaudio-rs/todo.md":"efc1f012eb9a331a040cad4ac03aa79307f25885f71b6fb38f3ad7af8d7d515c","libcubeb/src/cubeb-internal.h":"50d2c0be2945136ff66666dbd8fcedc338f8f1d66eb2d9b09e09399193683ae8","libcubeb/src/cubeb-jni-instances.h":"8195554372bf60dea569873c9e5fb1106a2cf5dedc66a13d2bc967da0ff48a12","libcubeb/src/cubeb-jni.cpp":"cee58136cde7ef82045b59eee032e6eaf9bb677db12e053d8805ad9d67ee304e","libcubeb/src/cubeb-jni.h":"8f95cb6bc410bb62adae84f5e9d28fb8b57610107ed66941db0b4e4124548a72","libcubeb/src/cubeb-pulse-rs/.editorconfig":"bf047bd1da10cabb99eea666d1e57c321eba4716dccb3e4ed0e2c5fe3ca53858","libcubeb/src/cubeb-pulse-rs/.github/workflows/build.yml":"c91e5b2eeb7a70d9a03164c47e7e143a6eecb0f2b8cca65ae7c9a045e04f5933","libcubeb/src/cubeb-pulse-rs/.gitignore":"c97ecfda4d205190b973232dcfdb0c29748521c2534dd866bcc782f30b086738","libcubeb/src/cubeb-pulse-rs/AUTHORS":"0e0ac930a68ce2f6b876126b195add177f0d3886facb9260f4d9b69f1988f0cc","libcubeb/src/cubeb-pulse-rs/Cargo.lock":"35b7a4cfdc483e44bff4ada19c1afa44beac1904d19bab7ddc64a94adb257aab","libcubeb/src/cubeb-pulse-rs/Cargo.toml.in":"bac38dfc218f8eb3d11aefa4ab4ec598751385e95d5f54716becf587257c88a9","libcubeb/src/cubeb-pulse-rs/LICENSE":"44c6b5ae5ec3fe2fbc608b00e6f4896f4d2d5c7e525fcbaa3eaa3cf2f3d5a983","libcubeb/src/cubeb-pulse-rs/README.md":"0079450bb4b013bac065ed1750851e461a3710ebad1f323817da1cb82db0bc4f","libcubeb/src/cubeb-pulse-rs/pulse-ffi/Cargo.toml.in":"86bb1c8ebc438416c3a1f71b41494f19a85f698860b8c12d4875c8247f9c3664","libcubeb/src/cubeb-pulse-rs/pulse-ffi/src/ffi_funcs.rs":"a16646c5e7c49e94b907a7a404cfcadf3007688005c689cca936f0c2ee2e28e6","libcubeb/src/cubeb-pulse-rs/pulse-ffi/src/ffi_types.rs":"2ca56bc3638a40d331e53117a5dd175d0a6e102b1e0eccb9c2adc565c6861a33","libcubeb/src/cubeb-pulse-rs/pulse-ffi/src/lib.rs":"6aff308de11954a067d0f6ef95bf3126aabb6d928a5191e91d9a38ebadba91c2","libcubeb/src/cubeb-pulse-rs/pulse-rs/Cargo.toml.in":"16016702e7ceebb068a6222f4ba42978f5c570a1dbaf7dc159aada8fd4e9d3d8","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/context.rs":"49893b6b5190f228797b8d8c1b23830a8627176e6d73a1d856f5139ebb09774b","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/error.rs":"cbbdbae9aa614743a9dd70ac304605f24ad0256a640982dd4217b1894aa96b8d","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/lib.rs":"1fd45911e927782381dff20a848609cf6b777edd6b8e9321bcb31fc25a88e84d","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/mainloop_api.rs":"e1ed99071fb106d997df1f2889c49d967f51c9e290be023619ce7ab6795b2feb","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/operation.rs":"ae0a57a654d5d6d98e68036cea179322e936ee8e7878a9cc006471b9517e703d","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/proplist.rs":"47fc0b327db76a4e76f4c3bce28c522ef358cf0df273ffb62389939cc5ab1429","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/stream.rs":"2e93f480a3ba115a942182bfb06d2a01249d9ecb924f4c61545790fc02d99fa0","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/threaded_mainloop.rs":"2399e67a1c0c5fb0793e36c7a03edce58bffccb54fbf8a1c36bdd60c8fe364bf","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/util.rs":"5e6179f397604520bb3fad6899c9aebf1605802dee008f1e1ccab55be74705dd","libcubeb/src/cubeb-pulse-rs/src/backend/context.rs":"e8d10bfc619738c34ebea18a06b23ffc7ab4a4f18f079b5535f50316648ab567","libcubeb/src/cubeb-pulse-rs/src/backend/cork_state.rs":"4a0f1afc7d9f333dac89218cc56d7d32fbffb487cd48c1c9a4e03d79cb3b5e28","libcubeb/src/cubeb-pulse-rs/src/backend/intern.rs":"11ca424e4eb77f8eb9fd5a6717d1e791facf9743156a8534f0016fcf64d57b0f","libcubeb/src/cubeb-pulse-rs/src/backend/mod.rs":"dfb30ec497d6215e4535e936fea8fe3a407ef24dc1cec43b52c0ffa923d9229c","libcubeb/src/cubeb-pulse-rs/src/backend/stream.rs":"8cc1afdbe9187d33a944c2289c18d83698db37549c0a03f7c198b817c662d8c5","libcubeb/src/cubeb-pulse-rs/src/capi.rs":"fa0fa020f0d0efe55aa0fc3596405e8407bbe2cbe6c7a558345304e6da87994e","libcubeb/src/cubeb-pulse-rs/src/lib.rs":"b41bbdc562cbfb130ed7c1e53fe69944774f515705341d8ce48a2f82c8c0c2c5","libcubeb/src/cubeb-speex-resampler.h":"dbf543eee4cc6e40ba3531a39d327e2cec884c19e26c570aa7eae0647e5f7420","libcubeb/src/cubeb.c":"01bde1830c8957e88eaf824c0fe2d65cf2e691ad9dde9f65aee558ef7bcc5852","libcubeb/src/cubeb_aaudio.cpp":"a7cf6835fc0b4d5c301f06b0271da5a03037082b78bbb924339560d389011954","libcubeb/src/cubeb_alsa.c":"0f061750afa89f0054a4655bbb23dd35f77124c53a90fcce1eccdb32e23937a9","libcubeb/src/cubeb_android.h":"396922d2bb994c39acb745f7449a78e8dee00ad5146583f647545a3e0a9dd010","libcubeb/src/cubeb_array_queue.h":"86ab9c32eef5f4427413091d5932843ee870144475cddb1f0e18cd39d49f6115","libcubeb/src/cubeb_assert.h":"07841be6cca09999a913d0c1e61ab0a5de02200efed5b66fbf7c481b1d0489b0","libcubeb/src/cubeb_audio_dump.cpp":"28f8b302a786fad6221d97ad4c06f6317657881f2521b67a490f28596efe3442","libcubeb/src/cubeb_audio_dump.h":"93da746cff7326ce904bd2ef1aef400d8fd36e8ab2fceb372d459127003a5dae","libcubeb/src/cubeb_audiotrack.c":"18382213f4b3a9808f3dd6b8c18173d21c7230718ecb3771762850ce6420e602","libcubeb/src/cubeb_audiounit.cpp":"4285a1ec1bb65e502443b82e1f988ed7af9eb2957c985fe2168574e17ffe8b06","libcubeb/src/cubeb_jack.cpp":"9493ca3f274cd9a5dba4b5023783747bf186c4fed0dc14ff34f841dc94c988ee","libcubeb/src/cubeb_kai.c":"3b6d52e4b0eaf2db34bcf902baf4784f72805bfb6349ebe769764d09195186c5","libcubeb/src/cubeb_log.cpp":"387f3f8989b260a1ca6067c25a0fd868e38c3d5bb81263924fad5341415a96fe","libcubeb/src/cubeb_log.h":"8511c7640f2856d107900f6c40775c5dfe711187204fb5b2557562b1a855399f","libcubeb/src/cubeb_mixer.cpp":"6779938a7fd70b0ad23fdf1194dab27b57e9afb8f03ff45885601796f76a1dfe","libcubeb/src/cubeb_mixer.h":"64425dcefad3632acf68d6ae9fbdf59ff7b7b0e92487c34d18cd67f52431dc23","libcubeb/src/cubeb_opensl.cpp":"617ba1316e4a31cafb08d9c26e3c6c66690563741748b6131a22b5e02d170e3b","libcubeb/src/cubeb_oss.c":"743dfe68354963e4a8553eb57fe36af6a639a7769da0b767afda5294edf865b9","libcubeb/src/cubeb_osx_run_loop.cpp":"e5c9ef5591eced85310af94575f84ea5d3051c7aaef4e41cfd221f8f8b7c4331","libcubeb/src/cubeb_osx_run_loop.h":"aa10dd0d6111973b37488d83403d204ecf6001a3530aac6bffab00c6bb31df15","libcubeb/src/cubeb_pulse.c":"034b4ad4eb072573ff2b97ed33c53622be4ff12523fb21d470d6106ca520a5e7","libcubeb/src/cubeb_resampler.cpp":"8d05ffd13a273300e5faa28d2306d14cad14e5192f1ceb4eed020fd272c85355","libcubeb/src/cubeb_resampler.h":"9e768ae9045de82cf2cdd8d1c6f5f20020c5a83ef06a0e7fc4f372e280e5a739","libcubeb/src/cubeb_resampler_internal.h":"7422c8d06cb2da8439568d7c37a98eae725e190ba428eff3763cf696584dd16b","libcubeb/src/cubeb_ring_array.h":"cd5b7d807c229e925fe61416d70b6ecfe41c735c361bfc01593ed10a6dad5849","libcubeb/src/cubeb_ringbuffer.h":"8f5dc7a58d8b7ad265ff3bbcac80ae160ff22243d869a5b502bf413fa58fd9b0","libcubeb/src/cubeb_sndio.c":"07b47b0993c4c37f45cef8df08bc555d7915354792edf4ee57b3e026ccf23a14","libcubeb/src/cubeb_strings.c":"6004618393cf4dc3e06cd4f44cb53589459dad21384de3695f8b3d16774edf26","libcubeb/src/cubeb_strings.h":"312f5c2230d9a02e369be1d991ec44a1793373046f208529b3cc54cb9a5b0610","libcubeb/src/cubeb_sun.c":"c9aaf34c2163dde73be4c98a4cf1059c00ca66954a78a9680384c9cb5a8927ed","libcubeb/src/cubeb_tracing.h":"def71a9c9659383ea3cf7e12ff0ba2f2c51a0ead03fef6d418eafde6e70c8f39","libcubeb/src/cubeb_triple_buffer.h":"f1d9b68a83c2463af6bce4e475f3a638705241cce920dceaeefb6b864f44f62d","libcubeb/src/cubeb_utils.cpp":"8f41899df2f5f82541f816dadcee3d18baab7a1aecf2bc6d0b382567209351aa","libcubeb/src/cubeb_utils.h":"7a3b1e2a97752e96ff11badc19149e1582d4289e4e200817a9ed3f905bf8ab10","libcubeb/src/cubeb_utils_unix.h":"2e67e39daed8ec17092a2d1a9b660a3d4e153fc351698d9e1f3d51ef974979c5","libcubeb/src/cubeb_utils_win.h":"4d7a397f475e08dd7af47fdc4003e9f78cf9058e095348eeb554135ea3c3c454","libcubeb/src/cubeb_wasapi.cpp":"e249d54458a5af823f88c0ee35950991494dac3f736ec847143462a8acbc002e","libcubeb/src/cubeb_winmm.c":"089987489bea20690e825b3107e31446b89270f316fa8219b2c501941c3bc98d","libcubeb/subprojects/speex/arch.h":"2300bce68c588270cdc684dc7f01377e5e251529f4545d93771e111c56d51b0f","libcubeb/subprojects/speex/fixed_generic.h":"306ee7453677fa6067f16c79d358c6c90a9d3d008850b493cdaa59c07e6375c1","libcubeb/subprojects/speex/resample.c":"9c3a1c64ecf3750af82c980d01ea73d3682f73c332a580465d1e787e5c54cd00","libcubeb/subprojects/speex/resample_neon.h":"7d3fd7af9a1ddde22518b9c7b4419073b72b2dfa5be4c3bc8796992bc87b3da0","libcubeb/subprojects/speex/resample_sse.h":"5a196d8e2d8ab5c956f5252f09f5ddc55aee1f99b1341af3fa54a1f4c2157924","libcubeb/subprojects/speex/speex_config_types.h":"24e3ffbf29e5519611a48e5acb959645b01d166dcb4369380d5f776c3f53d4cd","libcubeb/subprojects/speex/speex_resampler.h":"7e439ec0dd30c32216b3ced17135f8992e5aaf53389d3f5996a7d900c453e65f","libcubeb/subprojects/speex/stack_alloc.h":"e8a2fc0874942d2c7177475fcc141fdd0c0156200b8a4e7656d4a20313e2e569","libcubeb/test/README.md":"1c11b038f87daf10ea78abc17bdbdd157940c241df548c24d5872d142a98c1af","libcubeb/test/common.h":"9ef928375c3cea4345f09e8f75678f35a8866a10a29fb7d93cf02259653cdd97","libcubeb/test/test_audio.cpp":"cf094d11993c9d7602cc0a7f2dcf92d47ffd6142fdd5813c3010143fa08db080","libcubeb/test/test_audio_dump.cpp":"5716fd3ea828a26dd80252cafa2334404003639663334b9a96c87df2831b5553","libcubeb/test/test_callback_ret.cpp":"4f004b79476c44e059136478e2368c030920c9137180637e548eb2e6db7e5f6e","libcubeb/test/test_device_changed_callback.cpp":"9e02dd526602d7abfc5485c80c8b86ffa27c0a8c87e587a850f77eff9bfd14aa","libcubeb/test/test_devices.cpp":"1ea25e6ae19940d224011cd8c255d1038a858d1d9be0e7c32ea0455a0e8163f9","libcubeb/test/test_duplex.cpp":"2297abf827e21fe8695cae63c7e8076bc59e6ab4350aa8dbbd821e0f079732c4","libcubeb/test/test_latency.cpp":"a1d75355e49895ea105eb814d20c6e1a37e8cf98be01f73832f4768eb7e1176f","libcubeb/test/test_logging.cpp":"72522cf7794212dceb2f26a98f5c9297a6366f2eab90128066f59422a6edb7c5","libcubeb/test/test_loopback.cpp":"92dbdebd71aa2e844694100818ac11e5145bccb01aa3e6d7ce3bc990931dda3d","libcubeb/test/test_overload_callback.cpp":"593c36fc78ea2fccd4dc2b6e565cb3bf53503f402522737e9005d9eab7fc4732","libcubeb/test/test_record.cpp":"90484423d4e5c4ffb8e6f65c9bae1f7384cac7eeeb4f42c0fcca768ee0e5c8e6","libcubeb/test/test_resampler.cpp":"57d6c0754a13ba6062868029b3daf59db591c69d1d0c8662c5d750a2a031f63f","libcubeb/test/test_ring_array.cpp":"c0420d04c914b0f61bdc81b9c4511c1b535518b2f87f32a5539f9ca6310dd5b1","libcubeb/test/test_ring_buffer.cpp":"cf247fda806f976d2b8dd2790e5a25bda68943423d7b0bcd4ac69a57f94e2f88","libcubeb/test/test_sanity.cpp":"b1b474be02e90fa310c265d4abdc712e5637bc5420c670f26d79be98b092804f","libcubeb/test/test_tone.cpp":"75e32348aa18583130bc3f2849862a4153729f19f7e5b1bcc9e91cc6ab7bcbe7","libcubeb/test/test_triple_buffer.cpp":"b1024e57581ec066d81e2a4749c71a8392ec81fa9a22e0e0c1d124f7ca86427d","libcubeb/test/test_utils.cpp":"ec18e3c14519d053cfd544ae59b2ba39716500cd7da72b5b50366eefff0a0481","libcubeb/tools/cubeb-test.cpp":"e1a29a10ba824a49dad4d0d6c9f495786148f0dc942558ae990786dba6065f4e","src/audio_dump.rs":"2491741d58a609e93de1a46d003fd4e26e4cd88cd89d4c9584635141964e0274","src/callbacks.rs":"a83d9a16ee66b3cd7100dd06e1f409698a727d642df0dfa797c067b5cf1def66","src/channel.rs":"02fd91384195180a56663aba87f00660c20e71fe7654c7b68d8f470173f40d5f","src/context.rs":"23b9326f58494b0860d080ec5f0e76be2325172da7f0274ebba152dc35182f3b","src/device.rs":"bd20afac637ea964df950ae6df30ddbc9ea7a865c7b471ba4c58d632b8f72708","src/error.rs":"406e3b843ed2d263fe677c4b34fb96a6d780a68bcb56a6f85f041d20d70227bd","src/format.rs":"d4d27790c20eab0b16592f60d5e487425a45a268cf4c74cf843c10ac91bbff4c","src/internal.rs":"c3af5f53dc7957860bf3bc0cd9737d094fb8ac000e7b40c569304cfa76a43145","src/lib.rs":"0fa0602859889c4f608ca4178c45f43d7e4b258ea0185a64341fab4532ebcd0e","src/log.rs":"8ac402b6c4d20db651cbddb87b27b3aa5ab0c3c50dac08a6c09fb1b7f9a3a391","src/macros.rs":"caef13f5d23f7a3ec1a54ec3ca2390ac4ad89d521893f1d0864daf70d57a20aa","src/mixer.rs":"e72e92855614da187da6419ed0a115062a05670cb73443b2ea4313d8f5108a68","src/resampler.rs":"b16bd6a4b1179b25f2a5391133fcd4410467e6a68c0a46cf15a12d280c1862e0","src/stream.rs":"e736794dea181be0cde83ff78079efa3bb1c64e38b8c57615590fa4c6aadf2ac"},"package":"cd2114801cd652119ace9e050a16d6641475fe3341ef45c58c9377fa45cbe3bf"} +\ No newline at end of file ++{"files":{".cargo_vcs_info.json":"21c314647aed58ae4288dbae8dfe62a2c0617680e4e6f592cb72dafda7364d80","Cargo.lock":"78da21219e75ef238bf1df34221cf8cbe37ea0289ff0d750d776d544fdc9fb75","Cargo.toml":"f90fb04b9e0d54ef9e1529753b946689a5151b8fc25f29e26f1b435972858fb5","LICENSE":"8c044baa5d883274736eeece0b955249076c2697b826e576fce59496235b2cf5","build.rs":"188f2371401406862eadcdf7d2b5fbcc395c77a1a8ca5e29c3c7f6273734b52c","libcubeb/.clang-format":"9897a643853cadfb2d771b525a6e54832a8aaa6e1c589efffc6369c125764110","libcubeb/.github/workflows/build.yml":"8e228609cc41d02fc1777e046eaf53f577f2e8741013736c497d6f82acfd9e16","libcubeb/.github/workflows/docs.yml":"11afbc5de737985e73177123f7844095cf849b8916c3463deeaf7417193443a0","libcubeb/.gitignore":"30e326935b8d1ca90f4b6c7a021313cd7cd20b274e6558de4081c0840adb5846","libcubeb/AUTHORS":"829e45d138c7c8827799f302806fa4be8cd8bd4bad70a2fe26c3a27a5cf36948","libcubeb/CMakeLists.txt":"c14fe691bd5f7fb40fd4bd8caf95f6713a169268baba09e3875bced85028da2b","libcubeb/Config.cmake.in":"a156fb5cd30208aedcb9ef025d94187df82142fd4442e3a7d0e2a688668a3da9","libcubeb/INSTALL.md":"1fa77e15423e6f583c30861528cd2732d52a028982020cd3a7a9da4a452d7311","libcubeb/LICENSE":"44c6b5ae5ec3fe2fbc608b00e6f4896f4d2d5c7e525fcbaa3eaa3cf2f3d5a983","libcubeb/README.md":"1445df3577d2664f4baee1bb5a993cd41fc046f490eb15ba9da5aa6316d8916c","libcubeb/cmake/compile_tests/oss_is_v4.c":"482bcd4c569e8a26f4ab0fe3a3bed25e9d4b296bf678896a2cc1dc8abbad492d","libcubeb/cmake/sanitizers-cmake/.gitignore":"0ecc0e025e47a2c0d21866a6759177523f973b4232c747a283b9b1f2b572e037","libcubeb/cmake/sanitizers-cmake/CMakeLists.txt":"89b282c19b3897ff666f7847d5e679ae928ca7e76ffd0d23f7c58c9464048b61","libcubeb/cmake/sanitizers-cmake/LICENSE":"4b67e7ae8c91e68e1a929eb1cbaa4c773c6d19aa91aaa12c390cf9560d1c9799","libcubeb/cmake/sanitizers-cmake/README.md":"f3b85a594e1601ae65bb09393c56fbc8a98e3f3f49234e56f86bd78803c3544e","libcubeb/cmake/sanitizers-cmake/cmake/FindASan.cmake":"bd30b1c3cb0682b8a2b0b599f6c51fbf99ef4908b00eba8826f0d484c623b01b","libcubeb/cmake/sanitizers-cmake/cmake/FindMSan.cmake":"55e40f0994b47f8e779622af2007c69252d9456be99f4aa4fba7dd49c23d5580","libcubeb/cmake/sanitizers-cmake/cmake/FindSanitizers.cmake":"2ffd9717a49e3e9de848ec0d91097bdbab3f75a7866211d902f9659f59271ffc","libcubeb/cmake/sanitizers-cmake/cmake/FindTSan.cmake":"ceace234abd5a463ad1b8134ad06c4c8004895b2e8fc9edb67e64620ea97ca47","libcubeb/cmake/sanitizers-cmake/cmake/FindUBSan.cmake":"4720ec96ea42a2a9c07d887c1fc5562ed3e8c222f5778a18b78c46678b23f156","libcubeb/cmake/sanitizers-cmake/cmake/asan-wrapper":"4e543936e6374e24b80a0f92135c07c2e2101c0d110e51bddaf0e70ae8ec391e","libcubeb/cmake/sanitizers-cmake/cmake/sanitize-helpers.cmake":"c0c225f22bebd27eb68b807b2a61962d28afc61609735fe652c2fde6aa6a005b","libcubeb/cmake/sanitizers-cmake/tests/CMakeLists.txt":"64b7aea469a043f27414e3d652aaa89a03a11843d152c4cd42f30561e6ef51bc","libcubeb/cmake/sanitizers-cmake/tests/asan_test.cpp":"a25de95282aaee22d977d0b474468b946c1422b80b15424c04266dba038eba2e","libcubeb/cmake/sanitizers-cmake/tests/shortest.ext.test.cpp":"a25de95282aaee22d977d0b474468b946c1422b80b15424c04266dba038eba2e","libcubeb/cmake/toolchain-cross-mingw.cmake":"1c26749465364061ddf37aaa00f363eaf057c4b6a70181086e13b0a4d09bd376","libcubeb/cubeb.supp":"19f33e59f8dc91a327c923e44c2c3f9af0a043ce1d6a8cac275ba094b4bfe0da","libcubeb/docs/Doxyfile.in":"e721a50ccf3a010b9b5169b97f93a24f66bd4b88cade17b5b5088de19fa89716","libcubeb/include/cubeb/cubeb.h":"9d89beed6b79a1f3e0db052fa82fe4f8ce1f6939d0aed75f98d99c77dad90628","libcubeb/libcubeb.pc.in":"ad777cd17ee95516109555153541578692de40c719de22744f816c7dde863e67","libcubeb/scan-build-install.sh":"1ecf22aca367a4d02f810c4cb78db8636e08a12787e94e30c441ce439cf4a265","libcubeb/scripts/run-clang-format.sh":"f8cf4840b56f4b4a1732188eda36a3562a5fca79d353e38fd3eeaf2de2fb2ffe","libcubeb/src/android/audiotrack_definitions.h":"7cbb2a68924d20ec651cead5a923f63eb20192f109b597a3fa1594a79196693b","libcubeb/src/android/cubeb-output-latency.h":"a3862d9caf60d5c805a61e94bd696f6687ee30d2daa4acc25bd686be38497670","libcubeb/src/android/cubeb_media_library.h":"fa2a26a31adc727f35e9f746c287734ecbc7e15ceb52baf821429919a06c2e52","libcubeb/src/android/sles_definitions.h":"4c9c3cedfc06c8df479cc675fbadb1f158b8219223a96b9cffbcbfac738d7f28","libcubeb/src/cubeb-coreaudio-rs/.circleci/config.yml":"7f3dc865105ca8f33965a7958b1fe2e627ae2d5a703f3b2a4ab6e2e796018597","libcubeb/src/cubeb-coreaudio-rs/.editorconfig":"4e53b182bcc78b83d7e1b5c03efa14d22d4955c4ed2514d1ba4e99c1eb1a50ba","libcubeb/src/cubeb-coreaudio-rs/.githooks/pre-push":"8b8b26544cd56f54c0c33812551f786bb25cb08c86dbfeb6bf3daad881c826a1","libcubeb/src/cubeb-coreaudio-rs/.github/workflows/test.yml":"0184de4ad18c405b0b3c8145592e3f1c39ff916ade02749b44fe3b823f443c77","libcubeb/src/cubeb-coreaudio-rs/.gitignore":"9fe0b70e2daf21ec657a9abe5cf30d0cb91fb79eb84b1f205655f13aca9dbfac","libcubeb/src/cubeb-coreaudio-rs/.travis.yml":"dc07bac53f70f16c9bdf52264bdc58500ae6018c1b4c567bc7642f6b4ca3cc35","libcubeb/src/cubeb-coreaudio-rs/Cargo.lock":"422a0fa0cbefa12940bfaed0dd17548ee1462348c12b0e8b2c907c230a736486","libcubeb/src/cubeb-coreaudio-rs/Cargo.toml.in":"87a351640edc60ef0ce84868defa78c2527237ee1cc49c5e90c55c808a483f54","libcubeb/src/cubeb-coreaudio-rs/LICENSE":"6e6f56aff5bbf3cbc60747e152fb1a719bd0716aaf6d711c554f57d92e96297c","libcubeb/src/cubeb-coreaudio-rs/README.md":"0007782a05a5330f739ad789c19c82562c82e32386b0447000fc72c0d48405bc","libcubeb/src/cubeb-coreaudio-rs/build-audiounit-rust-in-cubeb.sh":"d228a05985dcd02ec1ecac66a2b64dae5a530804a25a7054ccc95905aedfb7ef","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/Cargo.lock":"5c95f50ac83e532b19d99c64eb5def6c508000d028e33a40d8b0bec653bea0e3","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/Cargo.toml.in":"9d8afec2aa957db8c47ca09340a47e5d9913549bdc226fb5fe88f7f707b0e22e","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/src/aggregate_device.rs":"7d2bd5f5fd7f3d008ebb69ad81f522ca0cb73db6d7b3e50ed1a63ea26ff721f4","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/src/audio_device_extensions.rs":"1b49e566d87bcd0b33e9402fb52f407f5b78902657c6c322b6964600eae24cc9","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/src/audio_object.rs":"cb527a92a3ee291cad55a6e44411d133e7e815e6904f9829f294b1234ef438c4","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/src/audio_unit.rs":"fe4198926bed493abe85c99ce31028520d7c768a4095cd3495817739330afa33","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/src/cf_mutable_dict.rs":"fc42edd270c6dfb02f123214d2d8e487bbd62b5bd923b71eec13190fd0104d2a","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/src/dispatch.rs":"1da419c7b79dd62544dd2a985350a6fde4ab0b4f92567b77b18ea493410fcbc6","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/src/lib.rs":"c93ed1411dd6cc39db44f57e0d7683bbc54745f84a3c9f9533a088895ec97abe","libcubeb/src/cubeb-coreaudio-rs/coreaudio-sys-utils/src/string.rs":"1ada92eef1c7f4e77495e21ee1efb0c9f90fb395a886f3687159b12a88a9f4d4","libcubeb/src/cubeb-coreaudio-rs/install_git_hook.sh":"d38c8e51e636f6b90b489621ac34ccd1d1b1f40dccce3d178ed1da1c5068f16d","libcubeb/src/cubeb-coreaudio-rs/install_rustfmt_clippy.sh":"4ae90d8dcb9757cb3ae4ae142ef80e5377c0dde61c63f4a3c32418646e80ca7b","libcubeb/src/cubeb-coreaudio-rs/run_device_tests.sh":"01f4c965443e0cd2d8a55df3a41fcc38aede5c8a0081ddf3101507a68a05dca5","libcubeb/src/cubeb-coreaudio-rs/run_sanitizers.sh":"84e93a0da137803018f37403511e8c92760be730426bf6cea34419d93d1a7ff8","libcubeb/src/cubeb-coreaudio-rs/run_tests.sh":"42444e9003905a44add6b7c165dbf87c2dbee290a964651fcf362ae9d894cf90","libcubeb/src/cubeb-coreaudio-rs/src/backend/aggregate_device.rs":"37a8f19af165a4413c512669ea4538b20adb128de0a490a13d5f54c2558c8327","libcubeb/src/cubeb-coreaudio-rs/src/backend/auto_release.rs":"050fdcee74cf46b9a8a85a877e166d72a853d33220f59cf734cbb6ea09daa441","libcubeb/src/cubeb-coreaudio-rs/src/backend/buffer_manager.rs":"0d1f9af94271ed4042e8cf0bb9658604c9f2e1ff9d931f50c1904d5ee372cb72","libcubeb/src/cubeb-coreaudio-rs/src/backend/device_property.rs":"4afd8961b4f722791f5c35a0934352a0a452f9d610e49c53820492788c9a77c1","libcubeb/src/cubeb-coreaudio-rs/src/backend/intern.rs":"11ca424e4eb77f8eb9fd5a6717d1e791facf9743156a8534f0016fcf64d57b0f","libcubeb/src/cubeb-coreaudio-rs/src/backend/mixer.rs":"c4d09291598cbffb2217b551770ec590f34b6dd6b461dd99b019d5bb70f0eef3","libcubeb/src/cubeb-coreaudio-rs/src/backend/mod.rs":"fe60523a82b31df4db41f1fc5fdd33464f3fea224e8b8974f3890cec26c225a4","libcubeb/src/cubeb-coreaudio-rs/src/backend/resampler.rs":"48bf8f56ae8d60dbabca6417b768000619abee8731ac3902164b45651ac08a4d","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/aggregate_device.rs":"22c28c48fc5f5aa760858ebe7311bdbcf07569a11d687590eb05002d97d70204","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/api.rs":"fd9eec01014e7f42e2c86ec098fe025f9f9cd9a8caff3abfc46559ddf96b6168","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/backlog.rs":"3b189a7e036543c467cc242af0ed3332721179ee2b1c8847a6db563546f1ac52","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/device_change.rs":"e09e75a5e654b1ac8359d086e6d28002fa4519debbedb8e1e7d091eba50e33f9","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/device_property.rs":"3a25dc22ef3e3dfee884538ad1be5a5789540a10da3915850b41680a0a3b1f07","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/interfaces.rs":"caa4383895aba2570d260432aa37018d8ddd6e3dca896b607bc27f82d91fc19d","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/manual.rs":"f5c3b54aea2af17f0f74fdd730852bf49bfeba8acd86fac3c69779a10b87a015","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/mod.rs":"8dba770023d7f9c4228f0e11915347f0e07da5fd818e3ee4478c4b197af9aa2a","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/parallel.rs":"a7ebd579339c40ca64c0757cc9da6baec641e670f226e1b2ec5049894700bd7a","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/tone.rs":"b028c67777b6453a26190b6a49785dfe28556adcbe179cb10862ce0d47ee8509","libcubeb/src/cubeb-coreaudio-rs/src/backend/tests/utils.rs":"33568e881e9e944949a2d58ebbb18b1e5e23dc097cbf7706fa2dd60d7730c500","libcubeb/src/cubeb-coreaudio-rs/src/backend/utils.rs":"6c3ffbcd602e6cc9f56deb9ecb07b2eef2e6f074ef924178e466f380aae5c595","libcubeb/src/cubeb-coreaudio-rs/src/capi.rs":"21b66b70545bf04ec719928004d1d9adb45b24ced51288f5b2993d79aaf78f5f","libcubeb/src/cubeb-coreaudio-rs/src/lib.rs":"a2c8a665cae5e26e6eee4c93b480f7ed708eeb6ba9ccf6f82b41c262f4b60015","libcubeb/src/cubeb-coreaudio-rs/todo.md":"efc1f012eb9a331a040cad4ac03aa79307f25885f71b6fb38f3ad7af8d7d515c","libcubeb/src/cubeb-internal.h":"50d2c0be2945136ff66666dbd8fcedc338f8f1d66eb2d9b09e09399193683ae8","libcubeb/src/cubeb-jni-instances.h":"8195554372bf60dea569873c9e5fb1106a2cf5dedc66a13d2bc967da0ff48a12","libcubeb/src/cubeb-jni.cpp":"cee58136cde7ef82045b59eee032e6eaf9bb677db12e053d8805ad9d67ee304e","libcubeb/src/cubeb-jni.h":"8f95cb6bc410bb62adae84f5e9d28fb8b57610107ed66941db0b4e4124548a72","libcubeb/src/cubeb-pulse-rs/.editorconfig":"bf047bd1da10cabb99eea666d1e57c321eba4716dccb3e4ed0e2c5fe3ca53858","libcubeb/src/cubeb-pulse-rs/.github/workflows/build.yml":"c91e5b2eeb7a70d9a03164c47e7e143a6eecb0f2b8cca65ae7c9a045e04f5933","libcubeb/src/cubeb-pulse-rs/.gitignore":"c97ecfda4d205190b973232dcfdb0c29748521c2534dd866bcc782f30b086738","libcubeb/src/cubeb-pulse-rs/AUTHORS":"0e0ac930a68ce2f6b876126b195add177f0d3886facb9260f4d9b69f1988f0cc","libcubeb/src/cubeb-pulse-rs/Cargo.lock":"35b7a4cfdc483e44bff4ada19c1afa44beac1904d19bab7ddc64a94adb257aab","libcubeb/src/cubeb-pulse-rs/Cargo.toml.in":"bac38dfc218f8eb3d11aefa4ab4ec598751385e95d5f54716becf587257c88a9","libcubeb/src/cubeb-pulse-rs/LICENSE":"44c6b5ae5ec3fe2fbc608b00e6f4896f4d2d5c7e525fcbaa3eaa3cf2f3d5a983","libcubeb/src/cubeb-pulse-rs/README.md":"0079450bb4b013bac065ed1750851e461a3710ebad1f323817da1cb82db0bc4f","libcubeb/src/cubeb-pulse-rs/pulse-ffi/Cargo.toml.in":"86bb1c8ebc438416c3a1f71b41494f19a85f698860b8c12d4875c8247f9c3664","libcubeb/src/cubeb-pulse-rs/pulse-ffi/src/ffi_funcs.rs":"a16646c5e7c49e94b907a7a404cfcadf3007688005c689cca936f0c2ee2e28e6","libcubeb/src/cubeb-pulse-rs/pulse-ffi/src/ffi_types.rs":"2ca56bc3638a40d331e53117a5dd175d0a6e102b1e0eccb9c2adc565c6861a33","libcubeb/src/cubeb-pulse-rs/pulse-ffi/src/lib.rs":"6aff308de11954a067d0f6ef95bf3126aabb6d928a5191e91d9a38ebadba91c2","libcubeb/src/cubeb-pulse-rs/pulse-rs/Cargo.toml.in":"16016702e7ceebb068a6222f4ba42978f5c570a1dbaf7dc159aada8fd4e9d3d8","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/context.rs":"49893b6b5190f228797b8d8c1b23830a8627176e6d73a1d856f5139ebb09774b","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/error.rs":"cbbdbae9aa614743a9dd70ac304605f24ad0256a640982dd4217b1894aa96b8d","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/lib.rs":"1fd45911e927782381dff20a848609cf6b777edd6b8e9321bcb31fc25a88e84d","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/mainloop_api.rs":"e1ed99071fb106d997df1f2889c49d967f51c9e290be023619ce7ab6795b2feb","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/operation.rs":"ae0a57a654d5d6d98e68036cea179322e936ee8e7878a9cc006471b9517e703d","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/proplist.rs":"47fc0b327db76a4e76f4c3bce28c522ef358cf0df273ffb62389939cc5ab1429","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/stream.rs":"2e93f480a3ba115a942182bfb06d2a01249d9ecb924f4c61545790fc02d99fa0","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/threaded_mainloop.rs":"2399e67a1c0c5fb0793e36c7a03edce58bffccb54fbf8a1c36bdd60c8fe364bf","libcubeb/src/cubeb-pulse-rs/pulse-rs/src/util.rs":"5e6179f397604520bb3fad6899c9aebf1605802dee008f1e1ccab55be74705dd","libcubeb/src/cubeb-pulse-rs/src/backend/context.rs":"e8d10bfc619738c34ebea18a06b23ffc7ab4a4f18f079b5535f50316648ab567","libcubeb/src/cubeb-pulse-rs/src/backend/cork_state.rs":"4a0f1afc7d9f333dac89218cc56d7d32fbffb487cd48c1c9a4e03d79cb3b5e28","libcubeb/src/cubeb-pulse-rs/src/backend/intern.rs":"11ca424e4eb77f8eb9fd5a6717d1e791facf9743156a8534f0016fcf64d57b0f","libcubeb/src/cubeb-pulse-rs/src/backend/mod.rs":"dfb30ec497d6215e4535e936fea8fe3a407ef24dc1cec43b52c0ffa923d9229c","libcubeb/src/cubeb-pulse-rs/src/backend/stream.rs":"8cc1afdbe9187d33a944c2289c18d83698db37549c0a03f7c198b817c662d8c5","libcubeb/src/cubeb-pulse-rs/src/capi.rs":"fa0fa020f0d0efe55aa0fc3596405e8407bbe2cbe6c7a558345304e6da87994e","libcubeb/src/cubeb-pulse-rs/src/lib.rs":"b41bbdc562cbfb130ed7c1e53fe69944774f515705341d8ce48a2f82c8c0c2c5","libcubeb/src/cubeb-speex-resampler.h":"dbf543eee4cc6e40ba3531a39d327e2cec884c19e26c570aa7eae0647e5f7420","libcubeb/src/cubeb.c":"01bde1830c8957e88eaf824c0fe2d65cf2e691ad9dde9f65aee558ef7bcc5852","libcubeb/src/cubeb_aaudio.cpp":"a7cf6835fc0b4d5c301f06b0271da5a03037082b78bbb924339560d389011954","libcubeb/src/cubeb_alsa.c":"0f061750afa89f0054a4655bbb23dd35f77124c53a90fcce1eccdb32e23937a9","libcubeb/src/cubeb_android.h":"396922d2bb994c39acb745f7449a78e8dee00ad5146583f647545a3e0a9dd010","libcubeb/src/cubeb_array_queue.h":"86ab9c32eef5f4427413091d5932843ee870144475cddb1f0e18cd39d49f6115","libcubeb/src/cubeb_assert.h":"07841be6cca09999a913d0c1e61ab0a5de02200efed5b66fbf7c481b1d0489b0","libcubeb/src/cubeb_audio_dump.cpp":"28f8b302a786fad6221d97ad4c06f6317657881f2521b67a490f28596efe3442","libcubeb/src/cubeb_audio_dump.h":"93da746cff7326ce904bd2ef1aef400d8fd36e8ab2fceb372d459127003a5dae","libcubeb/src/cubeb_audiotrack.c":"18382213f4b3a9808f3dd6b8c18173d21c7230718ecb3771762850ce6420e602","libcubeb/src/cubeb_audiounit.cpp":"4285a1ec1bb65e502443b82e1f988ed7af9eb2957c985fe2168574e17ffe8b06","libcubeb/src/cubeb_jack.cpp":"9493ca3f274cd9a5dba4b5023783747bf186c4fed0dc14ff34f841dc94c988ee","libcubeb/src/cubeb_kai.c":"3b6d52e4b0eaf2db34bcf902baf4784f72805bfb6349ebe769764d09195186c5","libcubeb/src/cubeb_log.cpp":"387f3f8989b260a1ca6067c25a0fd868e38c3d5bb81263924fad5341415a96fe","libcubeb/src/cubeb_log.h":"8511c7640f2856d107900f6c40775c5dfe711187204fb5b2557562b1a855399f","libcubeb/src/cubeb_mixer.cpp":"6779938a7fd70b0ad23fdf1194dab27b57e9afb8f03ff45885601796f76a1dfe","libcubeb/src/cubeb_mixer.h":"64425dcefad3632acf68d6ae9fbdf59ff7b7b0e92487c34d18cd67f52431dc23","libcubeb/src/cubeb_opensl.cpp":"617ba1316e4a31cafb08d9c26e3c6c66690563741748b6131a22b5e02d170e3b","libcubeb/src/cubeb_oss.c":"743dfe68354963e4a8553eb57fe36af6a639a7769da0b767afda5294edf865b9","libcubeb/src/cubeb_osx_run_loop.cpp":"e5c9ef5591eced85310af94575f84ea5d3051c7aaef4e41cfd221f8f8b7c4331","libcubeb/src/cubeb_osx_run_loop.h":"aa10dd0d6111973b37488d83403d204ecf6001a3530aac6bffab00c6bb31df15","libcubeb/src/cubeb_pulse.c":"034b4ad4eb072573ff2b97ed33c53622be4ff12523fb21d470d6106ca520a5e7","libcubeb/src/cubeb_resampler.cpp":"8d05ffd13a273300e5faa28d2306d14cad14e5192f1ceb4eed020fd272c85355","libcubeb/src/cubeb_resampler.h":"9e768ae9045de82cf2cdd8d1c6f5f20020c5a83ef06a0e7fc4f372e280e5a739","libcubeb/src/cubeb_resampler_internal.h":"7422c8d06cb2da8439568d7c37a98eae725e190ba428eff3763cf696584dd16b","libcubeb/src/cubeb_ring_array.h":"cd5b7d807c229e925fe61416d70b6ecfe41c735c361bfc01593ed10a6dad5849","libcubeb/src/cubeb_ringbuffer.h":"8f5dc7a58d8b7ad265ff3bbcac80ae160ff22243d869a5b502bf413fa58fd9b0","libcubeb/src/cubeb_sndio.c":"07b47b0993c4c37f45cef8df08bc555d7915354792edf4ee57b3e026ccf23a14","libcubeb/src/cubeb_strings.c":"6004618393cf4dc3e06cd4f44cb53589459dad21384de3695f8b3d16774edf26","libcubeb/src/cubeb_strings.h":"312f5c2230d9a02e369be1d991ec44a1793373046f208529b3cc54cb9a5b0610","libcubeb/src/cubeb_sun.c":"c9aaf34c2163dde73be4c98a4cf1059c00ca66954a78a9680384c9cb5a8927ed","libcubeb/src/cubeb_tracing.h":"def71a9c9659383ea3cf7e12ff0ba2f2c51a0ead03fef6d418eafde6e70c8f39","libcubeb/src/cubeb_triple_buffer.h":"f1d9b68a83c2463af6bce4e475f3a638705241cce920dceaeefb6b864f44f62d","libcubeb/src/cubeb_utils.cpp":"8f41899df2f5f82541f816dadcee3d18baab7a1aecf2bc6d0b382567209351aa","libcubeb/src/cubeb_utils.h":"7a3b1e2a97752e96ff11badc19149e1582d4289e4e200817a9ed3f905bf8ab10","libcubeb/src/cubeb_utils_unix.h":"2e67e39daed8ec17092a2d1a9b660a3d4e153fc351698d9e1f3d51ef974979c5","libcubeb/src/cubeb_utils_win.h":"4d7a397f475e08dd7af47fdc4003e9f78cf9058e095348eeb554135ea3c3c454","libcubeb/src/cubeb_wasapi.cpp":"e249d54458a5af823f88c0ee35950991494dac3f736ec847143462a8acbc002e","libcubeb/src/cubeb_winmm.c":"089987489bea20690e825b3107e31446b89270f316fa8219b2c501941c3bc98d","libcubeb/subprojects/speex/arch.h":"2300bce68c588270cdc684dc7f01377e5e251529f4545d93771e111c56d51b0f","libcubeb/subprojects/speex/fixed_generic.h":"306ee7453677fa6067f16c79d358c6c90a9d3d008850b493cdaa59c07e6375c1","libcubeb/subprojects/speex/resample.c":"9c3a1c64ecf3750af82c980d01ea73d3682f73c332a580465d1e787e5c54cd00","libcubeb/subprojects/speex/resample_neon.h":"7d3fd7af9a1ddde22518b9c7b4419073b72b2dfa5be4c3bc8796992bc87b3da0","libcubeb/subprojects/speex/resample_sse.h":"5a196d8e2d8ab5c956f5252f09f5ddc55aee1f99b1341af3fa54a1f4c2157924","libcubeb/subprojects/speex/speex_config_types.h":"24e3ffbf29e5519611a48e5acb959645b01d166dcb4369380d5f776c3f53d4cd","libcubeb/subprojects/speex/speex_resampler.h":"7e439ec0dd30c32216b3ced17135f8992e5aaf53389d3f5996a7d900c453e65f","libcubeb/subprojects/speex/stack_alloc.h":"e8a2fc0874942d2c7177475fcc141fdd0c0156200b8a4e7656d4a20313e2e569","libcubeb/test/README.md":"1c11b038f87daf10ea78abc17bdbdd157940c241df548c24d5872d142a98c1af","libcubeb/test/common.h":"9ef928375c3cea4345f09e8f75678f35a8866a10a29fb7d93cf02259653cdd97","libcubeb/test/test_audio.cpp":"cf094d11993c9d7602cc0a7f2dcf92d47ffd6142fdd5813c3010143fa08db080","libcubeb/test/test_audio_dump.cpp":"5716fd3ea828a26dd80252cafa2334404003639663334b9a96c87df2831b5553","libcubeb/test/test_callback_ret.cpp":"4f004b79476c44e059136478e2368c030920c9137180637e548eb2e6db7e5f6e","libcubeb/test/test_device_changed_callback.cpp":"9e02dd526602d7abfc5485c80c8b86ffa27c0a8c87e587a850f77eff9bfd14aa","libcubeb/test/test_devices.cpp":"1ea25e6ae19940d224011cd8c255d1038a858d1d9be0e7c32ea0455a0e8163f9","libcubeb/test/test_duplex.cpp":"2297abf827e21fe8695cae63c7e8076bc59e6ab4350aa8dbbd821e0f079732c4","libcubeb/test/test_latency.cpp":"a1d75355e49895ea105eb814d20c6e1a37e8cf98be01f73832f4768eb7e1176f","libcubeb/test/test_logging.cpp":"72522cf7794212dceb2f26a98f5c9297a6366f2eab90128066f59422a6edb7c5","libcubeb/test/test_loopback.cpp":"92dbdebd71aa2e844694100818ac11e5145bccb01aa3e6d7ce3bc990931dda3d","libcubeb/test/test_overload_callback.cpp":"593c36fc78ea2fccd4dc2b6e565cb3bf53503f402522737e9005d9eab7fc4732","libcubeb/test/test_record.cpp":"90484423d4e5c4ffb8e6f65c9bae1f7384cac7eeeb4f42c0fcca768ee0e5c8e6","libcubeb/test/test_resampler.cpp":"57d6c0754a13ba6062868029b3daf59db591c69d1d0c8662c5d750a2a031f63f","libcubeb/test/test_ring_array.cpp":"c0420d04c914b0f61bdc81b9c4511c1b535518b2f87f32a5539f9ca6310dd5b1","libcubeb/test/test_ring_buffer.cpp":"cf247fda806f976d2b8dd2790e5a25bda68943423d7b0bcd4ac69a57f94e2f88","libcubeb/test/test_sanity.cpp":"b1b474be02e90fa310c265d4abdc712e5637bc5420c670f26d79be98b092804f","libcubeb/test/test_tone.cpp":"75e32348aa18583130bc3f2849862a4153729f19f7e5b1bcc9e91cc6ab7bcbe7","libcubeb/test/test_triple_buffer.cpp":"b1024e57581ec066d81e2a4749c71a8392ec81fa9a22e0e0c1d124f7ca86427d","libcubeb/test/test_utils.cpp":"ec18e3c14519d053cfd544ae59b2ba39716500cd7da72b5b50366eefff0a0481","libcubeb/tools/cubeb-test.cpp":"e1a29a10ba824a49dad4d0d6c9f495786148f0dc942558ae990786dba6065f4e","src/audio_dump.rs":"2491741d58a609e93de1a46d003fd4e26e4cd88cd89d4c9584635141964e0274","src/callbacks.rs":"a83d9a16ee66b3cd7100dd06e1f409698a727d642df0dfa797c067b5cf1def66","src/channel.rs":"02fd91384195180a56663aba87f00660c20e71fe7654c7b68d8f470173f40d5f","src/context.rs":"23b9326f58494b0860d080ec5f0e76be2325172da7f0274ebba152dc35182f3b","src/device.rs":"bd20afac637ea964df950ae6df30ddbc9ea7a865c7b471ba4c58d632b8f72708","src/error.rs":"406e3b843ed2d263fe677c4b34fb96a6d780a68bcb56a6f85f041d20d70227bd","src/format.rs":"d4d27790c20eab0b16592f60d5e487425a45a268cf4c74cf843c10ac91bbff4c","src/internal.rs":"c3af5f53dc7957860bf3bc0cd9737d094fb8ac000e7b40c569304cfa76a43145","src/lib.rs":"0fa0602859889c4f608ca4178c45f43d7e4b258ea0185a64341fab4532ebcd0e","src/log.rs":"8ac402b6c4d20db651cbddb87b27b3aa5ab0c3c50dac08a6c09fb1b7f9a3a391","src/macros.rs":"caef13f5d23f7a3ec1a54ec3ca2390ac4ad89d521893f1d0864daf70d57a20aa","src/mixer.rs":"e72e92855614da187da6419ed0a115062a05670cb73443b2ea4313d8f5108a68","src/resampler.rs":"b16bd6a4b1179b25f2a5391133fcd4410467e6a68c0a46cf15a12d280c1862e0","src/stream.rs":"e736794dea181be0cde83ff78079efa3bb1c64e38b8c57615590fa4c6aadf2ac"},"package":"cd2114801cd652119ace9e050a16d6641475fe3341ef45c58c9377fa45cbe3bf"} +\ No newline at end of file diff --git a/build-minimal-lexical.patch b/build-minimal-lexical.patch new file mode 100644 index 0000000..8294804 --- /dev/null +++ b/build-minimal-lexical.patch @@ -0,0 +1,8 @@ +diff -up thunderbird-147.0/comm/third_party/rust/minimal-lexical/.cargo-checksum.json.minimal-lexical thunderbird-147.0/comm/third_party/rust/minimal-lexical/.cargo-checksum.json +--- thunderbird-147.0/comm/third_party/rust/minimal-lexical/.cargo-checksum.json.minimal-lexical 2026-01-08 22:45:29.000000000 +0100 ++++ thunderbird-147.0/comm/third_party/rust/minimal-lexical/.cargo-checksum.json 2026-01-15 09:07:17.229820468 +0100 +@@ -1 +1 @@ +-{"files":{".cargo_vcs_info.json":"e819b814dde0c854395882e9f65856c3196961ceced92eeab6ade4d350e7cccc",".github/ISSUE_TEMPLATE/bug_report.md":"cce60fa26d7e6afb7aa84755d6bc6431afe1f390823033545ac3ac9d94740b19",".github/ISSUE_TEMPLATE/custom.md":"b52f73fd67ebd71d43f36d5d1a2f3a53d1f32e126f70ccf0126900ff9f2aec3c",".github/ISSUE_TEMPLATE/documentation.md":"986b9a1421dc15af628bdff8691eeb39d92e36bedb7742d2a4d8327f6cb921a3",".github/ISSUE_TEMPLATE/feature_request.md":"e7861c6047eb39fb4dead4198c141817215839fddb43d16cb6e679417428a73e",".github/ISSUE_TEMPLATE/question.md":"75d3de186382ff882e26e1aba65b4b207cbd3822b9491cd92886fa7987a6ba23",".github/PULL_REQUEST_TEMPLATE/bug_fix.md":"8d7bfb13212e583b9cb717ec39ac2d2070d85470bdf81a32f89e91796a14efcc",".github/PULL_REQUEST_TEMPLATE/custom.md":"88e332c54fe5a52842abdc33e129fa12b0b39c1aaa78da16bc3e1ccce0f3e643",".github/PULL_REQUEST_TEMPLATE/documentation.md":"ac8bae6001c6822dc6d2334c085018c38a8f121f0c580b33b770357170a59c76",".github/workflows/Cross.yml":"51cd10949a21f4aa734a45c06021b53f81cebddcde6723e69caf39d6b7a53cc7",".github/workflows/Features.yml":"4b7182995976d3872853555e989d49be03cfacf92a6807317c01623a1de59742",".github/workflows/OSX.yml":"1ffe8ad7703afb4bc67caf52550b53095861f7290e9b1cbd9f7f7e62de82b3b4",".github/workflows/Simple.yml":"6c681d49afdf74a85757fca4d6bfce076daebbb8816409f42345c2782ba5408d",".github/workflows/Valgrind.yml":"5beae6618e643ef75a6cdc6622bb64a586f3bc956401551920716564d4f3c1fe",".gitmodules":"6976207a02c7160a3a1d076c5fae10fe4b78f58cdc0aa66ae47f3855b3c392fb","CHANGELOG":"55ebcf7ee0fd10987829a98fb9757cbc6f68c62198bc70122384bedc08de9915","CODE_OF_CONDUCT.md":"0bd67c62d204ec67cb29969aaf5aac337a77c84b318937bc2d9dc7e3fcbcdcaa","Cargo.toml":"6c485fa605a0d3de6ec0af125b67c55224515354034f990334b1a1a86988c632","LICENSE-APACHE":"8173d5c29b4f956d532781d2b86e4e30f83e6b7878dce18c919451d6ba707c90","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","LICENSE.md":"dbe1fff0fb1314b6af94f161511406275cf01c5a32441fbf24528a57a051d599","README.md":"00d521d93124e88edf58d42b3114786c0daaf437e73118eed27b3c716b7514ad","clippy.toml":"8d3aafbcf358ccf45cc148cd705f5fe71e777dabc391ed9a2bae32af73291fe8","rustfmt.toml":"ae46c79a84842907e151ca5d07e36b8d1932b61c6989465500c0f706507f42cc","src/bellerophon.rs":"bbabeccfa7a70ec314a894d968b424d1162df1b9e5e659baa1fd3a37d985fe75","src/bigint.rs":"93d3332d01bb7745bc569bc6b242c6c71c75eb78835b6a05bad91952b989daf0","src/extended_float.rs":"6040bdd49c03f11f8607b2da1703e1b7b5f57ddac9b02322c6958f9c1684496f","src/fpu.rs":"72d63bac2bbfc545128aa59dc35cfad3c553bac64bf575880775b3c4ace415bc","src/heapvec.rs":"836a49d40e5da90d195508e963d869afd78aaf9adb9cd60a0cb8f92b4e105c4f","src/lemire.rs":"100f3cb293deed0b0d1e7ca6b23152ba160f92f887f8924620b28c9ab77326db","src/lib.rs":"626dfc61992c42d4996dddcbfff5775ff2ffae44d116d2d70f6564a3209c0a9a","src/libm.rs":"ed5a3856eaa44a8a05aa123e27c2048b92ff42e4af1ef3f9fa1aff2a50190f4a","src/mask.rs":"63bcda92d14169a55ac54798f45365cef64a1aecd9625c3c3bc3deae202b2a07","src/num.rs":"dbcab14a5fe8e40e381829426dd75a7db672882592b5c4a08897a2fb6d2ae7ea","src/number.rs":"49d0880a99816ecf904fb88f607a821d6770ec270825b96e800a297ab1a01d78","src/parse.rs":"19559db67eddd17d331274cf87d6c4beeb0724dcdf859de9b8ab5995c4b8e682","src/rounding.rs":"8ba42d31618db1e6a381f8b60ffe1f9d216aaccb931b8fac5f279d8465e35cb7","src/slow.rs":"f096e7f83e8372e71568ec1724bc1c9d2c67ca39b80290ba062e60ae94b1f8d1","src/stackvec.rs":"0c921eb3adbd42cbe7be0f363e08ac85b6d5f1dabd4a7b077becddeff731da16","src/table.rs":"e4288891e9b1d8ba60dcc73edc639754cc2351d3219df8c625e694f3f0e58c5a","src/table_bellerophon.rs":"a2102292b27223a81e60a8a6607c42587efde3424526156921167742a0d5937c","src/table_lemire.rs":"c101c353c38b594f5b8987263b759927095b5dcd72e65607cc1c6a7de0bfd0c8","src/table_small.rs":"61b00e13eb3945622bf8bed374c88e29c63dfedb7384b31b35dd4e543cbe62c1","tests/bellerophon.rs":"b17b87b8963ebcd71f684e4d48c1ce619964e4fb719a5875b0ce4514ed528674","tests/bellerophon_tests.rs":"76b71efa2f4cec56a79535e2d292788a5e1b443c901ec7a234800782f36ddb68","tests/integration_tests.rs":"ed1a1fc46fc239eb4ea718057ad6e9869f633797ef72fc6f05b1757ab80e1641","tests/lemire_tests.rs":"6213bcd9b44def655b44a6b760cee0c0ad82d3bb494f48c2ff100698da34625b","tests/libm_tests.rs":"6941e74d7d0adf021edc93b9919275e82810687ff33147a10361613073b22669","tests/mask_tests.rs":"8c2a3daf434815389b6bf88837e3f382d74d97250104b925d70779366bd3d537","tests/number_tests.rs":"df4b4f0c65478f2f6193bd918fa4aad7163e40598c58df44547c4559e4a8b0c7","tests/parse_tests.rs":"bc0066b9257368f0365276fcffa2662c4699a033eaf9a4a7d6faa0e9b915094a","tests/rounding_tests.rs":"99f38b768ad15e726559c446825f9f1bad67935cdd28ffcc1cbcd3e031a901ea","tests/slow_tests.rs":"36c4c2538d2f5a1c1af5deb26ec4eba47f19f9a3c280a13d10704267a16d3b3f","tests/stackvec.rs":"f040611995bcd1bd2cb47694e74aa02ff4fabdffe007f712c9bb788d82dfb8a7","tests/vec_tests.rs":"09b561160df3b1385876db452bb5a67ef2c9fd2cc36b5687e1dfaf8c58947782"},"package":"68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"} +\ No newline at end of file ++{"files":{".cargo_vcs_info.json":"e819b814dde0c854395882e9f65856c3196961ceced92eeab6ade4d350e7cccc",".github/ISSUE_TEMPLATE/bug_report.md":"cce60fa26d7e6afb7aa84755d6bc6431afe1f390823033545ac3ac9d94740b19",".github/ISSUE_TEMPLATE/custom.md":"b52f73fd67ebd71d43f36d5d1a2f3a53d1f32e126f70ccf0126900ff9f2aec3c",".github/ISSUE_TEMPLATE/documentation.md":"986b9a1421dc15af628bdff8691eeb39d92e36bedb7742d2a4d8327f6cb921a3",".github/ISSUE_TEMPLATE/feature_request.md":"e7861c6047eb39fb4dead4198c141817215839fddb43d16cb6e679417428a73e",".github/ISSUE_TEMPLATE/question.md":"75d3de186382ff882e26e1aba65b4b207cbd3822b9491cd92886fa7987a6ba23",".github/PULL_REQUEST_TEMPLATE/bug_fix.md":"8d7bfb13212e583b9cb717ec39ac2d2070d85470bdf81a32f89e91796a14efcc",".github/PULL_REQUEST_TEMPLATE/custom.md":"88e332c54fe5a52842abdc33e129fa12b0b39c1aaa78da16bc3e1ccce0f3e643",".github/PULL_REQUEST_TEMPLATE/documentation.md":"ac8bae6001c6822dc6d2334c085018c38a8f121f0c580b33b770357170a59c76",".github/workflows/Cross.yml":"51cd10949a21f4aa734a45c06021b53f81cebddcde6723e69caf39d6b7a53cc7",".github/workflows/Features.yml":"4b7182995976d3872853555e989d49be03cfacf92a6807317c01623a1de59742",".github/workflows/OSX.yml":"1ffe8ad7703afb4bc67caf52550b53095861f7290e9b1cbd9f7f7e62de82b3b4",".github/workflows/Simple.yml":"6c681d49afdf74a85757fca4d6bfce076daebbb8816409f42345c2782ba5408d",".github/workflows/Valgrind.yml":"5beae6618e643ef75a6cdc6622bb64a586f3bc956401551920716564d4f3c1fe","CHANGELOG":"55ebcf7ee0fd10987829a98fb9757cbc6f68c62198bc70122384bedc08de9915","CODE_OF_CONDUCT.md":"0bd67c62d204ec67cb29969aaf5aac337a77c84b318937bc2d9dc7e3fcbcdcaa","Cargo.toml":"6c485fa605a0d3de6ec0af125b67c55224515354034f990334b1a1a86988c632","LICENSE-APACHE":"8173d5c29b4f956d532781d2b86e4e30f83e6b7878dce18c919451d6ba707c90","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","LICENSE.md":"dbe1fff0fb1314b6af94f161511406275cf01c5a32441fbf24528a57a051d599","README.md":"00d521d93124e88edf58d42b3114786c0daaf437e73118eed27b3c716b7514ad","clippy.toml":"8d3aafbcf358ccf45cc148cd705f5fe71e777dabc391ed9a2bae32af73291fe8","rustfmt.toml":"ae46c79a84842907e151ca5d07e36b8d1932b61c6989465500c0f706507f42cc","src/bellerophon.rs":"bbabeccfa7a70ec314a894d968b424d1162df1b9e5e659baa1fd3a37d985fe75","src/bigint.rs":"93d3332d01bb7745bc569bc6b242c6c71c75eb78835b6a05bad91952b989daf0","src/extended_float.rs":"6040bdd49c03f11f8607b2da1703e1b7b5f57ddac9b02322c6958f9c1684496f","src/fpu.rs":"72d63bac2bbfc545128aa59dc35cfad3c553bac64bf575880775b3c4ace415bc","src/heapvec.rs":"836a49d40e5da90d195508e963d869afd78aaf9adb9cd60a0cb8f92b4e105c4f","src/lemire.rs":"100f3cb293deed0b0d1e7ca6b23152ba160f92f887f8924620b28c9ab77326db","src/lib.rs":"626dfc61992c42d4996dddcbfff5775ff2ffae44d116d2d70f6564a3209c0a9a","src/libm.rs":"ed5a3856eaa44a8a05aa123e27c2048b92ff42e4af1ef3f9fa1aff2a50190f4a","src/mask.rs":"63bcda92d14169a55ac54798f45365cef64a1aecd9625c3c3bc3deae202b2a07","src/num.rs":"dbcab14a5fe8e40e381829426dd75a7db672882592b5c4a08897a2fb6d2ae7ea","src/number.rs":"49d0880a99816ecf904fb88f607a821d6770ec270825b96e800a297ab1a01d78","src/parse.rs":"19559db67eddd17d331274cf87d6c4beeb0724dcdf859de9b8ab5995c4b8e682","src/rounding.rs":"8ba42d31618db1e6a381f8b60ffe1f9d216aaccb931b8fac5f279d8465e35cb7","src/slow.rs":"f096e7f83e8372e71568ec1724bc1c9d2c67ca39b80290ba062e60ae94b1f8d1","src/stackvec.rs":"0c921eb3adbd42cbe7be0f363e08ac85b6d5f1dabd4a7b077becddeff731da16","src/table.rs":"e4288891e9b1d8ba60dcc73edc639754cc2351d3219df8c625e694f3f0e58c5a","src/table_bellerophon.rs":"a2102292b27223a81e60a8a6607c42587efde3424526156921167742a0d5937c","src/table_lemire.rs":"c101c353c38b594f5b8987263b759927095b5dcd72e65607cc1c6a7de0bfd0c8","src/table_small.rs":"61b00e13eb3945622bf8bed374c88e29c63dfedb7384b31b35dd4e543cbe62c1","tests/bellerophon.rs":"b17b87b8963ebcd71f684e4d48c1ce619964e4fb719a5875b0ce4514ed528674","tests/bellerophon_tests.rs":"76b71efa2f4cec56a79535e2d292788a5e1b443c901ec7a234800782f36ddb68","tests/integration_tests.rs":"ed1a1fc46fc239eb4ea718057ad6e9869f633797ef72fc6f05b1757ab80e1641","tests/lemire_tests.rs":"6213bcd9b44def655b44a6b760cee0c0ad82d3bb494f48c2ff100698da34625b","tests/libm_tests.rs":"6941e74d7d0adf021edc93b9919275e82810687ff33147a10361613073b22669","tests/mask_tests.rs":"8c2a3daf434815389b6bf88837e3f382d74d97250104b925d70779366bd3d537","tests/number_tests.rs":"df4b4f0c65478f2f6193bd918fa4aad7163e40598c58df44547c4559e4a8b0c7","tests/parse_tests.rs":"bc0066b9257368f0365276fcffa2662c4699a033eaf9a4a7d6faa0e9b915094a","tests/rounding_tests.rs":"99f38b768ad15e726559c446825f9f1bad67935cdd28ffcc1cbcd3e031a901ea","tests/slow_tests.rs":"36c4c2538d2f5a1c1af5deb26ec4eba47f19f9a3c280a13d10704267a16d3b3f","tests/stackvec.rs":"f040611995bcd1bd2cb47694e74aa02ff4fabdffe007f712c9bb788d82dfb8a7","tests/vec_tests.rs":"09b561160df3b1385876db452bb5a67ef2c9fd2cc36b5687e1dfaf8c58947782"},"package":"68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"} +\ No newline at end of file diff --git a/build-missing-gitmodules.patch b/build-missing-gitmodules.patch new file mode 100644 index 0000000..b1660b6 --- /dev/null +++ b/build-missing-gitmodules.patch @@ -0,0 +1,32 @@ +diff -up thunderbird-147.0/comm/third_party/rust/sfv/.cargo-checksum.json.missing-gitmodules thunderbird-147.0/comm/third_party/rust/sfv/.cargo-checksum.json +--- thunderbird-147.0/comm/third_party/rust/sfv/.cargo-checksum.json.missing-gitmodules 2026-01-08 22:45:29.000000000 +0100 ++++ thunderbird-147.0/comm/third_party/rust/sfv/.cargo-checksum.json 2026-01-15 11:31:39.545666610 +0100 +@@ -1 +1 @@ +-{"files":{".cargo_vcs_info.json":"b9684495aca1266d529c68c734a6d522edfac6963a375cc8e83ead6cba32cdd2",".gitmodules":"caa4f75b6a87c4a0f2e7d8d0d5fa2ef3f726fb0ae7797af09bfa3d57c4721148","Cargo.lock":"c2f5099c842414259cd42c41aad1625b6d8bb3448ea9005d0029b1ba473cf8df","Cargo.toml":"27657a45f07f7f9251288569bdc650aea15b875cccdd68f6add9e7a9f24cb2aa","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"5318787a14e32720b1652f08a24408aaea67fdb5154ceda0f46a6069a0c5e5e3","README.md":"ce7479ab0666eeba0a0ce519e892bc9a028fbac8ea2c476ee84a486a2517f209","examples/priority.rs":"444fcbd3f3178c51c53c5c41c966e847f9cba27935508444be8fc104b1d56b8c","rustfmt.toml":"9886f841ea5c4467bb451643df62c2e95974f7c903870faa7d211b8f7b75cfc8","src/date.rs":"eeb9959d4d667ace02e3f56c97762aad5a3b86c64bd3efb75990fbc3de503847","src/decimal.rs":"478e5d3be92be19834656c34204b9e98a181179678b7ec42cbd6fa331047c442","src/error.rs":"ce11936be379aa4d487f0200675798f3c17fff556730d879050e4bc7180a4d89","src/integer.rs":"d60c007557a15e7d62862bdfb4c806472dd2fa799b1fdda46dfdf329b52dbb25","src/key.rs":"1568c93a03fdcee53c73447b998cd7c11bc3b8ab6ec981ad783855d45e2c3c86","src/lib.rs":"4543a40b4c6b3da629028f46bf5fab87845f0d52953392565b31d904c3db4985","src/parsed.rs":"4b0b2e7f6809f9c1f1ab08aa77dd9ebaf036815d4d2aa521f5bb9547ae56fb23","src/parser.rs":"8071dbccb02565cbe574b652d10c19bf59672b55dc2fc009bd658bcf1ff49e05","src/ref_serializer.rs":"37e826559f97ae232c4c6431249821803934201c43709f07e9b7a9c0cca0abea","src/serializer.rs":"3e19248a01a024f1bfafac35ee57a4d4d49a728f02a8a1ec4f836057abd1e574","src/string.rs":"7309666153042191347941d2fbcc203af3405b394e9d772520bae4434b783e48","src/test_decimal.rs":"f0b51f0b29f4aaf9d0630bb7e60655ba1678b0fa99f40513cb47c09180d642d1","src/test_integer.rs":"4976524a4dc865c4b5dbba2b897a413fdb0ecdd0e31db84e99f5076f59b07515","src/test_key.rs":"836b2b8b450366857690e4ade99888174665494e7bb953ccad5d5d2d707fb870","src/test_parser.rs":"2aedb05d9a7a7867ca0a095a8c5b431835ddac7dca358ac988779d6157b89ae5","src/test_ref_serializer.rs":"a304442ecbba16f1e55660d773c1c1efbb34115dec23619e2e23f870800d263a","src/test_serializer.rs":"f375cbed5b1048844d12d97cc06a21c0f2a7e31bf0537d670c43422bcc3269ea","src/test_string.rs":"4c8c428dabee2c205397b874e279203b11daebe6b506ce69bad75e06c304a044","src/test_token.rs":"8a0be15b72debbe14e02c93366f738f826619fd19b0a7281ac0e86c81eb7963b","src/token.rs":"a73f6b89a6e9e60c30b6d43e8a0d7b0412adb6d77c9f5ce0481e8eb7ad846b43","src/utils.rs":"b42aeaccc1221510b3943aa3145eaaff4841afc1a16ded54d8bae4fd86a8a1db","src/visitor.rs":"9f725c8d659374691c7edb6652de14789637965c1db776b5e668226dba5cd3e8"},"package":"0d471eaefb14f4b30032525bdb124b36e55ba9cb1292080e06f1a236cd10fe87"} +\ No newline at end of file ++{"files":{".cargo_vcs_info.json":"b9684495aca1266d529c68c734a6d522edfac6963a375cc8e83ead6cba32cdd2","Cargo.lock":"c2f5099c842414259cd42c41aad1625b6d8bb3448ea9005d0029b1ba473cf8df","Cargo.toml":"27657a45f07f7f9251288569bdc650aea15b875cccdd68f6add9e7a9f24cb2aa","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"5318787a14e32720b1652f08a24408aaea67fdb5154ceda0f46a6069a0c5e5e3","README.md":"ce7479ab0666eeba0a0ce519e892bc9a028fbac8ea2c476ee84a486a2517f209","examples/priority.rs":"444fcbd3f3178c51c53c5c41c966e847f9cba27935508444be8fc104b1d56b8c","rustfmt.toml":"9886f841ea5c4467bb451643df62c2e95974f7c903870faa7d211b8f7b75cfc8","src/date.rs":"eeb9959d4d667ace02e3f56c97762aad5a3b86c64bd3efb75990fbc3de503847","src/decimal.rs":"478e5d3be92be19834656c34204b9e98a181179678b7ec42cbd6fa331047c442","src/error.rs":"ce11936be379aa4d487f0200675798f3c17fff556730d879050e4bc7180a4d89","src/integer.rs":"d60c007557a15e7d62862bdfb4c806472dd2fa799b1fdda46dfdf329b52dbb25","src/key.rs":"1568c93a03fdcee53c73447b998cd7c11bc3b8ab6ec981ad783855d45e2c3c86","src/lib.rs":"4543a40b4c6b3da629028f46bf5fab87845f0d52953392565b31d904c3db4985","src/parsed.rs":"4b0b2e7f6809f9c1f1ab08aa77dd9ebaf036815d4d2aa521f5bb9547ae56fb23","src/parser.rs":"8071dbccb02565cbe574b652d10c19bf59672b55dc2fc009bd658bcf1ff49e05","src/ref_serializer.rs":"37e826559f97ae232c4c6431249821803934201c43709f07e9b7a9c0cca0abea","src/serializer.rs":"3e19248a01a024f1bfafac35ee57a4d4d49a728f02a8a1ec4f836057abd1e574","src/string.rs":"7309666153042191347941d2fbcc203af3405b394e9d772520bae4434b783e48","src/test_decimal.rs":"f0b51f0b29f4aaf9d0630bb7e60655ba1678b0fa99f40513cb47c09180d642d1","src/test_integer.rs":"4976524a4dc865c4b5dbba2b897a413fdb0ecdd0e31db84e99f5076f59b07515","src/test_key.rs":"836b2b8b450366857690e4ade99888174665494e7bb953ccad5d5d2d707fb870","src/test_parser.rs":"2aedb05d9a7a7867ca0a095a8c5b431835ddac7dca358ac988779d6157b89ae5","src/test_ref_serializer.rs":"a304442ecbba16f1e55660d773c1c1efbb34115dec23619e2e23f870800d263a","src/test_serializer.rs":"f375cbed5b1048844d12d97cc06a21c0f2a7e31bf0537d670c43422bcc3269ea","src/test_string.rs":"4c8c428dabee2c205397b874e279203b11daebe6b506ce69bad75e06c304a044","src/test_token.rs":"8a0be15b72debbe14e02c93366f738f826619fd19b0a7281ac0e86c81eb7963b","src/token.rs":"a73f6b89a6e9e60c30b6d43e8a0d7b0412adb6d77c9f5ce0481e8eb7ad846b43","src/utils.rs":"b42aeaccc1221510b3943aa3145eaaff4841afc1a16ded54d8bae4fd86a8a1db","src/visitor.rs":"9f725c8d659374691c7edb6652de14789637965c1db776b5e668226dba5cd3e8"},"package":"0d471eaefb14f4b30032525bdb124b36e55ba9cb1292080e06f1a236cd10fe87"} +\ No newline at end of file +diff -up thunderbird-147.0/comm/third_party/rust/wasi/.cargo-checksum.json.missing-gitmodules thunderbird-147.0/comm/third_party/rust/wasi/.cargo-checksum.json +--- thunderbird-147.0/comm/third_party/rust/wasi/.cargo-checksum.json.missing-gitmodules 2026-01-08 22:45:29.000000000 +0100 ++++ thunderbird-147.0/comm/third_party/rust/wasi/.cargo-checksum.json 2026-01-15 11:31:39.545855434 +0100 +@@ -1 +1 @@ +-{"files":{".cargo_vcs_info.json":"def0d209896816fde9013e069a564dd3c1a1a46c5ce465d755b878de811f9881",".github/workflows/main.yml":"d38da3f640abbc358cb77a3c27344e9644d472adf7f8e265d00ff49d89226068",".gitmodules":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","CODE_OF_CONDUCT.md":"a13aaaf393818bd91207c618724d3fb74944ca5161201822a84af951bcf655ef","CONTRIBUTING.md":"2c908a3e263dc35dfed131c02ff907cd72fafb2c2096e4ba9b1e0cbb7a1b76df","Cargo.lock":"8cc81d2623344bdc9223c5e4a0530ae94dfa0930d465193719e6d300e2243225","Cargo.toml":"f43ee004589d9330d76d998fe7d9dd88ffd2a3daf5872b60fcaa495f47b02583","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-Apache-2.0_WITH_LLVM-exception":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","ORG_CODE_OF_CONDUCT.md":"a62b69bf86e605ee1bcbb2f0a12ba79e4cebb6983a7b6491949750aecc4f2178","README.md":"aab21c6fad2ca7e2b487764f49018ac8f6f0bf0236dabf5aa947e134952a1c69","SECURITY.md":"4d75afb09dd28eb5982e3a1f768ee398d90204669ceef3240a16b31dcf04148a","ci/regenerate.sh":"2af2cc4f41022d09ce3132013b6a0de7d5ed6fecdb44ad98b1bbd7125643cec8","ci/vendor-wit.sh":"6ea63164316554fa60fc32243595dc79629953cfb63d973678dc715b3b3cd61e","examples/cli-command-no_std.rs":"f03689380e305e5fe32e2582cb10af43d03244c1b343b90ec03936108d67f084","examples/cli-command.rs":"ac21e564ac6fe77c10ebaae774a7ebedeb8b6779826ae86834546cbe28eb8140","examples/hello-world-no_std.rs":"48251e32311e7bda9bc852bf48b8925912ae11d2534f4f7401e0d7dd3c5aeb16","examples/hello-world.rs":"4f9e5cdd74914fb82c6a20dd2544260b8d7dac921f1e0d933ca272c1ffca5163","examples/http-proxy-no_std.rs":"4ec8e31010526ffb68d2b18fd7c31a32de4d58229604efd391d4a296fee22da0","examples/http-proxy.rs":"c52c07f36d3e856bbe4e72bdd484c4129d55f26436cf0631003e451f5322d678","src/bindings.rs":"9db6b925a72119137dbc306687aa6dc61f402ed0b726db7fdb1d7fe9bf893909","src/command.rs":"8e5475c6d4a41ea3b3ec98a918a61bce9dd58cf50a2a27c764bf9796b9cbf299","src/ext/mod.rs":"4bc79c71442ac6c55dc4f8a0632b6d6805c0c9c74b22b56791a483ae447dac0c","src/ext/std.rs":"c35fd8bdafd24a6adef4f5a27e8e4bb421b0e50cebfe350868ded43980b1a06e","src/lib.rs":"044e0df592d1159ce711f17bc27edc87f876951bd3ec1ce72ebabf20e011e84a","src/proxy.rs":"3a05d33e98936642a84c755e8f4db7c5b8de27ed0416614cf4fad8b48c519cdf","wit/deps/cli/command.wit":"f729a20e99a4601f90677e31a16e63f24ee32eef062b9305e94419428c8ff70b","wit/deps/cli/environment.wit":"5e58cd47b162e9f004bc9224a29c2ec3cf9e1a3d4c910154ce53742f828af91f","wit/deps/cli/exit.wit":"a0fae6014751dc95f45b1dbe530b7f4db99d5bd607ed8bbf879b22a906f4514c","wit/deps/cli/imports.wit":"a576c17e15ece40fe29eaeb73f416d6f46ac639f512d51ad20bb915b4686a4dd","wit/deps/cli/run.wit":"a7df5376da8230e0509fffbb8355641af0765cc5cff8064bbe58fef1cbbe63c1","wit/deps/cli/stdio.wit":"bc6e5e55963d9c49b91d9880d8e50e44a718c5a7b7211bb8cb5d4fcd552b13a8","wit/deps/cli/terminal.wit":"fc87cd0bc3f76ff7181d3666617a38ee10239f8e0344db2a52cb79f46c6b2d31","wit/deps/clocks/monotonic-clock.wit":"ab12521f4522c7bae48fb272fc90f7bf21f83bc3e6b86e400075826628fdcf23","wit/deps/clocks/timezone.wit":"aaabf8145758aa75222a5e18de29a912d5ebb5babc348884fd81b1fa90225adc","wit/deps/clocks/wall-clock.wit":"b7b63d7bbb6631bcc8ce7d25910d47308e6345104dc146513b76ff1d82e1d7a0","wit/deps/clocks/world.wit":"5f066526b320973195e083bc946874b36fc488f8ae5004119c9b5dcd83430660","wit/deps/filesystem/preopens.wit":"1c53bbc639e87efc67440332e186bcc617f1ab0f2a9789c339a69ed0da424358","wit/deps/filesystem/types.wit":"24413900954e7ca1438f3c9b326a6f799b748beab51a297ab687003578f66765","wit/deps/filesystem/world.wit":"70f31a63ada7aeb6be29380aae712406baf91dad72e73de39025e38f41a32cae","wit/deps/http/handler.wit":"1f66174b4058b102367e69ce8aa657b3e9dbc767f6ade960108faaa1731f0945","wit/deps/http/proxy.wit":"c8756768c033db884734f98858b0d448a3a2cb98d9e4584c705f1fc0418422f1","wit/deps/http/types.wit":"82ac209d799643a39309c40d108a9594bebb79312f383ffcf284f23011041e7e","wit/deps/io/error.wit":"ea8a48ed6aa970947f65e378a2e72b878b421d0594b5425349d1c033a138533f","wit/deps/io/poll.wit":"d6eafcf78f220dfc07c4f055019732cc30c526d6d0d0b24150325c5eeef5d041","wit/deps/io/streams.wit":"d4b8980637de85e47459a0144dc1a9b999bfcbfb6ab344f0eceadc5face6135b","wit/deps/io/world.wit":"5572ef45d90cd766282c171a6cc403b3b9567b73e63a413c4eba1b4ad05caf25","wit/deps/random/insecure-seed.wit":"466da73f3aa1065083dd15ffd1d55c8e69b6ec4dfc6c9c149e651a126f60f33c","wit/deps/random/insecure.wit":"0a132cde99268a502973ca112db9da45c0c32870c67d6b92bd3110636c1cd871","wit/deps/random/random.wit":"cebb42f292bada460ab424bb56caf392ad14d4d7dfae1b85dfbc55253c1b751f","wit/deps/random/world.wit":"7d825a7a1624f4a165f6c7abc9aaa77e25618a9fed0c56461df8826965920dc2","wit/deps/sockets/instance-network.wit":"1e4a5d97df44421503a169e1d514eca2cf160f545c44d320ce8a82f726a40cf8","wit/deps/sockets/ip-name-lookup.wit":"c87cc003ff2b92a0d74294418e0d62d12f42f913b94617f73cc09738a46e8fac","wit/deps/sockets/network.wit":"077f76c2f266b3211b0e3fbddf4fbfd9060be050954d44aad9b331419fbe3caf","wit/deps/sockets/tcp-create-socket.wit":"96a6a1a93b859127ee60273f0a77cda8d60930f7952174fb22469293b5da6a3a","wit/deps/sockets/tcp.wit":"ad16e21cae8b67e09f6541fafaf57c88242722871aced8e53aaf018ee63be086","wit/deps/sockets/udp-create-socket.wit":"c52b9bf91ef4e30e7ec08ad1fc9e77ef005a0a87648c5d2e416dd6e35369f08c","wit/deps/sockets/udp.wit":"b8cd7720349cf11278dd30c77799b0255bfc8cbfb2dc2a8dd333f658a88d147e","wit/deps/sockets/world.wit":"84e8071d91f63484a326b5a745728e1964edc55cc90796df7ba042b508325103","wit/wasi-crate.wit":"87b72c92cc7561d7fbedc1c268f310b476f36803890c76257ebe13c0a1c06a5d"},"package":"9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"} +\ No newline at end of file ++{"files":{".cargo_vcs_info.json":"def0d209896816fde9013e069a564dd3c1a1a46c5ce465d755b878de811f9881",".github/workflows/main.yml":"d38da3f640abbc358cb77a3c27344e9644d472adf7f8e265d00ff49d89226068","CODE_OF_CONDUCT.md":"a13aaaf393818bd91207c618724d3fb74944ca5161201822a84af951bcf655ef","CONTRIBUTING.md":"2c908a3e263dc35dfed131c02ff907cd72fafb2c2096e4ba9b1e0cbb7a1b76df","Cargo.lock":"8cc81d2623344bdc9223c5e4a0530ae94dfa0930d465193719e6d300e2243225","Cargo.toml":"f43ee004589d9330d76d998fe7d9dd88ffd2a3daf5872b60fcaa495f47b02583","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-Apache-2.0_WITH_LLVM-exception":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","ORG_CODE_OF_CONDUCT.md":"a62b69bf86e605ee1bcbb2f0a12ba79e4cebb6983a7b6491949750aecc4f2178","README.md":"aab21c6fad2ca7e2b487764f49018ac8f6f0bf0236dabf5aa947e134952a1c69","SECURITY.md":"4d75afb09dd28eb5982e3a1f768ee398d90204669ceef3240a16b31dcf04148a","ci/regenerate.sh":"2af2cc4f41022d09ce3132013b6a0de7d5ed6fecdb44ad98b1bbd7125643cec8","ci/vendor-wit.sh":"6ea63164316554fa60fc32243595dc79629953cfb63d973678dc715b3b3cd61e","examples/cli-command-no_std.rs":"f03689380e305e5fe32e2582cb10af43d03244c1b343b90ec03936108d67f084","examples/cli-command.rs":"ac21e564ac6fe77c10ebaae774a7ebedeb8b6779826ae86834546cbe28eb8140","examples/hello-world-no_std.rs":"48251e32311e7bda9bc852bf48b8925912ae11d2534f4f7401e0d7dd3c5aeb16","examples/hello-world.rs":"4f9e5cdd74914fb82c6a20dd2544260b8d7dac921f1e0d933ca272c1ffca5163","examples/http-proxy-no_std.rs":"4ec8e31010526ffb68d2b18fd7c31a32de4d58229604efd391d4a296fee22da0","examples/http-proxy.rs":"c52c07f36d3e856bbe4e72bdd484c4129d55f26436cf0631003e451f5322d678","src/bindings.rs":"9db6b925a72119137dbc306687aa6dc61f402ed0b726db7fdb1d7fe9bf893909","src/command.rs":"8e5475c6d4a41ea3b3ec98a918a61bce9dd58cf50a2a27c764bf9796b9cbf299","src/ext/mod.rs":"4bc79c71442ac6c55dc4f8a0632b6d6805c0c9c74b22b56791a483ae447dac0c","src/ext/std.rs":"c35fd8bdafd24a6adef4f5a27e8e4bb421b0e50cebfe350868ded43980b1a06e","src/lib.rs":"044e0df592d1159ce711f17bc27edc87f876951bd3ec1ce72ebabf20e011e84a","src/proxy.rs":"3a05d33e98936642a84c755e8f4db7c5b8de27ed0416614cf4fad8b48c519cdf","wit/deps/cli/command.wit":"f729a20e99a4601f90677e31a16e63f24ee32eef062b9305e94419428c8ff70b","wit/deps/cli/environment.wit":"5e58cd47b162e9f004bc9224a29c2ec3cf9e1a3d4c910154ce53742f828af91f","wit/deps/cli/exit.wit":"a0fae6014751dc95f45b1dbe530b7f4db99d5bd607ed8bbf879b22a906f4514c","wit/deps/cli/imports.wit":"a576c17e15ece40fe29eaeb73f416d6f46ac639f512d51ad20bb915b4686a4dd","wit/deps/cli/run.wit":"a7df5376da8230e0509fffbb8355641af0765cc5cff8064bbe58fef1cbbe63c1","wit/deps/cli/stdio.wit":"bc6e5e55963d9c49b91d9880d8e50e44a718c5a7b7211bb8cb5d4fcd552b13a8","wit/deps/cli/terminal.wit":"fc87cd0bc3f76ff7181d3666617a38ee10239f8e0344db2a52cb79f46c6b2d31","wit/deps/clocks/monotonic-clock.wit":"ab12521f4522c7bae48fb272fc90f7bf21f83bc3e6b86e400075826628fdcf23","wit/deps/clocks/timezone.wit":"aaabf8145758aa75222a5e18de29a912d5ebb5babc348884fd81b1fa90225adc","wit/deps/clocks/wall-clock.wit":"b7b63d7bbb6631bcc8ce7d25910d47308e6345104dc146513b76ff1d82e1d7a0","wit/deps/clocks/world.wit":"5f066526b320973195e083bc946874b36fc488f8ae5004119c9b5dcd83430660","wit/deps/filesystem/preopens.wit":"1c53bbc639e87efc67440332e186bcc617f1ab0f2a9789c339a69ed0da424358","wit/deps/filesystem/types.wit":"24413900954e7ca1438f3c9b326a6f799b748beab51a297ab687003578f66765","wit/deps/filesystem/world.wit":"70f31a63ada7aeb6be29380aae712406baf91dad72e73de39025e38f41a32cae","wit/deps/http/handler.wit":"1f66174b4058b102367e69ce8aa657b3e9dbc767f6ade960108faaa1731f0945","wit/deps/http/proxy.wit":"c8756768c033db884734f98858b0d448a3a2cb98d9e4584c705f1fc0418422f1","wit/deps/http/types.wit":"82ac209d799643a39309c40d108a9594bebb79312f383ffcf284f23011041e7e","wit/deps/io/error.wit":"ea8a48ed6aa970947f65e378a2e72b878b421d0594b5425349d1c033a138533f","wit/deps/io/poll.wit":"d6eafcf78f220dfc07c4f055019732cc30c526d6d0d0b24150325c5eeef5d041","wit/deps/io/streams.wit":"d4b8980637de85e47459a0144dc1a9b999bfcbfb6ab344f0eceadc5face6135b","wit/deps/io/world.wit":"5572ef45d90cd766282c171a6cc403b3b9567b73e63a413c4eba1b4ad05caf25","wit/deps/random/insecure-seed.wit":"466da73f3aa1065083dd15ffd1d55c8e69b6ec4dfc6c9c149e651a126f60f33c","wit/deps/random/insecure.wit":"0a132cde99268a502973ca112db9da45c0c32870c67d6b92bd3110636c1cd871","wit/deps/random/random.wit":"cebb42f292bada460ab424bb56caf392ad14d4d7dfae1b85dfbc55253c1b751f","wit/deps/random/world.wit":"7d825a7a1624f4a165f6c7abc9aaa77e25618a9fed0c56461df8826965920dc2","wit/deps/sockets/instance-network.wit":"1e4a5d97df44421503a169e1d514eca2cf160f545c44d320ce8a82f726a40cf8","wit/deps/sockets/ip-name-lookup.wit":"c87cc003ff2b92a0d74294418e0d62d12f42f913b94617f73cc09738a46e8fac","wit/deps/sockets/network.wit":"077f76c2f266b3211b0e3fbddf4fbfd9060be050954d44aad9b331419fbe3caf","wit/deps/sockets/tcp-create-socket.wit":"96a6a1a93b859127ee60273f0a77cda8d60930f7952174fb22469293b5da6a3a","wit/deps/sockets/tcp.wit":"ad16e21cae8b67e09f6541fafaf57c88242722871aced8e53aaf018ee63be086","wit/deps/sockets/udp-create-socket.wit":"c52b9bf91ef4e30e7ec08ad1fc9e77ef005a0a87648c5d2e416dd6e35369f08c","wit/deps/sockets/udp.wit":"b8cd7720349cf11278dd30c77799b0255bfc8cbfb2dc2a8dd333f658a88d147e","wit/deps/sockets/world.wit":"84e8071d91f63484a326b5a745728e1964edc55cc90796df7ba042b508325103","wit/wasi-crate.wit":"87b72c92cc7561d7fbedc1c268f310b476f36803890c76257ebe13c0a1c06a5d"},"package":"9683f9a5a998d873c0d21fcbe3c083009670149a8fab228644b8bd36b2c48cb3"} +\ No newline at end of file +diff -up thunderbird-147.0/comm/third_party/rust/wast/.cargo-checksum.json.missing-gitmodules thunderbird-147.0/comm/third_party/rust/wast/.cargo-checksum.json +--- thunderbird-147.0/comm/third_party/rust/wast/.cargo-checksum.json.missing-gitmodules 2026-01-15 11:35:36.714064213 +0100 ++++ thunderbird-147.0/comm/third_party/rust/wast/.cargo-checksum.json 2026-01-15 11:35:45.470341227 +0100 +@@ -1 +1 @@ +-{"files":{".cargo_vcs_info.json":"3948ddd3de662f03e1dc42cf43938ca498511b13a4f3b59d47cc7c2b50f807ce","Cargo.toml":"cad0c4af427ed3e97965ee33e0e475adc4280638defe1530df50ec29fd15abfc","Cargo.toml.orig":"aa9f246dcbbff7f069eeceb1036d33a55d381e7242e1c6c0b5c33a3eb049ae01","README.md":"5a0d2b894a3ac74ee2be74715a2f22c40a08520cb4ac59183f4e7356f34ac566","src/component.rs":"154cdef2003b1607ab21a50a821b455da854b78d353d573586351c2593ed70a2","src/component/alias.rs":"5ec26333e179dc3778dead489f1273815fe9c1c808ba6a7e60eff54072fad795","src/component/binary.rs":"e7eefd2bae6eb00803cc6d9eba5dd124c36667c7673fa04baaf0806af2b02336","src/component/component.rs":"90002d2dbe9a5665e637c04b81c1cb700025e9389cdae5417fd9b3a2e49f91a1","src/component/custom.rs":"f5b23c34b73a716a986fd999fc8d8c9e24c341e83292088fe83325cd82dab4f5","src/component/expand.rs":"28fa091aac599bde4e1bd8cf1e41f24d10da1683453b3e65f3bb877bbf890b10","src/component/export.rs":"f51e824c839d8bb0884eca509622f376c8cce3335be324b2b25033af6216fd2a","src/component/func.rs":"cafdbe418fe5c5dee68b2b7245b4f00bf3bea7a4a686846bfde2e5c85bde0601","src/component/import.rs":"add63978787f5bfad1faeb1ce6b121fa60bbcd9a736afd7ae81ddc9f5b031107","src/component/instance.rs":"e550a7ee9af092ae084dd41e2c0ae756b7dca8da4b91d672d90265a6a15dff83","src/component/item_ref.rs":"e9c426ccc0210dc0c37bb0448468f5f4d9e52656b72d4ff0f2dc65c89957fe60","src/component/module.rs":"d27a28199d1dea1c64294a514329a524432319288515b0a0e3091fa7d3a33f74","src/component/resolve.rs":"93affa62d621b2f06b2c78cd98fe98d48f7832f02a9f87d3b48388b7d570387b","src/component/types.rs":"3af82844f27a472c45058ea6a2cc3a6ffa1ac2eb9625041c435085f9ef74fedd","src/component/wast.rs":"aa39db0ea0acd38744dc3cbd35903c9b00b5de90a5bfc8b76e6b6a7581d7c4c0","src/component_disabled.rs":"dde798aabc109d12de7e169bdd67a945274cfec1c1f4d6e097ecac9e5cff23e2","src/core.rs":"c82d7356515f675f9173f9bf5d7c0f4e56ca7a3eebc92b5f95a2d04882ca470c","src/core/binary.rs":"609f752b3ba6cfa9d9604d82d4e87c9ffb5a35984a28f44155b14faaa830369a","src/core/binary/dwarf.rs":"bc0662cbdc58c83abc153490f7c47e2ae5998a1dedf42b7058606ce7edcb04b7","src/core/binary/dwarf_disabled.rs":"182ee888617357835decd08c68fe8dfdef9fe0665ece9b1550794fea9dcb1486","src/core/custom.rs":"edd6044b75d79ec873c28d803fb8dc9a53724f1bba474bcdef2bc77196e0a4d2","src/core/export.rs":"1322a120d9e1dd6f3aa1485ee0bbc4294961028ae8a7584a24170af5823b73b1","src/core/expr.rs":"0451cba0e516c4ccd68afb7df70617d143f5eb042d301d8d106673db2366ffff","src/core/func.rs":"4625e75e050a4e3b22fe08e8fc39379e66420f1bbe499b6965d51ae92299823d","src/core/global.rs":"dec0abecadd2fde9298acb729259deba1ef3c4733ae5afcb4fe8cd4a633f5349","src/core/import.rs":"602a13aed2fd5fa63e2562246586546199861df57f304c2906561ab77810cadd","src/core/memory.rs":"b828b5686cfa562e4cf9c5d1a718cb823b90a6e6b637bfd17e364e68a4f79a55","src/core/module.rs":"1635ff9d4b4634a0cd18e12df281ce03c8f000edc07aae846d03ce8714f0393e","src/core/resolve/deinline_import_export.rs":"2338bc87bf19a095007bbb9598f7eab7773cf04644714761eb1aeecc5372cf79","src/core/resolve/mod.rs":"230283f528eb98b861d331e9fb5bddc3b2baa09e020ea5aa8849dfb970e0e26e","src/core/resolve/names.rs":"bf1c1a70d9b1216fa763d0f604c8789cd97f7211ac3187b4237eb41fed1cbe41","src/core/resolve/types.rs":"fbb2bcfcdb232d5bfb90cd563e7026d1a18fd0dd75bafaa25a95011216db53d5","src/core/table.rs":"4e31c8e187062abece9fd07fe28de730f2b037fa7c25571e7321a30755e0f6ec","src/core/tag.rs":"8a3d4fcdb86dedd68cdaf25abd930ef52a461cf2a0e9393bb9cb6f425afaaf2e","src/core/types.rs":"231d54c06eb2c02c83edba6e4b9b7410b7719b4a51b3d9f039d86003994f6eea","src/core/wast.rs":"7d505f0b906a2cd2df79976844a1d1026199fb7aa1d9528e1cc7117ef2d49c43","src/encode.rs":"0b165176db54fb9136202c54180adabda843a88e5436b96c19be9d41623912a3","src/error.rs":"4526260299c7983696a49ffe30a80139beb0d081fa8f42decc5e3283b361b1cb","src/gensym.rs":"b5e02e34443085f01deb5b657e541be7dc5d6dc952304e434a0b08320ea6c185","src/lexer.rs":"f4626c9893049af2419101d7af1d1ced4da6637b1a147f5fc29d562edf9d81d4","src/lib.rs":"016946ce4c00d42d95f8752b78a3d4a661a2d0335029ff891b8c3303a26d0aa4","src/names.rs":"888654ba6c95ee44b0041dd211889ae7a96f1f51e40f09b7246e28c1c497be51","src/parser.rs":"1b65e89ff099549421b2313e63984465785ed3e79fce359a77a4e7d29ba25fe1","src/token.rs":"5378856440f993dc7cfd1a5b86b78290fd6b150c493ec55314afe7f92b2cfd04","src/wast.rs":"3161c1eabe0f5cc7702d16ca3e527ddf1d5b65e5400661709507b06f83c6f4d4","src/wat.rs":"5c2002f4904ce2f33fc547c2d7ee916a56f4551522c7a4b21e34df5d49289374","tests/.gitattributes":"727d37b55ce621ae60dd4fd2329cbce7e8a28c9ecd5c96f063be19e67db4cd53","tests/.gitignore":"8e464dd44890d3c805a4b3ecc8ebf75bd8b75b18267f408d471bad5b75b1e175","tests/annotations.rs":"de6ab2a4e15c0bc683482436bed27e37ab45bc374d99f2fcc031c7947506e581","tests/comments.rs":"c068034817774cc94aa06fa09de453132d063335775002aa694fc60889a4ee04","tests/parse-fail.rs":"60cf90f0bb29c5648d803629c2614140be7746c6bc4858e2be318641382f9429","tests/parse-fail/bad-core-func-alias.wat":"b71372064c3fce9d4a616418605040fe5e1356030a709b798b4769d3619cbbfb","tests/parse-fail/bad-core-func-alias.wat.err":"bb63274c26d3a21209bad794767f48372834bdc10cfbebf568a0c65d52803c90","tests/parse-fail/bad-func-alias.wat":"237c07149e1e74afe3b991a1fee6acb63167c1ca8931341614c435000339b887","tests/parse-fail/bad-func-alias.wat.err":"4a4bfc691b06d20fdf71e1dbac04649a52c76787048415599978987d761308fa","tests/parse-fail/bad-index.wat":"d21489daeec3a35327dcc9e2ba2d0acdd05f4aeaff2272cca608fda4d2338497","tests/parse-fail/bad-index.wat.err":"dc11070de0c9160573006ea4e5fa3c4d28e71bc39b24b1938cf6ff3b03ea7154","tests/parse-fail/bad-name.wat":"e5ff5d410007779a0de6609ea4cc693f0e603d36a106b8f5098c1980dd9f8124","tests/parse-fail/bad-name.wat.err":"fb5638476c1b85d9d1919e3dbcb0f16f82d088a4a22d4a0c186d7b8ba6e1902b","tests/parse-fail/bad-name2.wat":"5a6a4d0c19e5f2e48d7cebf361aca9b9000b7ef0c652997b5bd0ffaadbd2ca8a","tests/parse-fail/bad-name2.wat.err":"129707cce45f1e3cfb3e2ca5c702182e16ca5eeb2dbb2edd0710b004a8e194a5","tests/parse-fail/bad-name3.wat":"c19133d738cc84e9174301f27d4050c216bda81c7e9918d03ac792b088f24a05","tests/parse-fail/bad-name3.wat.err":"84ea63d40a619a0782ec6e94fce63921188ab87b1c3875eacae0a371144ed83a","tests/parse-fail/block1.wat":"91e74b5c3b43be692e7a6ae74fbfa674c4b6197299eb61338c4eccf282b18f17","tests/parse-fail/block1.wat.err":"40a083ae496b41dee7002cc6a664c5db0c5e4d904ae03b815773a769c4493fca","tests/parse-fail/block2.wat":"a8c07b4c09d51f10a8ffdf19806586022552398701cd90eb6d09816d45df06e5","tests/parse-fail/block2.wat.err":"33c842ec5dd0f2fdd3a9ce8187dd98b45ceee48c12810802af809d05b9cd25e9","tests/parse-fail/block3.wat":"29739abfbabd7c55f00ddfbbb9ebd818b4a114ef2336d50514f0842f7e075905","tests/parse-fail/block3.wat.err":"fc667ae2e71a260f62a3c7393bc97272e7c0ff38b17594f4370847b8a5019060","tests/parse-fail/confusing-block-comment0.wat":"8f27c9d0d212bbb1862ea89ffd7cbeafde5dfd755d695c1ba696cd520aba1a1d","tests/parse-fail/confusing-block-comment0.wat.err":"b53cbaef7bcec3862c64e09c084b92cd61bd29b954125482b2d083db250cd9e2","tests/parse-fail/confusing-block-comment1.wat":"b1a0447c9a8eaab8938d15cd33bd4adbb8bb69c2d710209b604023991a4347cb","tests/parse-fail/confusing-block-comment1.wat.err":"2fc3b3e4f98416326e1e5ec034026301069b6a98fa24451bc7573e16b8cb3811","tests/parse-fail/confusing-block-comment2.wat":"e3f49c7a388fba81081beb25d87bbd7db0acce5dd8e3eaa04574905ed7ec420c","tests/parse-fail/confusing-block-comment2.wat.err":"2183231d6acd0b5a117f9aea747c3d5c12e758450a6cd74027bb954a3134cf19","tests/parse-fail/confusing-block-comment3.wat":"d83f89c582501eb8833e772b8462c8974984a2f7fbb80b1452dc399fac74e5ed","tests/parse-fail/confusing-block-comment3.wat.err":"8b2096a4833627905c63f49cdabe44be24336646578dcfbdc67e9bfb35cbc601","tests/parse-fail/confusing-block-comment4.wat":"b7c6c68844d918e9ef6dd5ab9c40c7de7b38f04f94fadad630eda4e596f3e0f8","tests/parse-fail/confusing-block-comment4.wat.err":"2f790cc511edfcd89a12c9207901be16039fc1a06a584d73095e77a52f861cd9","tests/parse-fail/confusing-block-comment5.wat":"a159808032638cc914fa80ac4354a68b0af4f435a09cbe3e2d577582e183eb0a","tests/parse-fail/confusing-block-comment5.wat.err":"6fe0d99894307442f83fe93beaa5da706e06c9bdaf8e39d7cbae4c4fffafcb94","tests/parse-fail/confusing-block-comment6.wat":"abe48bcba2587dca98bc80ddde4e813f94fbc8a3538704a0775ea85bca0f8466","tests/parse-fail/confusing-block-comment6.wat.err":"3c97b9bf1112bbb7335d7fe4be5befb6f91eea7bec7dd3e6b543792231003c56","tests/parse-fail/confusing-block-comment7.wat":"e125c416ea5fa0ac35a58295a83a6f345438e2d7ddc6a39bd76c8e89885b3f0e","tests/parse-fail/confusing-block-comment7.wat.err":"5c34528ff2019cd3f0b3df34fd42523c0b66120706321da2c88ec05793478d2e","tests/parse-fail/confusing-block-comment8.wat":"200cc4c0e5af21a25529d7a81633a03642cff807255d6cd72eb45cdccc605cec","tests/parse-fail/confusing-block-comment8.wat.err":"9b81237d150a784b71791eee88fb6264a8bd6412862660f7392945203809e517","tests/parse-fail/confusing-line-comment0.wat":"bcec4c5a1e52b3e392e07c6711c979aa8d7db8baaf2bcdf270ba16d1aa528d26","tests/parse-fail/confusing-line-comment0.wat.err":"41ec5a075dc6b73afe1aec6b3198c5c4ae3a1a900e1610115879058ce034d6f6","tests/parse-fail/confusing-line-comment1.wat":"a2afbcab00ec957dfd9e9bf21fa4238852247b27f0b054f4a00f6b172dddf853","tests/parse-fail/confusing-line-comment1.wat.err":"f19a645e6fb5cbd7a0dd2308732741edcf83dbae0ef62549972029856a9e7fc6","tests/parse-fail/confusing-line-comment2.wat":"7f2a68229d02aac56ec4dfccf139bf2d617a0e89430357b30444dc4239d8aa89","tests/parse-fail/confusing-line-comment2.wat.err":"08add3d33e10e1ab6b4f3ae431f5db61d6f6c0a2b7d6828482a1e51b3a2d3851","tests/parse-fail/confusing-line-comment3.wat":"61173ae54782f6de86685f9555ffb94bbe2cf20b234daf660abb69ba3326f1ff","tests/parse-fail/confusing-line-comment3.wat.err":"4a5333dc02efa3c1eeab9cafa7c707f78abe92defdb01a71d6fe20944e4785f0","tests/parse-fail/confusing-line-comment4.wat":"9ecbbbe82c750e6475af1bfb46fe7a06115e4446a437d19fc08ca3d002f2a1c9","tests/parse-fail/confusing-line-comment4.wat.err":"ddb8aee8006265253b09c313cf5eb5c2dc4da66f502b4f6d3e2e1de77b35aec9","tests/parse-fail/confusing-line-comment5.wat":"8a4c8d342111bc9d37c16dbdf67c52027e1a42632abc9f359b3e4f07a85748b5","tests/parse-fail/confusing-line-comment5.wat.err":"34e368719fc0eab2f1a43c9f8e6f1b31aa9be9f971085d72374e49bde39cbfe5","tests/parse-fail/confusing-line-comment6.wat":"15f0dcdec23736ce92db84b3a7cdfe8689c97f2a7d0b9b0bfb0dcd2675163ed1","tests/parse-fail/confusing-line-comment6.wat.err":"0570be2ede803f071925d249f3858d3a417b5a6d678c9da40fc851d788d12983","tests/parse-fail/confusing-line-comment7.wat":"c7ee59301a701dd52d56cad02df78b0ad3584460bc18efa42ee137fe0c35aef6","tests/parse-fail/confusing-line-comment7.wat.err":"feebbeee8c85d8b3b85cec89435ae18f3ade9f754ca180d747a41406b64ca07a","tests/parse-fail/confusing-line-comment8.wat":"17632a8142154624de88b3cf93516147ed3419d785200bcd7049499eca8e8f04","tests/parse-fail/confusing-line-comment8.wat.err":"9c209285f2295cd2bc999aa7a9534a654932493308ab1f102839ed15a4d04d17","tests/parse-fail/confusing-string0.wat":"497b679b32baddcd6a158f4cadd3d9a9dea3457bac2a8c2c3d4e09b7c2d80842","tests/parse-fail/confusing-string0.wat.err":"cb3d737f2319346675a038716694354cd3b272453daa8a96e32e9861a9277f7b","tests/parse-fail/confusing-string1.wat":"46654cbed1ea6aab5019aef3d20098a391e40dacafa1ad5e83bf4ec384109fce","tests/parse-fail/confusing-string1.wat.err":"de7e7da516dc6c244bd0e4f012577b69f0cacbcc10f727fadb4b50bb04e0e2b4","tests/parse-fail/confusing-string2.wat":"11938f217c14387c05312735130f00c91d9df2d3ff9df7f13395e0f2b81dad54","tests/parse-fail/confusing-string2.wat.err":"e7bd08b146a855d681fefaf9e0576a9c333a2d10044f8e268b916b22a54227c9","tests/parse-fail/confusing-string3.wat":"e0ca4903fcafb9a54a91cf99e5eac95d25c6d2eb67b076f88191ad396f839cb6","tests/parse-fail/confusing-string3.wat.err":"b88d5db9e445c798eb24f95b7661b9c0368934d27ee8208477cd1c99351b939a","tests/parse-fail/confusing-string4.wat":"3ee2aee7f77604d051519c6f1795634469c12e98ae347a98f0c8445eecf1ff3d","tests/parse-fail/confusing-string4.wat.err":"1edc65bb09d8d3eed6ff69e7d9a7a4b5941dc823fa3436fa375657510255f6f4","tests/parse-fail/confusing-string5.wat":"024e50943128840d53f17e31a9b9332ce4f0ee70a847a043015f435b1c3c6e76","tests/parse-fail/confusing-string5.wat.err":"a0f13ec40d596ea2d8b0c4292b0d28775a5116ab7e11d7de88b295d25428c661","tests/parse-fail/confusing-string6.wat":"79cf157e29319800d2652c5a7f3dc90e07ebe2145c9904a70fc12027cdee84b7","tests/parse-fail/confusing-string6.wat.err":"860555e7aa13e3de3639cc2a530d6a42b974b629c4659593e972cbb0f306abae","tests/parse-fail/confusing-string7.wat":"7d8e403766dfb4e569754160d31ed0f9a27f908ed6cff96be43ab3d37f5975d5","tests/parse-fail/confusing-string7.wat.err":"658b6a02ba6d769254485f35c20984e7135d914b4266929963d723f26a40be4a","tests/parse-fail/confusing-string8.wat":"5a9b222e578655d57ee6e9f19bc1ea8e29aa52d652975fac685213444ed6458f","tests/parse-fail/confusing-string8.wat.err":"9a4e1a510330c800a1df7966998ebc3cde931eda20b249e5360f5e9a905dce11","tests/parse-fail/inline1.wat":"4e9767d67207aace2ac5e6f63a30e7510e4aa245ba35420539509e2254470272","tests/parse-fail/inline1.wat.err":"0143017a9825e518baa6009bae2c8d63520051dedd3437705bbe36b038a57f41","tests/parse-fail/newline-in-string.wat":"5c01cf709544ade0a6cdfcc39a3836a3bc018b633dc42a6cd872b6defc763ea7","tests/parse-fail/newline-in-string.wat.err":"1504209cc37a78b2aee778f23eacf78606daf964cf7bff251f5700efcd27ffd7","tests/parse-fail/string1.wat":"620d46d585ce94b382b5fde628c1399f3e562014b7a44af46e92f7bd045ca86e","tests/parse-fail/string1.wat.err":"fc53f3a1c4a65d8f25e5af51dec7699f45cecba114ca9c7871781bc70f664320","tests/parse-fail/string10.wat":"f7409dd45e153a1b11cb23e38f4ed87da12bedde38f8f0ccfe91037b0a4d97bd","tests/parse-fail/string10.wat.err":"ce677db5e37e0ed81ca357ed6b5edb21d85c27303ee194855bea7a88457efb6a","tests/parse-fail/string11.wat":"f6e0400b8c6a2014efa1ac676c567e140d8f86b5f4d5129773e6d67af537b615","tests/parse-fail/string11.wat.err":"4c6a550d29eda38a4e1bf7a589596f11655dc779479d7b8d466cfc53f815a742","tests/parse-fail/string12.wat":"23e30070eef22271651cce096a801fc4f79f3c37343c88bb8d2fc99b32d3b8b9","tests/parse-fail/string12.wat.err":"b5ec59f2996b88b2ee157e22d1774dc3e36fc08ed5bfc621aea830d30f66f586","tests/parse-fail/string13.wat":"81a305b981159ee10e140749ea3220c9edaaff53605e63c21995de47382b5faf","tests/parse-fail/string13.wat.err":"959f26c6b54e0d367b51d11d1addd8a53b5b8ff3caf70ebdd46bbea8ccfa2418","tests/parse-fail/string14.wat":"c45c2cc9f7afbfbd4be8e513106d22f7e5e817091448576c6bdf0701b81d95dd","tests/parse-fail/string14.wat.err":"50b5bccba905ddbe275938edb7ed0b09a5ca53dcdad36a7ff736ce9bc8e7a338","tests/parse-fail/string15.wat":"b5e0d5ade40de53b2d767a132e28376bb8c7a6f6238c4d8c248ae717c41d7f1f","tests/parse-fail/string15.wat.err":"0e9fc502cc90f96d1f592a3f63369fd2a3574bc4a2345a70365dbb76804e870f","tests/parse-fail/string16.wat":"38c3688cee80a9d089d239aa06eb1d27c5364ad2bd270aca57d05997c20aa682","tests/parse-fail/string16.wat.err":"4274b3bbe4df4cf0373619b1fcd082d0c802990817d2aca26ed885168c80e489","tests/parse-fail/string2.wat":"1172964aed31537b8c466d1f045f3e756926e7b221f80b2aff4a9a6721ea0beb","tests/parse-fail/string2.wat.err":"4618d3b20a78a077337eb5d6cae14ac39d9853762f011fbd23cff8921618dbde","tests/parse-fail/string3.wat":"07e0fbcd6270c1db100917c151ee4ac3f935e4ee1b27bce3c453b22b4b74f4d6","tests/parse-fail/string3.wat.err":"08ffc6158a9e030b2e211d53bdb8aeacfd879815c7b284d6a83b030566e35928","tests/parse-fail/string4.wat":"c970da2051b0613bdd1de4664f10424e14f2ebabe604175d4fb9b763b37af577","tests/parse-fail/string4.wat.err":"406706594d305c560fabd66417ad4fc276939990b5e701bd9d13fc223d207219","tests/parse-fail/string5.wat":"386cf314bb05acdaaabdf4da1caf140167271a26bd08bf34c3a7427d4bc4431f","tests/parse-fail/string5.wat.err":"1e56b44a23a37b2b2ad05aa9dd7e1e18191b5cc22151f93bbcf9d618779a57bd","tests/parse-fail/string6.wat":"8f1fe2825ff96f2acee9130a7721f86fcc93c221baa9411bf1fb6f0870d38ccb","tests/parse-fail/string6.wat.err":"d55dfd84d94e893f167ae73b7a080aefb2bfb05cc8a1ec201c4d3066fb8549b4","tests/parse-fail/string7.wat":"b12f8c75313d7f834489d3c353422f90bc945b37139586446eda82e334a97cde","tests/parse-fail/string7.wat.err":"4cee0ca61992c249dd0faaf2529a073cf8deeb36111a3f69b43695e5682560a2","tests/parse-fail/string8.wat":"4c2e0e1f883bb4e8cba9313497ed792130e5848e62bde7716102788d7467be10","tests/parse-fail/string8.wat.err":"840c6def7c60dd7c2b7261549cab435ba78c9b3a937adf6d5d9595ff8af01c91","tests/parse-fail/string9.wat":"2b7670caed2b0688d535de6e4e416f35fa717cfbe096a6cc764a669085c8f52f","tests/parse-fail/string9.wat.err":"37b5a9c3af9631500f31f9e5e3efa821b8d96063c57d60fd01df6be6a5c323e1","tests/parse-fail/unbalanced.wat":"f664fbef53a0308f864ba496d38044eb90482636e32586512939d4930729f3fe","tests/parse-fail/unbalanced.wat.err":"aba579f7b836856e69afe05da8328aabe0643d94e369898e686aa7bb0b07e9c9","tests/recursive.rs":"ad8a2b07bf955121a7c9e326ed35f9b2bc56b440c8cc0bbde24d423a79945c1a"},"package":"4f79a9d9df79986a68689a6b40bcc8d5d40d807487b235bebc2ac69a242b54a1"} +\ No newline at end of file ++{"files":{".cargo_vcs_info.json":"3948ddd3de662f03e1dc42cf43938ca498511b13a4f3b59d47cc7c2b50f807ce","Cargo.toml":"cad0c4af427ed3e97965ee33e0e475adc4280638defe1530df50ec29fd15abfc","Cargo.toml.orig":"aa9f246dcbbff7f069eeceb1036d33a55d381e7242e1c6c0b5c33a3eb049ae01","README.md":"5a0d2b894a3ac74ee2be74715a2f22c40a08520cb4ac59183f4e7356f34ac566","src/component.rs":"154cdef2003b1607ab21a50a821b455da854b78d353d573586351c2593ed70a2","src/component/alias.rs":"5ec26333e179dc3778dead489f1273815fe9c1c808ba6a7e60eff54072fad795","src/component/binary.rs":"e7eefd2bae6eb00803cc6d9eba5dd124c36667c7673fa04baaf0806af2b02336","src/component/component.rs":"90002d2dbe9a5665e637c04b81c1cb700025e9389cdae5417fd9b3a2e49f91a1","src/component/custom.rs":"f5b23c34b73a716a986fd999fc8d8c9e24c341e83292088fe83325cd82dab4f5","src/component/expand.rs":"28fa091aac599bde4e1bd8cf1e41f24d10da1683453b3e65f3bb877bbf890b10","src/component/export.rs":"f51e824c839d8bb0884eca509622f376c8cce3335be324b2b25033af6216fd2a","src/component/func.rs":"cafdbe418fe5c5dee68b2b7245b4f00bf3bea7a4a686846bfde2e5c85bde0601","src/component/import.rs":"add63978787f5bfad1faeb1ce6b121fa60bbcd9a736afd7ae81ddc9f5b031107","src/component/instance.rs":"e550a7ee9af092ae084dd41e2c0ae756b7dca8da4b91d672d90265a6a15dff83","src/component/item_ref.rs":"e9c426ccc0210dc0c37bb0448468f5f4d9e52656b72d4ff0f2dc65c89957fe60","src/component/module.rs":"d27a28199d1dea1c64294a514329a524432319288515b0a0e3091fa7d3a33f74","src/component/resolve.rs":"93affa62d621b2f06b2c78cd98fe98d48f7832f02a9f87d3b48388b7d570387b","src/component/types.rs":"3af82844f27a472c45058ea6a2cc3a6ffa1ac2eb9625041c435085f9ef74fedd","src/component/wast.rs":"aa39db0ea0acd38744dc3cbd35903c9b00b5de90a5bfc8b76e6b6a7581d7c4c0","src/component_disabled.rs":"dde798aabc109d12de7e169bdd67a945274cfec1c1f4d6e097ecac9e5cff23e2","src/core.rs":"c82d7356515f675f9173f9bf5d7c0f4e56ca7a3eebc92b5f95a2d04882ca470c","src/core/binary.rs":"609f752b3ba6cfa9d9604d82d4e87c9ffb5a35984a28f44155b14faaa830369a","src/core/binary/dwarf.rs":"bc0662cbdc58c83abc153490f7c47e2ae5998a1dedf42b7058606ce7edcb04b7","src/core/binary/dwarf_disabled.rs":"182ee888617357835decd08c68fe8dfdef9fe0665ece9b1550794fea9dcb1486","src/core/custom.rs":"edd6044b75d79ec873c28d803fb8dc9a53724f1bba474bcdef2bc77196e0a4d2","src/core/export.rs":"1322a120d9e1dd6f3aa1485ee0bbc4294961028ae8a7584a24170af5823b73b1","src/core/expr.rs":"0451cba0e516c4ccd68afb7df70617d143f5eb042d301d8d106673db2366ffff","src/core/func.rs":"4625e75e050a4e3b22fe08e8fc39379e66420f1bbe499b6965d51ae92299823d","src/core/global.rs":"dec0abecadd2fde9298acb729259deba1ef3c4733ae5afcb4fe8cd4a633f5349","src/core/import.rs":"602a13aed2fd5fa63e2562246586546199861df57f304c2906561ab77810cadd","src/core/memory.rs":"b828b5686cfa562e4cf9c5d1a718cb823b90a6e6b637bfd17e364e68a4f79a55","src/core/module.rs":"1635ff9d4b4634a0cd18e12df281ce03c8f000edc07aae846d03ce8714f0393e","src/core/resolve/deinline_import_export.rs":"2338bc87bf19a095007bbb9598f7eab7773cf04644714761eb1aeecc5372cf79","src/core/resolve/mod.rs":"230283f528eb98b861d331e9fb5bddc3b2baa09e020ea5aa8849dfb970e0e26e","src/core/resolve/names.rs":"bf1c1a70d9b1216fa763d0f604c8789cd97f7211ac3187b4237eb41fed1cbe41","src/core/resolve/types.rs":"fbb2bcfcdb232d5bfb90cd563e7026d1a18fd0dd75bafaa25a95011216db53d5","src/core/table.rs":"4e31c8e187062abece9fd07fe28de730f2b037fa7c25571e7321a30755e0f6ec","src/core/tag.rs":"8a3d4fcdb86dedd68cdaf25abd930ef52a461cf2a0e9393bb9cb6f425afaaf2e","src/core/types.rs":"231d54c06eb2c02c83edba6e4b9b7410b7719b4a51b3d9f039d86003994f6eea","src/core/wast.rs":"7d505f0b906a2cd2df79976844a1d1026199fb7aa1d9528e1cc7117ef2d49c43","src/encode.rs":"0b165176db54fb9136202c54180adabda843a88e5436b96c19be9d41623912a3","src/error.rs":"4526260299c7983696a49ffe30a80139beb0d081fa8f42decc5e3283b361b1cb","src/gensym.rs":"b5e02e34443085f01deb5b657e541be7dc5d6dc952304e434a0b08320ea6c185","src/lexer.rs":"f4626c9893049af2419101d7af1d1ced4da6637b1a147f5fc29d562edf9d81d4","src/lib.rs":"016946ce4c00d42d95f8752b78a3d4a661a2d0335029ff891b8c3303a26d0aa4","src/names.rs":"888654ba6c95ee44b0041dd211889ae7a96f1f51e40f09b7246e28c1c497be51","src/parser.rs":"1b65e89ff099549421b2313e63984465785ed3e79fce359a77a4e7d29ba25fe1","src/token.rs":"5378856440f993dc7cfd1a5b86b78290fd6b150c493ec55314afe7f92b2cfd04","src/wast.rs":"3161c1eabe0f5cc7702d16ca3e527ddf1d5b65e5400661709507b06f83c6f4d4","src/wat.rs":"5c2002f4904ce2f33fc547c2d7ee916a56f4551522c7a4b21e34df5d49289374","tests/.gitignore":"8e464dd44890d3c805a4b3ecc8ebf75bd8b75b18267f408d471bad5b75b1e175","tests/annotations.rs":"de6ab2a4e15c0bc683482436bed27e37ab45bc374d99f2fcc031c7947506e581","tests/comments.rs":"c068034817774cc94aa06fa09de453132d063335775002aa694fc60889a4ee04","tests/parse-fail.rs":"60cf90f0bb29c5648d803629c2614140be7746c6bc4858e2be318641382f9429","tests/parse-fail/bad-core-func-alias.wat":"b71372064c3fce9d4a616418605040fe5e1356030a709b798b4769d3619cbbfb","tests/parse-fail/bad-core-func-alias.wat.err":"bb63274c26d3a21209bad794767f48372834bdc10cfbebf568a0c65d52803c90","tests/parse-fail/bad-func-alias.wat":"237c07149e1e74afe3b991a1fee6acb63167c1ca8931341614c435000339b887","tests/parse-fail/bad-func-alias.wat.err":"4a4bfc691b06d20fdf71e1dbac04649a52c76787048415599978987d761308fa","tests/parse-fail/bad-index.wat":"d21489daeec3a35327dcc9e2ba2d0acdd05f4aeaff2272cca608fda4d2338497","tests/parse-fail/bad-index.wat.err":"dc11070de0c9160573006ea4e5fa3c4d28e71bc39b24b1938cf6ff3b03ea7154","tests/parse-fail/bad-name.wat":"e5ff5d410007779a0de6609ea4cc693f0e603d36a106b8f5098c1980dd9f8124","tests/parse-fail/bad-name.wat.err":"fb5638476c1b85d9d1919e3dbcb0f16f82d088a4a22d4a0c186d7b8ba6e1902b","tests/parse-fail/bad-name2.wat":"5a6a4d0c19e5f2e48d7cebf361aca9b9000b7ef0c652997b5bd0ffaadbd2ca8a","tests/parse-fail/bad-name2.wat.err":"129707cce45f1e3cfb3e2ca5c702182e16ca5eeb2dbb2edd0710b004a8e194a5","tests/parse-fail/bad-name3.wat":"c19133d738cc84e9174301f27d4050c216bda81c7e9918d03ac792b088f24a05","tests/parse-fail/bad-name3.wat.err":"84ea63d40a619a0782ec6e94fce63921188ab87b1c3875eacae0a371144ed83a","tests/parse-fail/block1.wat":"91e74b5c3b43be692e7a6ae74fbfa674c4b6197299eb61338c4eccf282b18f17","tests/parse-fail/block1.wat.err":"40a083ae496b41dee7002cc6a664c5db0c5e4d904ae03b815773a769c4493fca","tests/parse-fail/block2.wat":"a8c07b4c09d51f10a8ffdf19806586022552398701cd90eb6d09816d45df06e5","tests/parse-fail/block2.wat.err":"33c842ec5dd0f2fdd3a9ce8187dd98b45ceee48c12810802af809d05b9cd25e9","tests/parse-fail/block3.wat":"29739abfbabd7c55f00ddfbbb9ebd818b4a114ef2336d50514f0842f7e075905","tests/parse-fail/block3.wat.err":"fc667ae2e71a260f62a3c7393bc97272e7c0ff38b17594f4370847b8a5019060","tests/parse-fail/confusing-block-comment0.wat":"8f27c9d0d212bbb1862ea89ffd7cbeafde5dfd755d695c1ba696cd520aba1a1d","tests/parse-fail/confusing-block-comment0.wat.err":"b53cbaef7bcec3862c64e09c084b92cd61bd29b954125482b2d083db250cd9e2","tests/parse-fail/confusing-block-comment1.wat":"b1a0447c9a8eaab8938d15cd33bd4adbb8bb69c2d710209b604023991a4347cb","tests/parse-fail/confusing-block-comment1.wat.err":"2fc3b3e4f98416326e1e5ec034026301069b6a98fa24451bc7573e16b8cb3811","tests/parse-fail/confusing-block-comment2.wat":"e3f49c7a388fba81081beb25d87bbd7db0acce5dd8e3eaa04574905ed7ec420c","tests/parse-fail/confusing-block-comment2.wat.err":"2183231d6acd0b5a117f9aea747c3d5c12e758450a6cd74027bb954a3134cf19","tests/parse-fail/confusing-block-comment3.wat":"d83f89c582501eb8833e772b8462c8974984a2f7fbb80b1452dc399fac74e5ed","tests/parse-fail/confusing-block-comment3.wat.err":"8b2096a4833627905c63f49cdabe44be24336646578dcfbdc67e9bfb35cbc601","tests/parse-fail/confusing-block-comment4.wat":"b7c6c68844d918e9ef6dd5ab9c40c7de7b38f04f94fadad630eda4e596f3e0f8","tests/parse-fail/confusing-block-comment4.wat.err":"2f790cc511edfcd89a12c9207901be16039fc1a06a584d73095e77a52f861cd9","tests/parse-fail/confusing-block-comment5.wat":"a159808032638cc914fa80ac4354a68b0af4f435a09cbe3e2d577582e183eb0a","tests/parse-fail/confusing-block-comment5.wat.err":"6fe0d99894307442f83fe93beaa5da706e06c9bdaf8e39d7cbae4c4fffafcb94","tests/parse-fail/confusing-block-comment6.wat":"abe48bcba2587dca98bc80ddde4e813f94fbc8a3538704a0775ea85bca0f8466","tests/parse-fail/confusing-block-comment6.wat.err":"3c97b9bf1112bbb7335d7fe4be5befb6f91eea7bec7dd3e6b543792231003c56","tests/parse-fail/confusing-block-comment7.wat":"e125c416ea5fa0ac35a58295a83a6f345438e2d7ddc6a39bd76c8e89885b3f0e","tests/parse-fail/confusing-block-comment7.wat.err":"5c34528ff2019cd3f0b3df34fd42523c0b66120706321da2c88ec05793478d2e","tests/parse-fail/confusing-block-comment8.wat":"200cc4c0e5af21a25529d7a81633a03642cff807255d6cd72eb45cdccc605cec","tests/parse-fail/confusing-block-comment8.wat.err":"9b81237d150a784b71791eee88fb6264a8bd6412862660f7392945203809e517","tests/parse-fail/confusing-line-comment0.wat":"bcec4c5a1e52b3e392e07c6711c979aa8d7db8baaf2bcdf270ba16d1aa528d26","tests/parse-fail/confusing-line-comment0.wat.err":"41ec5a075dc6b73afe1aec6b3198c5c4ae3a1a900e1610115879058ce034d6f6","tests/parse-fail/confusing-line-comment1.wat":"a2afbcab00ec957dfd9e9bf21fa4238852247b27f0b054f4a00f6b172dddf853","tests/parse-fail/confusing-line-comment1.wat.err":"f19a645e6fb5cbd7a0dd2308732741edcf83dbae0ef62549972029856a9e7fc6","tests/parse-fail/confusing-line-comment2.wat":"7f2a68229d02aac56ec4dfccf139bf2d617a0e89430357b30444dc4239d8aa89","tests/parse-fail/confusing-line-comment2.wat.err":"08add3d33e10e1ab6b4f3ae431f5db61d6f6c0a2b7d6828482a1e51b3a2d3851","tests/parse-fail/confusing-line-comment3.wat":"61173ae54782f6de86685f9555ffb94bbe2cf20b234daf660abb69ba3326f1ff","tests/parse-fail/confusing-line-comment3.wat.err":"4a5333dc02efa3c1eeab9cafa7c707f78abe92defdb01a71d6fe20944e4785f0","tests/parse-fail/confusing-line-comment4.wat":"9ecbbbe82c750e6475af1bfb46fe7a06115e4446a437d19fc08ca3d002f2a1c9","tests/parse-fail/confusing-line-comment4.wat.err":"ddb8aee8006265253b09c313cf5eb5c2dc4da66f502b4f6d3e2e1de77b35aec9","tests/parse-fail/confusing-line-comment5.wat":"8a4c8d342111bc9d37c16dbdf67c52027e1a42632abc9f359b3e4f07a85748b5","tests/parse-fail/confusing-line-comment5.wat.err":"34e368719fc0eab2f1a43c9f8e6f1b31aa9be9f971085d72374e49bde39cbfe5","tests/parse-fail/confusing-line-comment6.wat":"15f0dcdec23736ce92db84b3a7cdfe8689c97f2a7d0b9b0bfb0dcd2675163ed1","tests/parse-fail/confusing-line-comment6.wat.err":"0570be2ede803f071925d249f3858d3a417b5a6d678c9da40fc851d788d12983","tests/parse-fail/confusing-line-comment7.wat":"c7ee59301a701dd52d56cad02df78b0ad3584460bc18efa42ee137fe0c35aef6","tests/parse-fail/confusing-line-comment7.wat.err":"feebbeee8c85d8b3b85cec89435ae18f3ade9f754ca180d747a41406b64ca07a","tests/parse-fail/confusing-line-comment8.wat":"17632a8142154624de88b3cf93516147ed3419d785200bcd7049499eca8e8f04","tests/parse-fail/confusing-line-comment8.wat.err":"9c209285f2295cd2bc999aa7a9534a654932493308ab1f102839ed15a4d04d17","tests/parse-fail/confusing-string0.wat":"497b679b32baddcd6a158f4cadd3d9a9dea3457bac2a8c2c3d4e09b7c2d80842","tests/parse-fail/confusing-string0.wat.err":"cb3d737f2319346675a038716694354cd3b272453daa8a96e32e9861a9277f7b","tests/parse-fail/confusing-string1.wat":"46654cbed1ea6aab5019aef3d20098a391e40dacafa1ad5e83bf4ec384109fce","tests/parse-fail/confusing-string1.wat.err":"de7e7da516dc6c244bd0e4f012577b69f0cacbcc10f727fadb4b50bb04e0e2b4","tests/parse-fail/confusing-string2.wat":"11938f217c14387c05312735130f00c91d9df2d3ff9df7f13395e0f2b81dad54","tests/parse-fail/confusing-string2.wat.err":"e7bd08b146a855d681fefaf9e0576a9c333a2d10044f8e268b916b22a54227c9","tests/parse-fail/confusing-string3.wat":"e0ca4903fcafb9a54a91cf99e5eac95d25c6d2eb67b076f88191ad396f839cb6","tests/parse-fail/confusing-string3.wat.err":"b88d5db9e445c798eb24f95b7661b9c0368934d27ee8208477cd1c99351b939a","tests/parse-fail/confusing-string4.wat":"3ee2aee7f77604d051519c6f1795634469c12e98ae347a98f0c8445eecf1ff3d","tests/parse-fail/confusing-string4.wat.err":"1edc65bb09d8d3eed6ff69e7d9a7a4b5941dc823fa3436fa375657510255f6f4","tests/parse-fail/confusing-string5.wat":"024e50943128840d53f17e31a9b9332ce4f0ee70a847a043015f435b1c3c6e76","tests/parse-fail/confusing-string5.wat.err":"a0f13ec40d596ea2d8b0c4292b0d28775a5116ab7e11d7de88b295d25428c661","tests/parse-fail/confusing-string6.wat":"79cf157e29319800d2652c5a7f3dc90e07ebe2145c9904a70fc12027cdee84b7","tests/parse-fail/confusing-string6.wat.err":"860555e7aa13e3de3639cc2a530d6a42b974b629c4659593e972cbb0f306abae","tests/parse-fail/confusing-string7.wat":"7d8e403766dfb4e569754160d31ed0f9a27f908ed6cff96be43ab3d37f5975d5","tests/parse-fail/confusing-string7.wat.err":"658b6a02ba6d769254485f35c20984e7135d914b4266929963d723f26a40be4a","tests/parse-fail/confusing-string8.wat":"5a9b222e578655d57ee6e9f19bc1ea8e29aa52d652975fac685213444ed6458f","tests/parse-fail/confusing-string8.wat.err":"9a4e1a510330c800a1df7966998ebc3cde931eda20b249e5360f5e9a905dce11","tests/parse-fail/inline1.wat":"4e9767d67207aace2ac5e6f63a30e7510e4aa245ba35420539509e2254470272","tests/parse-fail/inline1.wat.err":"0143017a9825e518baa6009bae2c8d63520051dedd3437705bbe36b038a57f41","tests/parse-fail/newline-in-string.wat":"5c01cf709544ade0a6cdfcc39a3836a3bc018b633dc42a6cd872b6defc763ea7","tests/parse-fail/newline-in-string.wat.err":"1504209cc37a78b2aee778f23eacf78606daf964cf7bff251f5700efcd27ffd7","tests/parse-fail/string1.wat":"620d46d585ce94b382b5fde628c1399f3e562014b7a44af46e92f7bd045ca86e","tests/parse-fail/string1.wat.err":"fc53f3a1c4a65d8f25e5af51dec7699f45cecba114ca9c7871781bc70f664320","tests/parse-fail/string10.wat":"f7409dd45e153a1b11cb23e38f4ed87da12bedde38f8f0ccfe91037b0a4d97bd","tests/parse-fail/string10.wat.err":"ce677db5e37e0ed81ca357ed6b5edb21d85c27303ee194855bea7a88457efb6a","tests/parse-fail/string11.wat":"f6e0400b8c6a2014efa1ac676c567e140d8f86b5f4d5129773e6d67af537b615","tests/parse-fail/string11.wat.err":"4c6a550d29eda38a4e1bf7a589596f11655dc779479d7b8d466cfc53f815a742","tests/parse-fail/string12.wat":"23e30070eef22271651cce096a801fc4f79f3c37343c88bb8d2fc99b32d3b8b9","tests/parse-fail/string12.wat.err":"b5ec59f2996b88b2ee157e22d1774dc3e36fc08ed5bfc621aea830d30f66f586","tests/parse-fail/string13.wat":"81a305b981159ee10e140749ea3220c9edaaff53605e63c21995de47382b5faf","tests/parse-fail/string13.wat.err":"959f26c6b54e0d367b51d11d1addd8a53b5b8ff3caf70ebdd46bbea8ccfa2418","tests/parse-fail/string14.wat":"c45c2cc9f7afbfbd4be8e513106d22f7e5e817091448576c6bdf0701b81d95dd","tests/parse-fail/string14.wat.err":"50b5bccba905ddbe275938edb7ed0b09a5ca53dcdad36a7ff736ce9bc8e7a338","tests/parse-fail/string15.wat":"b5e0d5ade40de53b2d767a132e28376bb8c7a6f6238c4d8c248ae717c41d7f1f","tests/parse-fail/string15.wat.err":"0e9fc502cc90f96d1f592a3f63369fd2a3574bc4a2345a70365dbb76804e870f","tests/parse-fail/string16.wat":"38c3688cee80a9d089d239aa06eb1d27c5364ad2bd270aca57d05997c20aa682","tests/parse-fail/string16.wat.err":"4274b3bbe4df4cf0373619b1fcd082d0c802990817d2aca26ed885168c80e489","tests/parse-fail/string2.wat":"1172964aed31537b8c466d1f045f3e756926e7b221f80b2aff4a9a6721ea0beb","tests/parse-fail/string2.wat.err":"4618d3b20a78a077337eb5d6cae14ac39d9853762f011fbd23cff8921618dbde","tests/parse-fail/string3.wat":"07e0fbcd6270c1db100917c151ee4ac3f935e4ee1b27bce3c453b22b4b74f4d6","tests/parse-fail/string3.wat.err":"08ffc6158a9e030b2e211d53bdb8aeacfd879815c7b284d6a83b030566e35928","tests/parse-fail/string4.wat":"c970da2051b0613bdd1de4664f10424e14f2ebabe604175d4fb9b763b37af577","tests/parse-fail/string4.wat.err":"406706594d305c560fabd66417ad4fc276939990b5e701bd9d13fc223d207219","tests/parse-fail/string5.wat":"386cf314bb05acdaaabdf4da1caf140167271a26bd08bf34c3a7427d4bc4431f","tests/parse-fail/string5.wat.err":"1e56b44a23a37b2b2ad05aa9dd7e1e18191b5cc22151f93bbcf9d618779a57bd","tests/parse-fail/string6.wat":"8f1fe2825ff96f2acee9130a7721f86fcc93c221baa9411bf1fb6f0870d38ccb","tests/parse-fail/string6.wat.err":"d55dfd84d94e893f167ae73b7a080aefb2bfb05cc8a1ec201c4d3066fb8549b4","tests/parse-fail/string7.wat":"b12f8c75313d7f834489d3c353422f90bc945b37139586446eda82e334a97cde","tests/parse-fail/string7.wat.err":"4cee0ca61992c249dd0faaf2529a073cf8deeb36111a3f69b43695e5682560a2","tests/parse-fail/string8.wat":"4c2e0e1f883bb4e8cba9313497ed792130e5848e62bde7716102788d7467be10","tests/parse-fail/string8.wat.err":"840c6def7c60dd7c2b7261549cab435ba78c9b3a937adf6d5d9595ff8af01c91","tests/parse-fail/string9.wat":"2b7670caed2b0688d535de6e4e416f35fa717cfbe096a6cc764a669085c8f52f","tests/parse-fail/string9.wat.err":"37b5a9c3af9631500f31f9e5e3efa821b8d96063c57d60fd01df6be6a5c323e1","tests/parse-fail/unbalanced.wat":"f664fbef53a0308f864ba496d38044eb90482636e32586512939d4930729f3fe","tests/parse-fail/unbalanced.wat.err":"aba579f7b836856e69afe05da8328aabe0643d94e369898e686aa7bb0b07e9c9","tests/recursive.rs":"ad8a2b07bf955121a7c9e326ed35f9b2bc56b440c8cc0bbde24d423a79945c1a"},"package":"4f79a9d9df79986a68689a6b40bcc8d5d40d807487b235bebc2ac69a242b54a1"} +\ No newline at end of file +diff -up thunderbird-147.0/comm/third_party/rust/yaml-rust2/.cargo-checksum.json.missing-gitmodules thunderbird-147.0/comm/third_party/rust/yaml-rust2/.cargo-checksum.json +--- thunderbird-147.0/comm/third_party/rust/yaml-rust2/.cargo-checksum.json.missing-gitmodules 2026-01-08 22:45:30.000000000 +0100 ++++ thunderbird-147.0/comm/third_party/rust/yaml-rust2/.cargo-checksum.json 2026-01-15 11:31:39.545962795 +0100 +@@ -1 +1 @@ +-{"files":{".cargo/config.toml":"0561dd764201cb870fb7e7a5c69462e06662b165bd5c9ef3cb249f9f1ba3d5a3",".cargo_vcs_info.json":"3dd9da8d0fa45015e7340b66aff753bbc9c7d2775e80ee528e3f4de035cee7a7",".github/renovate.json5":"d90937d0ff478041a7f0365d0ba3df4995b9fc04d415749672609f3cb8a413b9",".github/workflows/ci.yml":"36bb96e71c33ac40d135611e32354816adbeaac593c603366fb69f302ba93fae",".gitmodules":"b0a5c754159a9ef66c8cf0d8d6ee9141edf49823fe5281b0a41d09e20b504d9a",".licenses/Apache-LICENSE":"278f0e5c23f023a2f1af8d528dd5c29dc3a5ea2dd63558aa8d4f077c09e037c7",".licenses/MIT-LICENSE":"3dd30063cdb4a378736348c215cb84b78b0711ba7e39903162cae5ce71dc9757","CHANGELOG.md":"ecc8eaf37df1427c7c6c30895e8c21c348e41b3b3401d2946c1fa6ebbf36417c","Cargo.lock":"98e5cd23c6340002c2bcb1cbfacedc4280214a6b33e70e9942dcfe8e608f77ad","Cargo.toml":"695cb71a87a478964b29d8be16181ecca82275bbd0277344b18f621d4eb46d02","Cargo.toml.orig":"400d33c1955e188c38ee8be5a37ed0b600f3ab97c01bdcfe002ff285bbd75394","LICENSE":"73b58b558451168be8f0dc8e4ff2abdeb1b63ec005ad6cfe8df403558208be05","README.md":"b9a94cb458e10d087392ff9fc70ec051e1ef5db081189d7540b431eaa7ee6057","appveyor.yml":"becabe3922fd9bc72331ea1314a691898bb196b6555b4d32d20a67820c122687","examples/dump_yaml.rs":"d336e0249ad1b8237bdd8276c4cd09630c7655c95fec4f16b8e893daf93e8a51","garden.yaml":"e5b31835307c1d11bd9add455771a9ada697a7833f9cbb32c141fe181e8a4ce8","justfile":"0c58141a987e2d4f5d516e90955a371014f34d0501828878c9792079b6aaed9e","src/char_traits.rs":"fad4a25ac9a57e2865efa4e4539f290d91245aaf31cf5f7a7b0e8ae2070a1c58","src/debug.rs":"3147dd79c1ec80fd0c87b072fc0b522ef75b97b2f2339bdc1b58750aed28a294","src/emitter.rs":"22b3eff5e1f9c2db3d172e2faa15fbc021b95f5e33df2c0093f63733b385636f","src/lib.rs":"7084563aeba95f703d08b33ae84788d7eb2e78500709dd3a1975b7ab55ec7393","src/parser.rs":"d6258b26d27641163f07d83bc31aa94436f23006307909835e8d4b4f8d390cd3","src/scanner.rs":"bed2602e7db02d7cf893d1d2d2eae1bf0cb690fb832a0be905dd375304151f2e","src/yaml.rs":"62e90b190b19f524e814933fd6669ebb3c4f90268d056dca2e99d9df263d3941","tests/basic.rs":"4e0be69e4d59804bdf68cdf220f6b832422f8b15cf343712c270c7f80e94e7f3","tests/emitter.rs":"3d8bcbe894c2991b6527ae64cbd73c8cb3df910515dc543e4781c0f2f56a1b47","tests/quickcheck.rs":"e59756f7bdc57689428edce2bafdc65738545f2ff1c69799064ea72c2eea0d86","tests/scanner.rs":"489aae78ce85672f0a56d8cb48344342b4af025fea17ccde7de0315a8869fbc0","tests/spec_test.rs":"6eb3ea4469c6b4966f22884beebe08f6d253b78dc854166e4694c0fb4d4072f6","tests/spec_test.rs.inc":"544c4d483bbde2401d869c6bf3f2246d3b79fbd13686186acf008f1e19cc86f6","tests/specexamples.rs.inc":"3bec1a152b4597b0d8f4d87450bc7901a1f999ab695b3516c746a2156ab6c0a5","tests/test_round_trip.rs":"57a53f3a86d3666a3d4d172df91ccbd636f0f57c97549d773b81f9503db46473","tests/yaml-test-suite.rs":"bd3dc0bcc427ea4221e926ce0801222e24d30f628cb8dafd4163c19a1e259b36","tools/README.md":"7877161257563c0cd8ea9c959d4e254dc32c66bcf04bf1c2afa95c4ffe0c9371","tools/dump_events.rs":"c41346af2b0344e7cf793031717167ba1ebfb5f3e5710097601bd4d8e51f95d9","tools/run_bench.rs":"055a6b8271406df6ef74f7395e55320107da97dd14a7a2b4be5a762df084d811","tools/time_parse.rs":"f5d82eb29ba7ee17ed272cd61ee97b395a18c8f2ed2cd90b3c599cb2eef17935"},"package":"4ce2a4ff45552406d02501cea6c18d8a7e50228e7736a872951fe2fe75c91be7"} +\ No newline at end of file ++{"files":{".cargo/config.toml":"0561dd764201cb870fb7e7a5c69462e06662b165bd5c9ef3cb249f9f1ba3d5a3",".cargo_vcs_info.json":"3dd9da8d0fa45015e7340b66aff753bbc9c7d2775e80ee528e3f4de035cee7a7",".github/renovate.json5":"d90937d0ff478041a7f0365d0ba3df4995b9fc04d415749672609f3cb8a413b9",".github/workflows/ci.yml":"36bb96e71c33ac40d135611e32354816adbeaac593c603366fb69f302ba93fae",".licenses/Apache-LICENSE":"278f0e5c23f023a2f1af8d528dd5c29dc3a5ea2dd63558aa8d4f077c09e037c7",".licenses/MIT-LICENSE":"3dd30063cdb4a378736348c215cb84b78b0711ba7e39903162cae5ce71dc9757","CHANGELOG.md":"ecc8eaf37df1427c7c6c30895e8c21c348e41b3b3401d2946c1fa6ebbf36417c","Cargo.lock":"98e5cd23c6340002c2bcb1cbfacedc4280214a6b33e70e9942dcfe8e608f77ad","Cargo.toml":"695cb71a87a478964b29d8be16181ecca82275bbd0277344b18f621d4eb46d02","Cargo.toml.orig":"400d33c1955e188c38ee8be5a37ed0b600f3ab97c01bdcfe002ff285bbd75394","LICENSE":"73b58b558451168be8f0dc8e4ff2abdeb1b63ec005ad6cfe8df403558208be05","README.md":"b9a94cb458e10d087392ff9fc70ec051e1ef5db081189d7540b431eaa7ee6057","appveyor.yml":"becabe3922fd9bc72331ea1314a691898bb196b6555b4d32d20a67820c122687","examples/dump_yaml.rs":"d336e0249ad1b8237bdd8276c4cd09630c7655c95fec4f16b8e893daf93e8a51","garden.yaml":"e5b31835307c1d11bd9add455771a9ada697a7833f9cbb32c141fe181e8a4ce8","justfile":"0c58141a987e2d4f5d516e90955a371014f34d0501828878c9792079b6aaed9e","src/char_traits.rs":"fad4a25ac9a57e2865efa4e4539f290d91245aaf31cf5f7a7b0e8ae2070a1c58","src/debug.rs":"3147dd79c1ec80fd0c87b072fc0b522ef75b97b2f2339bdc1b58750aed28a294","src/emitter.rs":"22b3eff5e1f9c2db3d172e2faa15fbc021b95f5e33df2c0093f63733b385636f","src/lib.rs":"7084563aeba95f703d08b33ae84788d7eb2e78500709dd3a1975b7ab55ec7393","src/parser.rs":"d6258b26d27641163f07d83bc31aa94436f23006307909835e8d4b4f8d390cd3","src/scanner.rs":"bed2602e7db02d7cf893d1d2d2eae1bf0cb690fb832a0be905dd375304151f2e","src/yaml.rs":"62e90b190b19f524e814933fd6669ebb3c4f90268d056dca2e99d9df263d3941","tests/basic.rs":"4e0be69e4d59804bdf68cdf220f6b832422f8b15cf343712c270c7f80e94e7f3","tests/emitter.rs":"3d8bcbe894c2991b6527ae64cbd73c8cb3df910515dc543e4781c0f2f56a1b47","tests/quickcheck.rs":"e59756f7bdc57689428edce2bafdc65738545f2ff1c69799064ea72c2eea0d86","tests/scanner.rs":"489aae78ce85672f0a56d8cb48344342b4af025fea17ccde7de0315a8869fbc0","tests/spec_test.rs":"6eb3ea4469c6b4966f22884beebe08f6d253b78dc854166e4694c0fb4d4072f6","tests/spec_test.rs.inc":"544c4d483bbde2401d869c6bf3f2246d3b79fbd13686186acf008f1e19cc86f6","tests/specexamples.rs.inc":"3bec1a152b4597b0d8f4d87450bc7901a1f999ab695b3516c746a2156ab6c0a5","tests/test_round_trip.rs":"57a53f3a86d3666a3d4d172df91ccbd636f0f57c97549d773b81f9503db46473","tests/yaml-test-suite.rs":"bd3dc0bcc427ea4221e926ce0801222e24d30f628cb8dafd4163c19a1e259b36","tools/README.md":"7877161257563c0cd8ea9c959d4e254dc32c66bcf04bf1c2afa95c4ffe0c9371","tools/dump_events.rs":"c41346af2b0344e7cf793031717167ba1ebfb5f3e5710097601bd4d8e51f95d9","tools/run_bench.rs":"055a6b8271406df6ef74f7395e55320107da97dd14a7a2b4be5a762df084d811","tools/time_parse.rs":"f5d82eb29ba7ee17ed272cd61ee97b395a18c8f2ed2cd90b3c599cb2eef17935"},"package":"4ce2a4ff45552406d02501cea6c18d8a7e50228e7736a872951fe2fe75c91be7"} +\ No newline at end of file diff --git a/build-ppc-jit.patch b/build-ppc-jit.patch new file mode 100644 index 0000000..a9dc6d1 --- /dev/null +++ b/build-ppc-jit.patch @@ -0,0 +1,51 @@ +diff -up firefox-55.0/js/src/jit/MIR.h.old firefox-55.0/js/src/jit/MIR.h +--- firefox-55.0/js/src/jit/MIR.h.old 2017-08-08 14:04:44.528460099 +0200 ++++ firefox-55.0/js/src/jit/MIR.h 2017-08-08 14:05:11.045364831 +0200 +@@ -12434,7 +12434,7 @@ class MNearbyInt + TRIVIAL_NEW_WRAPPERS + + static bool HasAssemblerSupport(RoundingMode mode) { +- return Assembler::HasRoundInstruction(mode); ++ return false; + } + + RoundingMode roundingMode() const { return roundingMode_; } +diff -up firefox-55.0/js/src/jit/ExecutableAllocator.h.old firefox-55.0/js/src/jit/ExecutableAllocator.h +--- firefox-55.0/js/src/jit/ExecutableAllocator.h.old 2017-08-09 09:24:18.784983505 +0200 ++++ firefox-55.0/js/src/jit/ExecutableAllocator.h 2017-08-09 09:28:01.471100075 +0200 +@@ -307,6 +307,10 @@ class ExecutableAllocator + { + sync_instruction_memory((caddr_t)code, size); + } ++#else ++ static void cacheFlush(void*, size_t) ++ { ++ } + #endif + + private: +diff -up firefox-55.0/js/src/wasm/WasmBuiltins.cpp.old firefox-55.0/js/src/wasm/WasmBuiltins.cpp +--- firefox-55.0/js/src/wasm/WasmBuiltins.cpp.old 2017-08-09 12:50:46.877450765 +0200 ++++ firefox-55.0/js/src/wasm/WasmBuiltins.cpp 2017-08-09 12:50:59.725406974 +0200 +@@ -881,7 +881,6 @@ wasm::EnsureBuiltinThunksInitialized() + MOZ_ASSERT(!masm.numSymbolicAccesses()); + #endif + +- ExecutableAllocator::cacheFlush(thunks->codeBase, thunks->codeSize); + if (!ExecutableAllocator::makeExecutable(thunks->codeBase, thunks->codeSize)) + return false; + +diff -up firefox-55.0/js/src/wasm/WasmCode.cpp.old firefox-55.0/js/src/wasm/WasmCode.cpp +--- firefox-55.0/js/src/wasm/WasmCode.cpp.old 2017-08-09 12:50:37.205483731 +0200 ++++ firefox-55.0/js/src/wasm/WasmCode.cpp 2017-08-09 12:51:10.365370708 +0200 +@@ -287,8 +287,6 @@ CodeSegment::initialize(Tier tier, + if (!StaticallyLink(*this, linkData)) + return false; + +- ExecutableAllocator::cacheFlush(bytes_.get(), RoundupCodeLength(codeLength)); +- + // Reprotect the whole region to avoid having separate RW and RX mappings. + if (!ExecutableAllocator::makeExecutable(bytes_.get(), RoundupCodeLength(codeLength))) + return false; +diff -up firefox-55.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old firefox-55.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium +diff -up firefox-55.0/media/webrtc/trunk/Makefile.old firefox-55.0/media/webrtc/trunk/Makefile diff --git a/build-rust-ppc64le.patch b/build-rust-ppc64le.patch new file mode 100644 index 0000000..2474c35 --- /dev/null +++ b/build-rust-ppc64le.patch @@ -0,0 +1,25 @@ +diff -up firefox-55.0/build/moz.configure/rust.configure.rust-ppc64le firefox-55.0/build/moz.configure/rust.configure +--- firefox-55.0/build/moz.configure/rust.configure.rust-ppc64le 2017-07-31 18:20:49.000000000 +0200 ++++ firefox-55.0/build/moz.configure/rust.configure 2017-08-02 10:19:03.254220003 +0200 +@@ -151,6 +151,9 @@ def rust_triple_alias(host_or_target): + ('sparc64', 'Linux'): 'sparc64-unknown-linux-gnu', + ('x86', 'Linux'): 'i686-unknown-linux-gnu', + ('x86_64', 'Linux'): 'x86_64-unknown-linux-gnu', ++ ('ppc64le', 'Linux'): 'powerpc64le-unknown-linux-gnu', ++ ('ppc64', 'Linux'): 'powerpc64-unknown-linux-gnu', ++ ('s390x', 'Linux'): 's390x-unknown-linux-gnu', + # OS X + ('x86', 'OSX'): 'i686-apple-darwin', + ('x86_64', 'OSX'): 'x86_64-apple-darwin', +@@ -174,8 +177,10 @@ def rust_triple_alias(host_or_target): + ('sparc64', 'SunOS'): 'sparcv9-sun-solaris', + }.get((host_or_target.cpu, os_or_kernel), None) + ++ if (rustc_target == 'powerpc64-unknown-linux-gnu' and host_or_target.endianness == 'little'): ++ rustc_target = 'powerpc64le-unknown-linux-gnu' + if rustc_target is None: +- die("Don't know how to translate {} for rustc".format(host_or_target.alias)) ++ die("Don't know how to translate {} for rustc, cpu: {}, os: {}".format(target.alias, target.cpu, os_or_kernel)) + + # Check to see whether our rustc has a reasonably functional stdlib + # for our chosen target. diff --git a/build-s390x-protobuf-musttail.patch b/build-s390x-protobuf-musttail.patch new file mode 100644 index 0000000..75ffd93 --- /dev/null +++ b/build-s390x-protobuf-musttail.patch @@ -0,0 +1,12 @@ +diff -up thunderbird-128.9.2/toolkit/components/protobuf/src/google/protobuf/port_def.inc.orig thunderbird-128.9.2/toolkit/components/protobuf/src/google/protobuf/port_def.inc +--- thunderbird-128.9.2/toolkit/components/protobuf/src/google/protobuf/port_def.inc.orig 2025-04-24 14:10:37.830416804 +0000 ++++ thunderbird-128.9.2/toolkit/components/protobuf/src/google/protobuf/port_def.inc 2025-04-24 14:11:31.910416804 +0000 +@@ -255,7 +255,7 @@ + #error PROTOBUF_TAILCALL was previously defined + #endif + #if __has_cpp_attribute(clang::musttail) && !defined(__arm__) && \ +- !defined(_ARCH_PPC) && !defined(__wasm__) && \ ++ !defined(_ARCH_PPC) && !defined(__s390x__) && !defined(__wasm__) && \ + !(defined(_MSC_VER) && defined(_M_IX86)) && \ + !(defined(__NDK_MAJOR__) && __NDK_MAJOR <= 24) + # ifndef PROTO2_OPENSOURCE diff --git a/build-seccomp.patch b/build-seccomp.patch new file mode 100644 index 0000000..b57f65a --- /dev/null +++ b/build-seccomp.patch @@ -0,0 +1,11 @@ +diff -up thunderbird-145.0/security/sandbox/chromium/sandbox/linux/system_headers/linux_seccomp.h.seccomp thunderbird-145.0/security/sandbox/chromium/sandbox/linux/system_headers/linux_seccomp.h +--- thunderbird-145.0/security/sandbox/chromium/sandbox/linux/system_headers/linux_seccomp.h.seccomp 2025-12-09 13:42:31.378958842 +0100 ++++ thunderbird-145.0/security/sandbox/chromium/sandbox/linux/system_headers/linux_seccomp.h 2025-12-09 13:42:37.886937626 +0100 +@@ -6,6 +6,7 @@ + #define SANDBOX_LINUX_SYSTEM_HEADERS_LINUX_SECCOMP_H_ + + #include ++#include + #include + + #include "build/build_config.h" diff --git a/firefox-gcc-13-build.patch b/firefox-gcc-13-build.patch new file mode 100644 index 0000000..8512b76 --- /dev/null +++ b/firefox-gcc-13-build.patch @@ -0,0 +1,24 @@ +--- firefox-109.0.1/gfx/2d/Rect.h.old 2023-02-07 09:44:24.946279843 +0100 ++++ firefox-109.0.1/gfx/2d/Rect.h 2023-02-07 09:44:47.969032049 +0100 +@@ -324,8 +324,8 @@ IntRectTyped RoundedToInt(const R + + template + bool RectIsInt32Safe(const RectTyped& aRect) { +- float min = (float)std::numeric_limits::min(); +- float max = (float)std::numeric_limits::max(); ++ float min = (float)std::numeric_limits::min(); ++ float max = (float)std::numeric_limits::max(); + return aRect.x > min && aRect.y > min && aRect.width < max && + aRect.height < max && aRect.XMost() < max && aRect.YMost() < max; + } +diff -up firefox-109.0.1/toolkit/components/telemetry/pingsender/pingsender.cpp.old firefox-109.0.1/toolkit/components/telemetry/pingsender/pingsender.cpp +--- firefox-109.0.1/toolkit/components/telemetry/pingsender/pingsender.cpp.old 2023-02-07 11:03:41.788720090 +0100 ++++ firefox-109.0.1/toolkit/components/telemetry/pingsender/pingsender.cpp 2023-02-07 11:04:29.195345659 +0100 +@@ -10,6 +10,7 @@ + #include + #include + #include ++#include + + #include + diff --git a/firefox-gcc-build.patch b/firefox-gcc-build.patch new file mode 100644 index 0000000..16d9ec6 --- /dev/null +++ b/firefox-gcc-build.patch @@ -0,0 +1,39 @@ +diff -up thunderbird-128.1.0/toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h.firefox-gcc-build thunderbird-128.1.0/toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h +--- thunderbird-128.1.0/toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h.firefox-gcc-build 2024-07-31 19:13:21.000000000 +0200 ++++ thunderbird-128.1.0/toolkit/crashreporter/google-breakpad/src/third_party/lss/linux_syscall_support.h 2024-08-08 16:03:45.639263256 +0200 +@@ -1962,7 +1962,7 @@ struct kernel_statfs { + LSS_ENTRYPOINT \ + "pop %%ebx" \ + args \ +- : "esp", "memory"); \ ++ : "memory"); \ + LSS_RETURN(type,__res) + #undef _syscall0 + #define _syscall0(type,name) \ +@@ -2019,7 +2019,7 @@ struct kernel_statfs { + : "i" (__NR_##name), "ri" ((long)(arg1)), \ + "c" ((long)(arg2)), "d" ((long)(arg3)), \ + "S" ((long)(arg4)), "D" ((long)(arg5)) \ +- : "esp", "memory"); \ ++ : "memory"); \ + LSS_RETURN(type,__res); \ + } + #undef _syscall6 +@@ -2041,7 +2041,7 @@ struct kernel_statfs { + : "i" (__NR_##name), "0" ((long)(&__s)), \ + "c" ((long)(arg2)), "d" ((long)(arg3)), \ + "S" ((long)(arg4)), "D" ((long)(arg5)) \ +- : "esp", "memory"); \ ++ : "memory"); \ + LSS_RETURN(type,__res); \ + } + LSS_INLINE int LSS_NAME(clone)(int (*fn)(void *), void *child_stack, +@@ -2127,7 +2127,7 @@ struct kernel_statfs { + : "0"(-EINVAL), "i"(__NR_clone), + "m"(fn), "m"(child_stack), "m"(flags), "m"(arg), + "m"(parent_tidptr), "m"(newtls), "m"(child_tidptr) +- : "esp", "memory", "ecx", "edx", "esi", "edi"); ++ : "memory", "ecx", "edx", "esi", "edi"); + LSS_RETURN(int, __res); + } + diff --git a/firefox-i686-build.patch b/firefox-i686-build.patch new file mode 100644 index 0000000..320199f --- /dev/null +++ b/firefox-i686-build.patch @@ -0,0 +1,12 @@ +diff -up firefox-105.0/mozglue/misc/SIMD_avx2.cpp.old firefox-105.0/mozglue/misc/SIMD_avx2.cpp +--- firefox-105.0/mozglue/misc/SIMD_avx2.cpp.old 2022-09-22 21:35:07.006221995 +0200 ++++ firefox-105.0/mozglue/misc/SIMD_avx2.cpp 2022-09-22 21:36:12.972480517 +0200 +@@ -55,7 +55,7 @@ __m256i CmpEq256(__m256i a, __m256i b) { + return _mm256_cmpeq_epi64(a, b); + } + +-# if defined(__GNUC__) && !defined(__clang__) ++# if 0 + + // See the comment in SIMD.cpp over Load32BitsIntoXMM. This is just adapted + // from that workaround. Testing this, it also yields the correct instructions diff --git a/gen_cbindgen-vendor.sh b/gen_cbindgen-vendor.sh index 01ecc5d..5711901 100755 --- a/gen_cbindgen-vendor.sh +++ b/gen_cbindgen-vendor.sh @@ -12,7 +12,7 @@ to be used with 'cargo vendor' commmand. """ [dependencies] -cbindgen = "0.9.0" +cbindgen = "0.29.1" [[bin]] name = "dummy" diff --git a/mozilla-1170092.patch b/mozilla-1170092.patch new file mode 100644 index 0000000..66dacbf --- /dev/null +++ b/mozilla-1170092.patch @@ -0,0 +1,95 @@ +diff -up firefox-140.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.mozilla-bmo1170092 firefox-140.0/extensions/pref/autoconfig/src/nsReadConfig.cpp +--- firefox-140.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.mozilla-bmo1170092 2025-06-02 15:26:44.000000000 +0200 ++++ firefox-140.0/extensions/pref/autoconfig/src/nsReadConfig.cpp 2025-06-04 13:24:00.344728697 +0200 +@@ -263,8 +263,20 @@ nsresult nsReadConfig::openAndEvaluateJS + if (NS_FAILED(rv)) return rv; + + rv = NS_NewLocalFileInputStream(getter_AddRefs(inStr), jsFile); +- if (NS_FAILED(rv)) return rv; ++ if (NS_FAILED(rv)) { ++ // Look for cfg file in /etc//pref ++ rv = NS_GetSpecialDirectory(NS_APP_PREFS_SYSTEM_CONFIG_DIR, ++ getter_AddRefs(jsFile)); ++ NS_ENSURE_SUCCESS(rv, rv); ++ ++ rv = jsFile->AppendNative(nsLiteralCString("pref")); ++ NS_ENSURE_SUCCESS(rv, rv); ++ rv = jsFile->AppendNative(nsDependentCString(aFileName)); ++ NS_ENSURE_SUCCESS(rv, rv); + ++ rv = NS_NewLocalFileInputStream(getter_AddRefs(inStr), jsFile); ++ NS_ENSURE_SUCCESS(rv, rv); ++ } + } else { + nsAutoCString location("resource://gre/defaults/autoconfig/"); + location += aFileName; +diff -up firefox-140.0/modules/libpref/Preferences.cpp.mozilla-bmo1170092 firefox-140.0/modules/libpref/Preferences.cpp +--- firefox-140.0/modules/libpref/Preferences.cpp.mozilla-bmo1170092 2025-06-02 15:26:51.000000000 +0200 ++++ firefox-140.0/modules/libpref/Preferences.cpp 2025-06-04 13:24:00.345430064 +0200 +@@ -4914,6 +4914,9 @@ nsresult Preferences::InitInitialObjects + // + // Thus, in the omni.jar case, we always load app-specific default + // preferences from omni.jar, whether or not `$app == $gre`. ++ // ++ // At very end load configuration from system config location: ++ // - /etc/firefox/pref/*.js + + nsresult rv = NS_ERROR_FAILURE; + UniquePtr find; +diff -up firefox-140.0/toolkit/xre/nsXREDirProvider.cpp.mozilla-bmo1170092 firefox-140.0/toolkit/xre/nsXREDirProvider.cpp +--- firefox-140.0/toolkit/xre/nsXREDirProvider.cpp.mozilla-bmo1170092 2025-06-02 15:27:00.000000000 +0200 ++++ firefox-140.0/toolkit/xre/nsXREDirProvider.cpp 2025-06-04 15:44:09.413562326 +0200 +@@ -76,6 +76,7 @@ + #endif + #ifdef XP_UNIX + # include ++# include "nsIXULAppInfo.h" + #endif + #ifdef XP_IOS + # include "UIKitDirProvider.h" +@@ -462,6 +463,17 @@ nsXREDirProvider::GetFile(const char* aP + rv = file->AppendNative(nsLiteralCString(PREF_OVERRIDE_DIRNAME)); + NS_ENSURE_SUCCESS(rv, rv); + rv = EnsureDirectoryExists(file); ++ } else if (!strcmp(aProperty, NS_APP_PREFS_SYSTEM_CONFIG_DIR)) { ++ nsCString sysConfigDir = nsLiteralCString("/etc/"); ++ nsCOMPtr appInfo = do_GetService("@mozilla.org/xre/app-info;1"); ++ if (!appInfo) ++ return NS_ERROR_NOT_AVAILABLE; ++ nsCString appName; ++ appInfo->GetName(appName); ++ ToLowerCase(appName); ++ sysConfigDir.Append(appName); ++ NS_NewNativeLocalFile(sysConfigDir, getter_AddRefs(file)); ++ rv = EnsureDirectoryExists(file); + } else { + // We don't know anything about this property. Fail without warning, because + // otherwise we'll get too much warning spam due to +@@ -518,6 +530,16 @@ nsXREDirProvider::GetFiles(const char* a + } + #endif + ++ // Add /etc//pref/ directory if it exists ++ nsCOMPtr systemPrefDir; ++ rv = NS_GetSpecialDirectory(NS_APP_PREFS_SYSTEM_CONFIG_DIR, ++ getter_AddRefs(systemPrefDir)); ++ if (NS_SUCCEEDED(rv)) { ++ rv = systemPrefDir->AppendNative(nsLiteralCString("pref")); ++ if (NS_SUCCEEDED(rv)) ++ directories.AppendObject(systemPrefDir); ++ } ++ + rv = NS_NewArrayEnumerator(aResult, directories, NS_GET_IID(nsIFile)); + } else if (!strcmp(aProperty, NS_APP_CHROME_DIR_LIST)) { + // NS_APP_CHROME_DIR_LIST is only used to get default (native) icons +diff -up firefox-140.0/xpcom/io/nsAppDirectoryServiceDefs.h.mozilla-bmo1170092 firefox-140.0/xpcom/io/nsAppDirectoryServiceDefs.h +--- firefox-140.0/xpcom/io/nsAppDirectoryServiceDefs.h.mozilla-bmo1170092 2025-06-02 15:27:01.000000000 +0200 ++++ firefox-140.0/xpcom/io/nsAppDirectoryServiceDefs.h 2025-06-04 13:24:00.346423861 +0200 +@@ -58,6 +58,7 @@ + #define NS_APP_PREFS_DEFAULTS_DIR_LIST "PrefDL" + #define NS_APP_PREFS_OVERRIDE_DIR \ + "PrefDOverride" // Directory for per-profile defaults ++#define NS_APP_PREFS_SYSTEM_CONFIG_DIR "PrefSysConf" // Directory with system-wide configuration + + #define NS_APP_USER_PROFILE_50_DIR "ProfD" + #define NS_APP_USER_PROFILE_LOCAL_50_DIR "ProfLD" diff --git a/mozilla-1245783.patch b/mozilla-1245783.patch deleted file mode 100644 index 3452616..0000000 --- a/mozilla-1245783.patch +++ /dev/null @@ -1,17 +0,0 @@ -# Remove when mozbz#1269319 lands - ---- firefox-45.0.1-orig/js/src/Makefile.in 2016-05-17 14:53:58.753178403 +0200 -+++ firefox-45.0.1/js/src/Makefile.in 2016-05-17 14:53:28.432817862 +0200 -@@ -144,6 +144,11 @@ distclean:: - - CFLAGS += $(MOZ_ZLIB_CFLAGS) - -+# Avoid GNU gcc bug #70526 -+# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70526#c14 -+CFLAGS += -fno-schedule-insns2 -+CXXFLAGS += -fno-schedule-insns2 -+ - # Silence warnings on AIX/HP-UX from non-GNU compilers - ifndef GNU_CC - ifeq ($(OS_ARCH),AIX) - diff --git a/mozilla-build-arm.patch b/mozilla-build-arm.patch deleted file mode 100644 index f98cbe3..0000000 --- a/mozilla-build-arm.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up firefox-29.0/mozilla-release/gfx/ycbcr/moz.build.arm firefox-29.0/mozilla-release/gfx/ycbcr/moz.build ---- firefox-29.0/mozilla-release/gfx/ycbcr/moz.build.arm 2014-04-22 07:27:47.000000000 +0200 -+++ firefox-29.0/mozilla-release/gfx/ycbcr/moz.build 2014-04-22 16:40:34.862849368 +0200 -@@ -61,7 +61,7 @@ else: - 'yuv_row_other.cpp', - ] - --if CONFIG['CPU_ARCH'] == 'arm' and CONFIG['HAVE_ARM_NEON']: -+if CONFIG['HAVE_ARM_NEON']: - SOURCES += [ - 'yuv_row_arm.s', - ] diff --git a/net.thunderbird.Thunderbird.appdata.xml b/net.thunderbird.Thunderbird.appdata.xml new file mode 100644 index 0000000..6f1aa56 --- /dev/null +++ b/net.thunderbird.Thunderbird.appdata.xml @@ -0,0 +1,59 @@ + + + net.thunderbird.Thunderbird.appdata.xml + CC0-1.0 + Thunderbird + Thunderbird is a free and open source email, newsfeed, chat, and calendaring client + + +

+ Thunderbird is a free and open source email, newsfeed, chat, and + calendaring client, that’s easy to set up and customize. One of the core + principles of Thunderbird is the use and promotion of open standards - + this focus is a rejection of our world of closed platforms and services + that can’t communicate with each other. We want our users to have freedom + and choice in how they communicate. +

+

+ Thunderbird is an open source project, which means anyone can contribute + ideas, designs, code, and time helping fellow users. +

+
+ + Calendar + Email + Office + + + https://www.thunderbird.net/ + https://bugzilla.mozilla.org/ + https://support.mozilla.org/kb/thunderbird-faq/ + https://support.mozilla.org/products/thunderbird/ + https://www.thunderbird.net/donate/ + https://www.thunderbird.net/participate/ + + Mozilla + MPL-2.0 + Thunderbird Project + + + + https://raw.githubusercontent.com/thunderbird/flatpak-screenshots/main/image_1.png + + + https://raw.githubusercontent.com/thunderbird/flatpak-screenshots/main/image_2.png + + + + + message/rfc822 + x-scheme-handler/mailto + text/calendar + text/vcard + text/x-vcard + + + + + jhorak@redhat.com +
diff --git a/thunderbird.desktop b/net.thunderbird.Thunderbird.desktop similarity index 84% rename from thunderbird.desktop rename to net.thunderbird.Thunderbird.desktop index 1945d1e..43395a0 100644 --- a/thunderbird.desktop +++ b/net.thunderbird.Thunderbird.desktop @@ -8,7 +8,7 @@ TryExec=thunderbird Icon=thunderbird Terminal=false Type=Application -MimeType=message/rfc822;x-scheme-handler/mailto; +MimeType=message/rfc822;x-scheme-handler/mailto;text/calendar;text/vcard;text/x-vcard;x-scheme-handler/webcal;x-scheme-handler/webcals;x-scheme-handler/mid; StartupNotify=true Categories=Network;Email; Name[cs]=Poštovní klient Thunderbird diff --git a/rhbz-1219542-s390-build.patch b/rhbz-1219542-s390-build.patch deleted file mode 100644 index f94e43a..0000000 --- a/rhbz-1219542-s390-build.patch +++ /dev/null @@ -1,23 +0,0 @@ -diff -up firefox-55.0/js/src/old-configure.in.rhbz-1219542-s390 firefox-55.0/js/src/old-configure.in ---- firefox-55.0/js/src/old-configure.in.rhbz-1219542-s390 2017-07-31 18:20:48.000000000 +0200 -+++ firefox-55.0/js/src/old-configure.in 2017-08-02 14:31:32.190243669 +0200 -@@ -541,7 +541,7 @@ case "$host" in - - *-linux*|*-kfreebsd*-gnu|*-gnu*) - HOST_CFLAGS="$HOST_CFLAGS -DXP_UNIX" -- HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O3}" -+ HOST_OPTIMIZE_FLAGS="${HOST_OPTIMIZE_FLAGS=-O1}" - ;; - - *) -@@ -617,8 +617,8 @@ case "$target" in - - *-*linux*) - if test "$GNU_CC" -o "$GNU_CXX"; then -- MOZ_PGO_OPTIMIZE_FLAGS="-O3" -- MOZ_OPTIMIZE_FLAGS="-O3" -+ MOZ_PGO_OPTIMIZE_FLAGS="-O1" -+ MOZ_OPTIMIZE_FLAGS="-O1" - if test -z "$CLANG_CC"; then - MOZ_OPTIMIZE_FLAGS="-freorder-blocks $MOZ_OPTIMIZE_FLAGS" - fi diff --git a/rhbz-1354671.patch b/rhbz-1354671.patch deleted file mode 100644 index 7660f14..0000000 --- a/rhbz-1354671.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -up firefox-60.5.0/layout/base/nsIPresShell.h.1354671 firefox-60.5.0/layout/base/nsIPresShell.h ---- firefox-60.5.0/layout/base/nsIPresShell.h.1354671 2019-01-22 16:08:40.796539950 +0100 -+++ firefox-60.5.0/layout/base/nsIPresShell.h 2019-01-22 16:10:25.106069228 +0100 -@@ -204,7 +204,7 @@ class nsIPresShell : public nsStubDocume - * to the same aSize value. AllocateFrame is infallible and will abort - * on out-of-memory. - */ -- void* AllocateFrame(nsQueryFrame::FrameIID aID, size_t aSize) { -+ void* __attribute__((optimize("no-lifetime-dse"))) AllocateFrame(nsQueryFrame::FrameIID aID, size_t aSize) { - void* result = mFrameArena.AllocateByFrameID(aID, aSize); - RecordAlloc(result); - return result; diff --git a/rust-1.47.patch b/rust-1.47.patch deleted file mode 100644 index 65441a1..0000000 --- a/rust-1.47.patch +++ /dev/null @@ -1,35276 +0,0 @@ - -# HG changeset patch -# User Emilio Cobos Álvarez -# Date 1599584448 0 -# Node ID 85c38ea4d34969797eb5d24265cd90cc6841e6ae -# Parent 5aa243a2fe9d77578dd95ce3ab3a2aa6c1e92604 -Bug 1663715 - Update syn and proc-macro2 so that Firefox can build on Rust nightly again. r=froydnj, a=RyanVM - -Generated with: - - cargo update -p syn --precise 1.0.40 - ./mach vendor rust - -Rust issue: https://github.com/rust-lang/rust/issues/76482 - -Differential Revision: https://phabricator.services.mozilla.com/D89473 - -diff --git a/Cargo.lock b/Cargo.lock ---- a/Cargo.lock -+++ b/Cargo.lock -@@ -3712,19 +3712,19 @@ checksum = "ecd45702f76d6d3c75a80564378a - dependencies = [ - "proc-macro2", - "quote", - "syn", - ] - - [[package]] - name = "proc-macro2" --version = "1.0.5" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "90cf5f418035b98e655e9cdb225047638296b862b42411c4e45bb88d700f7fc0" -+version = "1.0.20" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "175c513d55719db99da20232b06cda8bab6b83ec2d04e3283edf0213c37c1a29" - dependencies = [ - "unicode-xid", - ] - - [[package]] - name = "procedural-masquerade" - version = "0.1.1" - source = "registry+https://github.com/rust-lang/crates.io-index" -@@ -4642,19 +4642,19 @@ dependencies = [ - "cc", - "gleam", - "glsl-to-cxx", - "webrender_build", - ] - - [[package]] - name = "syn" --version = "1.0.5" --source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf" -+version = "1.0.40" -+source = "registry+https://github.com/rust-lang/crates.io-index" -+checksum = "963f7d3cc59b59b9325165add223142bbf1df27655d07789f109896d353d8350" - dependencies = [ - "proc-macro2", - "quote", - "unicode-xid", - ] - - [[package]] - name = "sync-guid" -diff --git a/third_party/rust/proc-macro2/.cargo-checksum.json b/third_party/rust/proc-macro2/.cargo-checksum.json ---- a/third_party/rust/proc-macro2/.cargo-checksum.json -+++ b/third_party/rust/proc-macro2/.cargo-checksum.json -@@ -1,1 +1,1 @@ --{"files":{"Cargo.toml":"e2c1fc6ed317eeef8462fcd192f6b6389e1d84f0d7afeac78f12c23903deddf8","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"362a2156f7645528061b6e8487a2eb0f32f1693012ed82ee57afa05c039bba0d","build.rs":"0cc6e2cb919ddbff59cf1d810283939f97a59f0037540c0f2ee3453237635ff8","src/fallback.rs":"5c6379a90735e27abcc40253b223158c6b1e5784f3850bc423335363e87ef038","src/lib.rs":"ae5251296ad3fcd8b600919a993fec0afd8b56da3e11fef6bc7265b273129936","src/strnom.rs":"37f7791f73f123817ad5403af1d4e2a0714be27401729a2d451bc80b1f26bac9","src/wrapper.rs":"81372e910604217a625aa71c47d43e65f4e008456eae93ac39325c9abf10701a","tests/features.rs":"a86deb8644992a4eb64d9fd493eff16f9cf9c5cb6ade3a634ce0c990cf87d559","tests/marker.rs":"c2652e3ae1dfcb94d2e6313b29712c5dcbd0fe62026913e67bb7cebd7560aade","tests/test.rs":"8c427be9cba1fa8d4a16647e53e3545e5863e29e2c0b311c93c9dd1399abf6a1"},"package":"90cf5f418035b98e655e9cdb225047638296b862b42411c4e45bb88d700f7fc0"} -\ No newline at end of file -+{"files":{"Cargo.toml":"c20c4c52342e65ea11ad8382edc636e628e8f8c5ab7cffddc32426b2fe8fe4cd","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"e1f9d4fc22cff2c049f166a403b41458632a94357890d31cf0e3ad83807fb430","build.rs":"332185d7ad4c859210f5edd7a76bc95146c8277726a2f81417f34927c4424d68","src/detection.rs":"9d25d896889e65330858f2d6f6223c1b98cd1dad189813ad4161ff189fbda2b8","src/fallback.rs":"239f9a25c0f2ab57592288d944c7f1a0f887536b6d4dc2428a17640af8d10a41","src/lib.rs":"2b1d98424c9b23b547dabf85554120e5e65472026a0f3f711b3a097bca7c32fe","src/parse.rs":"500edee9773132e27e44d0fdaa042b1cb9451e29e65124493986f51710c0664c","src/wrapper.rs":"d36c0dced7ec0e7585c1f935cda836080bcae6de1de3d7851d962e9e11a3ac48","tests/comments.rs":"ea6cbe6f4c8852e6a0612893c7d4f2c144a2e6a134a6c3db641a320cbfc3c800","tests/features.rs":"a86deb8644992a4eb64d9fd493eff16f9cf9c5cb6ade3a634ce0c990cf87d559","tests/marker.rs":"c2652e3ae1dfcb94d2e6313b29712c5dcbd0fe62026913e67bb7cebd7560aade","tests/test.rs":"310c856e27ff61c9ec7f0a5cd96031aac02971557b1621f5e17b089d58e79bcd","tests/test_fmt.rs":"745dfdc41d09c5308c221395eb43f2041f0a1413d2927a813bc2ad4554438fe2"},"package":"175c513d55719db99da20232b06cda8bab6b83ec2d04e3283edf0213c37c1a29"} -\ No newline at end of file -diff --git a/third_party/rust/proc-macro2/Cargo.toml b/third_party/rust/proc-macro2/Cargo.toml ---- a/third_party/rust/proc-macro2/Cargo.toml -+++ b/third_party/rust/proc-macro2/Cargo.toml -@@ -8,36 +8,35 @@ - # If you believe there's an error in this file please file an - # issue against the rust-lang/cargo repository. If you're - # editing this file be aware that the upstream Cargo.toml - # will likely look very different (and much more reasonable) - - [package] - edition = "2018" - name = "proc-macro2" --version = "1.0.5" --authors = ["Alex Crichton "] --description = "A stable implementation of the upcoming new `proc_macro` API. Comes with an\noption, off by default, to also reimplement itself in terms of the upstream\nunstable API.\n" --homepage = "https://github.com/alexcrichton/proc-macro2" -+version = "1.0.20" -+authors = ["Alex Crichton ", "David Tolnay "] -+description = "A substitute implementation of the compiler's `proc_macro` API to decouple\ntoken-based libraries from the procedural macro use case.\n" - documentation = "https://docs.rs/proc-macro2" - readme = "README.md" - keywords = ["macros"] -+categories = ["development-tools::procedural-macro-helpers"] - license = "MIT OR Apache-2.0" - repository = "https://github.com/alexcrichton/proc-macro2" - [package.metadata.docs.rs] - rustc-args = ["--cfg", "procmacro2_semver_exempt"] - rustdoc-args = ["--cfg", "procmacro2_semver_exempt"] -+targets = ["x86_64-unknown-linux-gnu"] - --[lib] --name = "proc_macro2" -+[package.metadata.playground] -+features = ["span-locations"] - [dependencies.unicode-xid] - version = "0.2" - [dev-dependencies.quote] - version = "1.0" - default_features = false - - [features] - default = ["proc-macro"] - nightly = [] - proc-macro = [] - span-locations = [] --[badges.travis-ci] --repository = "alexcrichton/proc-macro2" -diff --git a/third_party/rust/proc-macro2/README.md b/third_party/rust/proc-macro2/README.md ---- a/third_party/rust/proc-macro2/README.md -+++ b/third_party/rust/proc-macro2/README.md -@@ -1,11 +1,11 @@ - # proc-macro2 - --[![Build Status](https://api.travis-ci.com/alexcrichton/proc-macro2.svg?branch=master)](https://travis-ci.com/alexcrichton/proc-macro2) -+[![Build Status](https://img.shields.io/github/workflow/status/alexcrichton/proc-macro2/build%20and%20test)](https://github.com/alexcrichton/proc-macro2/actions) - [![Latest Version](https://img.shields.io/crates/v/proc-macro2.svg)](https://crates.io/crates/proc-macro2) - [![Rust Documentation](https://img.shields.io/badge/api-rustdoc-blue.svg)](https://docs.rs/proc-macro2) - - A wrapper around the procedural macro API of the compiler's `proc_macro` crate. - This library serves two purposes: - - - **Bring proc-macro-like functionality to other contexts like build.rs and - main.rs.** Types from `proc_macro` are entirely specific to procedural macros -diff --git a/third_party/rust/proc-macro2/build.rs b/third_party/rust/proc-macro2/build.rs ---- a/third_party/rust/proc-macro2/build.rs -+++ b/third_party/rust/proc-macro2/build.rs -@@ -9,16 +9,20 @@ - // "wrap_proc_macro" - // Wrap types from libproc_macro rather than polyfilling the whole API. - // Enabled on rustc 1.29+ as long as procmacro2_semver_exempt is not set, - // because we can't emulate the unstable API without emulating everything - // else. Also enabled unconditionally on nightly, in which case the - // procmacro2_semver_exempt surface area is implemented by using the - // nightly-only proc_macro API. - // -+// "hygiene" -+// Enable Span::mixed_site() and non-dummy behavior of Span::resolved_at -+// and Span::located_at. Enabled on Rust 1.45+. -+// - // "proc_macro_span" - // Enable non-dummy behavior of Span::start and Span::end methods which - // requires an unstable compiler feature. Enabled when building with - // nightly, unless `-Z allow-feature` in RUSTFLAGS disallows unstable - // features. - // - // "super_unstable" - // Implement the semver exempt API in terms of the nightly-only proc_macro -@@ -52,16 +56,24 @@ fn main() { - // https://github.com/alexcrichton/proc-macro2/issues/147 - println!("cargo:rustc-cfg=procmacro2_semver_exempt"); - } - - if semver_exempt || cfg!(feature = "span-locations") { - println!("cargo:rustc-cfg=span_locations"); - } - -+ if version.minor < 39 { -+ println!("cargo:rustc-cfg=no_bind_by_move_pattern_guard"); -+ } -+ -+ if version.minor >= 45 { -+ println!("cargo:rustc-cfg=hygiene"); -+ } -+ - let target = env::var("TARGET").unwrap(); - if !enable_use_proc_macro(&target) { - return; - } - - println!("cargo:rustc-cfg=use_proc_macro"); - - if version.nightly || !semver_exempt { -diff --git a/third_party/rust/proc-macro2/src/detection.rs b/third_party/rust/proc-macro2/src/detection.rs -new file mode 100644 ---- /dev/null -+++ b/third_party/rust/proc-macro2/src/detection.rs -@@ -0,0 +1,67 @@ -+use std::panic::{self, PanicInfo}; -+use std::sync::atomic::*; -+use std::sync::Once; -+ -+static WORKS: AtomicUsize = AtomicUsize::new(0); -+static INIT: Once = Once::new(); -+ -+pub(crate) fn inside_proc_macro() -> bool { -+ match WORKS.load(Ordering::SeqCst) { -+ 1 => return false, -+ 2 => return true, -+ _ => {} -+ } -+ -+ INIT.call_once(initialize); -+ inside_proc_macro() -+} -+ -+pub(crate) fn force_fallback() { -+ WORKS.store(1, Ordering::SeqCst); -+} -+ -+pub(crate) fn unforce_fallback() { -+ initialize(); -+} -+ -+// Swap in a null panic hook to avoid printing "thread panicked" to stderr, -+// then use catch_unwind to determine whether the compiler's proc_macro is -+// working. When proc-macro2 is used from outside of a procedural macro all -+// of the proc_macro crate's APIs currently panic. -+// -+// The Once is to prevent the possibility of this ordering: -+// -+// thread 1 calls take_hook, gets the user's original hook -+// thread 1 calls set_hook with the null hook -+// thread 2 calls take_hook, thinks null hook is the original hook -+// thread 2 calls set_hook with the null hook -+// thread 1 calls set_hook with the actual original hook -+// thread 2 calls set_hook with what it thinks is the original hook -+// -+// in which the user's hook has been lost. -+// -+// There is still a race condition where a panic in a different thread can -+// happen during the interval that the user's original panic hook is -+// unregistered such that their hook is incorrectly not called. This is -+// sufficiently unlikely and less bad than printing panic messages to stderr -+// on correct use of this crate. Maybe there is a libstd feature request -+// here. For now, if a user needs to guarantee that this failure mode does -+// not occur, they need to call e.g. `proc_macro2::Span::call_site()` from -+// the main thread before launching any other threads. -+fn initialize() { -+ type PanicHook = dyn Fn(&PanicInfo) + Sync + Send + 'static; -+ -+ let null_hook: Box = Box::new(|_panic_info| { /* ignore */ }); -+ let sanity_check = &*null_hook as *const PanicHook; -+ let original_hook = panic::take_hook(); -+ panic::set_hook(null_hook); -+ -+ let works = panic::catch_unwind(proc_macro::Span::call_site).is_ok(); -+ WORKS.store(works as usize + 1, Ordering::SeqCst); -+ -+ let hopefully_null_hook = panic::take_hook(); -+ panic::set_hook(original_hook); -+ if sanity_check != &*hopefully_null_hook { -+ panic!("observed race condition in proc_macro2::inside_proc_macro"); -+ } -+} -diff --git a/third_party/rust/proc-macro2/src/fallback.rs b/third_party/rust/proc-macro2/src/fallback.rs ---- a/third_party/rust/proc-macro2/src/fallback.rs -+++ b/third_party/rust/proc-macro2/src/fallback.rs -@@ -1,41 +1,121 @@ -+use crate::parse::{token_stream, Cursor}; -+use crate::{Delimiter, Spacing, TokenTree}; - #[cfg(span_locations)] - use std::cell::RefCell; - #[cfg(span_locations)] - use std::cmp; --use std::fmt; --use std::iter; -+use std::fmt::{self, Debug, Display}; -+use std::iter::FromIterator; -+use std::mem; - use std::ops::RangeBounds; - #[cfg(procmacro2_semver_exempt)] - use std::path::Path; - use std::path::PathBuf; - use std::str::FromStr; - use std::vec; -- --use crate::strnom::{block_comment, skip_whitespace, whitespace, word_break, Cursor, PResult}; --use crate::{Delimiter, Punct, Spacing, TokenTree}; - use unicode_xid::UnicodeXID; - -+/// Force use of proc-macro2's fallback implementation of the API for now, even -+/// if the compiler's implementation is available. -+pub fn force() { -+ #[cfg(wrap_proc_macro)] -+ crate::detection::force_fallback(); -+} -+ -+/// Resume using the compiler's implementation of the proc macro API if it is -+/// available. -+pub fn unforce() { -+ #[cfg(wrap_proc_macro)] -+ crate::detection::unforce_fallback(); -+} -+ - #[derive(Clone)] --pub struct TokenStream { -- inner: Vec, -+pub(crate) struct TokenStream { -+ pub(crate) inner: Vec, - } - - #[derive(Debug)] --pub struct LexError; -+pub(crate) struct LexError; - - impl TokenStream { - pub fn new() -> TokenStream { - TokenStream { inner: Vec::new() } - } - - pub fn is_empty(&self) -> bool { - self.inner.len() == 0 - } -+ -+ fn take_inner(&mut self) -> Vec { -+ mem::replace(&mut self.inner, Vec::new()) -+ } -+ -+ fn push_token(&mut self, token: TokenTree) { -+ // https://github.com/alexcrichton/proc-macro2/issues/235 -+ match token { -+ #[cfg(not(no_bind_by_move_pattern_guard))] -+ TokenTree::Literal(crate::Literal { -+ #[cfg(wrap_proc_macro)] -+ inner: crate::imp::Literal::Fallback(literal), -+ #[cfg(not(wrap_proc_macro))] -+ inner: literal, -+ .. -+ }) if literal.text.starts_with('-') => { -+ push_negative_literal(self, literal); -+ } -+ #[cfg(no_bind_by_move_pattern_guard)] -+ TokenTree::Literal(crate::Literal { -+ #[cfg(wrap_proc_macro)] -+ inner: crate::imp::Literal::Fallback(literal), -+ #[cfg(not(wrap_proc_macro))] -+ inner: literal, -+ .. -+ }) => { -+ if literal.text.starts_with('-') { -+ push_negative_literal(self, literal); -+ } else { -+ self.inner -+ .push(TokenTree::Literal(crate::Literal::_new_stable(literal))); -+ } -+ } -+ _ => self.inner.push(token), -+ } -+ -+ #[cold] -+ fn push_negative_literal(stream: &mut TokenStream, mut literal: Literal) { -+ literal.text.remove(0); -+ let mut punct = crate::Punct::new('-', Spacing::Alone); -+ punct.set_span(crate::Span::_new_stable(literal.span)); -+ stream.inner.push(TokenTree::Punct(punct)); -+ stream -+ .inner -+ .push(TokenTree::Literal(crate::Literal::_new_stable(literal))); -+ } -+ } -+} -+ -+// Nonrecursive to prevent stack overflow. -+impl Drop for TokenStream { -+ fn drop(&mut self) { -+ while let Some(token) = self.inner.pop() { -+ let group = match token { -+ TokenTree::Group(group) => group.inner, -+ _ => continue, -+ }; -+ #[cfg(wrap_proc_macro)] -+ let group = match group { -+ crate::imp::Group::Fallback(group) => group, -+ _ => continue, -+ }; -+ let mut group = group; -+ self.inner.extend(group.stream.take_inner()); -+ } -+ } - } - - #[cfg(span_locations)] - fn get_cursor(src: &str) -> Cursor { - // Create a dummy file & add it to the source map - SOURCE_MAP.with(|cm| { - let mut cm = cm.borrow_mut(); - let name = format!("", cm.files.len()); -@@ -54,68 +134,49 @@ fn get_cursor(src: &str) -> Cursor { - - impl FromStr for TokenStream { - type Err = LexError; - - fn from_str(src: &str) -> Result { - // Create a dummy file & add it to the source map - let cursor = get_cursor(src); - -- match token_stream(cursor) { -- Ok((input, output)) => { -- if skip_whitespace(input).len() != 0 { -- Err(LexError) -- } else { -- Ok(output) -- } -- } -- Err(LexError) => Err(LexError), -+ let (rest, tokens) = token_stream(cursor)?; -+ if rest.is_empty() { -+ Ok(tokens) -+ } else { -+ Err(LexError) - } - } - } - --impl fmt::Display for TokenStream { -+impl Display for TokenStream { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - let mut joint = false; - for (i, tt) in self.inner.iter().enumerate() { - if i != 0 && !joint { - write!(f, " ")?; - } - joint = false; -- match *tt { -- TokenTree::Group(ref tt) => { -- let (start, end) = match tt.delimiter() { -- Delimiter::Parenthesis => ("(", ")"), -- Delimiter::Brace => ("{", "}"), -- Delimiter::Bracket => ("[", "]"), -- Delimiter::None => ("", ""), -- }; -- if tt.stream().into_iter().next().is_none() { -- write!(f, "{} {}", start, end)? -- } else { -- write!(f, "{} {} {}", start, tt.stream(), end)? -- } -+ match tt { -+ TokenTree::Group(tt) => Display::fmt(tt, f), -+ TokenTree::Ident(tt) => Display::fmt(tt, f), -+ TokenTree::Punct(tt) => { -+ joint = tt.spacing() == Spacing::Joint; -+ Display::fmt(tt, f) - } -- TokenTree::Ident(ref tt) => write!(f, "{}", tt)?, -- TokenTree::Punct(ref tt) => { -- write!(f, "{}", tt.as_char())?; -- match tt.spacing() { -- Spacing::Alone => {} -- Spacing::Joint => joint = true, -- } -- } -- TokenTree::Literal(ref tt) => write!(f, "{}", tt)?, -- } -+ TokenTree::Literal(tt) => Display::fmt(tt, f), -+ }? - } - - Ok(()) - } - } - --impl fmt::Debug for TokenStream { -+impl Debug for TokenStream { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.write_str("TokenStream ")?; - f.debug_list().entries(self.clone()).finish() - } - } - - #[cfg(use_proc_macro)] - impl From for TokenStream { -@@ -134,122 +195,107 @@ impl From for proc_macro::T - .to_string() - .parse() - .expect("failed to parse to compiler tokens") - } - } - - impl From for TokenStream { - fn from(tree: TokenTree) -> TokenStream { -- TokenStream { inner: vec![tree] } -+ let mut stream = TokenStream::new(); -+ stream.push_token(tree); -+ stream - } - } - --impl iter::FromIterator for TokenStream { -- fn from_iter>(streams: I) -> Self { -- let mut v = Vec::new(); -- -- for token in streams.into_iter() { -- v.push(token); -- } -- -- TokenStream { inner: v } -+impl FromIterator for TokenStream { -+ fn from_iter>(tokens: I) -> Self { -+ let mut stream = TokenStream::new(); -+ stream.extend(tokens); -+ stream - } - } - --impl iter::FromIterator for TokenStream { -+impl FromIterator for TokenStream { - fn from_iter>(streams: I) -> Self { - let mut v = Vec::new(); - -- for stream in streams.into_iter() { -- v.extend(stream.inner); -+ for mut stream in streams { -+ v.extend(stream.take_inner()); - } - - TokenStream { inner: v } - } - } - - impl Extend for TokenStream { -- fn extend>(&mut self, streams: I) { -- self.inner.extend(streams); -+ fn extend>(&mut self, tokens: I) { -+ tokens.into_iter().for_each(|token| self.push_token(token)); - } - } - - impl Extend for TokenStream { - fn extend>(&mut self, streams: I) { -- self.inner -- .extend(streams.into_iter().flat_map(|stream| stream)); -+ self.inner.extend(streams.into_iter().flatten()); - } - } - --pub type TokenTreeIter = vec::IntoIter; -+pub(crate) type TokenTreeIter = vec::IntoIter; - - impl IntoIterator for TokenStream { - type Item = TokenTree; - type IntoIter = TokenTreeIter; - -- fn into_iter(self) -> TokenTreeIter { -- self.inner.into_iter() -+ fn into_iter(mut self) -> TokenTreeIter { -+ self.take_inner().into_iter() - } - } - - #[derive(Clone, PartialEq, Eq)] --pub struct SourceFile { -+pub(crate) struct SourceFile { - path: PathBuf, - } - - impl SourceFile { - /// Get the path to this source file as a string. - pub fn path(&self) -> PathBuf { - self.path.clone() - } - - pub fn is_real(&self) -> bool { - // XXX(nika): Support real files in the future? - false - } - } - --impl fmt::Debug for SourceFile { -+impl Debug for SourceFile { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.debug_struct("SourceFile") - .field("path", &self.path()) - .field("is_real", &self.is_real()) - .finish() - } - } - - #[derive(Clone, Copy, Debug, PartialEq, Eq)] --pub struct LineColumn { -+pub(crate) struct LineColumn { - pub line: usize, - pub column: usize, - } - - #[cfg(span_locations)] - thread_local! { - static SOURCE_MAP: RefCell = RefCell::new(SourceMap { - // NOTE: We start with a single dummy file which all call_site() and - // def_site() spans reference. -- files: vec![{ -+ files: vec![FileInfo { - #[cfg(procmacro2_semver_exempt)] -- { -- FileInfo { -- name: "".to_owned(), -- span: Span { lo: 0, hi: 0 }, -- lines: vec![0], -- } -- } -- -- #[cfg(not(procmacro2_semver_exempt))] -- { -- FileInfo { -- span: Span { lo: 0, hi: 0 }, -- lines: vec![0], -- } -- } -+ name: "".to_owned(), -+ span: Span { lo: 0, hi: 0 }, -+ lines: vec![0], - }], - }); - } - - #[cfg(span_locations)] - struct FileInfo { - #[cfg(procmacro2_semver_exempt)] - name: String, -@@ -277,26 +323,31 @@ impl FileInfo { - } - } - - fn span_within(&self, span: Span) -> bool { - span.lo >= self.span.lo && span.hi <= self.span.hi - } - } - --/// Computesthe offsets of each line in the given source string. -+/// Computes the offsets of each line in the given source string -+/// and the total number of characters - #[cfg(span_locations)] --fn lines_offsets(s: &str) -> Vec { -+fn lines_offsets(s: &str) -> (usize, Vec) { - let mut lines = vec![0]; -- let mut prev = 0; -- while let Some(len) = s[prev..].find('\n') { -- prev += len + 1; -- lines.push(prev); -+ let mut total = 0; -+ -+ for ch in s.chars() { -+ total += 1; -+ if ch == '\n' { -+ lines.push(total); -+ } - } -- lines -+ -+ (total, lines) - } - - #[cfg(span_locations)] - struct SourceMap { - files: Vec, - } - - #[cfg(span_locations)] -@@ -305,81 +356,83 @@ impl SourceMap { - // Add 1 so there's always space between files. - // - // We'll always have at least 1 file, as we initialize our files list - // with a dummy file. - self.files.last().unwrap().span.hi + 1 - } - - fn add_file(&mut self, name: &str, src: &str) -> Span { -- let lines = lines_offsets(src); -+ let (len, lines) = lines_offsets(src); - let lo = self.next_start_pos(); - // XXX(nika): Shouild we bother doing a checked cast or checked add here? - let span = Span { - lo, -- hi: lo + (src.len() as u32), -+ hi: lo + (len as u32), - }; - -- #[cfg(procmacro2_semver_exempt)] - self.files.push(FileInfo { -+ #[cfg(procmacro2_semver_exempt)] - name: name.to_owned(), - span, - lines, - }); - - #[cfg(not(procmacro2_semver_exempt))] -- self.files.push(FileInfo { span, lines }); - let _ = name; - - span - } - - fn fileinfo(&self, span: Span) -> &FileInfo { - for file in &self.files { - if file.span_within(span) { - return file; - } - } - panic!("Invalid span with no related FileInfo!"); - } - } - - #[derive(Clone, Copy, PartialEq, Eq)] --pub struct Span { -+pub(crate) struct Span { - #[cfg(span_locations)] -- lo: u32, -+ pub(crate) lo: u32, - #[cfg(span_locations)] -- hi: u32, -+ pub(crate) hi: u32, - } - - impl Span { - #[cfg(not(span_locations))] - pub fn call_site() -> Span { - Span {} - } - - #[cfg(span_locations)] - pub fn call_site() -> Span { - Span { lo: 0, hi: 0 } - } - -+ #[cfg(hygiene)] -+ pub fn mixed_site() -> Span { -+ Span::call_site() -+ } -+ - #[cfg(procmacro2_semver_exempt)] - pub fn def_site() -> Span { - Span::call_site() - } - -- #[cfg(procmacro2_semver_exempt)] - pub fn resolved_at(&self, _other: Span) -> Span { - // Stable spans consist only of line/column information, so - // `resolved_at` and `located_at` only select which span the - // caller wants line/column information from. - *self - } - -- #[cfg(procmacro2_semver_exempt)] - pub fn located_at(&self, other: Span) -> Span { - other - } - - #[cfg(procmacro2_semver_exempt)] - pub fn source_file(&self) -> SourceFile { - SOURCE_MAP.with(|cm| { - let cm = cm.borrow(); -@@ -422,36 +475,69 @@ impl Span { - return None; - } - Some(Span { - lo: cmp::min(self.lo, other.lo), - hi: cmp::max(self.hi, other.hi), - }) - }) - } -+ -+ #[cfg(not(span_locations))] -+ fn first_byte(self) -> Self { -+ self -+ } -+ -+ #[cfg(span_locations)] -+ fn first_byte(self) -> Self { -+ Span { -+ lo: self.lo, -+ hi: cmp::min(self.lo.saturating_add(1), self.hi), -+ } -+ } -+ -+ #[cfg(not(span_locations))] -+ fn last_byte(self) -> Self { -+ self -+ } -+ -+ #[cfg(span_locations)] -+ fn last_byte(self) -> Self { -+ Span { -+ lo: cmp::max(self.hi.saturating_sub(1), self.lo), -+ hi: self.hi, -+ } -+ } - } - --impl fmt::Debug for Span { -+impl Debug for Span { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- #[cfg(procmacro2_semver_exempt)] -+ #[cfg(span_locations)] - return write!(f, "bytes({}..{})", self.lo, self.hi); - -- #[cfg(not(procmacro2_semver_exempt))] -+ #[cfg(not(span_locations))] - write!(f, "Span") - } - } - --pub fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) { -- if cfg!(procmacro2_semver_exempt) { -+pub(crate) fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) { -+ #[cfg(span_locations)] -+ { -+ if span.lo == 0 && span.hi == 0 { -+ return; -+ } -+ } -+ -+ if cfg!(span_locations) { - debug.field("span", &span); - } - } - - #[derive(Clone)] --pub struct Group { -+pub(crate) struct Group { - delimiter: Delimiter, - stream: TokenStream, - span: Span, - } - - impl Group { - pub fn new(delimiter: Delimiter, stream: TokenStream) -> Group { - Group { -@@ -469,58 +555,67 @@ impl Group { - self.stream.clone() - } - - pub fn span(&self) -> Span { - self.span - } - - pub fn span_open(&self) -> Span { -- self.span -+ self.span.first_byte() - } - - pub fn span_close(&self) -> Span { -- self.span -+ self.span.last_byte() - } - - pub fn set_span(&mut self, span: Span) { - self.span = span; - } - } - --impl fmt::Display for Group { -+impl Display for Group { -+ // We attempt to match libproc_macro's formatting. -+ // Empty parens: () -+ // Nonempty parens: (...) -+ // Empty brackets: [] -+ // Nonempty brackets: [...] -+ // Empty braces: { } -+ // Nonempty braces: { ... } - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- let (left, right) = match self.delimiter { -+ let (open, close) = match self.delimiter { - Delimiter::Parenthesis => ("(", ")"), -- Delimiter::Brace => ("{", "}"), -+ Delimiter::Brace => ("{ ", "}"), - Delimiter::Bracket => ("[", "]"), - Delimiter::None => ("", ""), - }; - -- f.write_str(left)?; -- self.stream.fmt(f)?; -- f.write_str(right)?; -+ f.write_str(open)?; -+ Display::fmt(&self.stream, f)?; -+ if self.delimiter == Delimiter::Brace && !self.stream.inner.is_empty() { -+ f.write_str(" ")?; -+ } -+ f.write_str(close)?; - - Ok(()) - } - } - --impl fmt::Debug for Group { -+impl Debug for Group { - fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { - let mut debug = fmt.debug_struct("Group"); - debug.field("delimiter", &self.delimiter); - debug.field("stream", &self.stream); -- #[cfg(procmacro2_semver_exempt)] -- debug.field("span", &self.span); -+ debug_span_field_if_nontrivial(&mut debug, self.span); - debug.finish() - } - } - - #[derive(Clone)] --pub struct Ident { -+pub(crate) struct Ident { - sym: String, - span: Span, - raw: bool, - } - - impl Ident { - fn _new(string: &str, raw: bool, span: Span) -> Ident { - validate_ident(string); -@@ -544,26 +639,24 @@ impl Ident { - self.span - } - - pub fn set_span(&mut self, span: Span) { - self.span = span; - } - } - --#[inline] --fn is_ident_start(c: char) -> bool { -+pub(crate) fn is_ident_start(c: char) -> bool { - ('a' <= c && c <= 'z') - || ('A' <= c && c <= 'Z') - || c == '_' - || (c > '\x7f' && UnicodeXID::is_xid_start(c)) - } - --#[inline] --fn is_ident_continue(c: char) -> bool { -+pub(crate) fn is_ident_continue(c: char) -> bool { - ('a' <= c && c <= 'z') - || ('A' <= c && c <= 'Z') - || c == '_' - || ('0' <= c && c <= '9') - || (c > '\x7f' && UnicodeXID::is_xid_continue(c)) - } - - fn validate_ident(string: &str) { -@@ -610,49 +703,49 @@ where - if self.raw { - other.starts_with("r#") && self.sym == other[2..] - } else { - self.sym == other - } - } - } - --impl fmt::Display for Ident { -+impl Display for Ident { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - if self.raw { -- "r#".fmt(f)?; -+ f.write_str("r#")?; - } -- self.sym.fmt(f) -+ Display::fmt(&self.sym, f) - } - } - --impl fmt::Debug for Ident { -+impl Debug for Ident { - // Ident(proc_macro), Ident(r#union) -- #[cfg(not(procmacro2_semver_exempt))] -+ #[cfg(not(span_locations))] - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - let mut debug = f.debug_tuple("Ident"); - debug.field(&format_args!("{}", self)); - debug.finish() - } - - // Ident { - // sym: proc_macro, - // span: bytes(128..138) - // } -- #[cfg(procmacro2_semver_exempt)] -+ #[cfg(span_locations)] - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - let mut debug = f.debug_struct("Ident"); - debug.field("sym", &format_args!("{}", self)); -- debug.field("span", &self.span); -+ debug_span_field_if_nontrivial(&mut debug, self.span); - debug.finish() - } - } - - #[derive(Clone)] --pub struct Literal { -+pub(crate) struct Literal { - text: String, - span: Span, - } - - macro_rules! suffixed_numbers { - ($($name:ident => $kind:ident,)*) => ($( - pub fn $name(n: $kind) -> Literal { - Literal::_new(format!(concat!("{}", stringify!($kind)), n)) -@@ -664,17 +757,17 @@ macro_rules! unsuffixed_numbers { - ($($name:ident => $kind:ident,)*) => ($( - pub fn $name(n: $kind) -> Literal { - Literal::_new(n.to_string()) - } - )*) - } - - impl Literal { -- fn _new(text: String) -> Literal { -+ pub(crate) fn _new(text: String) -> Literal { - Literal { - text, - span: Span::call_site(), - } - } - - suffixed_numbers! { - u8_suffixed => u8, -@@ -706,61 +799,62 @@ impl Literal { - i32_unsuffixed => i32, - i64_unsuffixed => i64, - i128_unsuffixed => i128, - isize_unsuffixed => isize, - } - - pub fn f32_unsuffixed(f: f32) -> Literal { - let mut s = f.to_string(); -- if !s.contains(".") { -+ if !s.contains('.') { - s.push_str(".0"); - } - Literal::_new(s) - } - - pub fn f64_unsuffixed(f: f64) -> Literal { - let mut s = f.to_string(); -- if !s.contains(".") { -+ if !s.contains('.') { - s.push_str(".0"); - } - Literal::_new(s) - } - - pub fn string(t: &str) -> Literal { - let mut text = String::with_capacity(t.len() + 2); - text.push('"'); - for c in t.chars() { - if c == '\'' { -- // escape_default turns this into "\'" which is unnecessary. -+ // escape_debug turns this into "\'" which is unnecessary. - text.push(c); - } else { -- text.extend(c.escape_default()); -+ text.extend(c.escape_debug()); - } - } - text.push('"'); - Literal::_new(text) - } - - pub fn character(t: char) -> Literal { - let mut text = String::new(); - text.push('\''); - if t == '"' { -- // escape_default turns this into '\"' which is unnecessary. -+ // escape_debug turns this into '\"' which is unnecessary. - text.push(t); - } else { -- text.extend(t.escape_default()); -+ text.extend(t.escape_debug()); - } - text.push('\''); - Literal::_new(text) - } - - pub fn byte_string(bytes: &[u8]) -> Literal { - let mut escaped = "b\"".to_string(); - for b in bytes { -+ #[allow(clippy::match_overlapping_arm)] - match *b { - b'\0' => escaped.push_str(r"\0"), - b'\t' => escaped.push_str(r"\t"), - b'\n' => escaped.push_str(r"\n"), - b'\r' => escaped.push_str(r"\r"), - b'"' => escaped.push_str("\\\""), - b'\\' => escaped.push_str("\\\\"), - b'\x20'..=b'\x7E' => escaped.push(*b as char), -@@ -779,656 +873,22 @@ impl Literal { - self.span = span; - } - - pub fn subspan>(&self, _range: R) -> Option { - None - } - } - --impl fmt::Display for Literal { -+impl Display for Literal { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.text.fmt(f) -- } --} -- --impl fmt::Debug for Literal { -- fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { -- let mut debug = fmt.debug_struct("Literal"); -- debug.field("lit", &format_args!("{}", self.text)); -- #[cfg(procmacro2_semver_exempt)] -- debug.field("span", &self.span); -- debug.finish() -- } --} -- --fn token_stream(mut input: Cursor) -> PResult { -- let mut trees = Vec::new(); -- loop { -- let input_no_ws = skip_whitespace(input); -- if input_no_ws.rest.len() == 0 { -- break; -- } -- if let Ok((a, tokens)) = doc_comment(input_no_ws) { -- input = a; -- trees.extend(tokens); -- continue; -- } -- -- let (a, tt) = match token_tree(input_no_ws) { -- Ok(p) => p, -- Err(_) => break, -- }; -- trees.push(tt); -- input = a; -- } -- Ok((input, TokenStream { inner: trees })) --} -- --#[cfg(not(span_locations))] --fn spanned<'a, T>( -- input: Cursor<'a>, -- f: fn(Cursor<'a>) -> PResult<'a, T>, --) -> PResult<'a, (T, crate::Span)> { -- let (a, b) = f(skip_whitespace(input))?; -- Ok((a, ((b, crate::Span::_new_stable(Span::call_site()))))) --} -- --#[cfg(span_locations)] --fn spanned<'a, T>( -- input: Cursor<'a>, -- f: fn(Cursor<'a>) -> PResult<'a, T>, --) -> PResult<'a, (T, crate::Span)> { -- let input = skip_whitespace(input); -- let lo = input.off; -- let (a, b) = f(input)?; -- let hi = a.off; -- let span = crate::Span::_new_stable(Span { lo, hi }); -- Ok((a, (b, span))) --} -- --fn token_tree(input: Cursor) -> PResult { -- let (rest, (mut tt, span)) = spanned(input, token_kind)?; -- tt.set_span(span); -- Ok((rest, tt)) --} -- --named!(token_kind -> TokenTree, alt!( -- map!(group, |g| TokenTree::Group(crate::Group::_new_stable(g))) -- | -- map!(literal, |l| TokenTree::Literal(crate::Literal::_new_stable(l))) // must be before symbol -- | -- map!(op, TokenTree::Punct) -- | -- symbol_leading_ws --)); -- --named!(group -> Group, alt!( -- delimited!( -- punct!("("), -- token_stream, -- punct!(")") -- ) => { |ts| Group::new(Delimiter::Parenthesis, ts) } -- | -- delimited!( -- punct!("["), -- token_stream, -- punct!("]") -- ) => { |ts| Group::new(Delimiter::Bracket, ts) } -- | -- delimited!( -- punct!("{"), -- token_stream, -- punct!("}") -- ) => { |ts| Group::new(Delimiter::Brace, ts) } --)); -- --fn symbol_leading_ws(input: Cursor) -> PResult { -- symbol(skip_whitespace(input)) --} -- --fn symbol(input: Cursor) -> PResult { -- let raw = input.starts_with("r#"); -- let rest = input.advance((raw as usize) << 1); -- -- let (rest, sym) = symbol_not_raw(rest)?; -- -- if !raw { -- let ident = crate::Ident::new(sym, crate::Span::call_site()); -- return Ok((rest, ident.into())); -- } -- -- if sym == "_" { -- return Err(LexError); -- } -- -- let ident = crate::Ident::_new_raw(sym, crate::Span::call_site()); -- Ok((rest, ident.into())) --} -- --fn symbol_not_raw(input: Cursor) -> PResult<&str> { -- let mut chars = input.char_indices(); -- -- match chars.next() { -- Some((_, ch)) if is_ident_start(ch) => {} -- _ => return Err(LexError), -- } -- -- let mut end = input.len(); -- for (i, ch) in chars { -- if !is_ident_continue(ch) { -- end = i; -- break; -- } -- } -- -- Ok((input.advance(end), &input.rest[..end])) --} -- --fn literal(input: Cursor) -> PResult { -- let input_no_ws = skip_whitespace(input); -- -- match literal_nocapture(input_no_ws) { -- Ok((a, ())) => { -- let start = input.len() - input_no_ws.len(); -- let len = input_no_ws.len() - a.len(); -- let end = start + len; -- Ok((a, Literal::_new(input.rest[start..end].to_string()))) -- } -- Err(LexError) => Err(LexError), -+ Display::fmt(&self.text, f) - } - } - --named!(literal_nocapture -> (), alt!( -- string -- | -- byte_string -- | -- byte -- | -- character -- | -- float -- | -- int --)); -- --named!(string -> (), alt!( -- quoted_string -- | -- preceded!( -- punct!("r"), -- raw_string -- ) => { |_| () } --)); -- --named!(quoted_string -> (), do_parse!( -- punct!("\"") >> -- cooked_string >> -- tag!("\"") >> -- option!(symbol_not_raw) >> -- (()) --)); -- --fn cooked_string(input: Cursor) -> PResult<()> { -- let mut chars = input.char_indices().peekable(); -- while let Some((byte_offset, ch)) = chars.next() { -- match ch { -- '"' => { -- return Ok((input.advance(byte_offset), ())); -- } -- '\r' => { -- if let Some((_, '\n')) = chars.next() { -- // ... -- } else { -- break; -- } -- } -- '\\' => match chars.next() { -- Some((_, 'x')) => { -- if !backslash_x_char(&mut chars) { -- break; -- } -- } -- Some((_, 'n')) | Some((_, 'r')) | Some((_, 't')) | Some((_, '\\')) -- | Some((_, '\'')) | Some((_, '"')) | Some((_, '0')) => {} -- Some((_, 'u')) => { -- if !backslash_u(&mut chars) { -- break; -- } -- } -- Some((_, '\n')) | Some((_, '\r')) => { -- while let Some(&(_, ch)) = chars.peek() { -- if ch.is_whitespace() { -- chars.next(); -- } else { -- break; -- } -- } -- } -- _ => break, -- }, -- _ch => {} -- } -- } -- Err(LexError) --} -- --named!(byte_string -> (), alt!( -- delimited!( -- punct!("b\""), -- cooked_byte_string, -- tag!("\"") -- ) => { |_| () } -- | -- preceded!( -- punct!("br"), -- raw_string -- ) => { |_| () } --)); -- --fn cooked_byte_string(mut input: Cursor) -> PResult<()> { -- let mut bytes = input.bytes().enumerate(); -- 'outer: while let Some((offset, b)) = bytes.next() { -- match b { -- b'"' => { -- return Ok((input.advance(offset), ())); -- } -- b'\r' => { -- if let Some((_, b'\n')) = bytes.next() { -- // ... -- } else { -- break; -- } -- } -- b'\\' => match bytes.next() { -- Some((_, b'x')) => { -- if !backslash_x_byte(&mut bytes) { -- break; -- } -- } -- Some((_, b'n')) | Some((_, b'r')) | Some((_, b't')) | Some((_, b'\\')) -- | Some((_, b'0')) | Some((_, b'\'')) | Some((_, b'"')) => {} -- Some((newline, b'\n')) | Some((newline, b'\r')) => { -- let rest = input.advance(newline + 1); -- for (offset, ch) in rest.char_indices() { -- if !ch.is_whitespace() { -- input = rest.advance(offset); -- bytes = input.bytes().enumerate(); -- continue 'outer; -- } -- } -- break; -- } -- _ => break, -- }, -- b if b < 0x80 => {} -- _ => break, -- } -- } -- Err(LexError) --} -- --fn raw_string(input: Cursor) -> PResult<()> { -- let mut chars = input.char_indices(); -- let mut n = 0; -- while let Some((byte_offset, ch)) = chars.next() { -- match ch { -- '"' => { -- n = byte_offset; -- break; -- } -- '#' => {} -- _ => return Err(LexError), -- } -- } -- for (byte_offset, ch) in chars { -- match ch { -- '"' if input.advance(byte_offset + 1).starts_with(&input.rest[..n]) => { -- let rest = input.advance(byte_offset + 1 + n); -- return Ok((rest, ())); -- } -- '\r' => {} -- _ => {} -- } -- } -- Err(LexError) --} -- --named!(byte -> (), do_parse!( -- punct!("b") >> -- tag!("'") >> -- cooked_byte >> -- tag!("'") >> -- (()) --)); -- --fn cooked_byte(input: Cursor) -> PResult<()> { -- let mut bytes = input.bytes().enumerate(); -- let ok = match bytes.next().map(|(_, b)| b) { -- Some(b'\\') => match bytes.next().map(|(_, b)| b) { -- Some(b'x') => backslash_x_byte(&mut bytes), -- Some(b'n') | Some(b'r') | Some(b't') | Some(b'\\') | Some(b'0') | Some(b'\'') -- | Some(b'"') => true, -- _ => false, -- }, -- b => b.is_some(), -- }; -- if ok { -- match bytes.next() { -- Some((offset, _)) => { -- if input.chars().as_str().is_char_boundary(offset) { -- Ok((input.advance(offset), ())) -- } else { -- Err(LexError) -- } -- } -- None => Ok((input.advance(input.len()), ())), -- } -- } else { -- Err(LexError) -- } --} -- --named!(character -> (), do_parse!( -- punct!("'") >> -- cooked_char >> -- tag!("'") >> -- (()) --)); -- --fn cooked_char(input: Cursor) -> PResult<()> { -- let mut chars = input.char_indices(); -- let ok = match chars.next().map(|(_, ch)| ch) { -- Some('\\') => match chars.next().map(|(_, ch)| ch) { -- Some('x') => backslash_x_char(&mut chars), -- Some('u') => backslash_u(&mut chars), -- Some('n') | Some('r') | Some('t') | Some('\\') | Some('0') | Some('\'') | Some('"') => { -- true -- } -- _ => false, -- }, -- ch => ch.is_some(), -- }; -- if ok { -- match chars.next() { -- Some((idx, _)) => Ok((input.advance(idx), ())), -- None => Ok((input.advance(input.len()), ())), -- } -- } else { -- Err(LexError) -+impl Debug for Literal { -+ fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { -+ let mut debug = fmt.debug_struct("Literal"); -+ debug.field("lit", &format_args!("{}", self.text)); -+ debug_span_field_if_nontrivial(&mut debug, self.span); -+ debug.finish() - } - } -- --macro_rules! next_ch { -- ($chars:ident @ $pat:pat $(| $rest:pat)*) => { -- match $chars.next() { -- Some((_, ch)) => match ch { -- $pat $(| $rest)* => ch, -- _ => return false, -- }, -- None => return false -- } -- }; --} -- --fn backslash_x_char(chars: &mut I) -> bool --where -- I: Iterator, --{ -- next_ch!(chars @ '0'..='7'); -- next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F'); -- true --} -- --fn backslash_x_byte(chars: &mut I) -> bool --where -- I: Iterator, --{ -- next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F'); -- next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F'); -- true --} -- --fn backslash_u(chars: &mut I) -> bool --where -- I: Iterator, --{ -- next_ch!(chars @ '{'); -- next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F'); -- loop { -- let c = next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F' | '_' | '}'); -- if c == '}' { -- return true; -- } -- } --} -- --fn float(input: Cursor) -> PResult<()> { -- let (mut rest, ()) = float_digits(input)?; -- if let Some(ch) = rest.chars().next() { -- if is_ident_start(ch) { -- rest = symbol_not_raw(rest)?.0; -- } -- } -- word_break(rest) --} -- --fn float_digits(input: Cursor) -> PResult<()> { -- let mut chars = input.chars().peekable(); -- match chars.next() { -- Some(ch) if ch >= '0' && ch <= '9' => {} -- _ => return Err(LexError), -- } -- -- let mut len = 1; -- let mut has_dot = false; -- let mut has_exp = false; -- while let Some(&ch) = chars.peek() { -- match ch { -- '0'..='9' | '_' => { -- chars.next(); -- len += 1; -- } -- '.' => { -- if has_dot { -- break; -- } -- chars.next(); -- if chars -- .peek() -- .map(|&ch| ch == '.' || is_ident_start(ch)) -- .unwrap_or(false) -- { -- return Err(LexError); -- } -- len += 1; -- has_dot = true; -- } -- 'e' | 'E' => { -- chars.next(); -- len += 1; -- has_exp = true; -- break; -- } -- _ => break, -- } -- } -- -- let rest = input.advance(len); -- if !(has_dot || has_exp || rest.starts_with("f32") || rest.starts_with("f64")) { -- return Err(LexError); -- } -- -- if has_exp { -- let mut has_exp_value = false; -- while let Some(&ch) = chars.peek() { -- match ch { -- '+' | '-' => { -- if has_exp_value { -- break; -- } -- chars.next(); -- len += 1; -- } -- '0'..='9' => { -- chars.next(); -- len += 1; -- has_exp_value = true; -- } -- '_' => { -- chars.next(); -- len += 1; -- } -- _ => break, -- } -- } -- if !has_exp_value { -- return Err(LexError); -- } -- } -- -- Ok((input.advance(len), ())) --} -- --fn int(input: Cursor) -> PResult<()> { -- let (mut rest, ()) = digits(input)?; -- if let Some(ch) = rest.chars().next() { -- if is_ident_start(ch) { -- rest = symbol_not_raw(rest)?.0; -- } -- } -- word_break(rest) --} -- --fn digits(mut input: Cursor) -> PResult<()> { -- let base = if input.starts_with("0x") { -- input = input.advance(2); -- 16 -- } else if input.starts_with("0o") { -- input = input.advance(2); -- 8 -- } else if input.starts_with("0b") { -- input = input.advance(2); -- 2 -- } else { -- 10 -- }; -- -- let mut len = 0; -- let mut empty = true; -- for b in input.bytes() { -- let digit = match b { -- b'0'..=b'9' => (b - b'0') as u64, -- b'a'..=b'f' => 10 + (b - b'a') as u64, -- b'A'..=b'F' => 10 + (b - b'A') as u64, -- b'_' => { -- if empty && base == 10 { -- return Err(LexError); -- } -- len += 1; -- continue; -- } -- _ => break, -- }; -- if digit >= base { -- return Err(LexError); -- } -- len += 1; -- empty = false; -- } -- if empty { -- Err(LexError) -- } else { -- Ok((input.advance(len), ())) -- } --} -- --fn op(input: Cursor) -> PResult { -- let input = skip_whitespace(input); -- match op_char(input) { -- Ok((rest, '\'')) => { -- symbol(rest)?; -- Ok((rest, Punct::new('\'', Spacing::Joint))) -- } -- Ok((rest, ch)) => { -- let kind = match op_char(rest) { -- Ok(_) => Spacing::Joint, -- Err(LexError) => Spacing::Alone, -- }; -- Ok((rest, Punct::new(ch, kind))) -- } -- Err(LexError) => Err(LexError), -- } --} -- --fn op_char(input: Cursor) -> PResult { -- if input.starts_with("//") || input.starts_with("/*") { -- // Do not accept `/` of a comment as an op. -- return Err(LexError); -- } -- -- let mut chars = input.chars(); -- let first = match chars.next() { -- Some(ch) => ch, -- None => { -- return Err(LexError); -- } -- }; -- let recognized = "~!@#$%^&*-=+|;:,<.>/?'"; -- if recognized.contains(first) { -- Ok((input.advance(first.len_utf8()), first)) -- } else { -- Err(LexError) -- } --} -- --fn doc_comment(input: Cursor) -> PResult> { -- let mut trees = Vec::new(); -- let (rest, ((comment, inner), span)) = spanned(input, doc_comment_contents)?; -- trees.push(TokenTree::Punct(Punct::new('#', Spacing::Alone))); -- if inner { -- trees.push(Punct::new('!', Spacing::Alone).into()); -- } -- let mut stream = vec![ -- TokenTree::Ident(crate::Ident::new("doc", span)), -- TokenTree::Punct(Punct::new('=', Spacing::Alone)), -- TokenTree::Literal(crate::Literal::string(comment)), -- ]; -- for tt in stream.iter_mut() { -- tt.set_span(span); -- } -- let group = Group::new(Delimiter::Bracket, stream.into_iter().collect()); -- trees.push(crate::Group::_new_stable(group).into()); -- for tt in trees.iter_mut() { -- tt.set_span(span); -- } -- Ok((rest, trees)) --} -- --named!(doc_comment_contents -> (&str, bool), alt!( -- do_parse!( -- punct!("//!") >> -- s: take_until_newline_or_eof!() >> -- ((s, true)) -- ) -- | -- do_parse!( -- option!(whitespace) >> -- peek!(tag!("/*!")) >> -- s: block_comment >> -- ((s, true)) -- ) -- | -- do_parse!( -- punct!("///") >> -- not!(tag!("/")) >> -- s: take_until_newline_or_eof!() >> -- ((s, false)) -- ) -- | -- do_parse!( -- option!(whitespace) >> -- peek!(tuple!(tag!("/**"), not!(tag!("*")))) >> -- s: block_comment >> -- ((s, false)) -- ) --)); -diff --git a/third_party/rust/proc-macro2/src/lib.rs b/third_party/rust/proc-macro2/src/lib.rs ---- a/third_party/rust/proc-macro2/src/lib.rs -+++ b/third_party/rust/proc-macro2/src/lib.rs -@@ -73,37 +73,44 @@ - //! - //! # Thread-Safety - //! - //! Most types in this crate are `!Sync` because the underlying compiler - //! types make use of thread-local memory, meaning they cannot be accessed from - //! a different thread. - - // Proc-macro2 types in rustdoc of other crates get linked to here. --#![doc(html_root_url = "https://docs.rs/proc-macro2/1.0.5")] -+#![doc(html_root_url = "https://docs.rs/proc-macro2/1.0.20")] - #![cfg_attr(any(proc_macro_span, super_unstable), feature(proc_macro_span))] - #![cfg_attr(super_unstable, feature(proc_macro_raw_ident, proc_macro_def_site))] -+#![allow(clippy::needless_doctest_main)] - - #[cfg(use_proc_macro)] - extern crate proc_macro; - - use std::cmp::Ordering; --use std::fmt; -+use std::fmt::{self, Debug, Display}; - use std::hash::{Hash, Hasher}; - use std::iter::FromIterator; - use std::marker; - use std::ops::RangeBounds; - #[cfg(procmacro2_semver_exempt)] - use std::path::PathBuf; - use std::rc::Rc; - use std::str::FromStr; - --#[macro_use] --mod strnom; --mod fallback; -+mod parse; -+ -+#[cfg(wrap_proc_macro)] -+mod detection; -+ -+// Public for proc_macro2::fallback::force() and unforce(), but those are quite -+// a niche use case so we omit it from rustdoc. -+#[doc(hidden)] -+pub mod fallback; - - #[cfg(not(wrap_proc_macro))] - use crate::fallback as imp; - #[path = "wrapper.rs"] - #[cfg(wrap_proc_macro)] - mod imp; - - /// An abstract stream of tokens, or more concretely a sequence of token trees. -@@ -223,32 +230,32 @@ impl FromIterator for Token - TokenStream::_new(streams.into_iter().map(|i| i.inner).collect()) - } - } - - /// Prints the token stream as a string that is supposed to be losslessly - /// convertible back into the same token stream (modulo spans), except for - /// possibly `TokenTree::Group`s with `Delimiter::None` delimiters and negative - /// numeric literals. --impl fmt::Display for TokenStream { -+impl Display for TokenStream { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Display::fmt(&self.inner, f) - } - } - - /// Prints token in a form convenient for debugging. --impl fmt::Debug for TokenStream { -+impl Debug for TokenStream { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Debug::fmt(&self.inner, f) - } - } - --impl fmt::Debug for LexError { -+impl Debug for LexError { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Debug::fmt(&self.inner, f) - } - } - - /// The source file of a given `Span`. - /// - /// This type is semver exempt and not exposed by default. - #[cfg(procmacro2_semver_exempt)] - #[derive(Clone, PartialEq, Eq)] -@@ -286,19 +293,19 @@ impl SourceFile { - /// Returns `true` if this source file is a real source file, and not - /// generated by an external macro's expansion. - pub fn is_real(&self) -> bool { - self.inner.is_real() - } - } - - #[cfg(procmacro2_semver_exempt)] --impl fmt::Debug for SourceFile { -+impl Debug for SourceFile { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Debug::fmt(&self.inner, f) - } - } - - /// A line-column pair representing the start or end of a `Span`. - /// - /// This type is semver exempt and not exposed by default. - #[cfg(span_locations)] - #[derive(Copy, Clone, Debug, PartialEq, Eq)] -@@ -306,16 +313,32 @@ pub struct LineColumn { - /// The 1-indexed line in the source file on which the span starts or ends - /// (inclusive). - pub line: usize, - /// The 0-indexed column (in UTF-8 characters) in the source file on which - /// the span starts or ends (inclusive). - pub column: usize, - } - -+#[cfg(span_locations)] -+impl Ord for LineColumn { -+ fn cmp(&self, other: &Self) -> Ordering { -+ self.line -+ .cmp(&other.line) -+ .then(self.column.cmp(&other.column)) -+ } -+} -+ -+#[cfg(span_locations)] -+impl PartialOrd for LineColumn { -+ fn partial_cmp(&self, other: &Self) -> Option { -+ Some(self.cmp(other)) -+ } -+} -+ - /// A region of source code, along with macro expansion information. - #[derive(Copy, Clone)] - pub struct Span { - inner: imp::Span, - _marker: marker::PhantomData>, - } - - impl Span { -@@ -337,38 +360,42 @@ impl Span { - /// - /// Identifiers created with this span will be resolved as if they were - /// written directly at the macro call location (call-site hygiene) and - /// other code at the macro call site will be able to refer to them as well. - pub fn call_site() -> Span { - Span::_new(imp::Span::call_site()) - } - -+ /// The span located at the invocation of the procedural macro, but with -+ /// local variables, labels, and `$crate` resolved at the definition site -+ /// of the macro. This is the same hygiene behavior as `macro_rules`. -+ /// -+ /// This function requires Rust 1.45 or later. -+ #[cfg(hygiene)] -+ pub fn mixed_site() -> Span { -+ Span::_new(imp::Span::mixed_site()) -+ } -+ - /// A span that resolves at the macro definition site. - /// - /// This method is semver exempt and not exposed by default. - #[cfg(procmacro2_semver_exempt)] - pub fn def_site() -> Span { - Span::_new(imp::Span::def_site()) - } - - /// Creates a new span with the same line/column information as `self` but - /// that resolves symbols as though it were at `other`. -- /// -- /// This method is semver exempt and not exposed by default. -- #[cfg(procmacro2_semver_exempt)] - pub fn resolved_at(&self, other: Span) -> Span { - Span::_new(self.inner.resolved_at(other.inner)) - } - - /// Creates a new span with the same name resolution behavior as `self` but - /// with the line/column information of `other`. -- /// -- /// This method is semver exempt and not exposed by default. -- #[cfg(procmacro2_semver_exempt)] - pub fn located_at(&self, other: Span) -> Span { - Span::_new(self.inner.located_at(other.inner)) - } - - /// Convert `proc_macro2::Span` to `proc_macro::Span`. - /// - /// This method is available when building with a nightly compiler, or when - /// building with rustc 1.29+ *without* semver exempt features. -@@ -434,19 +461,19 @@ impl Span { - /// This method is semver exempt and not exposed by default. - #[cfg(procmacro2_semver_exempt)] - pub fn eq(&self, other: &Span) -> bool { - self.inner.eq(&other.inner) - } - } - - /// Prints a span in a form convenient for debugging. --impl fmt::Debug for Span { -+impl Debug for Span { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Debug::fmt(&self.inner, f) - } - } - - /// A single token or a delimited sequence of token trees (e.g. `[1, (), ..]`). - #[derive(Clone)] - pub enum TokenTree { - /// A token stream surrounded by bracket delimiters. - Group(Group), -@@ -457,35 +484,35 @@ pub enum TokenTree { - /// A literal character (`'a'`), string (`"hello"`), number (`2.3`), etc. - Literal(Literal), - } - - impl TokenTree { - /// Returns the span of this tree, delegating to the `span` method of - /// the contained token or a delimited stream. - pub fn span(&self) -> Span { -- match *self { -- TokenTree::Group(ref t) => t.span(), -- TokenTree::Ident(ref t) => t.span(), -- TokenTree::Punct(ref t) => t.span(), -- TokenTree::Literal(ref t) => t.span(), -+ match self { -+ TokenTree::Group(t) => t.span(), -+ TokenTree::Ident(t) => t.span(), -+ TokenTree::Punct(t) => t.span(), -+ TokenTree::Literal(t) => t.span(), - } - } - - /// Configures the span for *only this token*. - /// - /// Note that if this token is a `Group` then this method will not configure - /// the span of each of the internal tokens, this will simply delegate to - /// the `set_span` method of each variant. - pub fn set_span(&mut self, span: Span) { -- match *self { -- TokenTree::Group(ref mut t) => t.set_span(span), -- TokenTree::Ident(ref mut t) => t.set_span(span), -- TokenTree::Punct(ref mut t) => t.set_span(span), -- TokenTree::Literal(ref mut t) => t.set_span(span), -+ match self { -+ TokenTree::Group(t) => t.set_span(span), -+ TokenTree::Ident(t) => t.set_span(span), -+ TokenTree::Punct(t) => t.set_span(span), -+ TokenTree::Literal(t) => t.set_span(span), - } - } - } - - impl From for TokenTree { - fn from(g: Group) -> TokenTree { - TokenTree::Group(g) - } -@@ -508,42 +535,42 @@ impl From for TokenTree { - TokenTree::Literal(g) - } - } - - /// Prints the token tree as a string that is supposed to be losslessly - /// convertible back into the same token tree (modulo spans), except for - /// possibly `TokenTree::Group`s with `Delimiter::None` delimiters and negative - /// numeric literals. --impl fmt::Display for TokenTree { -+impl Display for TokenTree { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- match *self { -- TokenTree::Group(ref t) => t.fmt(f), -- TokenTree::Ident(ref t) => t.fmt(f), -- TokenTree::Punct(ref t) => t.fmt(f), -- TokenTree::Literal(ref t) => t.fmt(f), -+ match self { -+ TokenTree::Group(t) => Display::fmt(t, f), -+ TokenTree::Ident(t) => Display::fmt(t, f), -+ TokenTree::Punct(t) => Display::fmt(t, f), -+ TokenTree::Literal(t) => Display::fmt(t, f), - } - } - } - - /// Prints token tree in a form convenient for debugging. --impl fmt::Debug for TokenTree { -+impl Debug for TokenTree { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - // Each of these has the name in the struct type in the derived debug, - // so don't bother with an extra layer of indirection -- match *self { -- TokenTree::Group(ref t) => t.fmt(f), -- TokenTree::Ident(ref t) => { -+ match self { -+ TokenTree::Group(t) => Debug::fmt(t, f), -+ TokenTree::Ident(t) => { - let mut debug = f.debug_struct("Ident"); - debug.field("sym", &format_args!("{}", t)); - imp::debug_span_field_if_nontrivial(&mut debug, t.span().inner); - debug.finish() - } -- TokenTree::Punct(ref t) => t.fmt(f), -- TokenTree::Literal(ref t) => t.fmt(f), -+ TokenTree::Punct(t) => Debug::fmt(t, f), -+ TokenTree::Literal(t) => Debug::fmt(t, f), - } - } - } - - /// A delimited token stream. - /// - /// A `Group` internally contains a `TokenStream` which is surrounded by - /// `Delimiter`s. -@@ -646,25 +673,25 @@ impl Group { - pub fn set_span(&mut self, span: Span) { - self.inner.set_span(span.inner) - } - } - - /// Prints the group as a string that should be losslessly convertible back - /// into the same group (modulo spans), except for possibly `TokenTree::Group`s - /// with `Delimiter::None` delimiters. --impl fmt::Display for Group { -+impl Display for Group { - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -- fmt::Display::fmt(&self.inner, formatter) -+ Display::fmt(&self.inner, formatter) - } - } - --impl fmt::Debug for Group { -+impl Debug for Group { - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -- fmt::Debug::fmt(&self.inner, formatter) -+ Debug::fmt(&self.inner, formatter) - } - } - - /// An `Punct` is an single punctuation character like `+`, `-` or `#`. - /// - /// Multicharacter operators like `+=` are represented as two instances of - /// `Punct` with different forms of `Spacing` returned. - #[derive(Clone)] -@@ -725,23 +752,23 @@ impl Punct { - /// Configure the span for this punctuation character. - pub fn set_span(&mut self, span: Span) { - self.span = span; - } - } - - /// Prints the punctuation character as a string that should be losslessly - /// convertible back into the same character. --impl fmt::Display for Punct { -+impl Display for Punct { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.op.fmt(f) -+ Display::fmt(&self.op, f) - } - } - --impl fmt::Debug for Punct { -+impl Debug for Punct { - fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { - let mut debug = fmt.debug_struct("Punct"); - debug.field("op", &self.op); - debug.field("spacing", &self.spacing); - imp::debug_span_field_if_nontrivial(&mut debug, self.span.inner); - debug.finish() - } - } -@@ -915,25 +942,25 @@ impl Ord for Ident { - impl Hash for Ident { - fn hash(&self, hasher: &mut H) { - self.to_string().hash(hasher) - } - } - - /// Prints the identifier as a string that should be losslessly convertible back - /// into the same identifier. --impl fmt::Display for Ident { -+impl Display for Ident { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Display::fmt(&self.inner, f) - } - } - --impl fmt::Debug for Ident { -+impl Debug for Ident { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Debug::fmt(&self.inner, f) - } - } - - /// A literal string (`"hello"`), byte string (`b"hello"`), character (`'a'`), - /// byte character (`b'a'`), an integer or floating point number with or without - /// a suffix (`1`, `1u8`, `2.3`, `2.3f32`). - /// - /// Boolean literals like `true` and `false` do not belong here, they are -@@ -1135,36 +1162,36 @@ impl Literal { - /// nightly compiler, this method will always return `None`. - /// - /// [`proc_macro::Literal::subspan`]: https://doc.rust-lang.org/proc_macro/struct.Literal.html#method.subspan - pub fn subspan>(&self, range: R) -> Option { - self.inner.subspan(range).map(Span::_new) - } - } - --impl fmt::Debug for Literal { -+impl Debug for Literal { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Debug::fmt(&self.inner, f) - } - } - --impl fmt::Display for Literal { -+impl Display for Literal { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Display::fmt(&self.inner, f) - } - } - - /// Public implementation details for the `TokenStream` type, such as iterators. - pub mod token_stream { -- use std::fmt; -+ use crate::{imp, TokenTree}; -+ use std::fmt::{self, Debug}; - use std::marker; - use std::rc::Rc; - - pub use crate::TokenStream; -- use crate::{imp, TokenTree}; - - /// An iterator over `TokenStream`'s `TokenTree`s. - /// - /// The iteration is "shallow", e.g. the iterator doesn't recurse into - /// delimited groups, and returns whole groups as token trees. - #[derive(Clone)] - pub struct IntoIter { - inner: imp::TokenTreeIter, -@@ -1174,19 +1201,19 @@ pub mod token_stream { - impl Iterator for IntoIter { - type Item = TokenTree; - - fn next(&mut self) -> Option { - self.inner.next() - } - } - -- impl fmt::Debug for IntoIter { -+ impl Debug for IntoIter { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Debug::fmt(&self.inner, f) - } - } - - impl IntoIterator for TokenStream { - type Item = TokenTree; - type IntoIter = IntoIter; - - fn into_iter(self) -> IntoIter { -diff --git a/third_party/rust/proc-macro2/src/parse.rs b/third_party/rust/proc-macro2/src/parse.rs -new file mode 100644 ---- /dev/null -+++ b/third_party/rust/proc-macro2/src/parse.rs -@@ -0,0 +1,791 @@ -+use crate::fallback::{ -+ is_ident_continue, is_ident_start, Group, LexError, Literal, Span, TokenStream, -+}; -+use crate::{Delimiter, Punct, Spacing, TokenTree}; -+use std::str::{Bytes, CharIndices, Chars}; -+use unicode_xid::UnicodeXID; -+ -+#[derive(Copy, Clone, Eq, PartialEq)] -+pub(crate) struct Cursor<'a> { -+ pub rest: &'a str, -+ #[cfg(span_locations)] -+ pub off: u32, -+} -+ -+impl<'a> Cursor<'a> { -+ fn advance(&self, bytes: usize) -> Cursor<'a> { -+ let (_front, rest) = self.rest.split_at(bytes); -+ Cursor { -+ rest, -+ #[cfg(span_locations)] -+ off: self.off + _front.chars().count() as u32, -+ } -+ } -+ -+ fn starts_with(&self, s: &str) -> bool { -+ self.rest.starts_with(s) -+ } -+ -+ pub(crate) fn is_empty(&self) -> bool { -+ self.rest.is_empty() -+ } -+ -+ fn len(&self) -> usize { -+ self.rest.len() -+ } -+ -+ fn as_bytes(&self) -> &'a [u8] { -+ self.rest.as_bytes() -+ } -+ -+ fn bytes(&self) -> Bytes<'a> { -+ self.rest.bytes() -+ } -+ -+ fn chars(&self) -> Chars<'a> { -+ self.rest.chars() -+ } -+ -+ fn char_indices(&self) -> CharIndices<'a> { -+ self.rest.char_indices() -+ } -+ -+ fn parse(&self, tag: &str) -> Result, LexError> { -+ if self.starts_with(tag) { -+ Ok(self.advance(tag.len())) -+ } else { -+ Err(LexError) -+ } -+ } -+} -+ -+type PResult<'a, O> = Result<(Cursor<'a>, O), LexError>; -+ -+fn skip_whitespace(input: Cursor) -> Cursor { -+ let mut s = input; -+ -+ while !s.is_empty() { -+ let byte = s.as_bytes()[0]; -+ if byte == b'/' { -+ if s.starts_with("//") -+ && (!s.starts_with("///") || s.starts_with("////")) -+ && !s.starts_with("//!") -+ { -+ let (cursor, _) = take_until_newline_or_eof(s); -+ s = cursor; -+ continue; -+ } else if s.starts_with("/**/") { -+ s = s.advance(4); -+ continue; -+ } else if s.starts_with("/*") -+ && (!s.starts_with("/**") || s.starts_with("/***")) -+ && !s.starts_with("/*!") -+ { -+ match block_comment(s) { -+ Ok((rest, _)) => { -+ s = rest; -+ continue; -+ } -+ Err(LexError) => return s, -+ } -+ } -+ } -+ match byte { -+ b' ' | 0x09..=0x0d => { -+ s = s.advance(1); -+ continue; -+ } -+ b if b <= 0x7f => {} -+ _ => { -+ let ch = s.chars().next().unwrap(); -+ if is_whitespace(ch) { -+ s = s.advance(ch.len_utf8()); -+ continue; -+ } -+ } -+ } -+ return s; -+ } -+ s -+} -+ -+fn block_comment(input: Cursor) -> PResult<&str> { -+ if !input.starts_with("/*") { -+ return Err(LexError); -+ } -+ -+ let mut depth = 0; -+ let bytes = input.as_bytes(); -+ let mut i = 0; -+ let upper = bytes.len() - 1; -+ -+ while i < upper { -+ if bytes[i] == b'/' && bytes[i + 1] == b'*' { -+ depth += 1; -+ i += 1; // eat '*' -+ } else if bytes[i] == b'*' && bytes[i + 1] == b'/' { -+ depth -= 1; -+ if depth == 0 { -+ return Ok((input.advance(i + 2), &input.rest[..i + 2])); -+ } -+ i += 1; // eat '/' -+ } -+ i += 1; -+ } -+ -+ Err(LexError) -+} -+ -+fn is_whitespace(ch: char) -> bool { -+ // Rust treats left-to-right mark and right-to-left mark as whitespace -+ ch.is_whitespace() || ch == '\u{200e}' || ch == '\u{200f}' -+} -+ -+fn word_break(input: Cursor) -> Result { -+ match input.chars().next() { -+ Some(ch) if UnicodeXID::is_xid_continue(ch) => Err(LexError), -+ Some(_) | None => Ok(input), -+ } -+} -+ -+pub(crate) fn token_stream(mut input: Cursor) -> PResult { -+ let mut trees = Vec::new(); -+ let mut stack = Vec::new(); -+ -+ loop { -+ input = skip_whitespace(input); -+ -+ if let Ok((rest, tt)) = doc_comment(input) { -+ trees.extend(tt); -+ input = rest; -+ continue; -+ } -+ -+ #[cfg(span_locations)] -+ let lo = input.off; -+ -+ let first = match input.bytes().next() { -+ Some(first) => first, -+ None => break, -+ }; -+ -+ if let Some(open_delimiter) = match first { -+ b'(' => Some(Delimiter::Parenthesis), -+ b'[' => Some(Delimiter::Bracket), -+ b'{' => Some(Delimiter::Brace), -+ _ => None, -+ } { -+ input = input.advance(1); -+ let frame = (open_delimiter, trees); -+ #[cfg(span_locations)] -+ let frame = (lo, frame); -+ stack.push(frame); -+ trees = Vec::new(); -+ } else if let Some(close_delimiter) = match first { -+ b')' => Some(Delimiter::Parenthesis), -+ b']' => Some(Delimiter::Bracket), -+ b'}' => Some(Delimiter::Brace), -+ _ => None, -+ } { -+ input = input.advance(1); -+ let frame = stack.pop().ok_or(LexError)?; -+ #[cfg(span_locations)] -+ let (lo, frame) = frame; -+ let (open_delimiter, outer) = frame; -+ if open_delimiter != close_delimiter { -+ return Err(LexError); -+ } -+ let mut g = Group::new(open_delimiter, TokenStream { inner: trees }); -+ g.set_span(Span { -+ #[cfg(span_locations)] -+ lo, -+ #[cfg(span_locations)] -+ hi: input.off, -+ }); -+ trees = outer; -+ trees.push(TokenTree::Group(crate::Group::_new_stable(g))); -+ } else { -+ let (rest, mut tt) = leaf_token(input)?; -+ tt.set_span(crate::Span::_new_stable(Span { -+ #[cfg(span_locations)] -+ lo, -+ #[cfg(span_locations)] -+ hi: rest.off, -+ })); -+ trees.push(tt); -+ input = rest; -+ } -+ } -+ -+ if stack.is_empty() { -+ Ok((input, TokenStream { inner: trees })) -+ } else { -+ Err(LexError) -+ } -+} -+ -+fn leaf_token(input: Cursor) -> PResult { -+ if let Ok((input, l)) = literal(input) { -+ // must be parsed before ident -+ Ok((input, TokenTree::Literal(crate::Literal::_new_stable(l)))) -+ } else if let Ok((input, p)) = op(input) { -+ Ok((input, TokenTree::Punct(p))) -+ } else if let Ok((input, i)) = ident(input) { -+ Ok((input, TokenTree::Ident(i))) -+ } else { -+ Err(LexError) -+ } -+} -+ -+fn ident(input: Cursor) -> PResult { -+ let raw = input.starts_with("r#"); -+ let rest = input.advance((raw as usize) << 1); -+ -+ let (rest, sym) = ident_not_raw(rest)?; -+ -+ if !raw { -+ let ident = crate::Ident::new(sym, crate::Span::call_site()); -+ return Ok((rest, ident)); -+ } -+ -+ if sym == "_" { -+ return Err(LexError); -+ } -+ -+ let ident = crate::Ident::_new_raw(sym, crate::Span::call_site()); -+ Ok((rest, ident)) -+} -+ -+fn ident_not_raw(input: Cursor) -> PResult<&str> { -+ let mut chars = input.char_indices(); -+ -+ match chars.next() { -+ Some((_, ch)) if is_ident_start(ch) => {} -+ _ => return Err(LexError), -+ } -+ -+ let mut end = input.len(); -+ for (i, ch) in chars { -+ if !is_ident_continue(ch) { -+ end = i; -+ break; -+ } -+ } -+ -+ Ok((input.advance(end), &input.rest[..end])) -+} -+ -+fn literal(input: Cursor) -> PResult { -+ match literal_nocapture(input) { -+ Ok(a) => { -+ let end = input.len() - a.len(); -+ Ok((a, Literal::_new(input.rest[..end].to_string()))) -+ } -+ Err(LexError) => Err(LexError), -+ } -+} -+ -+fn literal_nocapture(input: Cursor) -> Result { -+ if let Ok(ok) = string(input) { -+ Ok(ok) -+ } else if let Ok(ok) = byte_string(input) { -+ Ok(ok) -+ } else if let Ok(ok) = byte(input) { -+ Ok(ok) -+ } else if let Ok(ok) = character(input) { -+ Ok(ok) -+ } else if let Ok(ok) = float(input) { -+ Ok(ok) -+ } else if let Ok(ok) = int(input) { -+ Ok(ok) -+ } else { -+ Err(LexError) -+ } -+} -+ -+fn literal_suffix(input: Cursor) -> Cursor { -+ match ident_not_raw(input) { -+ Ok((input, _)) => input, -+ Err(LexError) => input, -+ } -+} -+ -+fn string(input: Cursor) -> Result { -+ if let Ok(input) = input.parse("\"") { -+ cooked_string(input) -+ } else if let Ok(input) = input.parse("r") { -+ raw_string(input) -+ } else { -+ Err(LexError) -+ } -+} -+ -+fn cooked_string(input: Cursor) -> Result { -+ let mut chars = input.char_indices().peekable(); -+ -+ while let Some((i, ch)) = chars.next() { -+ match ch { -+ '"' => { -+ let input = input.advance(i + 1); -+ return Ok(literal_suffix(input)); -+ } -+ '\r' => { -+ if let Some((_, '\n')) = chars.next() { -+ // ... -+ } else { -+ break; -+ } -+ } -+ '\\' => match chars.next() { -+ Some((_, 'x')) => { -+ if !backslash_x_char(&mut chars) { -+ break; -+ } -+ } -+ Some((_, 'n')) | Some((_, 'r')) | Some((_, 't')) | Some((_, '\\')) -+ | Some((_, '\'')) | Some((_, '"')) | Some((_, '0')) => {} -+ Some((_, 'u')) => { -+ if !backslash_u(&mut chars) { -+ break; -+ } -+ } -+ Some((_, '\n')) | Some((_, '\r')) => { -+ while let Some(&(_, ch)) = chars.peek() { -+ if ch.is_whitespace() { -+ chars.next(); -+ } else { -+ break; -+ } -+ } -+ } -+ _ => break, -+ }, -+ _ch => {} -+ } -+ } -+ Err(LexError) -+} -+ -+fn byte_string(input: Cursor) -> Result { -+ if let Ok(input) = input.parse("b\"") { -+ cooked_byte_string(input) -+ } else if let Ok(input) = input.parse("br") { -+ raw_string(input) -+ } else { -+ Err(LexError) -+ } -+} -+ -+fn cooked_byte_string(mut input: Cursor) -> Result { -+ let mut bytes = input.bytes().enumerate(); -+ 'outer: while let Some((offset, b)) = bytes.next() { -+ match b { -+ b'"' => { -+ let input = input.advance(offset + 1); -+ return Ok(literal_suffix(input)); -+ } -+ b'\r' => { -+ if let Some((_, b'\n')) = bytes.next() { -+ // ... -+ } else { -+ break; -+ } -+ } -+ b'\\' => match bytes.next() { -+ Some((_, b'x')) => { -+ if !backslash_x_byte(&mut bytes) { -+ break; -+ } -+ } -+ Some((_, b'n')) | Some((_, b'r')) | Some((_, b't')) | Some((_, b'\\')) -+ | Some((_, b'0')) | Some((_, b'\'')) | Some((_, b'"')) => {} -+ Some((newline, b'\n')) | Some((newline, b'\r')) => { -+ let rest = input.advance(newline + 1); -+ for (offset, ch) in rest.char_indices() { -+ if !ch.is_whitespace() { -+ input = rest.advance(offset); -+ bytes = input.bytes().enumerate(); -+ continue 'outer; -+ } -+ } -+ break; -+ } -+ _ => break, -+ }, -+ b if b < 0x80 => {} -+ _ => break, -+ } -+ } -+ Err(LexError) -+} -+ -+fn raw_string(input: Cursor) -> Result { -+ let mut chars = input.char_indices(); -+ let mut n = 0; -+ while let Some((i, ch)) = chars.next() { -+ match ch { -+ '"' => { -+ n = i; -+ break; -+ } -+ '#' => {} -+ _ => return Err(LexError), -+ } -+ } -+ for (i, ch) in chars { -+ match ch { -+ '"' if input.rest[i + 1..].starts_with(&input.rest[..n]) => { -+ let rest = input.advance(i + 1 + n); -+ return Ok(literal_suffix(rest)); -+ } -+ '\r' => {} -+ _ => {} -+ } -+ } -+ Err(LexError) -+} -+ -+fn byte(input: Cursor) -> Result { -+ let input = input.parse("b'")?; -+ let mut bytes = input.bytes().enumerate(); -+ let ok = match bytes.next().map(|(_, b)| b) { -+ Some(b'\\') => match bytes.next().map(|(_, b)| b) { -+ Some(b'x') => backslash_x_byte(&mut bytes), -+ Some(b'n') | Some(b'r') | Some(b't') | Some(b'\\') | Some(b'0') | Some(b'\'') -+ | Some(b'"') => true, -+ _ => false, -+ }, -+ b => b.is_some(), -+ }; -+ if !ok { -+ return Err(LexError); -+ } -+ let (offset, _) = bytes.next().ok_or(LexError)?; -+ if !input.chars().as_str().is_char_boundary(offset) { -+ return Err(LexError); -+ } -+ let input = input.advance(offset).parse("'")?; -+ Ok(literal_suffix(input)) -+} -+ -+fn character(input: Cursor) -> Result { -+ let input = input.parse("'")?; -+ let mut chars = input.char_indices(); -+ let ok = match chars.next().map(|(_, ch)| ch) { -+ Some('\\') => match chars.next().map(|(_, ch)| ch) { -+ Some('x') => backslash_x_char(&mut chars), -+ Some('u') => backslash_u(&mut chars), -+ Some('n') | Some('r') | Some('t') | Some('\\') | Some('0') | Some('\'') | Some('"') => { -+ true -+ } -+ _ => false, -+ }, -+ ch => ch.is_some(), -+ }; -+ if !ok { -+ return Err(LexError); -+ } -+ let (idx, _) = chars.next().ok_or(LexError)?; -+ let input = input.advance(idx).parse("'")?; -+ Ok(literal_suffix(input)) -+} -+ -+macro_rules! next_ch { -+ ($chars:ident @ $pat:pat $(| $rest:pat)*) => { -+ match $chars.next() { -+ Some((_, ch)) => match ch { -+ $pat $(| $rest)* => ch, -+ _ => return false, -+ }, -+ None => return false, -+ } -+ }; -+} -+ -+fn backslash_x_char(chars: &mut I) -> bool -+where -+ I: Iterator, -+{ -+ next_ch!(chars @ '0'..='7'); -+ next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F'); -+ true -+} -+ -+fn backslash_x_byte(chars: &mut I) -> bool -+where -+ I: Iterator, -+{ -+ next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F'); -+ next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F'); -+ true -+} -+ -+fn backslash_u(chars: &mut I) -> bool -+where -+ I: Iterator, -+{ -+ next_ch!(chars @ '{'); -+ next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F'); -+ loop { -+ let c = next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F' | '_' | '}'); -+ if c == '}' { -+ return true; -+ } -+ } -+} -+ -+fn float(input: Cursor) -> Result { -+ let mut rest = float_digits(input)?; -+ if let Some(ch) = rest.chars().next() { -+ if is_ident_start(ch) { -+ rest = ident_not_raw(rest)?.0; -+ } -+ } -+ word_break(rest) -+} -+ -+fn float_digits(input: Cursor) -> Result { -+ let mut chars = input.chars().peekable(); -+ match chars.next() { -+ Some(ch) if ch >= '0' && ch <= '9' => {} -+ _ => return Err(LexError), -+ } -+ -+ let mut len = 1; -+ let mut has_dot = false; -+ let mut has_exp = false; -+ while let Some(&ch) = chars.peek() { -+ match ch { -+ '0'..='9' | '_' => { -+ chars.next(); -+ len += 1; -+ } -+ '.' => { -+ if has_dot { -+ break; -+ } -+ chars.next(); -+ if chars -+ .peek() -+ .map(|&ch| ch == '.' || is_ident_start(ch)) -+ .unwrap_or(false) -+ { -+ return Err(LexError); -+ } -+ len += 1; -+ has_dot = true; -+ } -+ 'e' | 'E' => { -+ chars.next(); -+ len += 1; -+ has_exp = true; -+ break; -+ } -+ _ => break, -+ } -+ } -+ -+ let rest = input.advance(len); -+ if !(has_dot || has_exp || rest.starts_with("f32") || rest.starts_with("f64")) { -+ return Err(LexError); -+ } -+ -+ if has_exp { -+ let mut has_exp_value = false; -+ while let Some(&ch) = chars.peek() { -+ match ch { -+ '+' | '-' => { -+ if has_exp_value { -+ break; -+ } -+ chars.next(); -+ len += 1; -+ } -+ '0'..='9' => { -+ chars.next(); -+ len += 1; -+ has_exp_value = true; -+ } -+ '_' => { -+ chars.next(); -+ len += 1; -+ } -+ _ => break, -+ } -+ } -+ if !has_exp_value { -+ return Err(LexError); -+ } -+ } -+ -+ Ok(input.advance(len)) -+} -+ -+fn int(input: Cursor) -> Result { -+ let mut rest = digits(input)?; -+ if let Some(ch) = rest.chars().next() { -+ if is_ident_start(ch) { -+ rest = ident_not_raw(rest)?.0; -+ } -+ } -+ word_break(rest) -+} -+ -+fn digits(mut input: Cursor) -> Result { -+ let base = if input.starts_with("0x") { -+ input = input.advance(2); -+ 16 -+ } else if input.starts_with("0o") { -+ input = input.advance(2); -+ 8 -+ } else if input.starts_with("0b") { -+ input = input.advance(2); -+ 2 -+ } else { -+ 10 -+ }; -+ -+ let mut len = 0; -+ let mut empty = true; -+ for b in input.bytes() { -+ let digit = match b { -+ b'0'..=b'9' => (b - b'0') as u64, -+ b'a'..=b'f' => 10 + (b - b'a') as u64, -+ b'A'..=b'F' => 10 + (b - b'A') as u64, -+ b'_' => { -+ if empty && base == 10 { -+ return Err(LexError); -+ } -+ len += 1; -+ continue; -+ } -+ _ => break, -+ }; -+ if digit >= base { -+ return Err(LexError); -+ } -+ len += 1; -+ empty = false; -+ } -+ if empty { -+ Err(LexError) -+ } else { -+ Ok(input.advance(len)) -+ } -+} -+ -+fn op(input: Cursor) -> PResult { -+ match op_char(input) { -+ Ok((rest, '\'')) => { -+ ident(rest)?; -+ Ok((rest, Punct::new('\'', Spacing::Joint))) -+ } -+ Ok((rest, ch)) => { -+ let kind = match op_char(rest) { -+ Ok(_) => Spacing::Joint, -+ Err(LexError) => Spacing::Alone, -+ }; -+ Ok((rest, Punct::new(ch, kind))) -+ } -+ Err(LexError) => Err(LexError), -+ } -+} -+ -+fn op_char(input: Cursor) -> PResult { -+ if input.starts_with("//") || input.starts_with("/*") { -+ // Do not accept `/` of a comment as an op. -+ return Err(LexError); -+ } -+ -+ let mut chars = input.chars(); -+ let first = match chars.next() { -+ Some(ch) => ch, -+ None => { -+ return Err(LexError); -+ } -+ }; -+ let recognized = "~!@#$%^&*-=+|;:,<.>/?'"; -+ if recognized.contains(first) { -+ Ok((input.advance(first.len_utf8()), first)) -+ } else { -+ Err(LexError) -+ } -+} -+ -+fn doc_comment(input: Cursor) -> PResult> { -+ #[cfg(span_locations)] -+ let lo = input.off; -+ let (rest, (comment, inner)) = doc_comment_contents(input)?; -+ let span = crate::Span::_new_stable(Span { -+ #[cfg(span_locations)] -+ lo, -+ #[cfg(span_locations)] -+ hi: rest.off, -+ }); -+ -+ let mut scan_for_bare_cr = comment; -+ while let Some(cr) = scan_for_bare_cr.find('\r') { -+ let rest = &scan_for_bare_cr[cr + 1..]; -+ if !rest.starts_with('\n') { -+ return Err(LexError); -+ } -+ scan_for_bare_cr = rest; -+ } -+ -+ let mut trees = Vec::new(); -+ trees.push(TokenTree::Punct(Punct::new('#', Spacing::Alone))); -+ if inner { -+ trees.push(Punct::new('!', Spacing::Alone).into()); -+ } -+ let mut stream = vec![ -+ TokenTree::Ident(crate::Ident::new("doc", span)), -+ TokenTree::Punct(Punct::new('=', Spacing::Alone)), -+ TokenTree::Literal(crate::Literal::string(comment)), -+ ]; -+ for tt in stream.iter_mut() { -+ tt.set_span(span); -+ } -+ let group = Group::new(Delimiter::Bracket, stream.into_iter().collect()); -+ trees.push(crate::Group::_new_stable(group).into()); -+ for tt in trees.iter_mut() { -+ tt.set_span(span); -+ } -+ Ok((rest, trees)) -+} -+ -+fn doc_comment_contents(input: Cursor) -> PResult<(&str, bool)> { -+ if input.starts_with("//!") { -+ let input = input.advance(3); -+ let (input, s) = take_until_newline_or_eof(input); -+ Ok((input, (s, true))) -+ } else if input.starts_with("/*!") { -+ let (input, s) = block_comment(input)?; -+ Ok((input, (&s[3..s.len() - 2], true))) -+ } else if input.starts_with("///") { -+ let input = input.advance(3); -+ if input.starts_with("/") { -+ return Err(LexError); -+ } -+ let (input, s) = take_until_newline_or_eof(input); -+ Ok((input, (s, false))) -+ } else if input.starts_with("/**") && !input.rest[3..].starts_with('*') { -+ let (input, s) = block_comment(input)?; -+ Ok((input, (&s[3..s.len() - 2], false))) -+ } else { -+ Err(LexError) -+ } -+} -+ -+fn take_until_newline_or_eof(input: Cursor) -> (Cursor, &str) { -+ let chars = input.char_indices(); -+ -+ for (i, ch) in chars { -+ if ch == '\n' { -+ return (input.advance(i), &input.rest[..i]); -+ } else if ch == '\r' && input.rest[i + 1..].starts_with('\n') { -+ return (input.advance(i + 1), &input.rest[..i]); -+ } -+ } -+ -+ (input.advance(input.len()), input.rest) -+} -diff --git a/third_party/rust/proc-macro2/src/strnom.rs b/third_party/rust/proc-macro2/src/strnom.rs -deleted file mode 100644 ---- a/third_party/rust/proc-macro2/src/strnom.rs -+++ /dev/null -@@ -1,391 +0,0 @@ --//! Adapted from [`nom`](https://github.com/Geal/nom). -- --use crate::fallback::LexError; --use std::str::{Bytes, CharIndices, Chars}; --use unicode_xid::UnicodeXID; -- --#[derive(Copy, Clone, Eq, PartialEq)] --pub struct Cursor<'a> { -- pub rest: &'a str, -- #[cfg(span_locations)] -- pub off: u32, --} -- --impl<'a> Cursor<'a> { -- #[cfg(not(span_locations))] -- pub fn advance(&self, amt: usize) -> Cursor<'a> { -- Cursor { -- rest: &self.rest[amt..], -- } -- } -- #[cfg(span_locations)] -- pub fn advance(&self, amt: usize) -> Cursor<'a> { -- Cursor { -- rest: &self.rest[amt..], -- off: self.off + (amt as u32), -- } -- } -- -- pub fn find(&self, p: char) -> Option { -- self.rest.find(p) -- } -- -- pub fn starts_with(&self, s: &str) -> bool { -- self.rest.starts_with(s) -- } -- -- pub fn is_empty(&self) -> bool { -- self.rest.is_empty() -- } -- -- pub fn len(&self) -> usize { -- self.rest.len() -- } -- -- pub fn as_bytes(&self) -> &'a [u8] { -- self.rest.as_bytes() -- } -- -- pub fn bytes(&self) -> Bytes<'a> { -- self.rest.bytes() -- } -- -- pub fn chars(&self) -> Chars<'a> { -- self.rest.chars() -- } -- -- pub fn char_indices(&self) -> CharIndices<'a> { -- self.rest.char_indices() -- } --} -- --pub type PResult<'a, O> = Result<(Cursor<'a>, O), LexError>; -- --pub fn whitespace(input: Cursor) -> PResult<()> { -- if input.is_empty() { -- return Err(LexError); -- } -- -- let bytes = input.as_bytes(); -- let mut i = 0; -- while i < bytes.len() { -- let s = input.advance(i); -- if bytes[i] == b'/' { -- if s.starts_with("//") -- && (!s.starts_with("///") || s.starts_with("////")) -- && !s.starts_with("//!") -- { -- if let Some(len) = s.find('\n') { -- i += len + 1; -- continue; -- } -- break; -- } else if s.starts_with("/**/") { -- i += 4; -- continue; -- } else if s.starts_with("/*") -- && (!s.starts_with("/**") || s.starts_with("/***")) -- && !s.starts_with("/*!") -- { -- let (_, com) = block_comment(s)?; -- i += com.len(); -- continue; -- } -- } -- match bytes[i] { -- b' ' | 0x09..=0x0d => { -- i += 1; -- continue; -- } -- b if b <= 0x7f => {} -- _ => { -- let ch = s.chars().next().unwrap(); -- if is_whitespace(ch) { -- i += ch.len_utf8(); -- continue; -- } -- } -- } -- return if i > 0 { Ok((s, ())) } else { Err(LexError) }; -- } -- Ok((input.advance(input.len()), ())) --} -- --pub fn block_comment(input: Cursor) -> PResult<&str> { -- if !input.starts_with("/*") { -- return Err(LexError); -- } -- -- let mut depth = 0; -- let bytes = input.as_bytes(); -- let mut i = 0; -- let upper = bytes.len() - 1; -- while i < upper { -- if bytes[i] == b'/' && bytes[i + 1] == b'*' { -- depth += 1; -- i += 1; // eat '*' -- } else if bytes[i] == b'*' && bytes[i + 1] == b'/' { -- depth -= 1; -- if depth == 0 { -- return Ok((input.advance(i + 2), &input.rest[..i + 2])); -- } -- i += 1; // eat '/' -- } -- i += 1; -- } -- Err(LexError) --} -- --pub fn skip_whitespace(input: Cursor) -> Cursor { -- match whitespace(input) { -- Ok((rest, _)) => rest, -- Err(LexError) => input, -- } --} -- --fn is_whitespace(ch: char) -> bool { -- // Rust treats left-to-right mark and right-to-left mark as whitespace -- ch.is_whitespace() || ch == '\u{200e}' || ch == '\u{200f}' --} -- --pub fn word_break(input: Cursor) -> PResult<()> { -- match input.chars().next() { -- Some(ch) if UnicodeXID::is_xid_continue(ch) => Err(LexError), -- Some(_) | None => Ok((input, ())), -- } --} -- --macro_rules! named { -- ($name:ident -> $o:ty, $submac:ident!( $($args:tt)* )) => { -- fn $name<'a>(i: Cursor<'a>) -> $crate::strnom::PResult<'a, $o> { -- $submac!(i, $($args)*) -- } -- }; --} -- --macro_rules! alt { -- ($i:expr, $e:ident | $($rest:tt)*) => { -- alt!($i, call!($e) | $($rest)*) -- }; -- -- ($i:expr, $subrule:ident!( $($args:tt)*) | $($rest:tt)*) => { -- match $subrule!($i, $($args)*) { -- res @ Ok(_) => res, -- _ => alt!($i, $($rest)*) -- } -- }; -- -- ($i:expr, $subrule:ident!( $($args:tt)* ) => { $gen:expr } | $($rest:tt)+) => { -- match $subrule!($i, $($args)*) { -- Ok((i, o)) => Ok((i, $gen(o))), -- Err(LexError) => alt!($i, $($rest)*) -- } -- }; -- -- ($i:expr, $e:ident => { $gen:expr } | $($rest:tt)*) => { -- alt!($i, call!($e) => { $gen } | $($rest)*) -- }; -- -- ($i:expr, $e:ident => { $gen:expr }) => { -- alt!($i, call!($e) => { $gen }) -- }; -- -- ($i:expr, $subrule:ident!( $($args:tt)* ) => { $gen:expr }) => { -- match $subrule!($i, $($args)*) { -- Ok((i, o)) => Ok((i, $gen(o))), -- Err(LexError) => Err(LexError), -- } -- }; -- -- ($i:expr, $e:ident) => { -- alt!($i, call!($e)) -- }; -- -- ($i:expr, $subrule:ident!( $($args:tt)*)) => { -- $subrule!($i, $($args)*) -- }; --} -- --macro_rules! do_parse { -- ($i:expr, ( $($rest:expr),* )) => { -- Ok(($i, ( $($rest),* ))) -- }; -- -- ($i:expr, $e:ident >> $($rest:tt)*) => { -- do_parse!($i, call!($e) >> $($rest)*) -- }; -- -- ($i:expr, $submac:ident!( $($args:tt)* ) >> $($rest:tt)*) => { -- match $submac!($i, $($args)*) { -- Err(LexError) => Err(LexError), -- Ok((i, _)) => do_parse!(i, $($rest)*), -- } -- }; -- -- ($i:expr, $field:ident : $e:ident >> $($rest:tt)*) => { -- do_parse!($i, $field: call!($e) >> $($rest)*) -- }; -- -- ($i:expr, $field:ident : $submac:ident!( $($args:tt)* ) >> $($rest:tt)*) => { -- match $submac!($i, $($args)*) { -- Err(LexError) => Err(LexError), -- Ok((i, o)) => { -- let $field = o; -- do_parse!(i, $($rest)*) -- }, -- } -- }; --} -- --macro_rules! peek { -- ($i:expr, $submac:ident!( $($args:tt)* )) => { -- match $submac!($i, $($args)*) { -- Ok((_, o)) => Ok(($i, o)), -- Err(LexError) => Err(LexError), -- } -- }; --} -- --macro_rules! call { -- ($i:expr, $fun:expr $(, $args:expr)*) => { -- $fun($i $(, $args)*) -- }; --} -- --macro_rules! option { -- ($i:expr, $f:expr) => { -- match $f($i) { -- Ok((i, o)) => Ok((i, Some(o))), -- Err(LexError) => Ok(($i, None)), -- } -- }; --} -- --macro_rules! take_until_newline_or_eof { -- ($i:expr,) => {{ -- if $i.len() == 0 { -- Ok(($i, "")) -- } else { -- match $i.find('\n') { -- Some(i) => Ok(($i.advance(i), &$i.rest[..i])), -- None => Ok(($i.advance($i.len()), &$i.rest[..$i.len()])), -- } -- } -- }}; --} -- --macro_rules! tuple { -- ($i:expr, $($rest:tt)*) => { -- tuple_parser!($i, (), $($rest)*) -- }; --} -- --/// Do not use directly. Use `tuple!`. --macro_rules! tuple_parser { -- ($i:expr, ($($parsed:tt),*), $e:ident, $($rest:tt)*) => { -- tuple_parser!($i, ($($parsed),*), call!($e), $($rest)*) -- }; -- -- ($i:expr, (), $submac:ident!( $($args:tt)* ), $($rest:tt)*) => { -- match $submac!($i, $($args)*) { -- Err(LexError) => Err(LexError), -- Ok((i, o)) => tuple_parser!(i, (o), $($rest)*), -- } -- }; -- -- ($i:expr, ($($parsed:tt)*), $submac:ident!( $($args:tt)* ), $($rest:tt)*) => { -- match $submac!($i, $($args)*) { -- Err(LexError) => Err(LexError), -- Ok((i, o)) => tuple_parser!(i, ($($parsed)* , o), $($rest)*), -- } -- }; -- -- ($i:expr, ($($parsed:tt),*), $e:ident) => { -- tuple_parser!($i, ($($parsed),*), call!($e)) -- }; -- -- ($i:expr, (), $submac:ident!( $($args:tt)* )) => { -- $submac!($i, $($args)*) -- }; -- -- ($i:expr, ($($parsed:expr),*), $submac:ident!( $($args:tt)* )) => { -- match $submac!($i, $($args)*) { -- Err(LexError) => Err(LexError), -- Ok((i, o)) => Ok((i, ($($parsed),*, o))) -- } -- }; -- -- ($i:expr, ($($parsed:expr),*)) => { -- Ok(($i, ($($parsed),*))) -- }; --} -- --macro_rules! not { -- ($i:expr, $submac:ident!( $($args:tt)* )) => { -- match $submac!($i, $($args)*) { -- Ok((_, _)) => Err(LexError), -- Err(LexError) => Ok(($i, ())), -- } -- }; --} -- --macro_rules! tag { -- ($i:expr, $tag:expr) => { -- if $i.starts_with($tag) { -- Ok(($i.advance($tag.len()), &$i.rest[..$tag.len()])) -- } else { -- Err(LexError) -- } -- }; --} -- --macro_rules! punct { -- ($i:expr, $punct:expr) => { -- $crate::strnom::punct($i, $punct) -- }; --} -- --/// Do not use directly. Use `punct!`. --pub fn punct<'a>(input: Cursor<'a>, token: &'static str) -> PResult<'a, &'a str> { -- let input = skip_whitespace(input); -- if input.starts_with(token) { -- Ok((input.advance(token.len()), token)) -- } else { -- Err(LexError) -- } --} -- --macro_rules! preceded { -- ($i:expr, $submac:ident!( $($args:tt)* ), $submac2:ident!( $($args2:tt)* )) => { -- match tuple!($i, $submac!($($args)*), $submac2!($($args2)*)) { -- Ok((remaining, (_, o))) => Ok((remaining, o)), -- Err(LexError) => Err(LexError), -- } -- }; -- -- ($i:expr, $submac:ident!( $($args:tt)* ), $g:expr) => { -- preceded!($i, $submac!($($args)*), call!($g)) -- }; --} -- --macro_rules! delimited { -- ($i:expr, $submac:ident!( $($args:tt)* ), $($rest:tt)+) => { -- match tuple_parser!($i, (), $submac!($($args)*), $($rest)*) { -- Err(LexError) => Err(LexError), -- Ok((i1, (_, o, _))) => Ok((i1, o)) -- } -- }; --} -- --macro_rules! map { -- ($i:expr, $submac:ident!( $($args:tt)* ), $g:expr) => { -- match $submac!($i, $($args)*) { -- Err(LexError) => Err(LexError), -- Ok((i, o)) => Ok((i, call!(o, $g))) -- } -- }; -- -- ($i:expr, $f:expr, $g:expr) => { -- map!($i, call!($f), $g) -- }; --} -diff --git a/third_party/rust/proc-macro2/src/wrapper.rs b/third_party/rust/proc-macro2/src/wrapper.rs ---- a/third_party/rust/proc-macro2/src/wrapper.rs -+++ b/third_party/rust/proc-macro2/src/wrapper.rs -@@ -1,96 +1,39 @@ --use std::fmt; --use std::iter; -+use crate::detection::inside_proc_macro; -+use crate::{fallback, Delimiter, Punct, Spacing, TokenTree}; -+use std::fmt::{self, Debug, Display}; -+use std::iter::FromIterator; - use std::ops::RangeBounds; --use std::panic::{self, PanicInfo}; -+use std::panic; - #[cfg(super_unstable)] - use std::path::PathBuf; - use std::str::FromStr; - --use crate::{fallback, Delimiter, Punct, Spacing, TokenTree}; -- - #[derive(Clone)] --pub enum TokenStream { -+pub(crate) enum TokenStream { - Compiler(DeferredTokenStream), - Fallback(fallback::TokenStream), - } - - // Work around https://github.com/rust-lang/rust/issues/65080. - // In `impl Extend for TokenStream` which is used heavily by quote, - // we hold on to the appended tokens and do proc_macro::TokenStream::extend as - // late as possible to batch together consecutive uses of the Extend impl. - #[derive(Clone)] --pub struct DeferredTokenStream { -+pub(crate) struct DeferredTokenStream { - stream: proc_macro::TokenStream, - extra: Vec, - } - --pub enum LexError { -+pub(crate) enum LexError { - Compiler(proc_macro::LexError), - Fallback(fallback::LexError), - } - --fn nightly_works() -> bool { -- use std::sync::atomic::*; -- use std::sync::Once; -- -- static WORKS: AtomicUsize = AtomicUsize::new(0); -- static INIT: Once = Once::new(); -- -- match WORKS.load(Ordering::SeqCst) { -- 1 => return false, -- 2 => return true, -- _ => {} -- } -- -- // Swap in a null panic hook to avoid printing "thread panicked" to stderr, -- // then use catch_unwind to determine whether the compiler's proc_macro is -- // working. When proc-macro2 is used from outside of a procedural macro all -- // of the proc_macro crate's APIs currently panic. -- // -- // The Once is to prevent the possibility of this ordering: -- // -- // thread 1 calls take_hook, gets the user's original hook -- // thread 1 calls set_hook with the null hook -- // thread 2 calls take_hook, thinks null hook is the original hook -- // thread 2 calls set_hook with the null hook -- // thread 1 calls set_hook with the actual original hook -- // thread 2 calls set_hook with what it thinks is the original hook -- // -- // in which the user's hook has been lost. -- // -- // There is still a race condition where a panic in a different thread can -- // happen during the interval that the user's original panic hook is -- // unregistered such that their hook is incorrectly not called. This is -- // sufficiently unlikely and less bad than printing panic messages to stderr -- // on correct use of this crate. Maybe there is a libstd feature request -- // here. For now, if a user needs to guarantee that this failure mode does -- // not occur, they need to call e.g. `proc_macro2::Span::call_site()` from -- // the main thread before launching any other threads. -- INIT.call_once(|| { -- type PanicHook = dyn Fn(&PanicInfo) + Sync + Send + 'static; -- -- let null_hook: Box = Box::new(|_panic_info| { /* ignore */ }); -- let sanity_check = &*null_hook as *const PanicHook; -- let original_hook = panic::take_hook(); -- panic::set_hook(null_hook); -- -- let works = panic::catch_unwind(|| proc_macro::Span::call_site()).is_ok(); -- WORKS.store(works as usize + 1, Ordering::SeqCst); -- -- let hopefully_null_hook = panic::take_hook(); -- panic::set_hook(original_hook); -- if sanity_check != &*hopefully_null_hook { -- panic!("observed race condition in proc_macro2::nightly_works"); -- } -- }); -- nightly_works() --} -- - fn mismatch() -> ! { - panic!("stable/nightly mismatch") - } - - impl DeferredTokenStream { - fn new(stream: proc_macro::TokenStream) -> Self { - DeferredTokenStream { - stream, -@@ -98,28 +41,33 @@ impl DeferredTokenStream { - } - } - - fn is_empty(&self) -> bool { - self.stream.is_empty() && self.extra.is_empty() - } - - fn evaluate_now(&mut self) { -- self.stream.extend(self.extra.drain(..)); -+ // If-check provides a fast short circuit for the common case of `extra` -+ // being empty, which saves a round trip over the proc macro bridge. -+ // Improves macro expansion time in winrt by 6% in debug mode. -+ if !self.extra.is_empty() { -+ self.stream.extend(self.extra.drain(..)); -+ } - } - - fn into_token_stream(mut self) -> proc_macro::TokenStream { - self.evaluate_now(); - self.stream - } - } - - impl TokenStream { - pub fn new() -> TokenStream { -- if nightly_works() { -+ if inside_proc_macro() { - TokenStream::Compiler(DeferredTokenStream::new(proc_macro::TokenStream::new())) - } else { - TokenStream::Fallback(fallback::TokenStream::new()) - } - } - - pub fn is_empty(&self) -> bool { - match self { -@@ -142,31 +90,37 @@ impl TokenStream { - } - } - } - - impl FromStr for TokenStream { - type Err = LexError; - - fn from_str(src: &str) -> Result { -- if nightly_works() { -+ if inside_proc_macro() { - Ok(TokenStream::Compiler(DeferredTokenStream::new( -- src.parse()?, -+ proc_macro_parse(src)?, - ))) - } else { - Ok(TokenStream::Fallback(src.parse()?)) - } - } - } - --impl fmt::Display for TokenStream { -+// Work around https://github.com/rust-lang/rust/issues/58736. -+fn proc_macro_parse(src: &str) -> Result { -+ panic::catch_unwind(|| src.parse().map_err(LexError::Compiler)) -+ .unwrap_or(Err(LexError::Fallback(fallback::LexError))) -+} -+ -+impl Display for TokenStream { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- TokenStream::Compiler(tts) => tts.clone().into_token_stream().fmt(f), -- TokenStream::Fallback(tts) => tts.fmt(f), -+ TokenStream::Compiler(tts) => Display::fmt(&tts.clone().into_token_stream(), f), -+ TokenStream::Fallback(tts) => Display::fmt(tts, f), - } - } - } - - impl From for TokenStream { - fn from(inner: proc_macro::TokenStream) -> TokenStream { - TokenStream::Compiler(DeferredTokenStream::new(inner)) - } -@@ -182,17 +136,17 @@ impl From for proc_macro::T - } - - impl From for TokenStream { - fn from(inner: fallback::TokenStream) -> TokenStream { - TokenStream::Fallback(inner) - } - } - --// Assumes nightly_works(). -+// Assumes inside_proc_macro(). - fn into_compiler_token(token: TokenTree) -> proc_macro::TokenTree { - match token { - TokenTree::Group(tt) => tt.inner.unwrap_nightly().into(), - TokenTree::Punct(tt) => { - let spacing = match tt.spacing() { - Spacing::Joint => proc_macro::Spacing::Joint, - Spacing::Alone => proc_macro::Spacing::Alone, - }; -@@ -202,37 +156,37 @@ fn into_compiler_token(token: TokenTree) - } - TokenTree::Ident(tt) => tt.inner.unwrap_nightly().into(), - TokenTree::Literal(tt) => tt.inner.unwrap_nightly().into(), - } - } - - impl From for TokenStream { - fn from(token: TokenTree) -> TokenStream { -- if nightly_works() { -+ if inside_proc_macro() { - TokenStream::Compiler(DeferredTokenStream::new(into_compiler_token(token).into())) - } else { - TokenStream::Fallback(token.into()) - } - } - } - --impl iter::FromIterator for TokenStream { -+impl FromIterator for TokenStream { - fn from_iter>(trees: I) -> Self { -- if nightly_works() { -+ if inside_proc_macro() { - TokenStream::Compiler(DeferredTokenStream::new( - trees.into_iter().map(into_compiler_token).collect(), - )) - } else { - TokenStream::Fallback(trees.into_iter().collect()) - } - } - } - --impl iter::FromIterator for TokenStream { -+impl FromIterator for TokenStream { - fn from_iter>(streams: I) -> Self { - let mut streams = streams.into_iter(); - match streams.next() { - Some(TokenStream::Compiler(mut first)) => { - first.evaluate_now(); - first.stream.extend(streams.map(|s| match s { - TokenStream::Compiler(s) => s.into_token_stream(), - TokenStream::Fallback(_) => mismatch(), -@@ -247,75 +201,76 @@ impl iter::FromIterator for - TokenStream::Fallback(first) - } - None => TokenStream::new(), - } - } - } - - impl Extend for TokenStream { -- fn extend>(&mut self, streams: I) { -+ fn extend>(&mut self, stream: I) { - match self { - TokenStream::Compiler(tts) => { - // Here is the reason for DeferredTokenStream. -- tts.extra -- .extend(streams.into_iter().map(into_compiler_token)); -+ for token in stream { -+ tts.extra.push(into_compiler_token(token)); -+ } - } -- TokenStream::Fallback(tts) => tts.extend(streams), -+ TokenStream::Fallback(tts) => tts.extend(stream), - } - } - } - - impl Extend for TokenStream { - fn extend>(&mut self, streams: I) { - match self { - TokenStream::Compiler(tts) => { - tts.evaluate_now(); - tts.stream -- .extend(streams.into_iter().map(|stream| stream.unwrap_nightly())); -+ .extend(streams.into_iter().map(TokenStream::unwrap_nightly)); - } - TokenStream::Fallback(tts) => { -- tts.extend(streams.into_iter().map(|stream| stream.unwrap_stable())); -+ tts.extend(streams.into_iter().map(TokenStream::unwrap_stable)); - } - } - } - } - --impl fmt::Debug for TokenStream { -+impl Debug for TokenStream { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- TokenStream::Compiler(tts) => tts.clone().into_token_stream().fmt(f), -- TokenStream::Fallback(tts) => tts.fmt(f), -+ TokenStream::Compiler(tts) => Debug::fmt(&tts.clone().into_token_stream(), f), -+ TokenStream::Fallback(tts) => Debug::fmt(tts, f), - } - } - } - - impl From for LexError { - fn from(e: proc_macro::LexError) -> LexError { - LexError::Compiler(e) - } - } - - impl From for LexError { - fn from(e: fallback::LexError) -> LexError { - LexError::Fallback(e) - } - } - --impl fmt::Debug for LexError { -+impl Debug for LexError { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- LexError::Compiler(e) => e.fmt(f), -- LexError::Fallback(e) => e.fmt(f), -+ LexError::Compiler(e) => Debug::fmt(e, f), -+ LexError::Fallback(e) => Debug::fmt(e, f), - } - } - } - - #[derive(Clone)] --pub enum TokenTreeIter { -+pub(crate) enum TokenTreeIter { - Compiler(proc_macro::token_stream::IntoIter), - Fallback(fallback::TokenTreeIter), - } - - impl IntoIterator for TokenStream { - type Item = TokenTree; - type IntoIter = TokenTreeIter; - -@@ -356,25 +311,25 @@ impl Iterator for TokenTreeIter { - fn size_hint(&self) -> (usize, Option) { - match self { - TokenTreeIter::Compiler(tts) => tts.size_hint(), - TokenTreeIter::Fallback(tts) => tts.size_hint(), - } - } - } - --impl fmt::Debug for TokenTreeIter { -+impl Debug for TokenTreeIter { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.debug_struct("TokenTreeIter").finish() - } - } - - #[derive(Clone, PartialEq, Eq)] - #[cfg(super_unstable)] --pub enum SourceFile { -+pub(crate) enum SourceFile { - Compiler(proc_macro::SourceFile), - Fallback(fallback::SourceFile), - } - - #[cfg(super_unstable)] - impl SourceFile { - fn nightly(sf: proc_macro::SourceFile) -> Self { - SourceFile::Compiler(sf) -@@ -392,68 +347,87 @@ impl SourceFile { - match self { - SourceFile::Compiler(a) => a.is_real(), - SourceFile::Fallback(a) => a.is_real(), - } - } - } - - #[cfg(super_unstable)] --impl fmt::Debug for SourceFile { -+impl Debug for SourceFile { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- SourceFile::Compiler(a) => a.fmt(f), -- SourceFile::Fallback(a) => a.fmt(f), -+ SourceFile::Compiler(a) => Debug::fmt(a, f), -+ SourceFile::Fallback(a) => Debug::fmt(a, f), - } - } - } - - #[cfg(any(super_unstable, feature = "span-locations"))] --pub struct LineColumn { -+pub(crate) struct LineColumn { - pub line: usize, - pub column: usize, - } - - #[derive(Copy, Clone)] --pub enum Span { -+pub(crate) enum Span { - Compiler(proc_macro::Span), - Fallback(fallback::Span), - } - - impl Span { - pub fn call_site() -> Span { -- if nightly_works() { -+ if inside_proc_macro() { - Span::Compiler(proc_macro::Span::call_site()) - } else { - Span::Fallback(fallback::Span::call_site()) - } - } - -+ #[cfg(hygiene)] -+ pub fn mixed_site() -> Span { -+ if inside_proc_macro() { -+ Span::Compiler(proc_macro::Span::mixed_site()) -+ } else { -+ Span::Fallback(fallback::Span::mixed_site()) -+ } -+ } -+ - #[cfg(super_unstable)] - pub fn def_site() -> Span { -- if nightly_works() { -+ if inside_proc_macro() { - Span::Compiler(proc_macro::Span::def_site()) - } else { - Span::Fallback(fallback::Span::def_site()) - } - } - -- #[cfg(super_unstable)] - pub fn resolved_at(&self, other: Span) -> Span { - match (self, other) { -+ #[cfg(hygiene)] - (Span::Compiler(a), Span::Compiler(b)) => Span::Compiler(a.resolved_at(b)), -+ -+ // Name resolution affects semantics, but location is only cosmetic -+ #[cfg(not(hygiene))] -+ (Span::Compiler(_), Span::Compiler(_)) => other, -+ - (Span::Fallback(a), Span::Fallback(b)) => Span::Fallback(a.resolved_at(b)), - _ => mismatch(), - } - } - -- #[cfg(super_unstable)] - pub fn located_at(&self, other: Span) -> Span { - match (self, other) { -+ #[cfg(hygiene)] - (Span::Compiler(a), Span::Compiler(b)) => Span::Compiler(a.located_at(b)), -+ -+ // Name resolution affects semantics, but location is only cosmetic -+ #[cfg(not(hygiene))] -+ (Span::Compiler(_), Span::Compiler(_)) => *self, -+ - (Span::Fallback(a), Span::Fallback(b)) => Span::Fallback(a.located_at(b)), - _ => mismatch(), - } - } - - pub fn unwrap(self) -> proc_macro::Span { - match self { - Span::Compiler(s) => s, -@@ -537,36 +511,36 @@ impl From for crate::S - } - - impl From for Span { - fn from(inner: fallback::Span) -> Span { - Span::Fallback(inner) - } - } - --impl fmt::Debug for Span { -+impl Debug for Span { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- Span::Compiler(s) => s.fmt(f), -- Span::Fallback(s) => s.fmt(f), -+ Span::Compiler(s) => Debug::fmt(s, f), -+ Span::Fallback(s) => Debug::fmt(s, f), - } - } - } - --pub fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) { -+pub(crate) fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) { - match span { - Span::Compiler(s) => { - debug.field("span", &s); - } - Span::Fallback(s) => fallback::debug_span_field_if_nontrivial(debug, s), - } - } - - #[derive(Clone)] --pub enum Group { -+pub(crate) enum Group { - Compiler(proc_macro::Group), - Fallback(fallback::Group), - } - - impl Group { - pub fn new(delimiter: Delimiter, stream: TokenStream) -> Group { - match stream { - TokenStream::Compiler(tts) => { -@@ -647,36 +621,36 @@ impl Group { - } - - impl From for Group { - fn from(g: fallback::Group) -> Self { - Group::Fallback(g) - } - } - --impl fmt::Display for Group { -+impl Display for Group { - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - match self { -- Group::Compiler(group) => group.fmt(formatter), -- Group::Fallback(group) => group.fmt(formatter), -+ Group::Compiler(group) => Display::fmt(group, formatter), -+ Group::Fallback(group) => Display::fmt(group, formatter), - } - } - } - --impl fmt::Debug for Group { -+impl Debug for Group { - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - match self { -- Group::Compiler(group) => group.fmt(formatter), -- Group::Fallback(group) => group.fmt(formatter), -+ Group::Compiler(group) => Debug::fmt(group, formatter), -+ Group::Fallback(group) => Debug::fmt(group, formatter), - } - } - } - - #[derive(Clone)] --pub enum Ident { -+pub(crate) enum Ident { - Compiler(proc_macro::Ident), - Fallback(fallback::Ident), - } - - impl Ident { - pub fn new(string: &str, span: Span) -> Ident { - match span { - Span::Compiler(s) => Ident::Compiler(proc_macro::Ident::new(string, s)), -@@ -742,56 +716,56 @@ where - let other = other.as_ref(); - match self { - Ident::Compiler(t) => t.to_string() == other, - Ident::Fallback(t) => t == other, - } - } - } - --impl fmt::Display for Ident { -+impl Display for Ident { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- Ident::Compiler(t) => t.fmt(f), -- Ident::Fallback(t) => t.fmt(f), -+ Ident::Compiler(t) => Display::fmt(t, f), -+ Ident::Fallback(t) => Display::fmt(t, f), - } - } - } - --impl fmt::Debug for Ident { -+impl Debug for Ident { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- Ident::Compiler(t) => t.fmt(f), -- Ident::Fallback(t) => t.fmt(f), -+ Ident::Compiler(t) => Debug::fmt(t, f), -+ Ident::Fallback(t) => Debug::fmt(t, f), - } - } - } - - #[derive(Clone)] --pub enum Literal { -+pub(crate) enum Literal { - Compiler(proc_macro::Literal), - Fallback(fallback::Literal), - } - - macro_rules! suffixed_numbers { - ($($name:ident => $kind:ident,)*) => ($( - pub fn $name(n: $kind) -> Literal { -- if nightly_works() { -+ if inside_proc_macro() { - Literal::Compiler(proc_macro::Literal::$name(n)) - } else { - Literal::Fallback(fallback::Literal::$name(n)) - } - } - )*) - } - - macro_rules! unsuffixed_integers { - ($($name:ident => $kind:ident,)*) => ($( - pub fn $name(n: $kind) -> Literal { -- if nightly_works() { -+ if inside_proc_macro() { - Literal::Compiler(proc_macro::Literal::$name(n)) - } else { - Literal::Fallback(fallback::Literal::$name(n)) - } - } - )*) - } - -@@ -825,49 +799,49 @@ impl Literal { - i16_unsuffixed => i16, - i32_unsuffixed => i32, - i64_unsuffixed => i64, - i128_unsuffixed => i128, - isize_unsuffixed => isize, - } - - pub fn f32_unsuffixed(f: f32) -> Literal { -- if nightly_works() { -+ if inside_proc_macro() { - Literal::Compiler(proc_macro::Literal::f32_unsuffixed(f)) - } else { - Literal::Fallback(fallback::Literal::f32_unsuffixed(f)) - } - } - - pub fn f64_unsuffixed(f: f64) -> Literal { -- if nightly_works() { -+ if inside_proc_macro() { - Literal::Compiler(proc_macro::Literal::f64_unsuffixed(f)) - } else { - Literal::Fallback(fallback::Literal::f64_unsuffixed(f)) - } - } - - pub fn string(t: &str) -> Literal { -- if nightly_works() { -+ if inside_proc_macro() { - Literal::Compiler(proc_macro::Literal::string(t)) - } else { - Literal::Fallback(fallback::Literal::string(t)) - } - } - - pub fn character(t: char) -> Literal { -- if nightly_works() { -+ if inside_proc_macro() { - Literal::Compiler(proc_macro::Literal::character(t)) - } else { - Literal::Fallback(fallback::Literal::character(t)) - } - } - - pub fn byte_string(bytes: &[u8]) -> Literal { -- if nightly_works() { -+ if inside_proc_macro() { - Literal::Compiler(proc_macro::Literal::byte_string(bytes)) - } else { - Literal::Fallback(fallback::Literal::byte_string(bytes)) - } - } - - pub fn span(&self) -> Span { - match self { -@@ -903,25 +877,25 @@ impl Literal { - } - - impl From for Literal { - fn from(s: fallback::Literal) -> Literal { - Literal::Fallback(s) - } - } - --impl fmt::Display for Literal { -+impl Display for Literal { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- Literal::Compiler(t) => t.fmt(f), -- Literal::Fallback(t) => t.fmt(f), -+ Literal::Compiler(t) => Display::fmt(t, f), -+ Literal::Fallback(t) => Display::fmt(t, f), - } - } - } - --impl fmt::Debug for Literal { -+impl Debug for Literal { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- Literal::Compiler(t) => t.fmt(f), -- Literal::Fallback(t) => t.fmt(f), -+ Literal::Compiler(t) => Debug::fmt(t, f), -+ Literal::Fallback(t) => Debug::fmt(t, f), - } - } - } -diff --git a/third_party/rust/proc-macro2/tests/comments.rs b/third_party/rust/proc-macro2/tests/comments.rs -new file mode 100644 ---- /dev/null -+++ b/third_party/rust/proc-macro2/tests/comments.rs -@@ -0,0 +1,103 @@ -+use proc_macro2::{Delimiter, Literal, Spacing, TokenStream, TokenTree}; -+ -+// #[doc = "..."] -> "..." -+fn lit_of_outer_doc_comment(tokens: TokenStream) -> Literal { -+ lit_of_doc_comment(tokens, false) -+} -+ -+// #![doc = "..."] -> "..." -+fn lit_of_inner_doc_comment(tokens: TokenStream) -> Literal { -+ lit_of_doc_comment(tokens, true) -+} -+ -+fn lit_of_doc_comment(tokens: TokenStream, inner: bool) -> Literal { -+ let mut iter = tokens.clone().into_iter(); -+ match iter.next().unwrap() { -+ TokenTree::Punct(punct) => { -+ assert_eq!(punct.as_char(), '#'); -+ assert_eq!(punct.spacing(), Spacing::Alone); -+ } -+ _ => panic!("wrong token {:?}", tokens), -+ } -+ if inner { -+ match iter.next().unwrap() { -+ TokenTree::Punct(punct) => { -+ assert_eq!(punct.as_char(), '!'); -+ assert_eq!(punct.spacing(), Spacing::Alone); -+ } -+ _ => panic!("wrong token {:?}", tokens), -+ } -+ } -+ iter = match iter.next().unwrap() { -+ TokenTree::Group(group) => { -+ assert_eq!(group.delimiter(), Delimiter::Bracket); -+ assert!(iter.next().is_none(), "unexpected token {:?}", tokens); -+ group.stream().into_iter() -+ } -+ _ => panic!("wrong token {:?}", tokens), -+ }; -+ match iter.next().unwrap() { -+ TokenTree::Ident(ident) => assert_eq!(ident.to_string(), "doc"), -+ _ => panic!("wrong token {:?}", tokens), -+ } -+ match iter.next().unwrap() { -+ TokenTree::Punct(punct) => { -+ assert_eq!(punct.as_char(), '='); -+ assert_eq!(punct.spacing(), Spacing::Alone); -+ } -+ _ => panic!("wrong token {:?}", tokens), -+ } -+ match iter.next().unwrap() { -+ TokenTree::Literal(literal) => { -+ assert!(iter.next().is_none(), "unexpected token {:?}", tokens); -+ literal -+ } -+ _ => panic!("wrong token {:?}", tokens), -+ } -+} -+ -+#[test] -+fn closed_immediately() { -+ let stream = "/**/".parse::().unwrap(); -+ let tokens = stream.into_iter().collect::>(); -+ assert!(tokens.is_empty(), "not empty -- {:?}", tokens); -+} -+ -+#[test] -+fn incomplete() { -+ assert!("/*/".parse::().is_err()); -+} -+ -+#[test] -+fn lit() { -+ let stream = "/// doc".parse::().unwrap(); -+ let lit = lit_of_outer_doc_comment(stream); -+ assert_eq!(lit.to_string(), "\" doc\""); -+ -+ let stream = "//! doc".parse::().unwrap(); -+ let lit = lit_of_inner_doc_comment(stream); -+ assert_eq!(lit.to_string(), "\" doc\""); -+ -+ let stream = "/** doc */".parse::().unwrap(); -+ let lit = lit_of_outer_doc_comment(stream); -+ assert_eq!(lit.to_string(), "\" doc \""); -+ -+ let stream = "/*! doc */".parse::().unwrap(); -+ let lit = lit_of_inner_doc_comment(stream); -+ assert_eq!(lit.to_string(), "\" doc \""); -+} -+ -+#[test] -+fn carriage_return() { -+ let stream = "///\r\n".parse::().unwrap(); -+ let lit = lit_of_outer_doc_comment(stream); -+ assert_eq!(lit.to_string(), "\"\""); -+ -+ let stream = "/**\r\n*/".parse::().unwrap(); -+ let lit = lit_of_outer_doc_comment(stream); -+ assert_eq!(lit.to_string(), "\"\\r\\n\""); -+ -+ "///\r".parse::().unwrap_err(); -+ "///\r \n".parse::().unwrap_err(); -+ "/**\r \n*/".parse::().unwrap_err(); -+} -diff --git a/third_party/rust/proc-macro2/tests/test.rs b/third_party/rust/proc-macro2/tests/test.rs ---- a/third_party/rust/proc-macro2/tests/test.rs -+++ b/third_party/rust/proc-macro2/tests/test.rs -@@ -1,12 +1,11 @@ -+use proc_macro2::{Ident, Literal, Spacing, Span, TokenStream, TokenTree}; - use std::str::{self, FromStr}; - --use proc_macro2::{Ident, Literal, Spacing, Span, TokenStream, TokenTree}; -- - #[test] - fn idents() { - assert_eq!( - Ident::new("String", Span::call_site()).to_string(), - "String" - ); - assert_eq!(Ident::new("fn", Span::call_site()).to_string(), "fn"); - assert_eq!(Ident::new("_", Span::call_site()).to_string(), "_"); -@@ -105,16 +104,43 @@ fn literal_suffix() { - assert_eq!(token_count("999u256"), 1); - assert_eq!(token_count("999r#u256"), 3); - assert_eq!(token_count("1."), 1); - assert_eq!(token_count("1.f32"), 3); - assert_eq!(token_count("1.0_0"), 1); - assert_eq!(token_count("1._0"), 3); - assert_eq!(token_count("1._m"), 3); - assert_eq!(token_count("\"\"s"), 1); -+ assert_eq!(token_count("r\"\"r"), 1); -+ assert_eq!(token_count("b\"\"b"), 1); -+ assert_eq!(token_count("br\"\"br"), 1); -+ assert_eq!(token_count("r#\"\"#r"), 1); -+ assert_eq!(token_count("'c'c"), 1); -+ assert_eq!(token_count("b'b'b"), 1); -+} -+ -+#[test] -+fn literal_iter_negative() { -+ let negative_literal = Literal::i32_suffixed(-3); -+ let tokens = TokenStream::from(TokenTree::Literal(negative_literal)); -+ let mut iter = tokens.into_iter(); -+ match iter.next().unwrap() { -+ TokenTree::Punct(punct) => { -+ assert_eq!(punct.as_char(), '-'); -+ assert_eq!(punct.spacing(), Spacing::Alone); -+ } -+ unexpected => panic!("unexpected token {:?}", unexpected), -+ } -+ match iter.next().unwrap() { -+ TokenTree::Literal(literal) => { -+ assert_eq!(literal.to_string(), "3i32"); -+ } -+ unexpected => panic!("unexpected token {:?}", unexpected), -+ } -+ assert!(iter.next().is_none()); - } - - #[test] - fn roundtrip() { - fn roundtrip(p: &str) { - println!("parse: {}", p); - let s = p.parse::().unwrap().to_string(); - println!("first: {}", s); -@@ -161,46 +187,16 @@ fn fail() { - fail("' static"); - fail("r#1"); - fail("r#_"); - } - - #[cfg(span_locations)] - #[test] - fn span_test() { -- use proc_macro2::TokenTree; -- -- fn check_spans(p: &str, mut lines: &[(usize, usize, usize, usize)]) { -- let ts = p.parse::().unwrap(); -- check_spans_internal(ts, &mut lines); -- } -- -- fn check_spans_internal(ts: TokenStream, lines: &mut &[(usize, usize, usize, usize)]) { -- for i in ts { -- if let Some((&(sline, scol, eline, ecol), rest)) = lines.split_first() { -- *lines = rest; -- -- let start = i.span().start(); -- assert_eq!(start.line, sline, "sline did not match for {}", i); -- assert_eq!(start.column, scol, "scol did not match for {}", i); -- -- let end = i.span().end(); -- assert_eq!(end.line, eline, "eline did not match for {}", i); -- assert_eq!(end.column, ecol, "ecol did not match for {}", i); -- -- match i { -- TokenTree::Group(ref g) => { -- check_spans_internal(g.stream().clone(), lines); -- } -- _ => {} -- } -- } -- } -- } -- - check_spans( - "\ - /// This is a document comment - testing 123 - { - testing 234 - }", - &[ -@@ -269,59 +265,17 @@ fn span_join() { - joined1.unwrap().source_file(), - source1[0].span().source_file() - ); - } - - #[test] - fn no_panic() { - let s = str::from_utf8(b"b\'\xc2\x86 \x00\x00\x00^\"").unwrap(); -- assert!(s.parse::().is_err()); --} -- --#[test] --fn tricky_doc_comment() { -- let stream = "/**/".parse::().unwrap(); -- let tokens = stream.into_iter().collect::>(); -- assert!(tokens.is_empty(), "not empty -- {:?}", tokens); -- -- let stream = "/// doc".parse::().unwrap(); -- let tokens = stream.into_iter().collect::>(); -- assert!(tokens.len() == 2, "not length 2 -- {:?}", tokens); -- match tokens[0] { -- proc_macro2::TokenTree::Punct(ref tt) => assert_eq!(tt.as_char(), '#'), -- _ => panic!("wrong token {:?}", tokens[0]), -- } -- let mut tokens = match tokens[1] { -- proc_macro2::TokenTree::Group(ref tt) => { -- assert_eq!(tt.delimiter(), proc_macro2::Delimiter::Bracket); -- tt.stream().into_iter() -- } -- _ => panic!("wrong token {:?}", tokens[0]), -- }; -- -- match tokens.next().unwrap() { -- proc_macro2::TokenTree::Ident(ref tt) => assert_eq!(tt.to_string(), "doc"), -- t => panic!("wrong token {:?}", t), -- } -- match tokens.next().unwrap() { -- proc_macro2::TokenTree::Punct(ref tt) => assert_eq!(tt.as_char(), '='), -- t => panic!("wrong token {:?}", t), -- } -- match tokens.next().unwrap() { -- proc_macro2::TokenTree::Literal(ref tt) => { -- assert_eq!(tt.to_string(), "\" doc\""); -- } -- t => panic!("wrong token {:?}", t), -- } -- assert!(tokens.next().is_none()); -- -- let stream = "//! doc".parse::().unwrap(); -- let tokens = stream.into_iter().collect::>(); -- assert!(tokens.len() == 3, "not length 3 -- {:?}", tokens); -+ assert!(s.parse::().is_err()); - } - - #[test] - fn op_before_comment() { - let mut tts = TokenStream::from_str("~// comment").unwrap().into_iter(); - match tts.next().unwrap() { - TokenTree::Punct(tt) => { - assert_eq!(tt.as_char(), '~'); -@@ -340,30 +294,30 @@ fn raw_identifier() { - } - assert!(tts.next().is_none()); - } - - #[test] - fn test_debug_ident() { - let ident = Ident::new("proc_macro", Span::call_site()); - -- #[cfg(not(procmacro2_semver_exempt))] -+ #[cfg(not(span_locations))] - let expected = "Ident(proc_macro)"; - -- #[cfg(procmacro2_semver_exempt)] -- let expected = "Ident { sym: proc_macro, span: bytes(0..0) }"; -+ #[cfg(span_locations)] -+ let expected = "Ident { sym: proc_macro }"; - - assert_eq!(expected, format!("{:?}", ident)); - } - - #[test] - fn test_debug_tokenstream() { - let tts = TokenStream::from_str("[a + 1]").unwrap(); - -- #[cfg(not(procmacro2_semver_exempt))] -+ #[cfg(not(span_locations))] - let expected = "\ - TokenStream [ - Group { - delimiter: Bracket, - stream: TokenStream [ - Ident { - sym: a, - }, -@@ -374,17 +328,17 @@ TokenStream [ - Literal { - lit: 1, - }, - ], - }, - ]\ - "; - -- #[cfg(not(procmacro2_semver_exempt))] -+ #[cfg(not(span_locations))] - let expected_before_trailing_commas = "\ - TokenStream [ - Group { - delimiter: Bracket, - stream: TokenStream [ - Ident { - sym: a - }, -@@ -395,17 +349,17 @@ TokenStream [ - Literal { - lit: 1 - } - ] - } - ]\ - "; - -- #[cfg(procmacro2_semver_exempt)] -+ #[cfg(span_locations)] - let expected = "\ - TokenStream [ - Group { - delimiter: Bracket, - stream: TokenStream [ - Ident { - sym: a, - span: bytes(2..3), -@@ -420,17 +374,17 @@ TokenStream [ - span: bytes(6..7), - }, - ], - span: bytes(1..8), - }, - ]\ - "; - -- #[cfg(procmacro2_semver_exempt)] -+ #[cfg(span_locations)] - let expected_before_trailing_commas = "\ - TokenStream [ - Group { - delimiter: Bracket, - stream: TokenStream [ - Ident { - sym: a, - span: bytes(2..3) -@@ -459,8 +413,85 @@ TokenStream [ - } - - #[test] - fn default_tokenstream_is_empty() { - let default_token_stream: TokenStream = Default::default(); - - assert!(default_token_stream.is_empty()); - } -+ -+#[test] -+fn tuple_indexing() { -+ // This behavior may change depending on https://github.com/rust-lang/rust/pull/71322 -+ let mut tokens = "tuple.0.0".parse::().unwrap().into_iter(); -+ assert_eq!("tuple", tokens.next().unwrap().to_string()); -+ assert_eq!(".", tokens.next().unwrap().to_string()); -+ assert_eq!("0.0", tokens.next().unwrap().to_string()); -+ assert!(tokens.next().is_none()); -+} -+ -+#[cfg(span_locations)] -+#[test] -+fn non_ascii_tokens() { -+ check_spans("// abc", &[]); -+ check_spans("// ábc", &[]); -+ check_spans("// abc x", &[]); -+ check_spans("// ábc x", &[]); -+ check_spans("/* abc */ x", &[(1, 10, 1, 11)]); -+ check_spans("/* ábc */ x", &[(1, 10, 1, 11)]); -+ check_spans("/* ab\nc */ x", &[(2, 5, 2, 6)]); -+ check_spans("/* áb\nc */ x", &[(2, 5, 2, 6)]); -+ check_spans("/*** abc */ x", &[(1, 12, 1, 13)]); -+ check_spans("/*** ábc */ x", &[(1, 12, 1, 13)]); -+ check_spans(r#""abc""#, &[(1, 0, 1, 5)]); -+ check_spans(r#""ábc""#, &[(1, 0, 1, 5)]); -+ check_spans(r###"r#"abc"#"###, &[(1, 0, 1, 8)]); -+ check_spans(r###"r#"ábc"#"###, &[(1, 0, 1, 8)]); -+ check_spans("r#\"a\nc\"#", &[(1, 0, 2, 3)]); -+ check_spans("r#\"á\nc\"#", &[(1, 0, 2, 3)]); -+ check_spans("'a'", &[(1, 0, 1, 3)]); -+ check_spans("'á'", &[(1, 0, 1, 3)]); -+ check_spans("//! abc", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]); -+ check_spans("//! ábc", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]); -+ check_spans("//! abc\n", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]); -+ check_spans("//! ábc\n", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]); -+ check_spans("/*! abc */", &[(1, 0, 1, 10), (1, 0, 1, 10), (1, 0, 1, 10)]); -+ check_spans("/*! ábc */", &[(1, 0, 1, 10), (1, 0, 1, 10), (1, 0, 1, 10)]); -+ check_spans("/*! a\nc */", &[(1, 0, 2, 4), (1, 0, 2, 4), (1, 0, 2, 4)]); -+ check_spans("/*! á\nc */", &[(1, 0, 2, 4), (1, 0, 2, 4), (1, 0, 2, 4)]); -+ check_spans("abc", &[(1, 0, 1, 3)]); -+ check_spans("ábc", &[(1, 0, 1, 3)]); -+ check_spans("ábć", &[(1, 0, 1, 3)]); -+ check_spans("abc// foo", &[(1, 0, 1, 3)]); -+ check_spans("ábc// foo", &[(1, 0, 1, 3)]); -+ check_spans("ábć// foo", &[(1, 0, 1, 3)]); -+ check_spans("b\"a\\\n c\"", &[(1, 0, 2, 3)]); -+ check_spans("b\"a\\\n\u{00a0}c\"", &[(1, 0, 2, 3)]); -+} -+ -+#[cfg(span_locations)] -+fn check_spans(p: &str, mut lines: &[(usize, usize, usize, usize)]) { -+ let ts = p.parse::().unwrap(); -+ check_spans_internal(ts, &mut lines); -+ assert!(lines.is_empty(), "leftover ranges: {:?}", lines); -+} -+ -+#[cfg(span_locations)] -+fn check_spans_internal(ts: TokenStream, lines: &mut &[(usize, usize, usize, usize)]) { -+ for i in ts { -+ if let Some((&(sline, scol, eline, ecol), rest)) = lines.split_first() { -+ *lines = rest; -+ -+ let start = i.span().start(); -+ assert_eq!(start.line, sline, "sline did not match for {}", i); -+ assert_eq!(start.column, scol, "scol did not match for {}", i); -+ -+ let end = i.span().end(); -+ assert_eq!(end.line, eline, "eline did not match for {}", i); -+ assert_eq!(end.column, ecol, "ecol did not match for {}", i); -+ -+ if let TokenTree::Group(g) = i { -+ check_spans_internal(g.stream().clone(), lines); -+ } -+ } -+ } -+} -diff --git a/third_party/rust/proc-macro2/tests/test_fmt.rs b/third_party/rust/proc-macro2/tests/test_fmt.rs -new file mode 100644 ---- /dev/null -+++ b/third_party/rust/proc-macro2/tests/test_fmt.rs -@@ -0,0 +1,26 @@ -+use proc_macro2::{Delimiter, Group, Ident, Span, TokenStream, TokenTree}; -+use std::iter::{self, FromIterator}; -+ -+#[test] -+fn test_fmt_group() { -+ let ident = Ident::new("x", Span::call_site()); -+ let inner = TokenStream::from_iter(iter::once(TokenTree::Ident(ident))); -+ let parens_empty = Group::new(Delimiter::Parenthesis, TokenStream::new()); -+ let parens_nonempty = Group::new(Delimiter::Parenthesis, inner.clone()); -+ let brackets_empty = Group::new(Delimiter::Bracket, TokenStream::new()); -+ let brackets_nonempty = Group::new(Delimiter::Bracket, inner.clone()); -+ let braces_empty = Group::new(Delimiter::Brace, TokenStream::new()); -+ let braces_nonempty = Group::new(Delimiter::Brace, inner.clone()); -+ let none_empty = Group::new(Delimiter::None, TokenStream::new()); -+ let none_nonempty = Group::new(Delimiter::None, inner.clone()); -+ -+ // Matches libproc_macro. -+ assert_eq!("()", parens_empty.to_string()); -+ assert_eq!("(x)", parens_nonempty.to_string()); -+ assert_eq!("[]", brackets_empty.to_string()); -+ assert_eq!("[x]", brackets_nonempty.to_string()); -+ assert_eq!("{ }", braces_empty.to_string()); -+ assert_eq!("{ x }", braces_nonempty.to_string()); -+ assert_eq!("", none_empty.to_string()); -+ assert_eq!("x", none_nonempty.to_string()); -+} -diff --git a/third_party/rust/syn/.cargo-checksum.json b/third_party/rust/syn/.cargo-checksum.json ---- a/third_party/rust/syn/.cargo-checksum.json -+++ b/third_party/rust/syn/.cargo-checksum.json -@@ -1,1 +1,1 @@ --{"files":{"Cargo.toml":"484d29864d333a361652fa4e24e1dcfab9efa47705ffd8c106d802eb03b78da7","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"ca605417b6db8c995458f8407afaad6c177aedcc2274004283600f5638fa1b0c","benches/file.rs":"b45211cc4a0296a77aac2b4de16dbc6b5cb66adfb5afac00a77bccea87f43968","benches/rust.rs":"9cc0f62e944f1583d05c43a395a1556731501cf5976ef67a081f4f6387f883ba","build.rs":"7423ab199728d55c7d64c44b7c6729cfd93bd8273366a77707353003e27565d7","src/attr.rs":"cf81add298f0e75c35a9980a59bc3c2fd3fe933635830d1591374eeb2487c225","src/await.rs":"18f0b2ecb319991f891e300011424985e3cf33d166ea9f29f22d575fc8c83a76","src/bigint.rs":"efc7f64959980653d73fe4f8bc2a3a2904dc05f45b02c6dc15cd316fa3d7c338","src/buffer.rs":"2a432c11a3da67a21d46c2272bf9ce60a0bb20893b5750027bbd8ca3e843ab35","src/custom_keyword.rs":"589e46ec1be9a04d6de12c0b8cadf87cc1c05606ed46ddea62e9869cbca4a191","src/custom_punctuation.rs":"2ba2e294e15a0fce7ede3686c42b2891797079a724dd1193b66e7d305624c891","src/data.rs":"cc9b250d084e444782d3ff5e63c1ba387cbde8f7f2e977eab9846d920b4b8c3f","src/derive.rs":"c18878f14be5d5ab11fd7dda2d2ff1ff75c9662daf11eed033de62e4d0670a89","src/discouraged.rs":"50e10915695c4d14f64a78e20ecbef90a2cd53a7c26ee3426a2524a8ee5c9cbf","src/error.rs":"2c17a402f83ed5ae4ad96e753216771bef620235c2ff1ccc23f4bbafc7266fe1","src/export.rs":"dcae67456278c0339acfbcbb4737b8d37cfba5a150ae789f31f4be79abf7e726","src/expr.rs":"871d8eeb43cef02ef88de3bea7477b79b4eabc096a0899dde0e5750edf482f49","src/ext.rs":"b97ed549490b9248b5b5df31b3d5b08ba8791e23e6c5d3a1157a0363eb683ff3","src/file.rs":"3cc2bf5c709238d515a557f721f231c8c725b196400de051f945b549299d38a7","src/gen/fold.rs":"10b3ae33d0ce410d6bbe8b93be9d5f9e856c7dc8212133cc46b703f97d548190","src/gen/visit.rs":"e0f5798552d186024696b7bfc7219d4ff53b0e45f735a83e77cbb6b6578c5fa4","src/gen/visit_mut.rs":"9f7dda83907969971dba84d545aaa563b0728e54db97ffab5050fdf43a79c731","src/gen_helper.rs":"ea6c66388365971db6a2fc86cbb208f7eacde77e245bc8623f27a3642a3d7741","src/generics.rs":"d845d7a828863123a5187fd0fe59c9dae3636f63bad302bd035792eed3dcb1ba","src/group.rs":"119b62d8481b4b1c327639bed40e114bf1969765250b68186628247fd4144b3b","src/ident.rs":"503156ce51a7ef0420892e8dbf2ecf8fe51f42a84d52cc2c05654e1a83020cbf","src/item.rs":"213f2f58c65ee1aa222f111bc9b1be681f8fb069caed04ca56586839979318d0","src/keyword.rs":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","src/lib.rs":"24778e9f15e8025e75aca114c712716ada586b471adb3b3b69278f4d39b8a21b","src/lifetime.rs":"905359708f772ec858954badde69ee016d29e6eeba1dd205b268445b1aff6f3a","src/lit.rs":"5bb0bddb94cbd256e50e92dc091a0baa09f1be40a77058b897507f3b17191e5d","src/lookahead.rs":"5cce8b4cb345a85c24a452ea6d78eadb76f01ca0a789cbf5ce35108334904173","src/mac.rs":"6b468244cc07e3f2f10419f833d9e2ed23edbcd6dc34cf21c5947633699db964","src/macros.rs":"0d8c3bab47539aa2d00bec64e92c901ea2c9c0af74c868051c0905b82650f970","src/op.rs":"93cd44770bb110deadf807a01d9a666efe644b6e3010f4b51cae77ee7438cfbb","src/parse.rs":"5017123c249ebc65866af113a0ad671814b9873f47568180e6539a305eb0317d","src/parse_macro_input.rs":"f799aadb7216c2d333b579f48ed2fedfe07b5e96f004b25b569649ffbaa958d2","src/parse_quote.rs":"81575bf60b18b0d8624d7025a5bcc8dcd6633ad70c454dee2a06e4c391700b6c","src/pat.rs":"db0f2263b9813de1f4e3e3e0396fe0080b1e11c8090c6b4fb6fca3cfbe22bc96","src/path.rs":"32e685ac7fd2d4b9989802de8f326a8d47fa710f86ec3e45fd9d3ff8fdfe97ef","src/print.rs":"da6529c1d9d21aaf6c835f66b4e67eacb7cf91a10eb5e9a2143b49bf99b3b5e1","src/punctuated.rs":"384e7b317b26f24118eb4b0c39e949ee9f4f3e700a4c80e462342c83b2cc3282","src/sealed.rs":"896a495a5340eec898527f18bd4ddca408ea03ea0ee3af30074ff48deace778d","src/span.rs":"748c51c6feb223c26d3b1701f5bb98aee823666c775c98106cfa24fe29d8cec1","src/spanned.rs":"adddb6acae14a0fa340df302b932c31e34b259706ce56fd82ab597ec424500e1","src/stmt.rs":"fbccf2b4da7980fe6ea8d99457d291577c0f225b370c1dd97da41abf2a18fcf7","src/thread.rs":"815eca6bd64f4eef7c447f0809e84108f5428ff50225224b373efd8fbb696874","src/token.rs":"761d8d1793560eb2b631c36ddfdbb14ac65178405f095453aa0e75e8816bdbb9","src/tt.rs":"1e32ae216d14d895ff621bf32bc611f138aa00108b0090be2cbaa0affebe8e2a","src/ty.rs":"ce052e0079b65b66bea4e9502d2ff2c90ad4b867904bf7eb892eb60aa3ef219a","tests/clone.sh":"961243d42540d9992090efbbd5478b7aa395671db64a6c28cdadb6edc610ebdf","tests/common/eq.rs":"a42d339808fd32dd4bfd440c254add8c56d5e2cde3a6bf0c88621b618ce5eaa7","tests/common/mod.rs":"20a3300016351fa210a193fbb0db059ef5125fa7909585ded64790004d4977ed","tests/common/parse.rs":"17ba6d1e74aaa3f8096c6d379d803221f12d95cca69927be047d6ddf8367647f","tests/debug/gen.rs":"57bd5cf585e0b86ad00f29f09ff3db3390c4a756d503514a9b28407500dcea3c","tests/debug/mod.rs":"462d6fe34ee75c3ca1207d4db2ff3bdee5b430b9f9ca632e5671d1588d3f76b3","tests/features/error.rs":"e0581a2869cbd237c2bc18a0a85272296e1577bb5f7317a67fa85e28e04eea6f","tests/features/mod.rs":"66a2605ec54ede29208da350f2bed536dfa763b58408d64d3fca3b13de64b64f","tests/macros/mod.rs":"3f2d758c0ba76b93f54b0c1fc22ad50edff8ef42629ba4d47ac7d7f823da8359","tests/repo/mod.rs":"e851a68972c9194a9a8d7b68538b16ed79ae81cba55e1a2ce210d1b759fb1a21","tests/test_asyncness.rs":"b6c46118b036e6807d24eb0e1779244b4fca23dac0d8031e9843b3edec484ce8","tests/test_attribute.rs":"2d8f18a98c989d3f7adaaeb1aeebd4f8413365ace63feecb37cb3f9db9db4d8f","tests/test_derive_input.rs":"477d80f914c54b526f8ff229788dc0e7798d118f6dcfa348f4c99755edb347b9","tests/test_expr.rs":"f35ca80566849a36e6ba6403d9663519eff37e4224360c468fedff8b561a643e","tests/test_generics.rs":"83a5dc07f5c5701c12625399262f7120b66f01a742523f3eda28da2cf2c87eb3","tests/test_grouping.rs":"aadd75215addd9e5a8fa2f9472117d4cb80f1e8b84e07f4c0845675c9014164f","tests/test_ident.rs":"236c239dd66f543f084f44ff747d7bc3962cf11a019a279777fe972f6e17aa4c","tests/test_iterators.rs":"718938da14778dcba06324d36a99d9317c9d45d81a34c6a44c47e1fa38085e9f","tests/test_lit.rs":"7dff2661a5ac586d6ed2fe27501cb8ff62f4cf3f6c91f596bff6057c67ad7857","tests/test_meta.rs":"8444dee084882243b107dfc8a6aac27f9382f9774162d1ac8ed8ec30d60c048e","tests/test_parse_buffer.rs":"b244bb4bc41ff06d21f239e60a3d663fdec5aa4af33f2a354afef36d34f0aefc","tests/test_pat.rs":"41776b878efae9b8e340f21ffe6296e921cf309f618482efd98609c33e32c28b","tests/test_precedence.rs":"71f3ea52cda8b40166bb7416fb98774e6a653542497b521f8e183e283dcf579d","tests/test_round_trip.rs":"e0de37f45fa223b488d25a41beab185eb92abb7bf765a9f13fe5d870ff31f5f1","tests/test_should_parse.rs":"4da4e25ee2baa7e75135c375042a7f958de136c5698dab03f99ff7a774dcd463","tests/test_size.rs":"970150b9d49ef91ab4c8f8c6a59b83f9a68a02acb779f0280733a5efaec6487a","tests/test_token_trees.rs":"a07ea657bf03b9c667c821b2db2af49b176ca737e3e01217a73cca78b7f11380","tests/zzz_stable.rs":"961d4940a926db4ca523d834b060c62de988e6a8e01c9f5efaa7bb4c86745b47"},"package":"66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf"} -\ No newline at end of file -+{"files":{"Cargo.toml":"28ddb678a5ccac4423435384c8b7116f804e896eabc5aae9d5c2bc666aaebbb4","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"03f3b53cf858536a0883aa5b5882ee61dcd0f1e71c0930c9106fcfa1d6aad2df","benches/file.rs":"b4724fc7c0f48b8f488e2632a1064f6c0bf16ded3969680fc3f4a2369536269b","benches/rust.rs":"ea6291ef2d2a83d94a3312fe179d48259f8ec0b04c961993ddd181d0a4ab740e","build.rs":"aeca2312f05aec658eaa66980a0ef3d578837db107a55702b39419ea0422eb4a","src/attr.rs":"7d79482634d6544eb4a4825405407b53660d0f5f8b929f7e1671e005b9d92038","src/await.rs":"18f0b2ecb319991f891e300011424985e3cf33d166ea9f29f22d575fc8c83a76","src/bigint.rs":"efc7f64959980653d73fe4f8bc2a3a2904dc05f45b02c6dc15cd316fa3d7c338","src/buffer.rs":"cf2a4b3bdc247b80c85ff5625a1dfb7a5f517fd835f6e1518a7b924990e4c293","src/custom_keyword.rs":"9627467063e41776315a6a14b2aaea3875592d8e0ebd2dc6df1fc2f12c06f146","src/custom_punctuation.rs":"b00e7bee96eb473507527e39db65e74e71592dc06421d2cfe45ed899c17d4847","src/data.rs":"7aec9a745cd53ec95688afa353f6efb9576e7fc0143757b51d28bc3d900b1d2a","src/derive.rs":"fa71866df6e383673dd3329f455a9f953585b83f9739050be3bf1f8c6d526b96","src/discouraged.rs":"a1f3d85e20dedf50b1b7b4571d970a3a6e9b2de4afde7dd0c986fe240df2ba46","src/error.rs":"c3005b50e3132026250c5356d0d391bf96db8087f0f5f744de98e360d8a20a3e","src/export.rs":"dcae67456278c0339acfbcbb4737b8d37cfba5a150ae789f31f4be79abf7e726","src/expr.rs":"54455fd20041996653ca5379b03cdf3c2fc1b3dd2e1149b5bc6b1dd492545d55","src/ext.rs":"870086d9021e6a6fcefa2f00cd91b55c4b74dcee8f0f6a07e76d96fb44707d61","src/file.rs":"75167ebc77e7870122078eabde1b872c337142d4b0962c20cedffcaaa2a5b7c6","src/gen/clone.rs":"0845c1bf8624c3f235cd247b4eb748e7e16b4c240097cb0ff16751f688c079ae","src/gen/debug.rs":"d24fe37f4ce1dd74f2dc54136e893782d3c4d0908323c036c97599551a56960c","src/gen/eq.rs":"1e6ef09b17ca7f36861ef23ce2a6991b231ed5f087f046469b5f23da40f5b419","src/gen/fold.rs":"3f59e59ed8ad2ab5dd347bfbe41bbc785c2aabd8ae902087a584a6daed597182","src/gen/hash.rs":"e5b2a52587173076777233a9e57e2b3c8e0dd6d6f41d16fa7c9fde68b05c2bfc","src/gen/visit.rs":"23008c170d4dd3975232876a0a654921d9b6af57372cb9fcc133ca740588d666","src/gen/visit_mut.rs":"42886c3ee02ded72d9c3eec006e20431eaee0c6b90ddefc1a36ec7bf50c6a24a","src/gen_helper.rs":"ea6c66388365971db6a2fc86cbb208f7eacde77e245bc8623f27a3642a3d7741","src/generics.rs":"d1c175284ca21e777ef0414c28383929b170ccb00aaf7a929eb18d3b05e18da8","src/group.rs":"119b62d8481b4b1c327639bed40e114bf1969765250b68186628247fd4144b3b","src/ident.rs":"503156ce51a7ef0420892e8dbf2ecf8fe51f42a84d52cc2c05654e1a83020cbf","src/item.rs":"c9ad9881e8cda8ee3f157f0c7602fc53d08a7e3288b9afc388c393689eac5aea","src/lib.rs":"558ad13779233b27bebc4b2fc8025eb1c7e57b32130dc1dd911391e27b427500","src/lifetime.rs":"f390fe06692fc51fbf3eb490bb9f795da70e4452f51c5b0df3bbaa899084ddf1","src/lit.rs":"9fab84e38756b092fbb055dcdf01e31d42d916c49e3eaae8c9019043b0ee4301","src/lookahead.rs":"5cce8b4cb345a85c24a452ea6d78eadb76f01ca0a789cbf5ce35108334904173","src/mac.rs":"e5cecea397fd01a44958162781d8d94343fe2a1b9b9754a5666c3d2ab4d7ef64","src/macros.rs":"2ce05b553f14da4ee550bb681cb0733b7186ad94719cd36f96d53e15fd02cf2b","src/op.rs":"449514e146deab0ab020bc6f764544c294dbc780941c9802bf60cf1b2839d550","src/parse.rs":"bde888c98ee259f2a73489a693515ed4875432b0d79486ac83aea19f441992a3","src/parse_macro_input.rs":"653a020f023cac0eccbc1fcc34aa7bf80567b43e5475deab4ad3e487a5363201","src/parse_quote.rs":"642f21e5fa54df4b7c373fb158289ee1005d49e1a49b1d194df5438faee71c46","src/pat.rs":"1473b258162cc822f1ee0c0869f521053ed345a140c39ed83b9b4dfb6f9f2aca","src/path.rs":"f119f0c2af12fabd360eac9a2312e0f6e6c28c633c9671bde6ef0bece7c5ba3c","src/print.rs":"da6529c1d9d21aaf6c835f66b4e67eacb7cf91a10eb5e9a2143b49bf99b3b5e1","src/punctuated.rs":"212f5a601d6c2eb8b8fa679be1167b455b595bee964d2775b0101ebb16c3eaa5","src/reserved.rs":"3625eb2a64589a4992ab79a1674e9679f465bea613ab139a671df5337e88cee6","src/sealed.rs":"896a495a5340eec898527f18bd4ddca408ea03ea0ee3af30074ff48deace778d","src/span.rs":"748c51c6feb223c26d3b1701f5bb98aee823666c775c98106cfa24fe29d8cec1","src/spanned.rs":"7d77714d585e6f42397091ffb3a799fd7b20c05c5442c737683c429ea7d409a5","src/stmt.rs":"3917fbc897f80efe838267833c55650ff8d636cb49a6d1084e28eff65d0e3ccd","src/thread.rs":"815eca6bd64f4eef7c447f0809e84108f5428ff50225224b373efd8fbb696874","src/token.rs":"a1ca6298bf6592cb80cbab1db4eac2fa4e3fa56729bb807bfb0f08ab0f229ca5","src/tt.rs":"1cc9e200624288322f800f32e3d6e2e53da946467bb312dd40a52c02cdcc4730","src/ty.rs":"cb167cbb16240c59a31b44adec175172caaf75ffef9a0bb168584b51bf105795","src/verbatim.rs":"802a97df997432f18cac6e6200ff6ea29fb2474986005e0fcdbc2b65197f87f7","src/whitespace.rs":"e63dd0aa3d34029f17766a8b09c1a6e4479e36c552c8b7023d710a399333aace","tests/.gitignore":"22e782449a3c216db3f7215d5fb8882e316768e40beeec3833aae419ad8941db","tests/common/eq.rs":"4b190a3833bdfd20a4cb1e3dff25a698751dec71d6f30249cf09426e061a4fb1","tests/common/mod.rs":"25ef6d7daa09bad3198a0e9e91b2812425f92db7c585c1e34a03a84d7362ccd8","tests/common/parse.rs":"8b7ba32f4988c30758c108536c4877dc5a039a237bf9b0687220ef2295797bbd","tests/debug/gen.rs":"d6e2abf2a7bb58a7895a60c2f094a98a4f85c9189d02011d0dcef6ef053f26e3","tests/debug/mod.rs":"868763d0ef1609a3ad5e05e9f1bfa0f813e91e7e9a36653414a188bb2fdaa425","tests/macros/mod.rs":"c0eafa4e3845fc08f6efe6021bac37822c0ac325eb7b51194a5f35236f648d92","tests/repo/mod.rs":"9e316b88d57ae213e81950c35e45443078ec90e702798353bc3528cb8a2810b6","tests/repo/progress.rs":"c08d0314a7f3ecf760d471f27da3cd2a500aeb9f1c8331bffb2aa648f9fabf3f","tests/test_asyncness.rs":"cff01db49d28ab23b0b258bc6c0a5cc4071be4fe7248eef344a5d79d2fb649b7","tests/test_attribute.rs":"0ffd99384e1a52ae17d9fed5c4053e411e8f9018decef07ffa621d1faa7329d8","tests/test_derive_input.rs":"610444351e3bf99366976bbf1da109c334a70ac9500caef366bcf9b68819829f","tests/test_expr.rs":"0ee83f6f6de950018c043efcc3e85776b4227dae3068309998a8d9709f2fc66c","tests/test_generics.rs":"9d713f90a79d6145efc89fb6f946029ca03486c632219950889da39940152ba0","tests/test_grouping.rs":"46c27baec4daaaf1e891892f0b0515ea8a44619071c7d0cc9192580916f1569f","tests/test_ident.rs":"9eb53d1e21edf23e7c9e14dc74dcc2b2538e9221e19dbcc0a44e3acc2e90f3f6","tests/test_item.rs":"461ed0c8648afffcea3217f52c9a88298182b4d39d73a11803b1281d99c98c25","tests/test_iterators.rs":"53ed6078d37550bd6765d2411e3660be401aef8a31a407350cc064a7d08c7c33","tests/test_lit.rs":"2a46c5f2f2ad1dcbb7e9b0cd11b55861c5ff818c2c4c51351d07e2daa7c74674","tests/test_meta.rs":"1fc98af3279cadc3d8db3c7e8d4d7f9e9dbd4d17548cf6a2f6f4536ed65367f6","tests/test_parse_buffer.rs":"8bbe2d24ca8a3788f72c6908fc96c26d546f11c69687bf8d72727f851d5e2d27","tests/test_parse_stream.rs":"2f449a2c41a3dee6fd14bee24e1666a453cb808eda17332fd91afd127fcdd2a6","tests/test_pat.rs":"2cb331fe404496d51e7cc7e283ae13c519a2265ca82e1c88e113296f860c2cba","tests/test_path.rs":"fcd5591e639fc787acc9763d828a811c8114525c9341282eefda8f331e082a51","tests/test_precedence.rs":"8d03656741b01e577d7501ce24332d1a4febec3e31a043e47c61062b8c527ed2","tests/test_receiver.rs":"084eca59984b9a18651da52f2c4407355da3de1335916a12477652999e2d01cc","tests/test_round_trip.rs":"ba01bf4ec04cd2d6f9e4800c343563925ae960c5f16752dc0797fda4451b6cc2","tests/test_shebang.rs":"f5772cadad5b56e3112cb16308b779f92bce1c3a48091fc9933deb2276a69331","tests/test_should_parse.rs":"1d3535698a446e2755bfc360676bdb161841a1f454cdef6e7556c6d06a95c89d","tests/test_size.rs":"5fae772bab66809d6708232f35cfb4a287882486763b0f763feec2ad79fbb68b","tests/test_stmt.rs":"17e4355843ee2982b51faba2721a18966f8c2b9422e16b052a123b8ee8b80752","tests/test_token_trees.rs":"43e56a701817e3c3bfd0cae54a457dd7a38ccb3ca19da41e2b995fdf20e6ed18","tests/test_ty.rs":"5b7c0bfc4963d41920dd0b39fdea419e34f00409ba86ad4211d6c3c7e8bbe1c0","tests/test_visibility.rs":"3f958e2b3b5908005e756a80eea326a91eac97cc4ab60599bebde8d4b942d65c","tests/zzz_stable.rs":"2a862e59cb446235ed99aec0e6ada8e16d3ecc30229b29d825b7c0bbc2602989"},"package":"963f7d3cc59b59b9325165add223142bbf1df27655d07789f109896d353d8350"} -\ No newline at end of file -diff --git a/third_party/rust/syn/Cargo.toml b/third_party/rust/syn/Cargo.toml ---- a/third_party/rust/syn/Cargo.toml -+++ b/third_party/rust/syn/Cargo.toml -@@ -8,79 +8,90 @@ - # If you believe there's an error in this file please file an - # issue against the rust-lang/cargo repository. If you're - # editing this file be aware that the upstream Cargo.toml - # will likely look very different (and much more reasonable) - - [package] - edition = "2018" - name = "syn" --version = "1.0.5" -+version = "1.0.40" - authors = ["David Tolnay "] - include = ["/benches/**", "/build.rs", "/Cargo.toml", "/LICENSE-APACHE", "/LICENSE-MIT", "/README.md", "/src/**", "/tests/**"] - description = "Parser for Rust source code" - documentation = "https://docs.rs/syn" - readme = "README.md" - categories = ["development-tools::procedural-macro-helpers"] - license = "MIT OR Apache-2.0" - repository = "https://github.com/dtolnay/syn" - [package.metadata.docs.rs] - all-features = true -+targets = ["x86_64-unknown-linux-gnu"] - - [package.metadata.playground] --all-features = true -- --[lib] --name = "syn" -+features = ["full", "visit", "visit-mut", "fold", "extra-traits"] - - [[bench]] - name = "rust" - harness = false - required-features = ["full", "parsing"] --edition = "2018" - - [[bench]] - name = "file" - required-features = ["full", "parsing"] --edition = "2018" - [dependencies.proc-macro2] --version = "1.0" -+version = "1.0.13" - default-features = false - - [dependencies.quote] - version = "1.0" - optional = true - default-features = false - - [dependencies.unicode-xid] - version = "0.2" -+[dev-dependencies.anyhow] -+version = "1.0" -+ -+[dev-dependencies.flate2] -+version = "1.0" -+ - [dev-dependencies.insta] --version = "0.9" -+version = "0.16" - - [dev-dependencies.rayon] - version = "1.0" - - [dev-dependencies.ref-cast] --version = "0.2" -+version = "1.0" - - [dev-dependencies.regex] - version = "1.0" - -+[dev-dependencies.reqwest] -+version = "0.10" -+features = ["blocking"] -+ -+[dev-dependencies.syn-test-suite] -+version = "0" -+ -+[dev-dependencies.tar] -+version = "0.4" -+ - [dev-dependencies.termcolor] - version = "1.0" - - [dev-dependencies.walkdir] - version = "2.1" - - [features] - clone-impls = [] - default = ["derive", "parsing", "printing", "clone-impls", "proc-macro"] - derive = [] - extra-traits = [] - fold = [] - full = [] - parsing = [] - printing = ["quote"] - proc-macro = ["proc-macro2/proc-macro", "quote/proc-macro"] -+test = ["syn-test-suite/all-features"] - visit = [] - visit-mut = [] --[badges.travis-ci] --repository = "dtolnay/syn" -diff --git a/third_party/rust/syn/README.md b/third_party/rust/syn/README.md ---- a/third_party/rust/syn/README.md -+++ b/third_party/rust/syn/README.md -@@ -1,15 +1,15 @@ - Parser for Rust source code - =========================== - --[![Build Status](https://api.travis-ci.org/dtolnay/syn.svg?branch=master)](https://travis-ci.org/dtolnay/syn) --[![Latest Version](https://img.shields.io/crates/v/syn.svg)](https://crates.io/crates/syn) --[![Rust Documentation](https://img.shields.io/badge/api-rustdoc-blue.svg)](https://docs.rs/syn/1.0/syn/) --[![Rustc Version 1.31+](https://img.shields.io/badge/rustc-1.31+-lightgray.svg)](https://blog.rust-lang.org/2018/12/06/Rust-1.31-and-rust-2018.html) -+[github](https://github.com/dtolnay/syn) -+[crates.io](https://crates.io/crates/syn) -+[docs.rs](https://docs.rs/syn) -+[build status](https://github.com/dtolnay/syn/actions?query=branch%3Amaster) - - Syn is a parsing library for parsing a stream of Rust tokens into a syntax tree - of Rust source code. - - Currently this library is geared toward use in Rust procedural macros, but - contains some APIs that may be useful more generally. - - - **Data structures** — Syn provides a complete syntax tree that can represent -@@ -41,20 +41,16 @@ contains some APIs that may be useful mo - - [`syn::File`]: https://docs.rs/syn/1.0/syn/struct.File.html - [`syn::Item`]: https://docs.rs/syn/1.0/syn/enum.Item.html - [`syn::Expr`]: https://docs.rs/syn/1.0/syn/enum.Expr.html - [`syn::Type`]: https://docs.rs/syn/1.0/syn/enum.Type.html - [`syn::DeriveInput`]: https://docs.rs/syn/1.0/syn/struct.DeriveInput.html - [parser functions]: https://docs.rs/syn/1.0/syn/parse/index.html - --If you get stuck with anything involving procedural macros in Rust I am happy to --provide help even if the issue is not related to Syn. Please file a ticket in --this repo. -- - *Version requirement: Syn supports rustc 1.31 and up.* - - [*Release notes*](https://github.com/dtolnay/syn/releases) - -
- - ## Resources - -@@ -83,18 +79,16 @@ tokens back to the compiler to compile i - syn = "1.0" - quote = "1.0" - - [lib] - proc-macro = true - ``` - - ```rust --extern crate proc_macro; -- - use proc_macro::TokenStream; - use quote::quote; - use syn::{parse_macro_input, DeriveInput}; - - #[proc_macro_derive(MyMacro)] - pub fn my_macro(input: TokenStream) -> TokenStream { - // Parse the input tokens into a syntax tree - let input = parse_macro_input!(input as DeriveInput); -@@ -266,17 +260,17 @@ incompatible ecosystems for proc macros - - In general all of your code should be written against proc-macro2 rather than - proc-macro. The one exception is in the signatures of procedural macro entry - points, which are required by the language to use `proc_macro::TokenStream`. - - The proc-macro2 crate will automatically detect and use the compiler's data - structures when a procedural macro is active. - --[proc-macro2]: https://docs.rs/proc-macro2/1.0.0/proc_macro2/ -+[proc-macro2]: https://docs.rs/proc-macro2/1.0/proc_macro2/ - -
- - #### License - - - Licensed under either of Apache License, Version - 2.0 or MIT license at your option. -diff --git a/third_party/rust/syn/benches/file.rs b/third_party/rust/syn/benches/file.rs ---- a/third_party/rust/syn/benches/file.rs -+++ b/third_party/rust/syn/benches/file.rs -@@ -1,14 +1,21 @@ - // $ cargo bench --features full --bench file - - #![feature(rustc_private, test)] -+#![recursion_limit = "1024"] - - extern crate test; - -+#[macro_use] -+#[path = "../tests/macros/mod.rs"] -+mod macros; -+ -+#[path = "../tests/common/mod.rs"] -+mod common; - #[path = "../tests/repo/mod.rs"] - pub mod repo; - - use proc_macro2::TokenStream; - use std::fs; - use std::str::FromStr; - use test::Bencher; - -diff --git a/third_party/rust/syn/benches/rust.rs b/third_party/rust/syn/benches/rust.rs ---- a/third_party/rust/syn/benches/rust.rs -+++ b/third_party/rust/syn/benches/rust.rs -@@ -1,15 +1,22 @@ - // $ cargo bench --features full --bench rust - // - // Syn only, useful for profiling: - // $ RUSTFLAGS='--cfg syn_only' cargo build --release --features full --bench rust - - #![cfg_attr(not(syn_only), feature(rustc_private))] -+#![recursion_limit = "1024"] - -+#[macro_use] -+#[path = "../tests/macros/mod.rs"] -+mod macros; -+ -+#[path = "../tests/common/mod.rs"] -+mod common; - #[path = "../tests/repo/mod.rs"] - mod repo; - - use std::fs; - use std::time::{Duration, Instant}; - - #[cfg(not(syn_only))] - mod tokenstream_parse { -@@ -23,41 +30,45 @@ mod tokenstream_parse { - - mod syn_parse { - pub fn bench(content: &str) -> Result<(), ()> { - syn::parse_file(content).map(drop).map_err(drop) - } - } - - #[cfg(not(syn_only))] --mod libsyntax_parse { -+mod librustc_parse { - extern crate rustc_data_structures; -- extern crate syntax; -- extern crate syntax_pos; -+ extern crate rustc_errors; -+ extern crate rustc_parse; -+ extern crate rustc_session; -+ extern crate rustc_span; - - use rustc_data_structures::sync::Lrc; -- use syntax::edition::Edition; -- use syntax::errors::{emitter::Emitter, DiagnosticBuilder, Handler}; -- use syntax::parse::ParseSess; -- use syntax::source_map::{FilePathMapping, SourceMap}; -- use syntax_pos::FileName; -+ use rustc_errors::{emitter::Emitter, Diagnostic, Handler}; -+ use rustc_session::parse::ParseSess; -+ use rustc_span::source_map::{FilePathMapping, SourceMap}; -+ use rustc_span::{edition::Edition, FileName}; - - pub fn bench(content: &str) -> Result<(), ()> { - struct SilentEmitter; - - impl Emitter for SilentEmitter { -- fn emit_diagnostic(&mut self, _db: &DiagnosticBuilder) {} -+ fn emit_diagnostic(&mut self, _diag: &Diagnostic) {} -+ fn source_map(&self) -> Option<&Lrc> { -+ None -+ } - } - -- syntax::with_globals(Edition::Edition2018, || { -+ rustc_span::with_session_globals(Edition::Edition2018, || { - let cm = Lrc::new(SourceMap::new(FilePathMapping::empty())); - let emitter = Box::new(SilentEmitter); - let handler = Handler::with_emitter(false, None, emitter); - let sess = ParseSess::with_span_handler(handler, cm); -- if let Err(mut diagnostic) = syntax::parse::parse_crate_from_source_str( -+ if let Err(mut diagnostic) = rustc_parse::parse_crate_from_source_str( - FileName::Custom("bench".to_owned()), - content.to_owned(), - &sess, - ) { - diagnostic.cancel(); - return Err(()); - }; - Ok(()) -@@ -99,21 +110,21 @@ fn exec(mut codepath: impl FnMut(&str) - - assert_eq!(success, total); - begin.elapsed() - } - - fn main() { - repo::clone_rust(); - - macro_rules! testcases { -- ($($(#[$cfg:meta])* $name:path,)*) => { -+ ($($(#[$cfg:meta])* $name:ident,)*) => { - vec![ - $( - $(#[$cfg])* -- (stringify!($name), $name as fn(&str) -> Result<(), ()>), -+ (stringify!($name), $name::bench as fn(&str) -> Result<(), ()>), - )* - ] - }; - } - - #[cfg(not(syn_only))] - { - let mut lines = 0; -@@ -123,22 +134,22 @@ fn main() { - files += 1; - Ok(()) - }); - eprintln!("\n{} lines in {} files", lines, files); - } - - for (name, f) in testcases!( - #[cfg(not(syn_only))] -- read_from_disk::bench, -+ read_from_disk, - #[cfg(not(syn_only))] -- tokenstream_parse::bench, -- syn_parse::bench, -+ tokenstream_parse, -+ syn_parse, - #[cfg(not(syn_only))] -- libsyntax_parse::bench, -+ librustc_parse, - ) { - eprint!("{:20}", format!("{}:", name)); - let elapsed = exec(f); - eprintln!( - "elapsed={}.{:03}s", - elapsed.as_secs(), - elapsed.subsec_millis(), - ); -diff --git a/third_party/rust/syn/build.rs b/third_party/rust/syn/build.rs ---- a/third_party/rust/syn/build.rs -+++ b/third_party/rust/syn/build.rs -@@ -1,11 +1,11 @@ - use std::env; - use std::process::Command; --use std::str::{self, FromStr}; -+use std::str; - - // The rustc-cfg strings below are *not* public API. Please let us know by - // opening a GitHub issue if your build environment requires some way to enable - // these cfgs other than by executing our build script. - fn main() { - let compiler = match rustc_version() { - Some(compiler) => compiler, - None => return, -@@ -21,43 +21,19 @@ fn main() { - } - - struct Compiler { - minor: u32, - nightly: bool, - } - - fn rustc_version() -> Option { -- let rustc = match env::var_os("RUSTC") { -- Some(rustc) => rustc, -- None => return None, -- }; -- -- let output = match Command::new(rustc).arg("--version").output() { -- Ok(output) => output, -- Err(_) => return None, -- }; -- -- let version = match str::from_utf8(&output.stdout) { -- Ok(version) => version, -- Err(_) => return None, -- }; -- -+ let rustc = env::var_os("RUSTC")?; -+ let output = Command::new(rustc).arg("--version").output().ok()?; -+ let version = str::from_utf8(&output.stdout).ok()?; - let mut pieces = version.split('.'); - if pieces.next() != Some("rustc 1") { - return None; - } -- -- let next = match pieces.next() { -- Some(next) => next, -- None => return None, -- }; -- -- let minor = match u32::from_str(next) { -- Ok(minor) => minor, -- Err(_) => return None, -- }; -- -- Some(Compiler { -- minor: minor, -- nightly: version.contains("nightly"), -- }) -+ let minor = pieces.next()?.parse().ok()?; -+ let nightly = version.contains("nightly"); -+ Some(Compiler { minor, nightly }) - } -diff --git a/third_party/rust/syn/src/attr.rs b/third_party/rust/syn/src/attr.rs ---- a/third_party/rust/syn/src/attr.rs -+++ b/third_party/rust/syn/src/attr.rs -@@ -4,25 +4,21 @@ use crate::punctuated::Punctuated; - use std::iter; - - use proc_macro2::TokenStream; - - #[cfg(feature = "parsing")] - use crate::parse::{Parse, ParseBuffer, ParseStream, Parser, Result}; - #[cfg(feature = "parsing")] - use crate::punctuated::Pair; --#[cfg(feature = "extra-traits")] --use crate::tt::TokenStreamHelper; --#[cfg(feature = "extra-traits")] --use std::hash::{Hash, Hasher}; - - ast_struct! { - /// An attribute like `#[repr(transparent)]`. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - /// - ///
- /// - /// # Syntax - /// - /// Rust has six types of attributes. - /// -@@ -106,58 +102,69 @@ ast_struct! { - /// If the attribute you are parsing is expected to conform to the - /// conventional structured form of attribute, use [`parse_meta()`] to - /// obtain that structured representation. If the attribute follows some - /// other grammar of its own, use [`parse_args()`] to parse that into the - /// expected data structure. - /// - /// [`parse_meta()`]: Attribute::parse_meta - /// [`parse_args()`]: Attribute::parse_args -- pub struct Attribute #manual_extra_traits { -+ /// -+ ///


-+ /// -+ /// # Doc comments -+ /// -+ /// The compiler transforms doc comments, such as `/// comment` and `/*! -+ /// comment */`, into attributes before macros are expanded. Each comment is -+ /// expanded into an attribute of the form `#[doc = r"comment"]`. -+ /// -+ /// As an example, the following `mod` items are expanded identically: -+ /// -+ /// ``` -+ /// # use syn::{ItemMod, parse_quote}; -+ /// let doc: ItemMod = parse_quote! { -+ /// /// Single line doc comments -+ /// /// We write so many! -+ /// /** -+ /// * Multi-line comments... -+ /// * May span many lines -+ /// */ -+ /// mod example { -+ /// //! Of course, they can be inner too -+ /// /*! And fit in a single line */ -+ /// } -+ /// }; -+ /// let attr: ItemMod = parse_quote! { -+ /// #[doc = r" Single line doc comments"] -+ /// #[doc = r" We write so many!"] -+ /// #[doc = r" -+ /// * Multi-line comments... -+ /// * May span many lines -+ /// "] -+ /// mod example { -+ /// #![doc = r" Of course, they can be inner too"] -+ /// #![doc = r" And fit in a single line "] -+ /// } -+ /// }; -+ /// assert_eq!(doc, attr); -+ /// ``` -+ pub struct Attribute { - pub pound_token: Token![#], - pub style: AttrStyle, - pub bracket_token: token::Bracket, - pub path: Path, - pub tokens: TokenStream, - } - } - --#[cfg(feature = "extra-traits")] --impl Eq for Attribute {} -- --#[cfg(feature = "extra-traits")] --impl PartialEq for Attribute { -- fn eq(&self, other: &Self) -> bool { -- self.style == other.style -- && self.pound_token == other.pound_token -- && self.bracket_token == other.bracket_token -- && self.path == other.path -- && TokenStreamHelper(&self.tokens) == TokenStreamHelper(&other.tokens) -- } --} -- --#[cfg(feature = "extra-traits")] --impl Hash for Attribute { -- fn hash(&self, state: &mut H) -- where -- H: Hasher, -- { -- self.style.hash(state); -- self.pound_token.hash(state); -- self.bracket_token.hash(state); -- self.path.hash(state); -- TokenStreamHelper(&self.tokens).hash(state); -- } --} -- - impl Attribute { - /// Parses the content of the attribute, consisting of the path and tokens, - /// as a [`Meta`] if possible. - /// -- /// *This function is available if Syn is built with the `"parsing"` -+ /// *This function is available only if Syn is built with the `"parsing"` - /// feature.* - #[cfg(feature = "parsing")] - pub fn parse_meta(&self) -> Result { - fn clone_ident_segment(segment: &PathSegment) -> PathSegment { - PathSegment { - ident: segment.ident.clone(), - arguments: PathArguments::None, - } -@@ -194,91 +201,95 @@ impl Attribute { - /// parser; and - /// - the error message has a more useful span when `tokens` is empty. - /// - /// ```text - /// #[my_attr(value < 5)] - /// ^^^^^^^^^ what gets parsed - /// ``` - /// -- /// *This function is available if Syn is built with the `"parsing"` -+ /// *This function is available only if Syn is built with the `"parsing"` - /// feature.* - #[cfg(feature = "parsing")] - pub fn parse_args(&self) -> Result { - self.parse_args_with(T::parse) - } - - /// Parse the arguments to the attribute using the given parser. - /// -- /// *This function is available if Syn is built with the `"parsing"` -+ /// *This function is available only if Syn is built with the `"parsing"` - /// feature.* - #[cfg(feature = "parsing")] - pub fn parse_args_with(&self, parser: F) -> Result { - let parser = |input: ParseStream| { - let args = enter_args(self, input)?; - parse::parse_stream(parser, &args) - }; - parser.parse2(self.tokens.clone()) - } - - /// Parses zero or more outer attributes from the stream. - /// -- /// *This function is available if Syn is built with the `"parsing"` -+ /// *This function is available only if Syn is built with the `"parsing"` - /// feature.* - #[cfg(feature = "parsing")] - pub fn parse_outer(input: ParseStream) -> Result> { - let mut attrs = Vec::new(); - while input.peek(Token![#]) { - attrs.push(input.call(parsing::single_parse_outer)?); - } - Ok(attrs) - } - - /// Parses zero or more inner attributes from the stream. - /// -- /// *This function is available if Syn is built with the `"parsing"` -+ /// *This function is available only if Syn is built with the `"parsing"` - /// feature.* - #[cfg(feature = "parsing")] - pub fn parse_inner(input: ParseStream) -> Result> { - let mut attrs = Vec::new(); - while input.peek(Token![#]) && input.peek2(Token![!]) { - attrs.push(input.call(parsing::single_parse_inner)?); - } - Ok(attrs) - } - } - - #[cfg(feature = "parsing")] --fn error_expected_args(attr: &Attribute) -> Error { -+fn expected_parentheses(attr: &Attribute) -> String { - let style = match attr.style { - AttrStyle::Outer => "#", - AttrStyle::Inner(_) => "#!", - }; - - let mut path = String::new(); - for segment in &attr.path.segments { - if !path.is_empty() || attr.path.leading_colon.is_some() { - path += "::"; - } - path += &segment.ident.to_string(); - } - -- let msg = format!("expected attribute arguments: {}[{}(...)]", style, path); -- -- #[cfg(feature = "printing")] -- return Error::new_spanned(attr, msg); -- -- #[cfg(not(feature = "printing"))] -- return Error::new(attr.bracket_token.span, msg); -+ format!("{}[{}(...)]", style, path) - } - - #[cfg(feature = "parsing")] - fn enter_args<'a>(attr: &Attribute, input: ParseStream<'a>) -> Result> { - if input.is_empty() { -- return Err(error_expected_args(attr)); -+ let expected = expected_parentheses(attr); -+ let msg = format!("expected attribute arguments in parentheses: {}", expected); -+ return Err(crate::error::new2( -+ attr.pound_token.span, -+ attr.bracket_token.span, -+ msg, -+ )); -+ } else if input.peek(Token![=]) { -+ let expected = expected_parentheses(attr); -+ let msg = format!("expected parentheses: {}", expected); -+ return Err(input.error(msg)); - }; - - let content; - if input.peek(token::Paren) { - parenthesized!(content in input); - } else if input.peek(token::Bracket) { - bracketed!(content in input); - } else if input.peek(token::Brace) { -@@ -293,41 +304,40 @@ fn enter_args<'a>(attr: &Attribute, inpu - Err(input.error("unexpected token in attribute arguments")) - } - } - - ast_enum! { - /// Distinguishes between attributes that decorate an item and attributes - /// that are contained within an item. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - /// - /// # Outer attributes - /// - /// - `#[repr(transparent)]` - /// - `/// # Example` - /// - `/** Please file an issue */` - /// - /// # Inner attributes - /// - /// - `#![feature(proc_macro)]` - /// - `//! # Example` - /// - `/*! Please file an issue */` -- #[cfg_attr(feature = "clone-impls", derive(Copy))] - pub enum AttrStyle { - Outer, - Inner(Token![!]), - } - } - - ast_enum_of_structs! { - /// Content of a compile-time structured attribute. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - /// - /// ## Path - /// - /// A meta path is like the `test` in `#[test]`. - /// - /// ## List - /// -@@ -355,29 +365,29 @@ ast_enum_of_structs! { - /// A name-value pair within an attribute, like `feature = "nightly"`. - NameValue(MetaNameValue), - } - } - - ast_struct! { - /// A structured list within an attribute, like `derive(Copy, Clone)`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct MetaList { - pub path: Path, - pub paren_token: token::Paren, - pub nested: Punctuated, - } - } - - ast_struct! { - /// A name-value pair within an attribute, like `feature = "nightly"`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct MetaNameValue { - pub path: Path, - pub eq_token: Token![=], - pub lit: Lit, - } - } - -@@ -393,17 +403,17 @@ impl Meta { - Meta::NameValue(meta) => &meta.path, - } - } - } - - ast_enum_of_structs! { - /// Element of a compile-time attribute list. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - pub enum NestedMeta { - /// A structured meta item, like the `Copy` in `#[derive(Copy)]` which - /// would be a nested `Meta::Path`. - Meta(Meta), - - /// A Rust literal, like the `"new_name"` in `#[rename("new_name")]`. - Lit(Lit), -@@ -424,18 +434,18 @@ ast_enum_of_structs! { - /// /* ... */ - /// } - /// ``` - /// - /// The implementation of this macro would want to parse its attribute arguments - /// as type `AttributeArgs`. - /// - /// ``` --/// extern crate proc_macro; --/// -+/// # extern crate proc_macro; -+/// # - /// use proc_macro::TokenStream; - /// use syn::{parse_macro_input, AttributeArgs, ItemFn}; - /// - /// # const IGNORE: &str = stringify! { - /// #[proc_macro_attribute] - /// # }; - /// pub fn my_attribute(args: TokenStream, input: TokenStream) -> TokenStream { - /// let args = parse_macro_input!(args as AttributeArgs); -@@ -459,27 +469,27 @@ where - T: IntoIterator, - { - type Ret = iter::Filter bool>; - - fn outer(self) -> Self::Ret { - fn is_outer(attr: &&Attribute) -> bool { - match attr.style { - AttrStyle::Outer => true, -- _ => false, -+ AttrStyle::Inner(_) => false, - } - } - self.into_iter().filter(is_outer) - } - - fn inner(self) -> Self::Ret { - fn is_inner(attr: &&Attribute) -> bool { - match attr.style { - AttrStyle::Inner(_) => true, -- _ => false, -+ AttrStyle::Outer => false, - } - } - self.into_iter().filter(is_inner) - } - } - - #[cfg(feature = "parsing")] - pub mod parsing { -diff --git a/third_party/rust/syn/src/buffer.rs b/third_party/rust/syn/src/buffer.rs ---- a/third_party/rust/syn/src/buffer.rs -+++ b/third_party/rust/syn/src/buffer.rs -@@ -1,12 +1,12 @@ - //! A stably addressed token buffer supporting efficient traversal based on a - //! cheaply copyable cursor. - //! --//! *This module is available if Syn is built with the `"parsing"` feature.* -+//! *This module is available only if Syn is built with the `"parsing"` feature.* - - // This module is heavily commented as it contains most of the unsafe code in - // Syn, and caution should be used when editing it. The public-facing interface - // is 100% safe but the implementation is fragile internally. - - #[cfg(all( - not(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "wasi"))), - feature = "proc-macro" -@@ -31,17 +31,17 @@ enum Entry { - // token tree, or null if this is the outermost level. - End(*const Entry), - } - - /// A buffer that can be efficiently traversed multiple times, unlike - /// `TokenStream` which requires a deep copy in order to traverse more than - /// once. - /// --/// *This type is available if Syn is built with the `"parsing"` feature.* -+/// *This type is available only if Syn is built with the `"parsing"` feature.* - pub struct TokenBuffer { - // NOTE: Do not derive clone on this - there are raw pointers inside which - // will be messed up. Moving the `TokenBuffer` itself is safe as the actual - // backing slices won't be moved. - data: Box<[Entry]>, - } - - impl TokenBuffer { -@@ -93,17 +93,17 @@ impl TokenBuffer { - } - - TokenBuffer { data: entries } - } - - /// Creates a `TokenBuffer` containing all the tokens from the input - /// `TokenStream`. - /// -- /// *This method is available if Syn is built with both the `"parsing"` and -+ /// *This method is available only if Syn is built with both the `"parsing"` and - /// `"proc-macro"` features.* - #[cfg(all( - not(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "wasi"))), - feature = "proc-macro" - ))] - pub fn new(stream: pm::TokenStream) -> TokenBuffer { - Self::new2(stream.into()) - } -@@ -128,18 +128,17 @@ impl TokenBuffer { - /// and copied around. - /// - /// An empty `Cursor` can be created directly, or one may create a `TokenBuffer` - /// object and get a cursor to its first token with `begin()`. - /// - /// Two cursors are equal if they have the same location in the same input - /// stream, and have the same scope. - /// --/// *This type is available if Syn is built with the `"parsing"` feature.* --#[derive(Copy, Clone, Eq, PartialEq)] -+/// *This type is available only if Syn is built with the `"parsing"` feature.* - pub struct Cursor<'a> { - // The current entry which the `Cursor` is pointing at. - ptr: *const Entry, - // This is the only `Entry::End(..)` object which this cursor is allowed to - // point at. All other `End` objects are skipped over in `Cursor::create`. - scope: *const Entry, - // Cursor is covariant in 'a. This field ensures that our pointers are still - // valid. -@@ -196,37 +195,38 @@ impl<'a> Cursor<'a> { - - /// Bump the cursor to point at the next token after the current one. This - /// is undefined behavior if the cursor is currently looking at an - /// `Entry::End`. - unsafe fn bump(self) -> Cursor<'a> { - Cursor::create(self.ptr.offset(1), self.scope) - } - -- /// If the cursor is looking at a `None`-delimited group, move it to look at -- /// the first token inside instead. If the group is empty, this will move -+ /// While the cursor is looking at a `None`-delimited group, move it to look -+ /// at the first token inside instead. If the group is empty, this will move - /// the cursor past the `None`-delimited group. - /// - /// WARNING: This mutates its argument. - fn ignore_none(&mut self) { -- if let Entry::Group(group, buf) = self.entry() { -+ while let Entry::Group(group, buf) = self.entry() { - if group.delimiter() == Delimiter::None { - // NOTE: We call `Cursor::create` here to make sure that - // situations where we should immediately exit the span after - // entering it are handled correctly. - unsafe { - *self = Cursor::create(&buf.data[0], self.scope); - } -+ } else { -+ break; - } - } - } - - /// Checks whether the cursor is currently pointing at the end of its valid - /// scope. -- #[inline] - pub fn eof(self) -> bool { - // We're at eof if we're at the end of our scope. - self.ptr == self.scope - } - - /// If the cursor is pointing at a `Group` with the given delimiter, returns - /// a cursor into that group and one pointing to the next `TokenTree`. - pub fn group(mut self, delim: Delimiter) -> Option<(Cursor<'a>, Span, Cursor<'a>)> { -@@ -337,16 +337,54 @@ impl<'a> Cursor<'a> { - match self.entry() { - Entry::Group(group, _) => group.span(), - Entry::Literal(l) => l.span(), - Entry::Ident(t) => t.span(), - Entry::Punct(o) => o.span(), - Entry::End(..) => Span::call_site(), - } - } -+ -+ /// Skip over the next token without cloning it. Returns `None` if this -+ /// cursor points to eof. -+ /// -+ /// This method treats `'lifetimes` as a single token. -+ pub(crate) fn skip(self) -> Option> { -+ match self.entry() { -+ Entry::End(..) => None, -+ -+ // Treat lifetimes as a single tt for the purposes of 'skip'. -+ Entry::Punct(op) if op.as_char() == '\'' && op.spacing() == Spacing::Joint => { -+ let next = unsafe { self.bump() }; -+ match next.entry() { -+ Entry::Ident(_) => Some(unsafe { next.bump() }), -+ _ => Some(next), -+ } -+ } -+ _ => Some(unsafe { self.bump() }), -+ } -+ } -+} -+ -+impl<'a> Copy for Cursor<'a> {} -+ -+impl<'a> Clone for Cursor<'a> { -+ fn clone(&self) -> Self { -+ *self -+ } -+} -+ -+impl<'a> Eq for Cursor<'a> {} -+ -+impl<'a> PartialEq for Cursor<'a> { -+ fn eq(&self, other: &Self) -> bool { -+ let Cursor { ptr, scope, marker } = self; -+ let _ = marker; -+ *ptr == other.ptr && *scope == other.scope -+ } - } - - pub(crate) fn same_scope(a: Cursor, b: Cursor) -> bool { - a.scope == b.scope - } - - pub(crate) fn open_span_of_group(cursor: Cursor) -> Span { - match cursor.entry() { -diff --git a/third_party/rust/syn/src/custom_keyword.rs b/third_party/rust/syn/src/custom_keyword.rs ---- a/third_party/rust/syn/src/custom_keyword.rs -+++ b/third_party/rust/syn/src/custom_keyword.rs -@@ -81,46 +81,46 @@ - /// value: input.parse()?, - /// }) - /// } else { - /// Err(lookahead.error()) - /// } - /// } - /// } - /// ``` --#[macro_export(local_inner_macros)] -+#[macro_export] - macro_rules! custom_keyword { - ($ident:ident) => { - #[allow(non_camel_case_types)] - pub struct $ident { - pub span: $crate::export::Span, - } - - #[doc(hidden)] -- #[allow(non_snake_case)] -+ #[allow(dead_code, non_snake_case)] - pub fn $ident<__S: $crate::export::IntoSpans<[$crate::export::Span; 1]>>( - span: __S, - ) -> $ident { - $ident { - span: $crate::export::IntoSpans::into_spans(span)[0], - } - } - - impl $crate::export::Default for $ident { - fn default() -> Self { - $ident { - span: $crate::export::Span::call_site(), - } - } - } - -- impl_parse_for_custom_keyword!($ident); -- impl_to_tokens_for_custom_keyword!($ident); -- impl_clone_for_custom_keyword!($ident); -- impl_extra_traits_for_custom_keyword!($ident); -+ $crate::impl_parse_for_custom_keyword!($ident); -+ $crate::impl_to_tokens_for_custom_keyword!($ident); -+ $crate::impl_clone_for_custom_keyword!($ident); -+ $crate::impl_extra_traits_for_custom_keyword!($ident); - }; - } - - // Not public API. - #[cfg(feature = "parsing")] - #[doc(hidden)] - #[macro_export] - macro_rules! impl_parse_for_custom_keyword { -diff --git a/third_party/rust/syn/src/custom_punctuation.rs b/third_party/rust/syn/src/custom_punctuation.rs ---- a/third_party/rust/syn/src/custom_punctuation.rs -+++ b/third_party/rust/syn/src/custom_punctuation.rs -@@ -69,67 +69,67 @@ - /// Ok(tokens) - /// } - /// - /// fn main() { - /// let input = r#" a::b c::d::e "#; - /// let _: PathSegments = syn::parse_str(input).unwrap(); - /// } - /// ``` --#[macro_export(local_inner_macros)] -+#[macro_export] - macro_rules! custom_punctuation { - ($ident:ident, $($tt:tt)+) => { - pub struct $ident { -- pub spans: custom_punctuation_repr!($($tt)+), -+ pub spans: $crate::custom_punctuation_repr!($($tt)+), - } - - #[doc(hidden)] -- #[allow(non_snake_case)] -- pub fn $ident<__S: $crate::export::IntoSpans>( -+ #[allow(dead_code, non_snake_case)] -+ pub fn $ident<__S: $crate::export::IntoSpans<$crate::custom_punctuation_repr!($($tt)+)>>( - spans: __S, - ) -> $ident { -- let _validate_len = 0 $(+ custom_punctuation_len!(strict, $tt))*; -+ let _validate_len = 0 $(+ $crate::custom_punctuation_len!(strict, $tt))*; - $ident { - spans: $crate::export::IntoSpans::into_spans(spans) - } - } - - impl $crate::export::Default for $ident { - fn default() -> Self { - $ident($crate::export::Span::call_site()) - } - } - -- impl_parse_for_custom_punctuation!($ident, $($tt)+); -- impl_to_tokens_for_custom_punctuation!($ident, $($tt)+); -- impl_clone_for_custom_punctuation!($ident, $($tt)+); -- impl_extra_traits_for_custom_punctuation!($ident, $($tt)+); -+ $crate::impl_parse_for_custom_punctuation!($ident, $($tt)+); -+ $crate::impl_to_tokens_for_custom_punctuation!($ident, $($tt)+); -+ $crate::impl_clone_for_custom_punctuation!($ident, $($tt)+); -+ $crate::impl_extra_traits_for_custom_punctuation!($ident, $($tt)+); - }; - } - - // Not public API. - #[cfg(feature = "parsing")] - #[doc(hidden)] --#[macro_export(local_inner_macros)] -+#[macro_export] - macro_rules! impl_parse_for_custom_punctuation { - ($ident:ident, $($tt:tt)+) => { - impl $crate::token::CustomToken for $ident { - fn peek(cursor: $crate::buffer::Cursor) -> bool { -- $crate::token::parsing::peek_punct(cursor, stringify_punct!($($tt)+)) -+ $crate::token::parsing::peek_punct(cursor, $crate::stringify_punct!($($tt)+)) - } - - fn display() -> &'static $crate::export::str { -- custom_punctuation_concat!("`", stringify_punct!($($tt)+), "`") -+ concat!("`", $crate::stringify_punct!($($tt)+), "`") - } - } - - impl $crate::parse::Parse for $ident { - fn parse(input: $crate::parse::ParseStream) -> $crate::parse::Result<$ident> { -- let spans: custom_punctuation_repr!($($tt)+) = -- $crate::token::parsing::punct(input, stringify_punct!($($tt)+))?; -+ let spans: $crate::custom_punctuation_repr!($($tt)+) = -+ $crate::token::parsing::punct(input, $crate::stringify_punct!($($tt)+))?; - Ok($ident(spans)) - } - } - }; - } - - // Not public API. - #[cfg(not(feature = "parsing"))] -@@ -137,22 +137,22 @@ macro_rules! impl_parse_for_custom_punct - #[macro_export] - macro_rules! impl_parse_for_custom_punctuation { - ($ident:ident, $($tt:tt)+) => {}; - } - - // Not public API. - #[cfg(feature = "printing")] - #[doc(hidden)] --#[macro_export(local_inner_macros)] -+#[macro_export] - macro_rules! impl_to_tokens_for_custom_punctuation { - ($ident:ident, $($tt:tt)+) => { - impl $crate::export::ToTokens for $ident { - fn to_tokens(&self, tokens: &mut $crate::export::TokenStream2) { -- $crate::token::printing::punct(stringify_punct!($($tt)+), &self.spans, tokens) -+ $crate::token::printing::punct($crate::stringify_punct!($($tt)+), &self.spans, tokens) - } - } - }; - } - - // Not public API. - #[cfg(not(feature = "printing"))] - #[doc(hidden)] -@@ -216,26 +216,26 @@ macro_rules! impl_extra_traits_for_custo - #[doc(hidden)] - #[macro_export] - macro_rules! impl_extra_traits_for_custom_punctuation { - ($ident:ident, $($tt:tt)+) => {}; - } - - // Not public API. - #[doc(hidden)] --#[macro_export(local_inner_macros)] -+#[macro_export] - macro_rules! custom_punctuation_repr { - ($($tt:tt)+) => { -- [$crate::export::Span; 0 $(+ custom_punctuation_len!(lenient, $tt))+] -+ [$crate::export::Span; 0 $(+ $crate::custom_punctuation_len!(lenient, $tt))+] - }; - } - - // Not public API. - #[doc(hidden)] --#[macro_export(local_inner_macros)] -+#[macro_export] - #[rustfmt::skip] - macro_rules! custom_punctuation_len { - ($mode:ident, +) => { 1 }; - ($mode:ident, +=) => { 2 }; - ($mode:ident, &) => { 1 }; - ($mode:ident, &&) => { 2 }; - ($mode:ident, &=) => { 2 }; - ($mode:ident, @) => { 1 }; -@@ -274,17 +274,17 @@ macro_rules! custom_punctuation_len { - ($mode:ident, <<=) => { 3 }; - ($mode:ident, >>) => { 2 }; - ($mode:ident, >>=) => { 3 }; - ($mode:ident, *) => { 1 }; - ($mode:ident, -) => { 1 }; - ($mode:ident, -=) => { 2 }; - ($mode:ident, ~) => { 1 }; - (lenient, $tt:tt) => { 0 }; -- (strict, $tt:tt) => {{ custom_punctuation_unexpected!($tt); 0 }}; -+ (strict, $tt:tt) => {{ $crate::custom_punctuation_unexpected!($tt); 0 }}; - } - - // Not public API. - #[doc(hidden)] - #[macro_export] - macro_rules! custom_punctuation_unexpected { - () => {}; - } -@@ -292,18 +292,8 @@ macro_rules! custom_punctuation_unexpect - // Not public API. - #[doc(hidden)] - #[macro_export] - macro_rules! stringify_punct { - ($($tt:tt)+) => { - concat!($(stringify!($tt)),+) - }; - } -- --// Not public API. --// Without this, local_inner_macros breaks when looking for concat! --#[doc(hidden)] --#[macro_export] --macro_rules! custom_punctuation_concat { -- ($($tt:tt)*) => { -- concat!($($tt)*) -- }; --} -diff --git a/third_party/rust/syn/src/data.rs b/third_party/rust/syn/src/data.rs ---- a/third_party/rust/syn/src/data.rs -+++ b/third_party/rust/syn/src/data.rs -@@ -1,15 +1,15 @@ - use super::*; - use crate::punctuated::Punctuated; - - ast_struct! { - /// An enum variant. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - pub struct Variant { - /// Attributes tagged on the variant. - pub attrs: Vec, - - /// Name of the variant. - pub ident: Ident, - -@@ -19,17 +19,17 @@ ast_struct! { - /// Explicit discriminant: `Variant = 1` - pub discriminant: Option<(Token![=], Expr)>, - } - } - - ast_enum_of_structs! { - /// Data stored within an enum variant or struct. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - /// - /// # Syntax tree enum - /// - /// This type is a [syntax tree enum]. - /// - /// [syntax tree enum]: enum.Expr.html#syntax-tree-enums - // -@@ -47,28 +47,28 @@ ast_enum_of_structs! { - Unit, - } - } - - ast_struct! { - /// Named fields of a struct or struct variant such as `Point { x: f64, - /// y: f64 }`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct FieldsNamed { - pub brace_token: token::Brace, - pub named: Punctuated, - } - } - - ast_struct! { - /// Unnamed fields of a tuple struct or tuple variant such as `Some(T)`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct FieldsUnnamed { - pub paren_token: token::Paren, - pub unnamed: Punctuated, - } - } - - impl Fields { -@@ -88,16 +88,34 @@ impl Fields { - /// struct or variant's fields uniformly. - pub fn iter_mut(&mut self) -> punctuated::IterMut { - match self { - Fields::Unit => crate::punctuated::empty_punctuated_iter_mut(), - Fields::Named(f) => f.named.iter_mut(), - Fields::Unnamed(f) => f.unnamed.iter_mut(), - } - } -+ -+ /// Returns the number of fields. -+ pub fn len(&self) -> usize { -+ match self { -+ Fields::Unit => 0, -+ Fields::Named(f) => f.named.len(), -+ Fields::Unnamed(f) => f.unnamed.len(), -+ } -+ } -+ -+ /// Returns `true` if there are zero fields. -+ pub fn is_empty(&self) -> bool { -+ match self { -+ Fields::Unit => true, -+ Fields::Named(f) => f.named.is_empty(), -+ Fields::Unnamed(f) => f.unnamed.is_empty(), -+ } -+ } - } - - impl IntoIterator for Fields { - type Item = Field; - type IntoIter = punctuated::IntoIter; - - fn into_iter(self) -> Self::IntoIter { - match self { -@@ -124,17 +142,17 @@ impl<'a> IntoIterator for &'a mut Fields - fn into_iter(self) -> Self::IntoIter { - self.iter_mut() - } - } - - ast_struct! { - /// A field of a struct or enum variant. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - pub struct Field { - /// Attributes tagged on the field. - pub attrs: Vec, - - /// Visibility of the field. - pub vis: Visibility, - -@@ -149,17 +167,17 @@ ast_struct! { - pub ty: Type, - } - } - - ast_enum_of_structs! { - /// The visibility level of an item: inherited or `pub` or - /// `pub(restricted)`. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - /// - /// # Syntax tree enum - /// - /// This type is a [syntax tree enum]. - /// - /// [syntax tree enum]: enum.Expr.html#syntax-tree-enums - // -@@ -179,58 +197,61 @@ ast_enum_of_structs! { - /// An inherited visibility, which usually means private. - Inherited, - } - } - - ast_struct! { - /// A public visibility level: `pub`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct VisPublic { - pub pub_token: Token![pub], - } - } - - ast_struct! { - /// A crate-level visibility: `crate`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct VisCrate { - pub crate_token: Token![crate], - } - } - - ast_struct! { - /// A visibility level restricted to some path: `pub(self)` or - /// `pub(super)` or `pub(crate)` or `pub(in some::module)`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct VisRestricted { - pub pub_token: Token![pub], - pub paren_token: token::Paren, - pub in_token: Option, - pub path: Box, - } - } - - #[cfg(feature = "parsing")] - pub mod parsing { - use super::*; - - use crate::ext::IdentExt; -+ use crate::parse::discouraged::Speculative; - use crate::parse::{Parse, ParseStream, Result}; - - impl Parse for Variant { - fn parse(input: ParseStream) -> Result { -+ let attrs = input.call(Attribute::parse_outer)?; -+ let _visibility: Visibility = input.parse()?; - Ok(Variant { -- attrs: input.call(Attribute::parse_outer)?, -+ attrs, - ident: input.parse()?, - fields: { - if input.peek(token::Brace) { - Fields::Named(input.parse()?) - } else if input.peek(token::Paren) { - Fields::Unnamed(input.parse()?) - } else { - Fields::Unit -@@ -290,68 +311,99 @@ pub mod parsing { - colon_token: None, - ty: input.parse()?, - }) - } - } - - impl Parse for Visibility { - fn parse(input: ParseStream) -> Result { -+ // Recognize an empty None-delimited group, as produced by a $:vis -+ // matcher that matched no tokens. -+ if input.peek(token::Group) { -+ let ahead = input.fork(); -+ let group = crate::group::parse_group(&ahead)?; -+ if group.content.is_empty() { -+ input.advance_to(&ahead); -+ return Ok(Visibility::Inherited); -+ } -+ } -+ - if input.peek(Token![pub]) { - Self::parse_pub(input) - } else if input.peek(Token![crate]) { - Self::parse_crate(input) - } else { - Ok(Visibility::Inherited) - } - } - } - - impl Visibility { - fn parse_pub(input: ParseStream) -> Result { - let pub_token = input.parse::()?; - - if input.peek(token::Paren) { -- // TODO: optimize using advance_to - let ahead = input.fork(); -- let mut content; -- parenthesized!(content in ahead); - -+ let content; -+ let paren_token = parenthesized!(content in ahead); - if content.peek(Token![crate]) - || content.peek(Token![self]) - || content.peek(Token![super]) - { -+ let path = content.call(Ident::parse_any)?; -+ -+ // Ensure there are no additional tokens within `content`. -+ // Without explicitly checking, we may misinterpret a tuple -+ // field as a restricted visibility, causing a parse error. -+ // e.g. `pub (crate::A, crate::B)` (Issue #720). -+ if content.is_empty() { -+ input.advance_to(&ahead); -+ return Ok(Visibility::Restricted(VisRestricted { -+ pub_token, -+ paren_token, -+ in_token: None, -+ path: Box::new(Path::from(path)), -+ })); -+ } -+ } else if content.peek(Token![in]) { -+ let in_token: Token![in] = content.parse()?; -+ let path = content.call(Path::parse_mod_style)?; -+ -+ input.advance_to(&ahead); - return Ok(Visibility::Restricted(VisRestricted { - pub_token, -- paren_token: parenthesized!(content in input), -- in_token: None, -- path: Box::new(Path::from(content.call(Ident::parse_any)?)), -- })); -- } else if content.peek(Token![in]) { -- return Ok(Visibility::Restricted(VisRestricted { -- pub_token, -- paren_token: parenthesized!(content in input), -- in_token: Some(content.parse()?), -- path: Box::new(content.call(Path::parse_mod_style)?), -+ paren_token, -+ in_token: Some(in_token), -+ path: Box::new(path), - })); - } - } - - Ok(Visibility::Public(VisPublic { pub_token })) - } - - fn parse_crate(input: ParseStream) -> Result { - if input.peek2(Token![::]) { - Ok(Visibility::Inherited) - } else { - Ok(Visibility::Crate(VisCrate { - crate_token: input.parse()?, - })) - } - } -+ -+ #[cfg(feature = "full")] -+ pub(crate) fn is_some(&self) -> bool { -+ match self { -+ Visibility::Inherited => false, -+ _ => true, -+ } -+ } - } - } - - #[cfg(feature = "printing")] - mod printing { - use super::*; - - use proc_macro2::TokenStream; -diff --git a/third_party/rust/syn/src/derive.rs b/third_party/rust/syn/src/derive.rs ---- a/third_party/rust/syn/src/derive.rs -+++ b/third_party/rust/syn/src/derive.rs -@@ -1,15 +1,15 @@ - use super::*; - use crate::punctuated::Punctuated; - - ast_struct! { - /// Data structure sent to a `proc_macro_derive` macro. - /// -- /// *This type is available if Syn is built with the `"derive"` feature.* -+ /// *This type is available only if Syn is built with the `"derive"` feature.* - pub struct DeriveInput { - /// Attributes tagged on the whole struct or enum. - pub attrs: Vec, - - /// Visibility of the struct or enum. - pub vis: Visibility, - - /// Name of the struct or enum. -@@ -21,17 +21,17 @@ ast_struct! { - /// Data within the struct or enum. - pub data: Data, - } - } - - ast_enum_of_structs! { - /// The storage of a struct, enum or union data structure. - /// -- /// *This type is available if Syn is built with the `"derive"` feature.* -+ /// *This type is available only if Syn is built with the `"derive"` feature.* - /// - /// # Syntax tree enum - /// - /// This type is a [syntax tree enum]. - /// - /// [syntax tree enum]: enum.Expr.html#syntax-tree-enums - // - // TODO: change syntax-tree-enum link to an intra rustdoc link, currently -@@ -48,41 +48,41 @@ ast_enum_of_structs! { - } - - do_not_generate_to_tokens - } - - ast_struct! { - /// A struct input to a `proc_macro_derive` macro. - /// -- /// *This type is available if Syn is built with the `"derive"` -+ /// *This type is available only if Syn is built with the `"derive"` - /// feature.* - pub struct DataStruct { - pub struct_token: Token![struct], - pub fields: Fields, - pub semi_token: Option, - } - } - - ast_struct! { - /// An enum input to a `proc_macro_derive` macro. - /// -- /// *This type is available if Syn is built with the `"derive"` -+ /// *This type is available only if Syn is built with the `"derive"` - /// feature.* - pub struct DataEnum { - pub enum_token: Token![enum], - pub brace_token: token::Brace, - pub variants: Punctuated, - } - } - - ast_struct! { - /// An untagged union input to a `proc_macro_derive` macro. - /// -- /// *This type is available if Syn is built with the `"derive"` -+ /// *This type is available only if Syn is built with the `"derive"` - /// feature.* - pub struct DataUnion { - pub union_token: Token![union], - pub fields: FieldsNamed, - } - } - - #[cfg(feature = "parsing")] -diff --git a/third_party/rust/syn/src/discouraged.rs b/third_party/rust/syn/src/discouraged.rs ---- a/third_party/rust/syn/src/discouraged.rs -+++ b/third_party/rust/syn/src/discouraged.rs -@@ -11,17 +11,17 @@ pub trait Speculative { - /// stream to the fork to "commit" the parsing from the fork to the main - /// stream. - /// - /// If you can avoid doing this, you should, as it limits the ability to - /// generate useful errors. That said, it is often the only way to parse - /// syntax of the form `A* B*` for arbitrary syntax `A` and `B`. The problem - /// is that when the fork fails to parse an `A`, it's impossible to tell - /// whether that was because of a syntax error and the user meant to provide -- /// an `A`, or that the `A`s are finished and its time to start parsing -+ /// an `A`, or that the `A`s are finished and it's time to start parsing - /// `B`s. Use with care. - /// - /// Also note that if `A` is a subset of `B`, `A* B*` can be parsed by - /// parsing `B*` and removing the leading members of `A` from the - /// repetition, bypassing the need to involve the downsides associated with - /// speculative parsing. - /// - /// [`ParseStream::fork`]: ParseBuffer::fork -@@ -67,17 +67,16 @@ pub trait Speculative { - /// # } - /// - /// impl Parse for PathSegment { - /// fn parse(input: ParseStream) -> Result { - /// if input.peek(Token![super]) - /// || input.peek(Token![self]) - /// || input.peek(Token![Self]) - /// || input.peek(Token![crate]) -- /// || input.peek(Token![extern]) - /// { - /// let ident = input.call(Ident::parse_any)?; - /// return Ok(PathSegment::from(ident)); - /// } - /// - /// let ident = input.parse()?; - /// if input.peek(Token![::]) && input.peek3(Token![<]) { - /// return Ok(PathSegment { -@@ -159,13 +158,37 @@ pub trait Speculative { - } - - impl<'a> Speculative for ParseBuffer<'a> { - fn advance_to(&self, fork: &Self) { - if !crate::buffer::same_scope(self.cursor(), fork.cursor()) { - panic!("Fork was not derived from the advancing parse stream"); - } - -+ let (self_unexp, self_sp) = inner_unexpected(self); -+ let (fork_unexp, fork_sp) = inner_unexpected(fork); -+ if !Rc::ptr_eq(&self_unexp, &fork_unexp) { -+ match (fork_sp, self_sp) { -+ // Unexpected set on the fork, but not on `self`, copy it over. -+ (Some(span), None) => { -+ self_unexp.set(Unexpected::Some(span)); -+ } -+ // Unexpected unset. Use chain to propagate errors from fork. -+ (None, None) => { -+ fork_unexp.set(Unexpected::Chain(self_unexp)); -+ -+ // Ensure toplevel 'unexpected' tokens from the fork don't -+ // bubble up the chain by replacing the root `unexpected` -+ // pointer, only 'unexpected' tokens from existing group -+ // parsers should bubble. -+ fork.unexpected -+ .set(Some(Rc::new(Cell::new(Unexpected::None)))); -+ } -+ // Unexpected has been set on `self`. No changes needed. -+ (_, Some(_)) => {} -+ } -+ } -+ - // See comment on `cell` in the struct definition. - self.cell - .set(unsafe { mem::transmute::>(fork.cursor()) }) - } - } -diff --git a/third_party/rust/syn/src/error.rs b/third_party/rust/syn/src/error.rs ---- a/third_party/rust/syn/src/error.rs -+++ b/third_party/rust/syn/src/error.rs -@@ -1,9 +1,8 @@ --use std; - use std::fmt::{self, Debug, Display}; - use std::iter::FromIterator; - use std::slice; - use std::vec; - - use proc_macro2::{ - Delimiter, Group, Ident, LexError, Literal, Punct, Spacing, Span, TokenStream, TokenTree, - }; -@@ -27,18 +26,18 @@ pub type Result = std::result::Result - /// message than simply panicking the macro. - /// - /// [`compile_error!`]: https://doc.rust-lang.org/std/macro.compile_error.html - /// - /// When parsing macro input, the [`parse_macro_input!`] macro handles the - /// conversion to `compile_error!` automatically. - /// - /// ``` --/// extern crate proc_macro; --/// -+/// # extern crate proc_macro; -+/// # - /// use proc_macro::TokenStream; - /// use syn::{parse_macro_input, AttributeArgs, ItemFn}; - /// - /// # const IGNORE: &str = stringify! { - /// #[proc_macro_attribute] - /// # }; - /// pub fn my_attr(args: TokenStream, input: TokenStream) -> TokenStream { - /// let args = parse_macro_input!(args as AttributeArgs); -@@ -77,17 +76,16 @@ pub type Result = std::result::Result - /// # use proc_macro2::TokenStream; - /// # use syn::{DeriveInput, Result}; - /// # - /// # pub fn my_derive(input: DeriveInput) -> Result { - /// # unimplemented!() - /// # } - /// # } - /// ``` --#[derive(Clone)] - pub struct Error { - messages: Vec, - } - - struct ErrorMessage { - // Span is implemented as an index into a thread-local interner to keep the - // size small. It is not safe to access from a different thread. We want - // errors to be Send and Sync to play nicely with the Failure crate, so pin -@@ -245,16 +243,27 @@ pub fn new_at(scope: Span, c - if cursor.eof() { - Error::new(scope, format!("unexpected end of input, {}", message)) - } else { - let span = crate::buffer::open_span_of_group(cursor); - Error::new(span, message) - } - } - -+#[cfg(all(feature = "parsing", any(feature = "full", feature = "derive")))] -+pub fn new2(start: Span, end: Span, message: T) -> Error { -+ Error { -+ messages: vec![ErrorMessage { -+ start_span: ThreadBound::new(start), -+ end_span: ThreadBound::new(end), -+ message: message.to_string(), -+ }], -+ } -+} -+ - impl Debug for Error { - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - if self.messages.len() == 1 { - formatter - .debug_tuple("Error") - .field(&self.messages[0]) - .finish() - } else { -@@ -273,16 +282,24 @@ impl Debug for ErrorMessage { - } - - impl Display for Error { - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - formatter.write_str(&self.messages[0].message) - } - } - -+impl Clone for Error { -+ fn clone(&self) -> Self { -+ Error { -+ messages: self.messages.clone(), -+ } -+ } -+} -+ - impl Clone for ErrorMessage { - fn clone(&self) -> Self { - let start = self - .start_span - .get() - .cloned() - .unwrap_or_else(Span::call_site); - let end = self.end_span.get().cloned().unwrap_or_else(Span::call_site); -@@ -350,8 +367,16 @@ impl<'a> Iterator for Iter<'a> { - type Item = Error; - - fn next(&mut self) -> Option { - Some(Error { - messages: vec![self.messages.next()?.clone()], - }) - } - } -+ -+impl Extend for Error { -+ fn extend>(&mut self, iter: T) { -+ for err in iter { -+ self.combine(err); -+ } -+ } -+} -diff --git a/third_party/rust/syn/src/expr.rs b/third_party/rust/syn/src/expr.rs ---- a/third_party/rust/syn/src/expr.rs -+++ b/third_party/rust/syn/src/expr.rs -@@ -1,23 +1,26 @@ - use super::*; - use crate::punctuated::Punctuated; --#[cfg(feature = "extra-traits")] --use crate::tt::TokenStreamHelper; -+#[cfg(feature = "full")] -+use crate::reserved::Reserved; - use proc_macro2::{Span, TokenStream}; --#[cfg(feature = "extra-traits")] -+#[cfg(feature = "printing")] -+use quote::IdentFragment; -+#[cfg(feature = "printing")] -+use std::fmt::{self, Display}; - use std::hash::{Hash, Hasher}; --#[cfg(all(feature = "parsing", feature = "full"))] -+#[cfg(feature = "parsing")] - use std::mem; - - ast_enum_of_structs! { - /// A Rust expression. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -- /// feature.* -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` -+ /// feature, but most of the variants are not available unless "full" is enabled.* - /// - /// # Syntax tree enums - /// - /// This type is a syntax tree enum. In Syn this and other syntax tree enums - /// are designed to be traversed using the following rebinding idiom. - /// - /// ``` - /// # use syn::Expr; -@@ -78,17 +81,17 @@ ast_enum_of_structs! { - /// if let Expr::Tuple(base) = *discriminant.base { - /// # } - /// # } - /// ``` - /// - /// A sign that you may not be choosing the right variable names is if you - /// see names getting repeated in your code, like accessing - /// `receiver.receiver` or `pat.pat` or `cond.cond`. -- pub enum Expr #manual_extra_traits { -+ pub enum Expr { - /// A slice literal expression: `[a, b, c, d]`. - Array(ExprArray), - - /// An assignment expression: `a = compute()`. - Assign(ExprAssign), - - /// A compound assignment expression: `counter += 1`. - AssignOp(ExprAssignOp), -@@ -223,191 +226,191 @@ ast_enum_of_structs! { - #[doc(hidden)] - __Nonexhaustive, - } - } - - ast_struct! { - /// A slice literal expression: `[a, b, c, d]`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprArray #full { - pub attrs: Vec, - pub bracket_token: token::Bracket, - pub elems: Punctuated, - } - } - - ast_struct! { - /// An assignment expression: `a = compute()`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprAssign #full { - pub attrs: Vec, - pub left: Box, - pub eq_token: Token![=], - pub right: Box, - } - } - - ast_struct! { - /// A compound assignment expression: `counter += 1`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprAssignOp #full { - pub attrs: Vec, - pub left: Box, - pub op: BinOp, - pub right: Box, - } - } - - ast_struct! { - /// An async block: `async { ... }`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprAsync #full { - pub attrs: Vec, - pub async_token: Token![async], - pub capture: Option, - pub block: Block, - } - } - - ast_struct! { - /// An await expression: `fut.await`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprAwait #full { - pub attrs: Vec, - pub base: Box, - pub dot_token: Token![.], - pub await_token: token::Await, - } - } - - ast_struct! { - /// A binary operation: `a + b`, `a * b`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct ExprBinary { - pub attrs: Vec, - pub left: Box, - pub op: BinOp, - pub right: Box, - } - } - - ast_struct! { - /// A blocked scope: `{ ... }`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprBlock #full { - pub attrs: Vec, - pub label: Option
-EOF +mkdir -p $RPM_BUILD_ROOT%{_datadir}/metainfo +%{__sed} -e "s/__VERSION__/%{version}/" \ + -e "s/__DATE__/$(date '+%Y-%m-%d')/" \ + %{SOURCE34} > %{buildroot}%{_datadir}/metainfo/net.thunderbird.Thunderbird.appdata.xml +#=============================================================================== + +%check +appstream-util validate-relax --nonet %{buildroot}%{_datadir}/metainfo/*.appdata.xml #=============================================================================== @@ -685,8 +723,10 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %files -f %{name}.lang %defattr(-,root,root,-) %attr(755,root,root) %{_bindir}/thunderbird -%{_datadir}/appdata/*.appdata.xml -%attr(644,root,root) %{_datadir}/applications/mozilla-thunderbird.desktop +%{_datadir}/metainfo/*.appdata.xml +%attr(644,root,root) %{_datadir}/applications/net.thunderbird.Thunderbird.desktop +%dir %{_sysconfdir}/%{name} +%dir %{_sysconfdir}/%{name}/* %dir %{_datadir}/mozilla/extensions/%{thunderbird_app_id} %dir %{_libdir}/mozilla/extensions/%{thunderbird_app_id} %dir %{mozappdir} @@ -696,7 +736,6 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %ghost %{mozappdir}/components/compreg.dat %ghost %{mozappdir}/components/xpti.dat %{mozappdir}/omni.ja -%{mozappdir}/plugin-container %{mozappdir}/defaults %{mozappdir}/dictionaries %if %{build_langpacks} @@ -707,9 +746,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %{mozappdir}/thunderbird-bin %{mozappdir}/thunderbird %{mozappdir}/*.so +%exclude %{mozappdir}/librnp.so %{mozappdir}/platform.ini %{mozappdir}/application.ini -%{mozappdir}/features/*.xpi %exclude %{mozappdir}/removed-files %{_datadir}/icons/hicolor/16x16/apps/thunderbird.png %{_datadir}/icons/hicolor/22x22/apps/thunderbird.png @@ -729,15 +768,451 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %{mozappdir}/*.chk %endif %{mozappdir}/dependentlibs.list -%{mozappdir}/distribution %{mozappdir}/fonts %{mozappdir}/pingsender -%{mozappdir}/gtk2/libmozgtk.so +%{mozappdir}/glxtest +%{mozappdir}/vaapitest +%{mozappdir}/interesting_serverknobs.json #=============================================================================== %changelog -* Thu Oct 22 2020 Jan Horak - 78.4.0-1 +* Wed Jan 14 2026 Jan Horak - 147.0-1 +- Update to 147.0 + +* Fri Jan 02 2026 Adam Williamson - 146.0.1-3 +- Port aarch64 crash fix from Firefox (upstream #2005469 / #2008377) + +* Mon Dec 22 2025 Adam Williamson - 146.0.1-2 +- Backport fix for resize crash bug (RHBZ #2423824 upstream #1998188) + +* Thu Dec 18 2025 Jan Horak - 146.0.1-1 +- Update to 146.0.1 + +* Mon Dec 15 2025 Jan Horak - 146.0-1 +- Update to 146.0 + +* Wed Nov 19 2025 Jan Horak - 145.0-1 +- Update to 145.0 + +* Thu Nov 06 2025 Jan Horak - 144.0.1-2 +- Fixing sigsegv on rawhide + +* Tue Oct 21 2025 Jan Horak - 144.0.1-1 +- Update to 144.0.1 + +* Thu Oct 16 2025 Jan Horak - 144.0-1 +- Update to 144.0 + +* Thu Oct 2 2025 Jan Horak - 143.0.1-1 +- Update to 143.0.1 + +* Thu Sep 25 2025 Dominik Mierzejewski - 140.3.0-2 +- Drop unused yasm from build dependencies + See: https://fedoraproject.org/wiki/Changes/DeprecateYASM + Resolves: rhbz#2390538 + +* Wed Sep 24 2025 Jan Horak - 140.3.0-1 +- Update to 140.3.0 ESR + +* Thu Sep 4 2025 Jan Horak - 140.2.1-1 +- Update to 140.2.1 ESR + +* Wed Jul 23 2025 Eike Rathke - 128.13.0-1 +- Update to 128.13.0 + +* Mon Jul 07 2025 Eike Rathke - 128.12.0-1 +- Update to 128.12.0 + +* Wed Jun 11 2025 Eike Rathke - 128.11.1-1 +- Update to 128.11.1 + +* Mon May 26 2025 Eike Rathke - 128.11.0-1 +- Update to 128.11.0 + +* Wed May 21 2025 Eike Rathke - 128.10.2-1 +- Update to 128.10.2 + +* Mon May 19 2025 Eike Rathke - 128.10.1-1 +- Update to 128.10.1 + +* Tue Apr 29 2025 Eike Rathke - 128.10.0-1 +- Update to 128.10.0 + +* Thu Apr 17 2025 Eike Rathke - 128.9.2-1 +- Update to 128.9.2 + +* Wed Apr 02 2025 Eike Rathke - 128.9.0-1 +- Update to 128.9.0 + +* Thu Mar 06 2025 Eike Rathke - 128.8.0-1 +- Update to 128.8.0 + +* Wed Feb 19 2025 Jan Horak - 128.7.1-1 +- Update to 128.7.1 build1 + +* Tue Jan 28 2025 Eike Rathke - 128.6.1-1 +- Update to 128.6.1 + +* Sun Jan 19 2025 Fedora Release Engineering - 128.6.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Wed Jan 08 2025 Eike Rathke - 128.6.0-1 +- Update to 128.6.0 + +* Thu Dec 19 2024 Daniel Rusek - 128.5.2-2 +- Use upstream rDNS naming scheme for desktop and appdata files + Resolves: rhbz#2210038 + +* Wed Dec 11 2024 Eike Rathke - 128.5.2-1 +- Update to 128.5.2 + +* Wed Nov 27 2024 Eike Rathke - 128.5.0-1 +- Update to 128.5.0 + +* Wed Nov 13 2024 Eike Rathke - 128.4.3-1 +- Update to 128.4.3 + +* Thu Nov 07 2024 Eike Rathke - 128.4.2-1 +- Update to 128.4.2 + +* Mon Oct 28 2024 Eike Rathke - 128.4.0-1 +- Update to 128.4.0 build1 + +* Tue Oct 22 2024 Eike Rathke - 128.3.3-1 +- Update to 128.3.3 + +* Thu Oct 17 2024 Eike Rathke - 128.3.2-1 +- Update to 128.3.2 + +* Thu Oct 10 2024 Eike Rathke - 128.3.1-1 +- Update to 128.3.1 + +* Tue Oct 08 2024 Eike Rathke - 128.3.0-1 +- Update to 128.3.0 + +* Thu Sep 05 2024 Eike Rathke - 128.2.0-1 +- Update to 128.2.0 + +* Tue Aug 06 2024 Eike Rathke - 128.1.0-1 +- Update to 128.1.0 + +* Wed Jul 17 2024 Jan Horak - 128.0-1 +- Update to 128.0 ESR + +* Tue Jul 16 2024 Eike Rathke - 115.13.0-1 +- Update to 115.13.0 + +* Wed Jun 19 2024 Eike Rathke - 115.12.1-1 +- Update to 115.12.1 + +* Tue Jun 18 2024 Eike Rathke - 115.12.0-3 +- Resolves: rhbz#2283993 Allow MOZ_ENABLE_WAYLAND default value override + +* Wed Jun 12 2024 Eike Rathke - 115.12.0-2 +- Update to 115.12.0 + +* Mon Jun 03 2024 Eike Rathke - 115.11.2-1 +- Update to 115.11.2 + +* Wed May 29 2024 Eike Rathke - 115.11.1-1 +- Update to 115.11.1 + +* Tue May 14 2024 Eike Rathke - 115.11.0-1 +- Update to 115.11.0 + +* Tue Apr 23 2024 Jan Horak - 115.10.1-4 +- Move the MOZ_APP_REMOTINGNAME from the startup script to the build options. + +* Tue Apr 23 2024 Jan Horak - 115.10.1-3 +- Fixed startup script + +* Mon Apr 22 2024 Eike Rathke - 115.10.1-2 +- Resolves: rhbz#2276078 Set MOZ_APP_REMOTINGNAME to firefox + +* Mon Apr 22 2024 Eike Rathke - 115.10.1-1 +- Update to 115.10.1 + +* Tue Apr 16 2024 Eike Rathke - 115.10.0-1 +- Update to 115.10.0 +- Revert expat CVE-2023-52425 fix + +* Fri Mar 22 2024 Jan Horak - 115.9.0-2 +- Use wayland backend on Fedora 40+ + +* Mon Mar 18 2024 Eike Rathke - 115.9.0-1 +- Update to 115.9.0 +- Fix expat CVE-2023-52425 + +* Tue Mar 05 2024 Eike Rathke - 115.8.1-1 +- Update to 115.8.1 + +* Wed Feb 21 2024 Eike Rathke - 115.8.0-1 +- Update to 115.8.0 + +* Wed Jan 24 2024 Eike Rathke - 115.7.0-1 +- Update to 115.7.0 + +* Wed Jan 10 2024 Eike Rathke - 115.6.1-1 +- Update to 115.6.1 + +* Wed Dec 20 2023 Eike Rathke - 115.6.0-1 +- Update to 115.6.0 + +* Tue Dec 12 2023 Eike Rathke - 115.5.2-1 +- Update to 115.5.2 + +* Tue Nov 28 2023 Eike Rathke - 115.5.1-1 +- Update to 115.5.1 + +* Fri Nov 24 2023 Eike Rathke - 115.5.0-1 +- Update to 115.5.0 + +* Wed Nov 15 2023 Eike Rathke - 115.4.3-1 +- Update to 115.4.3 + +* Wed Nov 08 2023 Eike Rathke - 115.4.2-1 +- Update to 115.4.2 + +* Wed Oct 25 2023 Eike Rathke - 115.4.1-1 +- Update to 115.4.1 + +* Tue Oct 24 2023 Eike Rathke - 115.4.0-1 +- Update to 115.4.0 + +* Wed Oct 11 2023 Eike Rathke - 115.3.2-1 +- Update to 115.3.2 + +* Sat Oct 07 2023 Kalev Lember - 115.3.1-2 +- Fix flatpak build + +* Fri Sep 29 2023 Eike Rathke - 115.3.1-1 +- Update to 115.3.1 + +* Wed Sep 27 2023 Eike Rathke - 115.3.0-1 +- Update to 115.3.0 + +* Tue Sep 19 2023 Eike Rathke - 115.2.2-1 +- Update to 115.2.2 + +* Tue Aug 15 2023 Jan Horak - 115.1.1-1 +- Update to 115.1.1 + +* Mon Jul 24 2023 Jan Horak - 115.0.1-1 +- Update to 115.0.1 + +* Sat Jul 22 2023 Fedora Release Engineering - 102.13.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Mon Jul 10 2023 Eike Rathke - 102.13.0-1 +- Update to 102.13.0 + +* Wed Jun 07 2023 Eike Rathke - 102.12.0-1 +- Update to 102.12.0 + +* Thu May 25 2023 Eike Rathke - 102.11.1-1 +- Update to 102.11.1 +- Change %%patchN ... to %%patch -P N ... + +* Wed May 10 2023 Eike Rathke - 102.11.0-1 +- Update to 102.11.0 + +* Tue Apr 11 2023 Eike Rathke - 102.10.0-1 +- Update to 102.10.0 + +* Wed Mar 29 2023 Eike Rathke - 102.9.1-1 +- Update to 102.9.1 + +* Wed Mar 15 2023 Eike Rathke - 102.9.0-1 +- Update to 102.9.0 + +* Fri Feb 17 2023 Eike Rathke - 102.8.0-1 +- Update to 102.8.0 + +* Wed Feb 08 2023 Eike Rathke - 102.7.2-1 +- Update to 102.7.2 + +* Tue Jan 31 2023 Eike Rathke - 102.7.1-2 +- Update to 102.7.1 build2 + +* Tue Jan 24 2023 Eike Rathke - 102.7.1-1 +- Update to 102.7.1 +- Fix FTBFS gcc13 header dependencies + +* Sat Jan 21 2023 Fedora Release Engineering - 102.6.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Wed Dec 21 2022 Martin Stransky - 102.6.0-2 +- Backported mozbz#1804877 - set XDG_ACTIVATION_TOKEN when launch + external application. + +* Tue Dec 13 2022 Eike Rathke - 102.6.0-1 +- Update to 102.6.0 + +* Thu Dec 01 2022 Eike Rathke - 102.5.1-1 +- Update to 102.5.1 + +* Tue Nov 15 2022 Eike Rathke - 102.5.0-1 +- Update to 102.5.0 +- Use SPDX license IDs in spec + +* Wed Nov 02 2022 Eike Rathke - 102.4.1-1 +- Update to 102.4.1 + +* Wed Oct 19 2022 Eike Rathke - 102.4.0-1 +- Update to 102.4.0 + +* Thu Sep 29 2022 Eike Rathke - 102.3.1-1 +- Update to 102.3.1 + +* Wed Sep 21 2022 Eike Rathke - 102.3.0-1 +- Update to 102.3.0 + +* Thu Sep 01 2022 Eike Rathke - 102.2.1-1 +- Update to 102.2.1 + +* Tue Aug 23 2022 Eike Rathke - 102.2.0-1 +- Update to 102.2.0 + +* Wed Aug 3 2022 Jan Horak - 102.1.0-1 +- Update to 102.1.0 + +* Thu Jul 28 2022 Eike Rathke - 91.12.0-1 +- Update to 91.12.0 + +* Sat Jul 23 2022 Fedora Release Engineering - 91.11.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Jul 11 2022 Eike Rathke - 91.11.0-3 +- Fix f37 FTBFS Python 3.11 API incompatibilities + +* Tue Jul 05 2022 Tom Stellard - 91.11.0-2 +- Clean up macros that allow building with clang + +* Wed Jun 29 2022 Eike Rathke - 91.11.0-1 +- Update to 91.11.0 + +* Tue May 31 2022 Eike Rathke - 91.10.0-1 +- Update to 91.10.0 + +* Tue May 24 2022 Eike Rathke - 91.9.1-1 +- Update to 91.9.1 + +* Wed May 04 2022 Eike Rathke - 91.9.0-1 +- Update to 91.9.0 + +* Wed Apr 20 2022 Parag Nemade - 91.8.0-2 +- Update hunspell dictionary path + F36 Change https://fedoraproject.org/wiki/Changes/Hunspell_dictionary_dir_change + +* Mon Apr 11 2022 Eike Rathke - 91.8.0-1 +- Update to 91.8.0 + +* Tue Mar 15 2022 Eike Rathke - 91.7.0-1 +- Update to 91.7.0 +- plus patches to bundled expat against CVE-2022-25235 CVE-2022-25236 CVE-2022-25315 + +* Mon Mar 7 2022 Jan Horak - 91.6.2-1 +- Update to 91.6.2 + +* Mon Feb 28 2022 Jan Horak - 91.6.1-1 +- Update to 91.6.1 build1 + +* Fri Feb 11 2022 Jan Horak - 91.6.0-2 +- Supply stock icon to the appdata file + +* Wed Feb 09 2022 Jan Horak - 91.6.0-1 +- Update to 91.6.0 build1 + +* Wed Feb 09 2022 Jan Horak - 91.5.0-3 +- Put appdata.xml to medainfo location + +* Sat Jan 22 2022 Fedora Release Engineering - 91.5.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Tue Jan 18 2022 Jan Horak - 91.5.0-1 +- Update to 91.5.0 build1 + +* Wed Dec 15 2021 Jan Horak - 91.4.0-1 +- Update to 91.4.0 build2 +- Enabled wayland backend for all DE (thanks to Timothée Ravier ) + +* Tue Nov 09 2021 Jan Horak - 91.3.0-1 +- Update to 91.3.0 build2 + +* Fri Oct 15 2021 Jan Horak - 91.2.0-1 +- Update to 91.2.0 build1 + +* Tue Sep 07 2021 Jan Horak - 91.1.0-1 +- Update to 91.1.0 build2 + +* Thu Aug 26 2021 Jan Horak - 91.0.3-2 +- Update to 91.0.3 build1 + +* Mon Aug 23 2021 Jan Horak - 91.0.2-1 +- Update to 91.0.2 build1 + +* Mon Aug 16 2021 Jan Horak - 91.0-1 +- Update to 91.0 build1 + +* Fri Jul 23 2021 Fedora Release Engineering - 78.12.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Wed Jul 21 2021 Jan Horak - 78.12.0-1 +- Update to 78.12.0 build2 + +* Wed Jun 02 2021 Jan Horak - 78.11.0-1 +- Update to 78.11.0 build1 + +* Sat May 15 2021 Fabio Valentini - 78.10.1-3 +- Split off librnp and make it possible to use a different OpenPGP backend. + +* Wed May 05 2021 Jan Horak - 78.10.1-2 +- Fixed source0 + +* Tue May 04 2021 Jan Horak - 78.10.1-1 +- Update to 78.10.1 build1 + +* Tue Mar 30 2021 Jonathan Wakely - 78.8.1-2 +- Rebuilt for removed libstdc++ symbol (#1937698) + +* Mon Mar 15 2021 Jan Horak - 78.8.1-1 +- Update to 78.8.1 build1 + +* Thu Feb 18 2021 Jan Horak - 78.8.0-1 +- Update to 78.8.0 build1 + +* Thu Jan 28 2021 Jan Horak - 78.7.0-2 +- Fixing package requires/provides the same way as provided by kalev for Firefox + +* Wed Jan 27 2021 Jan Horak - 78.7.0-1 +- Update to 78.7.0 build2 + +* Wed Jan 20 2021 Orion Poplawski - 78.6.1-2 +- Own /usr/lib*/thunderbird/gtk2 directory +- Provide /etc/thunderbird/pref (bug #1525709) +- Filter package provides and requires + +* Thu Jan 14 2021 Jan Horak - 78.6.1-1 +- Update to 78.6.1 build1 + +* Tue Dec 15 2020 Jan Horak - 78.6.0-1 +- Update to 78.6.0 build1 + +* Mon Dec 14 2020 Martin Stransky - 78.5.0-2 +- Added fix for rhbz#1907267 (Thunderbird on Wayland launcher + does not show up as 'running' in the dash) + +* Wed Nov 25 2020 Jan Horak - 78.5.0-1 +- Update to 78.5.0 build3 + +* Thu Nov 12 2020 Jan Horak - 78.4.3-1 +- Update to 78.4.3 build1 + +* Mon Nov 09 2020 Kalev Lember - 78.4.0-3 +- Add release tag to appdata + +* Thu Oct 22 2020 Jan Horak - 78.4.0-2 - Update to 78.4.0 build1 * Wed Oct 07 2020 Jan Horak - 78.3.1-2 @@ -781,7 +1256,7 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : * Fri Mar 13 2020 Jan Horak - 68.6.0-1 - Update to 68.6.0 build2 -* Wed Mar 3 2020 David Auer - 68.5.0-2 +* Thu Mar 03 2020 David Auer - 68.5.0-2 - Fix spellcheck (rhbz#1753011) * Thu Feb 13 2020 Jan Horak - 68.5.0-1