summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog.rss41
-rw-r--r--ChangeLog.txt29
-rw-r--r--FILELIST.TXT257
-rw-r--r--README.initrd14
-rw-r--r--isolinux/message.txt2
-rw-r--r--kernels/VERSIONS.TXT2
-rwxr-xr-xrecompress.sh1
-rw-r--r--slackware64/a/maketag6
-rw-r--r--slackware64/a/maketag.ez6
-rw-r--r--slackware64/k/maketag2
-rw-r--r--slackware64/k/maketag.ez2
-rw-r--r--source/k/kernel-configs/config-generic-5.4.78 (renamed from source/k/kernel-configs/config-generic-5.4.77)2
-rw-r--r--source/k/kernel-configs/config-generic-5.4.78.x64 (renamed from source/k/kernel-configs/config-generic-5.4.77.x64)2
-rw-r--r--source/k/kernel-configs/config-generic-smp-5.4.78-smp (renamed from source/k/kernel-configs/config-generic-smp-5.4.77-smp)2
-rw-r--r--source/k/kernel-configs/config-huge-5.4.78 (renamed from source/k/kernel-configs/config-huge-5.4.77)2
-rw-r--r--source/k/kernel-configs/config-huge-5.4.78.x64 (renamed from source/k/kernel-configs/config-huge-5.4.77.x64)2
-rw-r--r--source/k/kernel-configs/config-huge-smp-5.4.78-smp (renamed from source/k/kernel-configs/config-huge-smp-5.4.77-smp)2
-rwxr-xr-xsource/xap/mozilla-thunderbird/mozilla-thunderbird.SlackBuild3
-rw-r--r--source/xap/mozilla-thunderbird/rust_1.47.0.patch30905
-rwxr-xr-xsource/xap/ssr/ssr.SlackBuild3
-rw-r--r--source/xfce/thunar/thunar.url2
-rw-r--r--testing/source/vtown/deps/cryfs/.circleci/config.yml612
-rw-r--r--testing/source/vtown/deps/cryfs/.clang-tidy60
-rw-r--r--testing/source/vtown/deps/cryfs/.travis.yml15
-rwxr-xr-xtesting/source/vtown/deps/cryfs/.travisci/build_and_test.sh50
-rwxr-xr-xtesting/source/vtown/deps/cryfs/.travisci/install.sh20
-rw-r--r--testing/source/vtown/kde/post-install/kservice/profile.d/kde.csh21
-rw-r--r--testing/source/vtown/kde/post-install/kservice/profile.d/kde.sh24
28 files changed, 241 insertions, 31848 deletions
diff --git a/ChangeLog.rss b/ChangeLog.rss
index ed41754b..08490bd2 100644
--- a/ChangeLog.rss
+++ b/ChangeLog.rss
@@ -11,10 +11,47 @@
<description>Tracking Slackware development in git.</description>
<language>en-us</language>
<id xmlns="http://www.w3.org/2005/Atom">urn:uuid:c964f45e-6732-11e8-bbe5-107b4450212f</id>
- <pubDate>Mon, 16 Nov 2020 21:23:09 GMT</pubDate>
- <lastBuildDate>Tue, 17 Nov 2020 07:59:47 GMT</lastBuildDate>
+ <pubDate>Wed, 18 Nov 2020 21:40:31 GMT</pubDate>
+ <lastBuildDate>Thu, 19 Nov 2020 07:59:44 GMT</lastBuildDate>
<generator>maintain_current_git.sh v 1.12</generator>
<item>
+ <title>Wed, 18 Nov 2020 21:40:31 GMT</title>
+ <pubDate>Wed, 18 Nov 2020 21:40:31 GMT</pubDate>
+ <link>https://git.slackware.nl/current/tag/?h=20201118214031</link>
+ <guid isPermaLink="false">20201118214031</guid>
+ <description>
+ <![CDATA[<pre>
+a/kernel-generic-5.4.78-x86_64-1.txz: Upgraded.
+a/kernel-huge-5.4.78-x86_64-1.txz: Upgraded.
+a/kernel-modules-5.4.78-x86_64-1.txz: Upgraded.
+d/cmake-3.19.0-x86_64-1.txz: Upgraded.
+d/kernel-headers-5.4.78-x86-1.txz: Upgraded.
+k/kernel-source-5.4.78-noarch-1.txz: Upgraded.
+l/imagemagick-7.0.10_39-x86_64-1.txz: Upgraded.
+l/libjpeg-turbo-2.0.6-x86_64-1.txz: Upgraded.
+n/gnupg2-2.2.24-x86_64-1.txz: Upgraded.
+xap/mozilla-thunderbird-78.5.0-x86_64-1.txz: Upgraded.
+ This release contains security fixes and improvements.
+ For more information, see:
+ https://www.mozilla.org/en-US/thunderbird/78.5.0/releasenotes/
+ https://www.mozilla.org/en-US/security/advisories/mfsa2020-52/
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26951
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-16012
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26953
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26956
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26958
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26968
+ (* Security fix *)
+xap/ssr-0.4.2-x86_64-2.txz: Rebuilt.
+ Recompiled to use Qt5 instead of Qt4.
+xfce/thunar-1.8.16-x86_64-1.txz: Upgraded.
+isolinux/initrd.img: Rebuilt.
+kernels/*: Upgraded.
+usb-and-pxe-installers/usbboot.img: Rebuilt.
+ </pre>]]>
+ </description>
+ </item>
+ <item>
<title>Mon, 16 Nov 2020 21:23:09 GMT</title>
<pubDate>Mon, 16 Nov 2020 21:23:09 GMT</pubDate>
<link>https://git.slackware.nl/current/tag/?h=20201116212309</link>
diff --git a/ChangeLog.txt b/ChangeLog.txt
index c2687d07..fffe27b5 100644
--- a/ChangeLog.txt
+++ b/ChangeLog.txt
@@ -1,3 +1,32 @@
+Wed Nov 18 21:40:31 UTC 2020
+a/kernel-generic-5.4.78-x86_64-1.txz: Upgraded.
+a/kernel-huge-5.4.78-x86_64-1.txz: Upgraded.
+a/kernel-modules-5.4.78-x86_64-1.txz: Upgraded.
+d/cmake-3.19.0-x86_64-1.txz: Upgraded.
+d/kernel-headers-5.4.78-x86-1.txz: Upgraded.
+k/kernel-source-5.4.78-noarch-1.txz: Upgraded.
+l/imagemagick-7.0.10_39-x86_64-1.txz: Upgraded.
+l/libjpeg-turbo-2.0.6-x86_64-1.txz: Upgraded.
+n/gnupg2-2.2.24-x86_64-1.txz: Upgraded.
+xap/mozilla-thunderbird-78.5.0-x86_64-1.txz: Upgraded.
+ This release contains security fixes and improvements.
+ For more information, see:
+ https://www.mozilla.org/en-US/thunderbird/78.5.0/releasenotes/
+ https://www.mozilla.org/en-US/security/advisories/mfsa2020-52/
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26951
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-16012
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26953
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26956
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26958
+ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2020-26968
+ (* Security fix *)
+xap/ssr-0.4.2-x86_64-2.txz: Rebuilt.
+ Recompiled to use Qt5 instead of Qt4.
+xfce/thunar-1.8.16-x86_64-1.txz: Upgraded.
+isolinux/initrd.img: Rebuilt.
+kernels/*: Upgraded.
+usb-and-pxe-installers/usbboot.img: Rebuilt.
++--------------------------+
Mon Nov 16 21:23:09 UTC 2020
a/util-linux-2.36.1-x86_64-1.txz: Upgraded.
l/imagemagick-7.0.10_38-x86_64-1.txz: Upgraded.
diff --git a/FILELIST.TXT b/FILELIST.TXT
index 26748ef1..81fac764 100644
--- a/FILELIST.TXT
+++ b/FILELIST.TXT
@@ -1,35 +1,35 @@
-Mon Nov 16 21:26:27 UTC 2020
+Wed Nov 18 21:45:10 UTC 2020
Here is the file list for this directory. If you are using a
mirror site and find missing or extra files in the disk
subdirectories, please have the archive administrator refresh
the mirror.
-drwxr-xr-x 12 root root 4096 2020-11-16 21:23 .
+drwxr-xr-x 12 root root 4096 2020-11-18 21:40 .
-rw-r--r-- 1 root root 10064 2016-06-30 18:39 ./ANNOUNCE.14_2
-rw-r--r-- 1 root root 14975 2020-02-08 21:06 ./CHANGES_AND_HINTS.TXT
--rw-r--r-- 1 root root 1352637 2020-11-15 00:08 ./CHECKSUMS.md5
--rw-r--r-- 1 root root 163 2020-11-15 00:08 ./CHECKSUMS.md5.asc
+-rw-r--r-- 1 root root 1352563 2020-11-16 21:26 ./CHECKSUMS.md5
+-rw-r--r-- 1 root root 163 2020-11-16 21:26 ./CHECKSUMS.md5.asc
-rw-r--r-- 1 root root 17976 1994-06-10 02:28 ./COPYING
-rw-r--r-- 1 root root 35147 2007-06-30 04:21 ./COPYING3
-rw-r--r-- 1 root root 19573 2016-06-23 20:08 ./COPYRIGHT.TXT
-rw-r--r-- 1 root root 616 2006-10-02 04:37 ./CRYPTO_NOTICE.TXT
--rw-r--r-- 1 root root 1051529 2020-11-16 21:23 ./ChangeLog.txt
+-rw-r--r-- 1 root root 1052916 2020-11-18 21:40 ./ChangeLog.txt
drwxr-xr-x 3 root root 4096 2013-03-20 22:17 ./EFI
-drwxr-xr-x 2 root root 4096 2020-11-11 23:01 ./EFI/BOOT
+drwxr-xr-x 2 root root 4096 2020-11-18 21:40 ./EFI/BOOT
-rw-r--r-- 1 root root 1417216 2019-07-05 18:54 ./EFI/BOOT/bootx64.efi
-rw-r--r-- 1 root root 78 2013-09-23 20:35 ./EFI/BOOT/grub-embedded.cfg
-rw-r--r-- 1 root root 893 2018-04-17 21:17 ./EFI/BOOT/grub.cfg
--rw-r--r-- 2 root root 10037632 2020-11-11 22:02 ./EFI/BOOT/huge.s
--rw-r--r-- 2 root root 44724072 2020-11-11 23:01 ./EFI/BOOT/initrd.img
+-rw-r--r-- 2 root root 10037632 2020-11-18 21:25 ./EFI/BOOT/huge.s
+-rw-r--r-- 2 root root 44720108 2020-11-18 21:39 ./EFI/BOOT/initrd.img
-rwxr-xr-x 1 root root 2504 2019-07-05 18:54 ./EFI/BOOT/make-grub.sh
-rw-r--r-- 1 root root 10722 2013-09-21 19:02 ./EFI/BOOT/osdetect.cfg
-rw-r--r-- 1 root root 1273 2013-08-12 21:08 ./EFI/BOOT/tools.cfg
--rw-r--r-- 1 root root 1734210 2020-11-15 00:08 ./FILELIST.TXT
+-rw-r--r-- 1 root root 1734120 2020-11-16 21:26 ./FILELIST.TXT
-rw-r--r-- 1 root root 1572 2012-08-29 18:27 ./GPG-KEY
--rw-r--r-- 1 root root 769332 2020-11-16 21:26 ./PACKAGES.TXT
+-rw-r--r-- 1 root root 769332 2020-11-18 21:44 ./PACKAGES.TXT
-rw-r--r-- 1 root root 8564 2016-06-28 21:33 ./README.TXT
--rw-r--r-- 1 root root 3629 2020-11-11 22:53 ./README.initrd
+-rw-r--r-- 1 root root 3629 2020-11-18 21:30 ./README.initrd
-rw-r--r-- 1 root root 34412 2017-12-01 17:44 ./README_CRYPT.TXT
-rw-r--r-- 1 root root 8751 2016-06-28 21:44 ./README_LVM.TXT
-rw-r--r-- 1 root root 19658 2013-06-18 04:34 ./README_RAID.TXT
@@ -721,16 +721,16 @@ drwxr-xr-x 2 root root 4096 2019-10-18 18:28 ./extra/xv
-rw-r--r-- 1 root root 233 2018-04-13 18:00 ./extra/xv/xv-3.10a-x86_64-9.txt
-rw-r--r-- 1 root root 953308 2018-04-13 18:00 ./extra/xv/xv-3.10a-x86_64-9.txz
-rw-r--r-- 1 root root 163 2018-04-13 18:00 ./extra/xv/xv-3.10a-x86_64-9.txz.asc
-drwxr-xr-x 3 root root 4096 2020-11-11 23:01 ./isolinux
+drwxr-xr-x 3 root root 4096 2020-11-18 21:39 ./isolinux
-rw-r--r-- 1 root root 6183 2017-11-18 18:47 ./isolinux/README.TXT
-rw-r--r-- 1 root root 788 2007-03-17 19:50 ./isolinux/README_SPLIT.TXT
-rw-r--r-- 1 root root 1474560 2019-07-05 18:54 ./isolinux/efiboot.img
-rw-r--r-- 1 root root 574 2013-10-24 00:19 ./isolinux/f2.txt
--rw-r--r-- 2 root root 44724072 2020-11-11 23:01 ./isolinux/initrd.img
+-rw-r--r-- 2 root root 44720108 2020-11-18 21:39 ./isolinux/initrd.img
-rw-r--r-- 1 root root 50 2003-01-18 00:02 ./isolinux/iso.sort
-rw-r--r-- 1 root root 24576 2016-05-27 20:36 ./isolinux/isolinux.bin
-rw-r--r-- 1 root root 578 2013-03-27 03:29 ./isolinux/isolinux.cfg
--rw-r--r-- 1 root root 682 2020-11-11 22:53 ./isolinux/message.txt
+-rw-r--r-- 1 root root 682 2020-11-18 21:30 ./isolinux/message.txt
drwxr-xr-x 2 root root 4096 2003-03-17 07:31 ./isolinux/sbootmgr
-rwxr-xr-x 1 root root 36064 1995-05-12 01:23 ./isolinux/sbootmgr/RAWRITE.EXE
-rw-r--r-- 1 root root 2138 1997-12-01 01:21 ./isolinux/sbootmgr/RAWRITE12.DOC
@@ -741,12 +741,12 @@ lrwxrwxrwx 1 root root 11 2009-08-23 23:37 ./isolinux/sbootmgr/RAWRITE13
-rw-r--r-- 1 root root 1291 2003-03-17 07:31 ./isolinux/sbootmgr/README.TXT
-rw-r--r-- 1 root root 110592 2003-03-16 08:38 ./isolinux/sbootmgr/sbootmgr.dsk
-rw-r--r-- 1 root root 3024 2018-03-03 01:37 ./isolinux/setpkg
-drwxr-xr-x 5 root root 4096 2020-11-11 22:53 ./kernels
--rw-r--r-- 1 root root 36 2020-11-11 22:53 ./kernels/VERSIONS.TXT
-drwxr-xr-x 2 root root 4096 2020-11-11 22:02 ./kernels/huge.s
--rw-r--r-- 1 root root 1080089 2020-11-11 22:02 ./kernels/huge.s/System.map.gz
--rw-r--r-- 2 root root 10037632 2020-11-11 22:02 ./kernels/huge.s/bzImage
--rw-r--r-- 1 root root 217626 2020-11-11 20:44 ./kernels/huge.s/config
+drwxr-xr-x 5 root root 4096 2020-11-18 21:30 ./kernels
+-rw-r--r-- 1 root root 36 2020-11-18 21:30 ./kernels/VERSIONS.TXT
+drwxr-xr-x 2 root root 4096 2020-11-18 21:25 ./kernels/huge.s
+-rw-r--r-- 1 root root 1079855 2020-11-18 21:25 ./kernels/huge.s/System.map.gz
+-rw-r--r-- 2 root root 10037632 2020-11-18 21:25 ./kernels/huge.s/bzImage
+-rw-r--r-- 1 root root 217626 2020-11-18 20:14 ./kernels/huge.s/config
drwxr-xr-x 2 root root 4096 2011-03-25 03:15 ./kernels/memtest
-rw-r--r-- 1 root root 60 2011-03-24 00:19 ./kernels/memtest/README
-rw-r--r-- 1 root root 150024 2013-10-17 04:15 ./kernels/memtest/memtest
@@ -791,13 +791,13 @@ drwxr-xr-x 2 root root 4096 2012-09-20 18:06 ./patches
-rw-r--r-- 1 root root 575 2012-09-20 18:06 ./patches/FILE_LIST
-rw-r--r-- 1 root root 14 2012-09-20 18:06 ./patches/MANIFEST.bz2
-rw-r--r-- 1 root root 224 2012-09-20 18:06 ./patches/PACKAGES.TXT
-drwxr-xr-x 18 root root 4096 2020-11-16 21:26 ./slackware64
--rw-r--r-- 1 root root 302873 2020-11-16 21:26 ./slackware64/CHECKSUMS.md5
--rw-r--r-- 1 root root 163 2020-11-16 21:26 ./slackware64/CHECKSUMS.md5.asc
--rw-r--r-- 1 root root 376876 2020-11-16 21:25 ./slackware64/FILE_LIST
--rw-r--r-- 1 root root 3883909 2020-11-16 21:25 ./slackware64/MANIFEST.bz2
+drwxr-xr-x 18 root root 4096 2020-11-18 21:44 ./slackware64
+-rw-r--r-- 1 root root 302873 2020-11-18 21:44 ./slackware64/CHECKSUMS.md5
+-rw-r--r-- 1 root root 163 2020-11-18 21:44 ./slackware64/CHECKSUMS.md5.asc
+-rw-r--r-- 1 root root 376876 2020-11-18 21:43 ./slackware64/FILE_LIST
+-rw-r--r-- 1 root root 3881227 2020-11-18 21:43 ./slackware64/MANIFEST.bz2
lrwxrwxrwx 1 root root 15 2009-08-23 23:34 ./slackware64/PACKAGES.TXT -> ../PACKAGES.TXT
-drwxr-xr-x 2 root root 20480 2020-11-16 21:25 ./slackware64/a
+drwxr-xr-x 2 root root 20480 2020-11-18 21:43 ./slackware64/a
-rw-r--r-- 1 root root 327 2018-06-24 18:44 ./slackware64/a/aaa_base-14.2-x86_64-5.txt
-rw-r--r-- 1 root root 10820 2018-06-24 18:44 ./slackware64/a/aaa_base-14.2-x86_64-5.txz
-rw-r--r-- 1 root root 163 2018-06-24 18:44 ./slackware64/a/aaa_base-14.2-x86_64-5.txz.asc
@@ -953,15 +953,15 @@ drwxr-xr-x 2 root root 20480 2020-11-16 21:25 ./slackware64/a
-rw-r--r-- 1 root root 422 2020-11-13 18:39 ./slackware64/a/kernel-firmware-20201113_2ea8667-noarch-1.txt
-rw-r--r-- 1 root root 132262912 2020-11-13 18:39 ./slackware64/a/kernel-firmware-20201113_2ea8667-noarch-1.txz
-rw-r--r-- 1 root root 163 2020-11-13 18:39 ./slackware64/a/kernel-firmware-20201113_2ea8667-noarch-1.txz.asc
--rw-r--r-- 1 root root 624 2020-11-11 22:03 ./slackware64/a/kernel-generic-5.4.77-x86_64-1.txt
--rw-r--r-- 1 root root 6985228 2020-11-11 22:03 ./slackware64/a/kernel-generic-5.4.77-x86_64-1.txz
--rw-r--r-- 1 root root 163 2020-11-11 22:03 ./slackware64/a/kernel-generic-5.4.77-x86_64-1.txz.asc
--rw-r--r-- 1 root root 636 2020-11-11 22:02 ./slackware64/a/kernel-huge-5.4.77-x86_64-1.txt
--rw-r--r-- 1 root root 10652756 2020-11-11 22:02 ./slackware64/a/kernel-huge-5.4.77-x86_64-1.txz
--rw-r--r-- 1 root root 163 2020-11-11 22:02 ./slackware64/a/kernel-huge-5.4.77-x86_64-1.txz.asc
--rw-r--r-- 1 root root 567 2020-11-11 22:07 ./slackware64/a/kernel-modules-5.4.77-x86_64-1.txt
--rw-r--r-- 1 root root 43969676 2020-11-11 22:07 ./slackware64/a/kernel-modules-5.4.77-x86_64-1.txz
--rw-r--r-- 1 root root 163 2020-11-11 22:07 ./slackware64/a/kernel-modules-5.4.77-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 624 2020-11-18 21:26 ./slackware64/a/kernel-generic-5.4.78-x86_64-1.txt
+-rw-r--r-- 1 root root 6984812 2020-11-18 21:26 ./slackware64/a/kernel-generic-5.4.78-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2020-11-18 21:26 ./slackware64/a/kernel-generic-5.4.78-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 636 2020-11-18 21:25 ./slackware64/a/kernel-huge-5.4.78-x86_64-1.txt
+-rw-r--r-- 1 root root 10652512 2020-11-18 21:25 ./slackware64/a/kernel-huge-5.4.78-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2020-11-18 21:25 ./slackware64/a/kernel-huge-5.4.78-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 567 2020-11-18 21:29 ./slackware64/a/kernel-modules-5.4.78-x86_64-1.txt
+-rw-r--r-- 1 root root 43961512 2020-11-18 21:29 ./slackware64/a/kernel-modules-5.4.78-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2020-11-18 21:29 ./slackware64/a/kernel-modules-5.4.78-x86_64-1.txz.asc
-rw-r--r-- 1 root root 508 2020-03-05 07:03 ./slackware64/a/kmod-27-x86_64-1.txt
-rw-r--r-- 1 root root 112556 2020-03-05 07:03 ./slackware64/a/kmod-27-x86_64-1.txz
-rw-r--r-- 1 root root 163 2020-03-05 07:03 ./slackware64/a/kmod-27-x86_64-1.txz.asc
@@ -1007,8 +1007,8 @@ drwxr-xr-x 2 root root 20480 2020-11-16 21:25 ./slackware64/a
-rw-r--r-- 1 root root 405 2019-01-11 20:05 ./slackware64/a/lzlib-1.11-x86_64-1.txt
-rw-r--r-- 1 root root 56396 2019-01-11 20:05 ./slackware64/a/lzlib-1.11-x86_64-1.txz
-rw-r--r-- 1 root root 163 2019-01-11 20:05 ./slackware64/a/lzlib-1.11-x86_64-1.txz.asc
--rw-r--r-- 1 root root 9704 2020-11-11 22:53 ./slackware64/a/maketag
--rw-r--r-- 1 root root 9704 2020-11-11 22:53 ./slackware64/a/maketag.ez
+-rw-r--r-- 1 root root 9704 2020-11-18 21:30 ./slackware64/a/maketag
+-rw-r--r-- 1 root root 9704 2020-11-18 21:30 ./slackware64/a/maketag.ez
-rw-r--r-- 1 root root 591 2020-09-24 18:08 ./slackware64/a/mcelog-173-x86_64-1.txt
-rw-r--r-- 1 root root 344188 2020-09-24 18:08 ./slackware64/a/mcelog-173-x86_64-1.txz
-rw-r--r-- 1 root root 163 2020-09-24 18:08 ./slackware64/a/mcelog-173-x86_64-1.txz.asc
@@ -1117,7 +1117,7 @@ drwxr-xr-x 2 root root 20480 2020-11-16 21:25 ./slackware64/a
-rw-r--r-- 1 root root 378 2020-10-22 17:51 ./slackware64/a/sysvinit-scripts-2.1-noarch-36.txt
-rw-r--r-- 1 root root 22520 2020-10-22 17:51 ./slackware64/a/sysvinit-scripts-2.1-noarch-36.txz
-rw-r--r-- 1 root root 163 2020-10-22 17:51 ./slackware64/a/sysvinit-scripts-2.1-noarch-36.txz.asc
--rw-r--r-- 1 root root 1513 2020-11-11 22:53 ./slackware64/a/tagfile
+-rw-r--r-- 1 root root 1513 2020-11-18 21:30 ./slackware64/a/tagfile
-rw-r--r-- 1 root root 395 2019-02-23 18:03 ./slackware64/a/tar-1.32-x86_64-1.txt
-rw-r--r-- 1 root root 844396 2019-02-23 18:03 ./slackware64/a/tar-1.32-x86_64-1.txz
-rw-r--r-- 1 root root 163 2019-02-23 18:03 ./slackware64/a/tar-1.32-x86_64-1.txz.asc
@@ -1433,7 +1433,7 @@ drwxr-xr-x 2 root root 20480 2020-11-11 23:13 ./slackware64/ap
-rw-r--r-- 1 root root 506 2020-02-16 18:00 ./slackware64/ap/zsh-5.8-x86_64-1.txt
-rw-r--r-- 1 root root 3053312 2020-02-16 18:00 ./slackware64/ap/zsh-5.8-x86_64-1.txz
-rw-r--r-- 1 root root 163 2020-02-16 18:00 ./slackware64/ap/zsh-5.8-x86_64-1.txz.asc
-drwxr-xr-x 2 root root 16384 2020-11-15 00:06 ./slackware64/d
+drwxr-xr-x 2 root root 16384 2020-11-18 21:43 ./slackware64/d
-rw-r--r-- 1 root root 360 2020-10-24 22:39 ./slackware64/d/Cython-0.29.21-x86_64-2.txt
-rw-r--r-- 1 root root 2380688 2020-10-24 22:39 ./slackware64/d/Cython-0.29.21-x86_64-2.txz
-rw-r--r-- 1 root root 163 2020-10-24 22:39 ./slackware64/d/Cython-0.29.21-x86_64-2.txz.asc
@@ -1461,9 +1461,9 @@ drwxr-xr-x 2 root root 16384 2020-11-15 00:06 ./slackware64/d
-rw-r--r-- 1 root root 663 2020-04-25 03:50 ./slackware64/d/clisp-2.50_20191103_c26de7873-x86_64-2.txt
-rw-r--r-- 1 root root 3103388 2020-04-25 03:50 ./slackware64/d/clisp-2.50_20191103_c26de7873-x86_64-2.txz
-rw-r--r-- 1 root root 163 2020-04-25 03:50 ./slackware64/d/clisp-2.50_20191103_c26de7873-x86_64-2.txz.asc
--rw-r--r-- 1 root root 379 2020-10-07 19:28 ./slackware64/d/cmake-3.18.4-x86_64-1.txt
--rw-r--r-- 1 root root 7000024 2020-10-07 19:28 ./slackware64/d/cmake-3.18.4-x86_64-1.txz
--rw-r--r-- 1 root root 163 2020-10-07 19:28 ./slackware64/d/cmake-3.18.4-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 379 2020-11-18 18:00 ./slackware64/d/cmake-3.19.0-x86_64-1.txt
+-rw-r--r-- 1 root root 7260484 2020-11-18 18:00 ./slackware64/d/cmake-3.19.0-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2020-11-18 18:00 ./slackware64/d/cmake-3.19.0-x86_64-1.txz.asc
-rw-r--r-- 1 root root 332 2018-11-08 22:13 ./slackware64/d/cscope-15.9-x86_64-1.txt
-rw-r--r-- 1 root root 143528 2018-11-08 22:13 ./slackware64/d/cscope-15.9-x86_64-1.txz
-rw-r--r-- 1 root root 163 2018-11-08 22:13 ./slackware64/d/cscope-15.9-x86_64-1.txz.asc
@@ -1541,9 +1541,9 @@ drwxr-xr-x 2 root root 16384 2020-11-15 00:06 ./slackware64/d
-rw-r--r-- 1 root root 279 2018-04-13 13:53 ./slackware64/d/intltool-0.51.0-x86_64-4.txt
-rw-r--r-- 1 root root 48112 2018-04-13 13:53 ./slackware64/d/intltool-0.51.0-x86_64-4.txz
-rw-r--r-- 1 root root 163 2018-04-13 13:53 ./slackware64/d/intltool-0.51.0-x86_64-4.txz.asc
--rw-r--r-- 1 root root 332 2020-11-11 22:07 ./slackware64/d/kernel-headers-5.4.77-x86-1.txt
--rw-r--r-- 1 root root 964436 2020-11-11 22:07 ./slackware64/d/kernel-headers-5.4.77-x86-1.txz
--rw-r--r-- 1 root root 163 2020-11-11 22:07 ./slackware64/d/kernel-headers-5.4.77-x86-1.txz.asc
+-rw-r--r-- 1 root root 332 2020-11-18 21:30 ./slackware64/d/kernel-headers-5.4.78-x86-1.txt
+-rw-r--r-- 1 root root 964464 2020-11-18 21:30 ./slackware64/d/kernel-headers-5.4.78-x86-1.txz
+-rw-r--r-- 1 root root 163 2020-11-18 21:30 ./slackware64/d/kernel-headers-5.4.78-x86-1.txz.asc
-rw-r--r-- 1 root root 498 2020-03-12 20:59 ./slackware64/d/libtool-2.4.6-x86_64-13.txt
-rw-r--r-- 1 root root 428492 2020-03-12 20:59 ./slackware64/d/libtool-2.4.6-x86_64-13.txz
-rw-r--r-- 1 root root 163 2020-03-12 20:59 ./slackware64/d/libtool-2.4.6-x86_64-13.txz.asc
@@ -1667,15 +1667,15 @@ drwxr-xr-x 2 root root 4096 2016-04-01 21:41 ./slackware64/f
-rw-r--r-- 1 root root 1075 2018-03-01 07:54 ./slackware64/f/maketag
-rw-r--r-- 1 root root 1075 2018-03-01 07:54 ./slackware64/f/maketag.ez
-rw-r--r-- 1 root root 32 2018-03-01 07:54 ./slackware64/f/tagfile
-drwxr-xr-x 2 root root 4096 2020-11-11 23:14 ./slackware64/k
+drwxr-xr-x 2 root root 4096 2020-11-18 21:43 ./slackware64/k
-rwxr-xr-x 1 root root 2897 2009-06-24 22:06 ./slackware64/k/install-packages
-rw-r--r-- 1 root root 446 2006-09-18 10:41 ./slackware64/k/install.end
--rw-r--r-- 1 root root 317 2020-11-11 22:00 ./slackware64/k/kernel-source-5.4.77-noarch-1.txt
--rw-r--r-- 1 root root 110051536 2020-11-11 22:00 ./slackware64/k/kernel-source-5.4.77-noarch-1.txz
--rw-r--r-- 1 root root 163 2020-11-11 22:00 ./slackware64/k/kernel-source-5.4.77-noarch-1.txz.asc
--rw-r--r-- 1 root root 1170 2020-11-11 22:53 ./slackware64/k/maketag
--rw-r--r-- 1 root root 1170 2020-11-11 22:53 ./slackware64/k/maketag.ez
--rw-r--r-- 1 root root 18 2020-11-11 22:53 ./slackware64/k/tagfile
+-rw-r--r-- 1 root root 317 2020-11-18 21:23 ./slackware64/k/kernel-source-5.4.78-noarch-1.txt
+-rw-r--r-- 1 root root 110059720 2020-11-18 21:23 ./slackware64/k/kernel-source-5.4.78-noarch-1.txz
+-rw-r--r-- 1 root root 163 2020-11-18 21:23 ./slackware64/k/kernel-source-5.4.78-noarch-1.txz.asc
+-rw-r--r-- 1 root root 1170 2020-11-18 21:30 ./slackware64/k/maketag
+-rw-r--r-- 1 root root 1170 2020-11-18 21:30 ./slackware64/k/maketag.ez
+-rw-r--r-- 1 root root 18 2020-11-18 21:30 ./slackware64/k/tagfile
drwxr-xr-x 2 root root 36864 2020-10-25 18:08 ./slackware64/kde
-rw-r--r-- 1 root root 319 2018-06-02 22:05 ./slackware64/kde/amarok-2.9.0-x86_64-3.txt
-rw-r--r-- 1 root root 47003780 2018-06-02 22:05 ./slackware64/kde/amarok-2.9.0-x86_64-3.txz
@@ -2516,7 +2516,7 @@ drwxr-xr-x 2 root root 20480 2016-03-10 03:11 ./slackware64/kdei
-rw-r--r-- 1 root root 7544 2018-03-01 07:54 ./slackware64/kdei/maketag
-rw-r--r-- 1 root root 7544 2018-03-01 07:54 ./slackware64/kdei/maketag.ez
-rw-r--r-- 1 root root 1500 2018-03-01 07:54 ./slackware64/kdei/tagfile
-drwxr-xr-x 2 root root 73728 2020-11-16 21:25 ./slackware64/l
+drwxr-xr-x 2 root root 73728 2020-11-18 21:43 ./slackware64/l
-rw-r--r-- 1 root root 338 2020-05-16 19:55 ./slackware64/l/ConsoleKit2-1.2.1-x86_64-4.txt
-rw-r--r-- 1 root root 193724 2020-05-16 19:55 ./slackware64/l/ConsoleKit2-1.2.1-x86_64-4.txz
-rw-r--r-- 1 root root 163 2020-05-16 19:55 ./slackware64/l/ConsoleKit2-1.2.1-x86_64-4.txz.asc
@@ -2862,9 +2862,9 @@ drwxr-xr-x 2 root root 73728 2020-11-16 21:25 ./slackware64/l
-rw-r--r-- 1 root root 473 2018-04-13 14:50 ./slackware64/l/id3lib-3.8.3-x86_64-2.txt
-rw-r--r-- 1 root root 156996 2018-04-13 14:50 ./slackware64/l/id3lib-3.8.3-x86_64-2.txz
-rw-r--r-- 1 root root 163 2018-04-13 14:50 ./slackware64/l/id3lib-3.8.3-x86_64-2.txz.asc
--rw-r--r-- 1 root root 537 2020-11-16 19:58 ./slackware64/l/imagemagick-7.0.10_38-x86_64-1.txt
--rw-r--r-- 1 root root 7883300 2020-11-16 19:58 ./slackware64/l/imagemagick-7.0.10_38-x86_64-1.txz
--rw-r--r-- 1 root root 163 2020-11-16 19:58 ./slackware64/l/imagemagick-7.0.10_38-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 537 2020-11-18 19:04 ./slackware64/l/imagemagick-7.0.10_39-x86_64-1.txt
+-rw-r--r-- 1 root root 7880588 2020-11-18 19:04 ./slackware64/l/imagemagick-7.0.10_39-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2020-11-18 19:04 ./slackware64/l/imagemagick-7.0.10_39-x86_64-1.txz.asc
-rwxr-xr-x 1 root root 2897 2009-06-24 22:06 ./slackware64/l/install-packages
-rw-r--r-- 1 root root 446 2006-09-18 10:41 ./slackware64/l/install.end
-rw-r--r-- 1 root root 415 2020-11-13 19:00 ./slackware64/l/isl-0.23-x86_64-1.txt
@@ -3023,9 +3023,9 @@ drwxr-xr-x 2 root root 73728 2020-11-16 21:25 ./slackware64/l
-rw-r--r-- 1 root root 468 2019-08-12 23:35 ./slackware64/l/libiodbc-3.52.13-x86_64-1.txt
-rw-r--r-- 1 root root 266844 2019-08-12 23:35 ./slackware64/l/libiodbc-3.52.13-x86_64-1.txz
-rw-r--r-- 1 root root 163 2019-08-12 23:35 ./slackware64/l/libiodbc-3.52.13-x86_64-1.txz.asc
--rw-r--r-- 1 root root 514 2020-06-24 18:04 ./slackware64/l/libjpeg-turbo-2.0.5-x86_64-1.txt
--rw-r--r-- 1 root root 381920 2020-06-24 18:04 ./slackware64/l/libjpeg-turbo-2.0.5-x86_64-1.txz
--rw-r--r-- 1 root root 163 2020-06-24 18:04 ./slackware64/l/libjpeg-turbo-2.0.5-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 514 2020-11-17 19:31 ./slackware64/l/libjpeg-turbo-2.0.6-x86_64-1.txt
+-rw-r--r-- 1 root root 382196 2020-11-17 19:31 ./slackware64/l/libjpeg-turbo-2.0.6-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2020-11-17 19:31 ./slackware64/l/libjpeg-turbo-2.0.6-x86_64-1.txz.asc
-rw-r--r-- 1 root root 402 2018-11-16 20:42 ./slackware64/l/libkarma-0.1.2-x86_64-1.txt
-rw-r--r-- 1 root root 58136 2018-11-16 20:42 ./slackware64/l/libkarma-0.1.2-x86_64-1.txz
-rw-r--r-- 1 root root 163 2018-11-16 20:42 ./slackware64/l/libkarma-0.1.2-x86_64-1.txz.asc
@@ -3560,7 +3560,7 @@ drwxr-xr-x 2 root root 73728 2020-11-16 21:25 ./slackware64/l
-rw-r--r-- 1 root root 463 2020-06-23 19:31 ./slackware64/l/zstd-1.4.5-x86_64-2.txt
-rw-r--r-- 1 root root 627360 2020-06-23 19:31 ./slackware64/l/zstd-1.4.5-x86_64-2.txz
-rw-r--r-- 1 root root 163 2020-06-23 19:31 ./slackware64/l/zstd-1.4.5-x86_64-2.txz.asc
-drwxr-xr-x 2 root root 32768 2020-11-16 21:25 ./slackware64/n
+drwxr-xr-x 2 root root 32768 2020-11-18 21:43 ./slackware64/n
-rw-r--r-- 1 root root 357 2020-11-16 19:57 ./slackware64/n/ModemManager-1.14.8-x86_64-1.txt
-rw-r--r-- 1 root root 1867448 2020-11-16 19:57 ./slackware64/n/ModemManager-1.14.8-x86_64-1.txz
-rw-r--r-- 1 root root 163 2020-11-16 19:57 ./slackware64/n/ModemManager-1.14.8-x86_64-1.txz.asc
@@ -3645,9 +3645,9 @@ drwxr-xr-x 2 root root 32768 2020-11-16 21:25 ./slackware64/n
-rw-r--r-- 1 root root 369 2019-04-03 21:20 ./slackware64/n/gnupg-1.4.23-x86_64-2.txt
-rw-r--r-- 1 root root 1171844 2019-04-03 21:20 ./slackware64/n/gnupg-1.4.23-x86_64-2.txz
-rw-r--r-- 1 root root 163 2019-04-03 21:20 ./slackware64/n/gnupg-1.4.23-x86_64-2.txz.asc
--rw-r--r-- 1 root root 598 2020-09-03 17:51 ./slackware64/n/gnupg2-2.2.23-x86_64-1.txt
--rw-r--r-- 1 root root 2281896 2020-09-03 17:51 ./slackware64/n/gnupg2-2.2.23-x86_64-1.txz
--rw-r--r-- 1 root root 163 2020-09-03 17:51 ./slackware64/n/gnupg2-2.2.23-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 598 2020-11-17 19:30 ./slackware64/n/gnupg2-2.2.24-x86_64-1.txt
+-rw-r--r-- 1 root root 2315196 2020-11-17 19:30 ./slackware64/n/gnupg2-2.2.24-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2020-11-17 19:30 ./slackware64/n/gnupg2-2.2.24-x86_64-1.txz.asc
-rw-r--r-- 1 root root 492 2020-09-04 18:08 ./slackware64/n/gnutls-3.6.15-x86_64-1.txt
-rw-r--r-- 1 root root 2708856 2020-09-04 18:08 ./slackware64/n/gnutls-3.6.15-x86_64-1.txz
-rw-r--r-- 1 root root 163 2020-09-04 18:08 ./slackware64/n/gnutls-3.6.15-x86_64-1.txz.asc
@@ -4934,7 +4934,7 @@ drwxr-xr-x 2 root root 61440 2020-11-12 21:22 ./slackware64/x
-rw-r--r-- 1 root root 213 2018-04-13 06:10 ./slackware64/x/xwud-1.0.5-x86_64-2.txt
-rw-r--r-- 1 root root 25288 2018-04-13 06:10 ./slackware64/x/xwud-1.0.5-x86_64-2.txz
-rw-r--r-- 1 root root 163 2018-04-13 06:10 ./slackware64/x/xwud-1.0.5-x86_64-2.txz.asc
-drwxr-xr-x 2 root root 12288 2020-11-16 21:25 ./slackware64/xap
+drwxr-xr-x 2 root root 12288 2020-11-18 21:43 ./slackware64/xap
-rw-r--r-- 1 root root 625 2020-04-05 20:17 ./slackware64/xap/MPlayer-20200103-x86_64-2.txt
-rw-r--r-- 1 root root 2733304 2020-04-05 20:17 ./slackware64/xap/MPlayer-20200103-x86_64-2.txz
-rw-r--r-- 1 root root 163 2020-04-05 20:17 ./slackware64/xap/MPlayer-20200103-x86_64-2.txz.asc
@@ -5011,9 +5011,9 @@ drwxr-xr-x 2 root root 12288 2020-11-16 21:25 ./slackware64/xap
-rw-r--r-- 1 root root 570 2020-11-16 20:03 ./slackware64/xap/mozilla-firefox-78.5.0esr-x86_64-1.txt
-rw-r--r-- 1 root root 61161200 2020-11-16 20:03 ./slackware64/xap/mozilla-firefox-78.5.0esr-x86_64-1.txz
-rw-r--r-- 1 root root 163 2020-11-16 20:03 ./slackware64/xap/mozilla-firefox-78.5.0esr-x86_64-1.txz.asc
--rw-r--r-- 1 root root 663 2020-11-11 20:27 ./slackware64/xap/mozilla-thunderbird-78.4.3-x86_64-1.txt
--rw-r--r-- 1 root root 56949252 2020-11-11 20:27 ./slackware64/xap/mozilla-thunderbird-78.4.3-x86_64-1.txz
--rw-r--r-- 1 root root 163 2020-11-11 20:27 ./slackware64/xap/mozilla-thunderbird-78.4.3-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 663 2020-11-18 19:30 ./slackware64/xap/mozilla-thunderbird-78.5.0-x86_64-1.txt
+-rw-r--r-- 1 root root 57833532 2020-11-18 19:30 ./slackware64/xap/mozilla-thunderbird-78.5.0-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2020-11-18 19:30 ./slackware64/xap/mozilla-thunderbird-78.5.0-x86_64-1.txz.asc
-rw-r--r-- 1 root root 359 2020-06-23 18:24 ./slackware64/xap/network-manager-applet-1.18.0-x86_64-1.txt
-rw-r--r-- 1 root root 905824 2020-06-23 18:24 ./slackware64/xap/network-manager-applet-1.18.0-x86_64-1.txz
-rw-r--r-- 1 root root 163 2020-06-23 18:24 ./slackware64/xap/network-manager-applet-1.18.0-x86_64-1.txz.asc
@@ -5041,9 +5041,9 @@ drwxr-xr-x 2 root root 12288 2020-11-16 21:25 ./slackware64/xap
-rw-r--r-- 1 root root 602 2018-04-13 17:38 ./slackware64/xap/seyon-2.20c-x86_64-4.txt
-rw-r--r-- 1 root root 115596 2018-04-13 17:38 ./slackware64/xap/seyon-2.20c-x86_64-4.txz
-rw-r--r-- 1 root root 163 2018-04-13 17:38 ./slackware64/xap/seyon-2.20c-x86_64-4.txz.asc
--rw-r--r-- 1 root root 322 2020-08-15 19:06 ./slackware64/xap/ssr-0.4.2-x86_64-1.txt
--rw-r--r-- 1 root root 1340072 2020-08-15 19:06 ./slackware64/xap/ssr-0.4.2-x86_64-1.txz
--rw-r--r-- 1 root root 163 2020-08-15 19:06 ./slackware64/xap/ssr-0.4.2-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 322 2020-11-18 20:14 ./slackware64/xap/ssr-0.4.2-x86_64-2.txt
+-rw-r--r-- 1 root root 1332952 2020-11-18 20:14 ./slackware64/xap/ssr-0.4.2-x86_64-2.txz
+-rw-r--r-- 1 root root 163 2020-11-18 20:14 ./slackware64/xap/ssr-0.4.2-x86_64-2.txz.asc
-rw-r--r-- 1 root root 654 2020-08-15 19:16 ./slackware64/xap/tagfile
-rw-r--r-- 1 root root 503 2020-11-09 19:23 ./slackware64/xap/vim-gvim-8.2.1969-x86_64-1.txt
-rw-r--r-- 1 root root 1489524 2020-11-09 19:23 ./slackware64/xap/vim-gvim-8.2.1969-x86_64-1.txz
@@ -5087,7 +5087,7 @@ drwxr-xr-x 2 root root 12288 2020-11-16 21:25 ./slackware64/xap
-rw-r--r-- 1 root root 463 2020-05-16 20:35 ./slackware64/xap/xscreensaver-5.44-x86_64-2.txt
-rw-r--r-- 1 root root 6570360 2020-05-16 20:35 ./slackware64/xap/xscreensaver-5.44-x86_64-2.txz
-rw-r--r-- 1 root root 163 2020-05-16 20:35 ./slackware64/xap/xscreensaver-5.44-x86_64-2.txz.asc
-drwxr-xr-x 2 root root 4096 2020-08-14 18:33 ./slackware64/xfce
+drwxr-xr-x 2 root root 4096 2020-11-18 21:43 ./slackware64/xfce
-rw-r--r-- 1 root root 375 2019-12-19 18:38 ./slackware64/xfce/exo-0.12.11-x86_64-1.txt
-rw-r--r-- 1 root root 653816 2019-12-19 18:38 ./slackware64/xfce/exo-0.12.11-x86_64-1.txz
-rw-r--r-- 1 root root 163 2019-12-19 18:38 ./slackware64/xfce/exo-0.12.11-x86_64-1.txz.asc
@@ -5111,9 +5111,9 @@ drwxr-xr-x 2 root root 4096 2020-08-14 18:33 ./slackware64/xfce
-rw-r--r-- 1 root root 1580792 2018-04-13 18:04 ./slackware64/xfce/orage-4.12.1-x86_64-5.txz
-rw-r--r-- 1 root root 163 2018-04-13 18:04 ./slackware64/xfce/orage-4.12.1-x86_64-5.txz.asc
-rw-r--r-- 1 root root 463 2020-01-31 19:42 ./slackware64/xfce/tagfile
--rw-r--r-- 1 root root 460 2020-05-24 18:12 ./slackware64/xfce/thunar-1.8.15-x86_64-1.txt
--rw-r--r-- 1 root root 1192336 2020-05-24 18:12 ./slackware64/xfce/thunar-1.8.15-x86_64-1.txz
--rw-r--r-- 1 root root 163 2020-05-24 18:12 ./slackware64/xfce/thunar-1.8.15-x86_64-1.txz.asc
+-rw-r--r-- 1 root root 460 2020-11-17 19:34 ./slackware64/xfce/thunar-1.8.16-x86_64-1.txt
+-rw-r--r-- 1 root root 1190436 2020-11-17 19:34 ./slackware64/xfce/thunar-1.8.16-x86_64-1.txz
+-rw-r--r-- 1 root root 163 2020-11-17 19:34 ./slackware64/xfce/thunar-1.8.16-x86_64-1.txz.asc
-rw-r--r-- 1 root root 345 2019-08-17 19:59 ./slackware64/xfce/thunar-volman-0.9.5-x86_64-1.txt
-rw-r--r-- 1 root root 135140 2019-08-17 19:59 ./slackware64/xfce/thunar-volman-0.9.5-x86_64-1.txz
-rw-r--r-- 1 root root 163 2019-08-17 19:59 ./slackware64/xfce/thunar-volman-0.9.5-x86_64-1.txz.asc
@@ -5180,11 +5180,11 @@ drwxr-xr-x 2 root root 4096 2019-02-17 23:51 ./slackware64/y
-rw-r--r-- 1 root root 1147 2018-03-01 07:55 ./slackware64/y/maketag
-rw-r--r-- 1 root root 1147 2018-03-01 07:55 ./slackware64/y/maketag.ez
-rw-r--r-- 1 root root 14 2018-03-01 07:55 ./slackware64/y/tagfile
-drwxr-xr-x 19 root root 4096 2020-11-16 21:26 ./source
--rw-r--r-- 1 root root 504595 2020-11-16 21:26 ./source/CHECKSUMS.md5
--rw-r--r-- 1 root root 163 2020-11-16 21:26 ./source/CHECKSUMS.md5.asc
--rw-r--r-- 1 root root 710434 2020-11-16 21:26 ./source/FILE_LIST
--rw-r--r-- 1 root root 21926214 2020-11-16 21:26 ./source/MANIFEST.bz2
+drwxr-xr-x 19 root root 4096 2020-11-18 21:44 ./source
+-rw-r--r-- 1 root root 504514 2020-11-18 21:44 ./source/CHECKSUMS.md5
+-rw-r--r-- 1 root root 163 2020-11-18 21:44 ./source/CHECKSUMS.md5.asc
+-rw-r--r-- 1 root root 710338 2020-11-18 21:44 ./source/FILE_LIST
+-rw-r--r-- 1 root root 21929825 2020-11-18 21:44 ./source/MANIFEST.bz2
-rw-r--r-- 1 root root 1314 2006-10-02 04:40 ./source/README.TXT
drwxr-xr-x 119 root root 4096 2020-10-28 19:36 ./source/a
-rw-r--r-- 1 root root 1034 2019-05-04 17:56 ./source/a/FTBFSlog
@@ -6911,10 +6911,10 @@ drwxr-xr-x 2 root root 4096 2020-07-09 18:37 ./source/d/clisp
-rw-r--r-- 1 root root 506452 2019-08-25 01:09 ./source/d/clisp/libffcall-2.2.tar.lz
-rw-r--r-- 1 root root 1116 2018-02-27 06:13 ./source/d/clisp/slack-desc
-rwxr-xr-x 1 root root 1890 2020-07-09 18:37 ./source/d/clisp/source.download
-drwxr-xr-x 2 root root 4096 2020-10-07 19:26 ./source/d/cmake
--rw-r--r-- 1 root root 6084469 2020-10-06 15:22 ./source/d/cmake/cmake-3.18.4.tar.lz
+drwxr-xr-x 2 root root 4096 2020-11-18 17:58 ./source/d/cmake
+-rw-r--r-- 1 root root 6268820 2020-11-18 16:25 ./source/d/cmake/cmake-3.19.0.tar.lz
-rwxr-xr-x 1 root root 4277 2020-03-04 17:27 ./source/d/cmake/cmake.SlackBuild
--rw-r--r-- 1 root root 400091 2020-10-07 19:25 ./source/d/cmake/cmake.manpages.tar.lz
+-rw-r--r-- 1 root root 415552 2020-11-18 17:57 ./source/d/cmake/cmake.manpages.tar.lz
-rw-r--r-- 1 root root 42 2019-02-02 19:08 ./source/d/cmake/cmake.url
-rwxr-xr-x 1 root root 1591 2018-01-19 18:52 ./source/d/cmake/extract-manpages-from-binary.sh
-rw-r--r-- 1 root root 832 2018-11-29 19:16 ./source/d/cmake/slack-desc
@@ -7313,21 +7313,21 @@ drwxr-xr-x 2 root root 4096 2020-10-07 19:36 ./source/installer/sources/n
-rw-r--r-- 1 root root 1400792 2020-10-07 09:07 ./source/installer/sources/nano/nano-5.3.tar.xz
-rw-r--r-- 1 root root 833 2020-10-07 09:07 ./source/installer/sources/nano/nano-5.3.tar.xz.sig
-rw-r--r-- 1 root root 16894 2012-09-03 20:53 ./source/installer/usbimg2disk.sh
-drwxr-xr-x 4 root root 4096 2020-11-11 19:37 ./source/k
+drwxr-xr-x 4 root root 4096 2020-11-18 19:51 ./source/k
-rwxr-xr-x 1 root root 7861 2019-12-27 22:39 ./source/k/build-all-kernels.sh
-drwxr-xr-x 2 root root 4096 2020-11-11 20:44 ./source/k/kernel-configs
--rw-r--r-- 1 root root 216026 2020-11-11 20:43 ./source/k/kernel-configs/config-generic-5.4.77
--rw-r--r-- 1 root root 217626 2020-11-11 20:44 ./source/k/kernel-configs/config-generic-5.4.77.x64
--rw-r--r-- 1 root root 217703 2020-11-11 20:42 ./source/k/kernel-configs/config-generic-smp-5.4.77-smp
--rw-r--r-- 1 root root 216026 2020-11-11 20:43 ./source/k/kernel-configs/config-huge-5.4.77
--rw-r--r-- 1 root root 217626 2020-11-11 20:44 ./source/k/kernel-configs/config-huge-5.4.77.x64
--rw-r--r-- 1 root root 217703 2020-11-11 20:43 ./source/k/kernel-configs/config-huge-smp-5.4.77-smp
+drwxr-xr-x 2 root root 4096 2020-11-18 20:14 ./source/k/kernel-configs
+-rw-r--r-- 1 root root 216026 2020-11-18 19:56 ./source/k/kernel-configs/config-generic-5.4.78
+-rw-r--r-- 1 root root 217626 2020-11-18 20:14 ./source/k/kernel-configs/config-generic-5.4.78.x64
+-rw-r--r-- 1 root root 217703 2020-11-18 19:53 ./source/k/kernel-configs/config-generic-smp-5.4.78-smp
+-rw-r--r-- 1 root root 216026 2020-11-18 19:56 ./source/k/kernel-configs/config-huge-5.4.78
+-rw-r--r-- 1 root root 217626 2020-11-18 20:14 ./source/k/kernel-configs/config-huge-5.4.78.x64
+-rw-r--r-- 1 root root 217703 2020-11-18 19:55 ./source/k/kernel-configs/config-huge-smp-5.4.78-smp
-rwxr-xr-x 1 root root 7441 2020-06-11 19:56 ./source/k/kernel-generic.SlackBuild
-rwxr-xr-x 1 root root 3779 2019-09-29 23:48 ./source/k/kernel-headers.SlackBuild
-rwxr-xr-x 1 root root 6004 2020-06-11 19:57 ./source/k/kernel-modules.SlackBuild
-rwxr-xr-x 1 root root 7977 2020-06-11 19:56 ./source/k/kernel-source.SlackBuild
--rw-r--r-- 1 root root 989 2020-11-10 20:22 ./source/k/linux-5.4.77.tar.sign
--rw-r--r-- 1 root root 109619220 2020-11-10 20:22 ./source/k/linux-5.4.77.tar.xz
+-rw-r--r-- 1 root root 989 2020-11-18 18:27 ./source/k/linux-5.4.78.tar.sign
+-rw-r--r-- 1 root root 109618256 2020-11-18 18:27 ./source/k/linux-5.4.78.tar.xz
drwxr-xr-x 2 root root 4096 2018-03-05 18:29 ./source/k/slack-desc
-rw-r--r-- 1 root root 1138 2018-02-27 06:16 ./source/k/slack-desc/slack-desc.kernel-generic-smp.i686
-rw-r--r-- 1 root root 1041 2018-02-27 06:16 ./source/k/slack-desc/slack-desc.kernel-generic.i586
@@ -9167,8 +9167,8 @@ drwxr-xr-x 2 root root 4096 2018-01-05 18:45 ./source/l/id3lib/patches
-rw-r--r-- 1 root root 629 2017-09-11 16:30 ./source/l/id3lib/patches/id3lib.utf8_writing.patch.gz
-rw-r--r-- 1 root root 517 2017-09-11 16:30 ./source/l/id3lib/patches/id3lib.vbr_stack_smash.patch.gz
-rw-r--r-- 1 root root 927 2018-02-27 06:12 ./source/l/id3lib/slack-desc
-drwxr-xr-x 2 root root 4096 2020-11-16 19:45 ./source/l/imagemagick
--rw-r--r-- 1 root root 9667866 2020-11-14 13:53 ./source/l/imagemagick/ImageMagick-7.0.10-38.tar.lz
+drwxr-xr-x 2 root root 4096 2020-11-18 19:02 ./source/l/imagemagick
+-rw-r--r-- 1 root root 9667110 2020-11-17 00:17 ./source/l/imagemagick/ImageMagick-7.0.10-39.tar.lz
-rw-r--r-- 1 root root 309 2016-05-17 04:08 ./source/l/imagemagick/doinst.sh.gz
-rwxr-xr-x 1 root root 7092 2020-11-01 18:44 ./source/l/imagemagick/imagemagick.SlackBuild
-rw-r--r-- 1 root root 43 2020-09-30 21:13 ./source/l/imagemagick/imagemagick.url
@@ -9412,8 +9412,8 @@ drwxr-xr-x 2 root root 4096 2019-09-29 23:48 ./source/l/libiodbc
-rwxr-xr-x 1 root root 4315 2019-09-29 23:48 ./source/l/libiodbc/libiodbc.SlackBuild
-rw-r--r-- 1 root root 277 2019-08-12 23:35 ./source/l/libiodbc/libiodbc.disable.rpath.diff.gz
-rw-r--r-- 1 root root 923 2018-11-08 00:04 ./source/l/libiodbc/slack-desc
-drwxr-xr-x 2 root root 4096 2020-06-24 18:04 ./source/l/libjpeg-turbo
--rw-r--r-- 1 root root 1524720 2020-06-23 22:34 ./source/l/libjpeg-turbo/libjpeg-turbo-2.0.5.tar.xz
+drwxr-xr-x 2 root root 4096 2020-11-17 19:31 ./source/l/libjpeg-turbo
+-rw-r--r-- 1 root root 1544457 2020-11-16 23:38 ./source/l/libjpeg-turbo/libjpeg-turbo-2.0.6.tar.lz
-rwxr-xr-x 1 root root 4900 2019-09-29 23:48 ./source/l/libjpeg-turbo/libjpeg-turbo.SlackBuild
-rw-r--r-- 1 root root 94 2019-02-20 20:35 ./source/l/libjpeg-turbo/libjpeg-turbo.url
-rw-r--r-- 1 root root 975 2018-02-27 06:12 ./source/l/libjpeg-turbo/slack-desc
@@ -10704,8 +10704,8 @@ drwxr-xr-x 2 root root 4096 2019-09-29 23:48 ./source/n/gnupg
-rw-r--r-- 1 root root 2663136 2018-06-11 08:48 ./source/n/gnupg/gnupg-1.4.23.tar.xz
-rwxr-xr-x 1 root root 3739 2019-09-29 23:48 ./source/n/gnupg/gnupg.SlackBuild
-rw-r--r-- 1 root root 822 2018-02-27 06:13 ./source/n/gnupg/slack-desc.gnupg
-drwxr-xr-x 2 root root 4096 2020-09-03 17:50 ./source/n/gnupg2
--rw-r--r-- 1 root root 5008360 2020-09-03 15:50 ./source/n/gnupg2/gnupg-2.2.23.tar.lz
+drwxr-xr-x 2 root root 4096 2020-11-17 19:30 ./source/n/gnupg2
+-rw-r--r-- 1 root root 5070839 2020-11-17 08:48 ./source/n/gnupg2/gnupg-2.2.24.tar.lz
-rwxr-xr-x 1 root root 4251 2019-09-29 23:48 ./source/n/gnupg2/gnupg2.SlackBuild
-rw-r--r-- 1 root root 1052 2018-08-27 17:38 ./source/n/gnupg2/slack-desc
drwxr-xr-x 2 root root 4096 2020-09-04 18:07 ./source/n/gnutls
@@ -13224,7 +13224,7 @@ drwxr-xr-x 2 root root 4096 2020-07-03 19:10 ./source/xap/mozilla-firefox/
-rw-r--r-- 1 root root 2748 2017-12-04 21:30 ./source/xap/mozilla-firefox/mozilla-firefox.desktop
-rw-r--r-- 1 root root 1033 2020-07-07 18:08 ./source/xap/mozilla-firefox/slack-desc
-rw-r--r-- 1 root root 456 2019-07-08 18:54 ./source/xap/mozilla-firefox/unbreakdocs.diff.gz
-drwxr-xr-x 4 root root 4096 2020-11-14 22:53 ./source/xap/mozilla-thunderbird
+drwxr-xr-x 4 root root 4096 2020-11-18 19:33 ./source/xap/mozilla-thunderbird
drwxr-xr-x 2 root root 4096 2016-07-03 18:05 ./source/xap/mozilla-thunderbird/autoconf
-rw-r--r-- 1 root root 5869 2016-07-03 18:04 ./source/xap/mozilla-thunderbird/autoconf/autoconf-2.13-consolidated_fixes-1.patch.gz
-rw-r--r-- 1 root root 300116 1999-01-15 21:03 ./source/xap/mozilla-thunderbird/autoconf/autoconf-2.13.tar.xz
@@ -13244,13 +13244,12 @@ drwxr-xr-x 2 root root 4096 2020-08-25 02:08 ./source/xap/mozilla-thunderb
-rw-r--r-- 1 root root 86 2019-07-08 21:02 ./source/xap/mozilla-thunderbird/build-deps/nodejs/nodejs.url
-rw-r--r-- 1 root root 485 2020-08-25 02:44 ./source/xap/mozilla-thunderbird/gkrust.a.no.networking.check.diff.gz
-rw-r--r-- 1 root root 312 2012-03-28 18:01 ./source/xap/mozilla-thunderbird/mozilla-firefox.xpcom_arm.patch.gz
--rwxr-xr-x 1 root root 12899 2020-11-14 22:29 ./source/xap/mozilla-thunderbird/mozilla-thunderbird.SlackBuild
+-rwxr-xr-x 1 root root 12802 2020-11-18 19:09 ./source/xap/mozilla-thunderbird/mozilla-thunderbird.SlackBuild
-rw-r--r-- 1 root root 3378 2005-03-08 05:13 ./source/xap/mozilla-thunderbird/mozilla-thunderbird.desktop
--rw-r--r-- 1 root root 173003 2020-10-20 13:21 ./source/xap/mozilla-thunderbird/rust_1.47.0.patch.gz
-rw-r--r-- 1 root root 1130 2018-02-27 06:47 ./source/xap/mozilla-thunderbird/slack-desc
-rw-r--r-- 1 root root 330 2019-08-27 16:35 ./source/xap/mozilla-thunderbird/tb.ui.scrollToClick.diff.gz
--rw-r--r-- 1 root root 351142752 2020-11-11 15:27 ./source/xap/mozilla-thunderbird/thunderbird-78.4.3.source.tar.xz
--rw-r--r-- 1 root root 833 2020-11-11 15:28 ./source/xap/mozilla-thunderbird/thunderbird-78.4.3.source.tar.xz.asc
+-rw-r--r-- 1 root root 355944116 2020-11-18 14:26 ./source/xap/mozilla-thunderbird/thunderbird-78.5.0.source.tar.xz
+-rw-r--r-- 1 root root 833 2020-11-18 14:27 ./source/xap/mozilla-thunderbird/thunderbird-78.5.0.source.tar.xz.asc
-rw-r--r-- 1 root root 456 2019-07-08 18:54 ./source/xap/mozilla-thunderbird/unbreakdocs.diff.gz
drwxr-xr-x 2 root root 4096 2020-06-23 18:18 ./source/xap/network-manager-applet
-rw-r--r-- 1 root root 207 2012-08-10 23:59 ./source/xap/network-manager-applet/doinst.sh.gz
@@ -13319,7 +13318,7 @@ drwxr-xr-x 2 root root 4096 2020-08-15 19:05 ./source/xap/ssr
-rw-r--r-- 1 root root 171 2020-08-15 19:01 ./source/xap/ssr/doinst.sh.gz
-rw-r--r-- 1 root root 805 2020-08-15 18:49 ./source/xap/ssr/slack-desc
-rw-r--r-- 1 root root 1335977 2020-05-18 16:17 ./source/xap/ssr/ssr-0.4.2.tar.lz
--rwxr-xr-x 1 root root 3907 2020-08-15 19:04 ./source/xap/ssr/ssr.SlackBuild
+-rwxr-xr-x 1 root root 3929 2020-11-18 19:43 ./source/xap/ssr/ssr.SlackBuild
-rw-r--r-- 1 root root 36 2020-08-15 18:46 ./source/xap/ssr/ssr.url
lrwxrwxrwx 1 root root 9 2009-08-23 23:36 ./source/xap/vim-gvim -> ../ap/vim
drwxr-xr-x 2 root root 4096 2020-04-05 20:07 ./source/xap/windowmaker
@@ -13495,16 +13494,16 @@ drwxr-xr-x 2 root root 4096 2019-09-29 23:48 ./source/xfce/orage
-rwxr-xr-x 1 root root 4104 2019-09-29 23:48 ./source/xfce/orage/orage.SlackBuild
-rw-r--r-- 1 root root 723 2017-11-14 22:05 ./source/xfce/orage/orage.libical3.diff.gz
-rw-r--r-- 1 root root 625 2018-02-27 06:13 ./source/xfce/orage/slack-desc
-drwxr-xr-x 2 root root 4096 2020-05-24 18:12 ./source/xfce/thunar
+drwxr-xr-x 2 root root 4096 2020-11-17 19:34 ./source/xfce/thunar
drwxr-xr-x 2 root root 4096 2019-09-29 23:48 ./source/xfce/thunar-volman
-rw-r--r-- 1 root root 800 2018-02-27 06:13 ./source/xfce/thunar-volman/slack-desc
-rw-r--r-- 1 root root 407849 2019-08-11 22:27 ./source/xfce/thunar-volman/thunar-volman-0.9.5.tar.lz
-rwxr-xr-x 1 root root 3468 2019-09-29 23:48 ./source/xfce/thunar-volman/thunar-volman.SlackBuild
-rw-r--r-- 1 root root 79 2019-08-17 19:59 ./source/xfce/thunar-volman/thunar-volman.url
-rw-r--r-- 1 root root 914 2020-01-31 19:09 ./source/xfce/thunar/slack-desc
--rw-r--r-- 1 root root 1889397 2020-05-24 12:52 ./source/xfce/thunar/thunar-1.8.15.tar.lz
+-rw-r--r-- 1 root root 1892167 2020-10-31 22:48 ./source/xfce/thunar/thunar-1.8.16.tar.lz
-rwxr-xr-x 1 root root 4703 2020-01-31 19:10 ./source/xfce/thunar/thunar.SlackBuild
--rw-r--r-- 1 root root 66 2020-05-24 18:11 ./source/xfce/thunar/thunar.url
+-rw-r--r-- 1 root root 66 2020-11-17 19:33 ./source/xfce/thunar/thunar.url
drwxr-xr-x 2 root root 4096 2020-08-10 17:40 ./source/xfce/tumbler
-rw-r--r-- 1 root root 964 2018-02-27 06:13 ./source/xfce/tumbler/slack-desc
-rw-r--r-- 1 root root 464730 2020-08-06 12:14 ./source/xfce/tumbler/tumbler-0.2.9.tar.lz
@@ -13633,12 +13632,12 @@ drwxr-xr-x 2 root root 4096 2019-02-17 22:03 ./source/y/bsd-games/patches
-rw-r--r-- 1 root root 313 2019-02-17 22:07 ./source/y/bsd-games/patches/bsd-games.fortunepath.diff.gz
-rw-r--r-- 1 root root 1960 2006-09-09 00:47 ./source/y/bsd-games/patches/bsd-games.pom.diff.gz
-rw-r--r-- 1 root root 1065 2019-02-17 22:28 ./source/y/bsd-games/slack-desc
-drwxr-xr-x 4 root root 4096 2020-11-15 00:08 ./testing
--rw-r--r-- 1 root root 347621 2020-11-15 00:08 ./testing/CHECKSUMS.md5
--rw-r--r-- 1 root root 163 2020-11-15 00:08 ./testing/CHECKSUMS.md5.asc
--rw-r--r-- 1 root root 422687 2020-11-15 00:07 ./testing/FILE_LIST
--rw-r--r-- 1 root root 3445337 2020-11-15 00:07 ./testing/MANIFEST.bz2
--rw-r--r-- 1 root root 191653 2020-11-15 00:08 ./testing/PACKAGES.TXT
+drwxr-xr-x 4 root root 4096 2020-11-18 21:45 ./testing
+-rw-r--r-- 1 root root 347070 2020-11-18 21:45 ./testing/CHECKSUMS.md5
+-rw-r--r-- 1 root root 163 2020-11-18 21:45 ./testing/CHECKSUMS.md5.asc
+-rw-r--r-- 1 root root 421758 2020-11-18 21:44 ./testing/FILE_LIST
+-rw-r--r-- 1 root root 3456983 2020-11-18 21:44 ./testing/MANIFEST.bz2
+-rw-r--r-- 1 root root 191653 2020-11-18 21:45 ./testing/PACKAGES.TXT
drwxr-xr-x 4 root root 4096 2020-11-03 20:58 ./testing/packages
drwxr-xr-x 2 root root 4096 2020-11-14 02:48 ./testing/packages/gcc10
-rw-r--r-- 1 root root 310 2020-11-13 20:04 ./testing/packages/gcc10/gcc-10.2.0-x86_64-2.txt
@@ -14882,17 +14881,7 @@ drwxr-xr-x 2 root root 4096 2020-11-01 20:04 ./testing/source/vtown/deps/c
-rwxr-xr-x 1 root root 4406 2020-10-27 19:12 ./testing/source/vtown/deps/cfitsio/cfitsio.SlackBuild
-rw-r--r-- 1 root root 52 2020-09-28 20:28 ./testing/source/vtown/deps/cfitsio/cfitsio.url
-rw-r--r-- 1 root root 820 2020-11-01 20:04 ./testing/source/vtown/deps/cfitsio/slack-desc
-drwxr-xr-x 5 root root 4096 2020-11-01 20:04 ./testing/source/vtown/deps/cryfs
-drwxrwxr-x 2 root root 4096 2019-06-08 20:08 ./testing/source/vtown/deps/cryfs/.circleci
--rw-rw-r-- 1 root root 18609 2019-06-08 20:08 ./testing/source/vtown/deps/cryfs/.circleci/config.yml
--rw-rw-r-- 1 root root 2316 2019-06-08 20:08 ./testing/source/vtown/deps/cryfs/.clang-tidy
-drwxrwxr-x 2 root root 4096 2019-06-08 20:08 ./testing/source/vtown/deps/cryfs/.github
--rw-rw-r-- 1 root root 171 2019-06-08 20:08 ./testing/source/vtown/deps/cryfs/.github/ISSUE_TEMPLATE.md
--rw-rw-r-- 1 root root 175 2019-06-08 20:08 ./testing/source/vtown/deps/cryfs/.gitignore
--rw-rw-r-- 1 root root 232 2019-06-08 20:08 ./testing/source/vtown/deps/cryfs/.travis.yml
-drwxrwxr-x 2 root root 4096 2019-06-08 20:08 ./testing/source/vtown/deps/cryfs/.travisci
--rwxrwxr-x 1 root root 1334 2019-06-08 20:08 ./testing/source/vtown/deps/cryfs/.travisci/build_and_test.sh
--rwxrwxr-x 1 root root 643 2019-06-08 20:08 ./testing/source/vtown/deps/cryfs/.travisci/install.sh
+drwxr-xr-x 2 root root 4096 2020-11-18 03:54 ./testing/source/vtown/deps/cryfs
-rw-r--r-- 1 root root 7859580 2019-06-08 20:08 ./testing/source/vtown/deps/cryfs/cryfs-0.10.2.tar.lz
-rwxr-xr-- 1 root root 4697 2020-10-27 19:12 ./testing/source/vtown/deps/cryfs/cryfs.SlackBuild
-rw-r--r-- 1 root root 31 2020-09-01 19:27 ./testing/source/vtown/deps/cryfs/cryfs.url
@@ -16466,8 +16455,8 @@ drwxr-xr-x 2 root root 4096 2020-11-10 19:27 ./testing/source/vtown/kde/po
drwxr-xr-x 3 root root 4096 2011-07-29 01:16 ./testing/source/vtown/kde/post-install/kservice
-rw-r--r-- 1 root root 336 2017-01-23 23:21 ./testing/source/vtown/kde/post-install/kservice.post-install
drwxr-xr-x 2 root root 4096 2011-07-29 01:10 ./testing/source/vtown/kde/post-install/kservice/profile.d
--rw-r--r-- 1 root root 715 2017-10-24 13:51 ./testing/source/vtown/kde/post-install/kservice/profile.d/kde.csh
--rw-r--r-- 1 root root 689 2017-10-24 13:46 ./testing/source/vtown/kde/post-install/kservice/profile.d/kde.sh
+-rw-r--r-- 1 root root 778 2020-11-17 19:41 ./testing/source/vtown/kde/post-install/kservice/profile.d/kde.csh
+-rw-r--r-- 1 root root 760 2020-11-17 19:40 ./testing/source/vtown/kde/post-install/kservice/profile.d/kde.sh
-rw-r--r-- 1 root root 230 2019-05-11 12:26 ./testing/source/vtown/kde/post-install/ktorrent.post-install
-rw-r--r-- 1 root root 97 2011-06-12 23:40 ./testing/source/vtown/kde/post-install/kwallet.post-install
-rw-r--r-- 1 root root 97 2011-06-12 23:40 ./testing/source/vtown/kde/post-install/kwalletmanager.post-install
@@ -17093,12 +17082,12 @@ drwxr-xr-x 2 root root 4096 2020-10-31 19:30 ./testing/source/vtown/kde/sr
-rw-r--r-- 1 root root 17048 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdegraphics-mobipocket-20.08.3.tar.xz
-rw-r--r-- 1 root root 488 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdegraphics-mobipocket-20.08.3.tar.xz.sig
-rw-r--r-- 1 root root 46852 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdegraphics-thumbnailers-20.08.3.tar.xz
--rw-r--r-- 1 root root 488 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdegraphics-thumbnailers-20.08.3.tar.xz.sig
--rw-r--r-- 1 root root 321644 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdenetwork-filesharing-20.08.3.tar.xz
--rw-r--r-- 1 root root 488 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdenetwork-filesharing-20.08.3.tar.xz.sig
--rw-r--r-- 1 root root 11383252 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdenlive-20.08.3.tar.xz
--rw-r--r-- 1 root root 488 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdenlive-20.08.3.tar.xz.sig
--rw-r--r-- 1 root root 2071996 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdepim-addons-20.08.3.tar.xz
+-rw-r--r-- 1 root root 488 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdegraphics-thumbnailers-20.08.3.tar.xz.sig
+-rw-r--r-- 1 root root 321644 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdenetwork-filesharing-20.08.3.tar.xz
+-rw-r--r-- 1 root root 488 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdenetwork-filesharing-20.08.3.tar.xz.sig
+-rw-r--r-- 1 root root 11383252 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdenlive-20.08.3.tar.xz
+-rw-r--r-- 1 root root 488 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdenlive-20.08.3.tar.xz.sig
+-rw-r--r-- 1 root root 2071996 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdepim-addons-20.08.3.tar.xz
-rw-r--r-- 1 root root 488 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdepim-addons-20.08.3.tar.xz.sig
-rw-r--r-- 1 root root 59968 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdepim-apps-libs-20.08.3.tar.xz
-rw-r--r-- 1 root root 488 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdepim-apps-libs-20.08.3.tar.xz.sig
@@ -17664,9 +17653,9 @@ drwxr-xr-x 2 root root 4096 2020-11-11 22:13 ./testing/source/vtown/kde/src
-rw-r--r-- 1 root root 488 2020-11-10 20:12 ./testing/source/vtown/kde/src/plasma/systemsettings-5.20.3.tar.xz.sig
-rw-r--r-- 1 root root 81764 2020-11-10 20:13 ./testing/source/vtown/kde/src/plasma/xdg-desktop-portal-kde-5.20.3.tar.xz
-rw-r--r-- 1 root root 488 2020-11-10 20:13 ./testing/source/vtown/kde/src/plasma/xdg-desktop-portal-kde-5.20.3.tar.xz.sig
-drwxr-xr-x 2 root root 4096 2020-11-11 23:01 ./usb-and-pxe-installers
+drwxr-xr-x 2 root root 4096 2020-11-18 21:40 ./usb-and-pxe-installers
-rw-r--r-- 1 root root 31203 2011-03-21 21:21 ./usb-and-pxe-installers/README_PXE.TXT
-rw-r--r-- 1 root root 9197 2013-09-25 04:33 ./usb-and-pxe-installers/README_USB.TXT
-rw-r--r-- 1 root root 574 2013-03-27 04:59 ./usb-and-pxe-installers/pxelinux.cfg_default
--rw-r--r-- 1 root root 55821312 2020-11-11 23:01 ./usb-and-pxe-installers/usbboot.img
+-rw-r--r-- 1 root root 55817216 2020-11-18 21:39 ./usb-and-pxe-installers/usbboot.img
-rw-r--r-- 1 root root 16042 2019-08-05 07:08 ./usb-and-pxe-installers/usbimg2disk.sh
diff --git a/README.initrd b/README.initrd
index 79479782..c200a976 100644
--- a/README.initrd
+++ b/README.initrd
@@ -1,7 +1,7 @@
Slackware initrd mini HOWTO
by Patrick Volkerding, volkerdi@slackware.com
-Wed Nov 11 22:53:53 UTC 2020
+Wed Nov 18 21:30:39 UTC 2020
This document describes how to create and install an initrd, which may be
required to use the 4.x kernel. Also see "man mkinitrd".
@@ -33,15 +33,15 @@ flexible to ship a generic kernel and a set of kernel modules for it.
The easiest way to make the initrd is to use the mkinitrd script included
in Slackware's mkinitrd package. We'll walk through the process of
-upgrading to the generic 5.4.77 Linux kernel using the packages
+upgrading to the generic 5.4.78 Linux kernel using the packages
found in Slackware's slackware/a/ directory.
First, make sure the kernel, kernel modules, and mkinitrd package are
installed (the current version numbers might be a little different, so
this is just an example):
- installpkg kernel-generic-5.4.77-x86_64-1.txz
- installpkg kernel-modules-5.4.77-x86_64-1.txz
+ installpkg kernel-generic-5.4.78-x86_64-1.txz
+ installpkg kernel-modules-5.4.78-x86_64-1.txz
installpkg mkinitrd-1.4.11-x86_64-15.txz
Change into the /boot directory:
@@ -52,7 +52,7 @@ Now you'll want to run "mkinitrd". I'm using ext4 for my root filesystem,
and since the disk controller requires no special support the ext4 module
will be the only one I need to load:
- mkinitrd -c -k 5.4.77 -m ext4
+ mkinitrd -c -k 5.4.78 -m ext4
This should do two things. First, it will create a directory
/boot/initrd-tree containing the initrd's filesystem. Then it will
@@ -61,10 +61,10 @@ you could make some additional changes in /boot/initrd-tree/ and
then run mkinitrd again without options to rebuild the image. That's
optional, though, and only advanced users will need to think about that.
-Here's another example: Build an initrd image using Linux 5.4.77
+Here's another example: Build an initrd image using Linux 5.4.78
kernel modules for a system with an ext4 root partition on /dev/sdb3:
- mkinitrd -c -k 5.4.77 -m ext4 -f ext4 -r /dev/sdb3
+ mkinitrd -c -k 5.4.78 -m ext4 -f ext4 -r /dev/sdb3
4. Now that I've built an initrd, how do I use it?
diff --git a/isolinux/message.txt b/isolinux/message.txt
index 26ef48a1..082e8560 100644
--- a/isolinux/message.txt
+++ b/isolinux/message.txt
@@ -1,5 +1,5 @@
-Welcome to 09Slackware6407 version 15.0 (Linux kernel 5.4.77)!
+Welcome to 09Slackware6407 version 15.0 (Linux kernel 5.4.78)!
If you need to pass extra parameters to the kernel, enter them at the prompt
below after the name of the kernel to boot (e.g., huge.s).
diff --git a/kernels/VERSIONS.TXT b/kernels/VERSIONS.TXT
index 7fc37c18..efa865c1 100644
--- a/kernels/VERSIONS.TXT
+++ b/kernels/VERSIONS.TXT
@@ -1,3 +1,3 @@
-These kernels are version 5.4.77.
+These kernels are version 5.4.78.
diff --git a/recompress.sh b/recompress.sh
index 45e84b6b..b31aa51a 100755
--- a/recompress.sh
+++ b/recompress.sh
@@ -1098,7 +1098,6 @@ gzip ./source/xap/mozilla-thunderbird/build-deps/autoconf/autoconf-2.13-consolid
gzip ./source/xap/mozilla-thunderbird/tb.ui.scrollToClick.diff
gzip ./source/xap/mozilla-thunderbird/mozilla-firefox.xpcom_arm.patch
gzip ./source/xap/mozilla-thunderbird/unbreakdocs.diff
-gzip ./source/xap/mozilla-thunderbird/rust_1.47.0.patch
gzip ./source/xap/mozilla-thunderbird/gkrust.a.no.networking.check.diff
gzip ./source/xap/xmms/xmms.alsa.default.diff
gzip ./source/xap/xmms/xmms.gtk.doublesize.diff
diff --git a/slackware64/a/maketag b/slackware64/a/maketag
index 636c3e3f..c720a93f 100644
--- a/slackware64/a/maketag
+++ b/slackware64/a/maketag
@@ -62,9 +62,9 @@ system. :^) Press ENTER when you are done." 21 76 10 \
"jfsutils" "Utilities for IBM's Journaled Filesystem" "on" \
"kbd" "Change keyboard and console mappings" "on" \
"kernel-firmware" "Linux kernel firmware -- REQUIRED" "on" \
-"kernel-generic" "Generic 5.4.77 kernel (needs an initrd)" "on" \
-"kernel-huge" "Loaded 5.4.77 Linux kernel" "on" \
-"kernel-modules" "Linux 5.4.77 kernel modules -- REQUIRED" "on" \
+"kernel-generic" "Generic 5.4.78 kernel (needs an initrd)" "on" \
+"kernel-huge" "Loaded 5.4.78 Linux kernel" "on" \
+"kernel-modules" "Linux 5.4.78 kernel modules -- REQUIRED" "on" \
"kmod" "Kernel module utilities -- REQUIRED" "on" \
"lbzip2" "Parallel bzip2 compressor" "on" \
"less" "A text pager utility - REQUIRED" "on" \
diff --git a/slackware64/a/maketag.ez b/slackware64/a/maketag.ez
index 636c3e3f..c720a93f 100644
--- a/slackware64/a/maketag.ez
+++ b/slackware64/a/maketag.ez
@@ -62,9 +62,9 @@ system. :^) Press ENTER when you are done." 21 76 10 \
"jfsutils" "Utilities for IBM's Journaled Filesystem" "on" \
"kbd" "Change keyboard and console mappings" "on" \
"kernel-firmware" "Linux kernel firmware -- REQUIRED" "on" \
-"kernel-generic" "Generic 5.4.77 kernel (needs an initrd)" "on" \
-"kernel-huge" "Loaded 5.4.77 Linux kernel" "on" \
-"kernel-modules" "Linux 5.4.77 kernel modules -- REQUIRED" "on" \
+"kernel-generic" "Generic 5.4.78 kernel (needs an initrd)" "on" \
+"kernel-huge" "Loaded 5.4.78 Linux kernel" "on" \
+"kernel-modules" "Linux 5.4.78 kernel modules -- REQUIRED" "on" \
"kmod" "Kernel module utilities -- REQUIRED" "on" \
"lbzip2" "Parallel bzip2 compressor" "on" \
"less" "A text pager utility - REQUIRED" "on" \
diff --git a/slackware64/k/maketag b/slackware64/k/maketag
index 1405e284..60e7570a 100644
--- a/slackware64/k/maketag
+++ b/slackware64/k/maketag
@@ -21,7 +21,7 @@ from series K. Use the UP/DOWN keys to scroll through the list, and \
the SPACE key to deselect any items you don't want to install. \
Press ENTER when you are \
done." 11 70 1 \
-"kernel-source" "Linux 5.4.77 kernel source" "on" \
+"kernel-source" "Linux 5.4.78 kernel source" "on" \
2> $TMP/SeTpkgs
if [ $? = 1 -o $? = 255 ]; then
rm -f $TMP/SeTpkgs
diff --git a/slackware64/k/maketag.ez b/slackware64/k/maketag.ez
index 1405e284..60e7570a 100644
--- a/slackware64/k/maketag.ez
+++ b/slackware64/k/maketag.ez
@@ -21,7 +21,7 @@ from series K. Use the UP/DOWN keys to scroll through the list, and \
the SPACE key to deselect any items you don't want to install. \
Press ENTER when you are \
done." 11 70 1 \
-"kernel-source" "Linux 5.4.77 kernel source" "on" \
+"kernel-source" "Linux 5.4.78 kernel source" "on" \
2> $TMP/SeTpkgs
if [ $? = 1 -o $? = 255 ]; then
rm -f $TMP/SeTpkgs
diff --git a/source/k/kernel-configs/config-generic-5.4.77 b/source/k/kernel-configs/config-generic-5.4.78
index 34ce24ca..561a9da7 100644
--- a/source/k/kernel-configs/config-generic-5.4.77
+++ b/source/k/kernel-configs/config-generic-5.4.78
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.4.77 Kernel Configuration
+# Linux/x86 5.4.78 Kernel Configuration
#
#
diff --git a/source/k/kernel-configs/config-generic-5.4.77.x64 b/source/k/kernel-configs/config-generic-5.4.78.x64
index 05eed81f..42431088 100644
--- a/source/k/kernel-configs/config-generic-5.4.77.x64
+++ b/source/k/kernel-configs/config-generic-5.4.78.x64
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.4.77 Kernel Configuration
+# Linux/x86 5.4.78 Kernel Configuration
#
#
diff --git a/source/k/kernel-configs/config-generic-smp-5.4.77-smp b/source/k/kernel-configs/config-generic-smp-5.4.78-smp
index 2d28470e..f70358b4 100644
--- a/source/k/kernel-configs/config-generic-smp-5.4.77-smp
+++ b/source/k/kernel-configs/config-generic-smp-5.4.78-smp
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.4.77 Kernel Configuration
+# Linux/x86 5.4.78 Kernel Configuration
#
#
diff --git a/source/k/kernel-configs/config-huge-5.4.77 b/source/k/kernel-configs/config-huge-5.4.78
index e4cf34ad..0764cf07 100644
--- a/source/k/kernel-configs/config-huge-5.4.77
+++ b/source/k/kernel-configs/config-huge-5.4.78
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.4.77 Kernel Configuration
+# Linux/x86 5.4.78 Kernel Configuration
#
#
diff --git a/source/k/kernel-configs/config-huge-5.4.77.x64 b/source/k/kernel-configs/config-huge-5.4.78.x64
index 2e70184d..ed3ec676 100644
--- a/source/k/kernel-configs/config-huge-5.4.77.x64
+++ b/source/k/kernel-configs/config-huge-5.4.78.x64
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.4.77 Kernel Configuration
+# Linux/x86 5.4.78 Kernel Configuration
#
#
diff --git a/source/k/kernel-configs/config-huge-smp-5.4.77-smp b/source/k/kernel-configs/config-huge-smp-5.4.78-smp
index 118c0e03..6af7493c 100644
--- a/source/k/kernel-configs/config-huge-smp-5.4.77-smp
+++ b/source/k/kernel-configs/config-huge-smp-5.4.78-smp
@@ -1,6 +1,6 @@
#
# Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.4.77 Kernel Configuration
+# Linux/x86 5.4.78 Kernel Configuration
#
#
diff --git a/source/xap/mozilla-thunderbird/mozilla-thunderbird.SlackBuild b/source/xap/mozilla-thunderbird/mozilla-thunderbird.SlackBuild
index ee2442ff..4a529a48 100755
--- a/source/xap/mozilla-thunderbird/mozilla-thunderbird.SlackBuild
+++ b/source/xap/mozilla-thunderbird/mozilla-thunderbird.SlackBuild
@@ -175,9 +175,6 @@ zcat $CWD/unbreakdocs.diff.gz | patch -p1 --verbose || exit 1
# Bypass a test that fails the build:
zcat $CWD/gkrust.a.no.networking.check.diff.gz | patch -p1 --verbose || exit 1
-# Fix building with rust-1.47.0:
-zcat $CWD/rust_1.47.0.patch.gz | patch -p1 --verbose || exit 1
-
# Fetch localization, if requested:
if [ ! -z $MOZLOCALIZE ]; then
LOC_TAG="THUNDERBIRD_$( echo $VERSION | tr \. _ )_RELEASE"
diff --git a/source/xap/mozilla-thunderbird/rust_1.47.0.patch b/source/xap/mozilla-thunderbird/rust_1.47.0.patch
deleted file mode 100644
index 9471b7bd..00000000
--- a/source/xap/mozilla-thunderbird/rust_1.47.0.patch
+++ /dev/null
@@ -1,30905 +0,0 @@
-From 83fc2e3616ef15056be74f056a15e892038809b9 Mon Sep 17 00:00:00 2001
-From: Thomas Deutschmann <whissi@gentoo.org>
-Date: Sat, 10 Oct 2020 16:10:20 +0200
-Subject: [PATCH 38/38] bmo#1663715: Update syn and proc-macro2 so that Firefox
- can build on Rust nightly again
-
-Link: https://bugzilla.mozilla.org/show_bug.cgi?id=1663715#c7
-Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
----
- Cargo.lock | 8 +-
- .../rust/lucet-wasi/.cargo-checksum.json | 2 +-
- .../rust/packed_simd/.cargo-checksum.json | 2 +-
- .../rust/proc-macro2/.cargo-checksum.json | 2 +-
- third_party/rust/proc-macro2/Cargo.toml | 15 +-
- third_party/rust/proc-macro2/README.md | 2 +-
- third_party/rust/proc-macro2/build.rs | 20 +
- third_party/rust/proc-macro2/src/detection.rs | 67 +
- third_party/rust/proc-macro2/src/fallback.rs | 1010 ++----
- third_party/rust/proc-macro2/src/lib.rs | 225 +-
- third_party/rust/proc-macro2/src/marker.rs | 18 +
- third_party/rust/proc-macro2/src/parse.rs | 849 +++++
- third_party/rust/proc-macro2/src/strnom.rs | 391 ---
- third_party/rust/proc-macro2/src/wrapper.rs | 258 +-
- .../rust/proc-macro2/tests/comments.rs | 103 +
- third_party/rust/proc-macro2/tests/marker.rs | 33 +
- third_party/rust/proc-macro2/tests/test.rs | 240 +-
- .../rust/proc-macro2/tests/test_fmt.rs | 26 +
- .../spirv-cross-internal/.cargo-checksum.json | 2 +-
- third_party/rust/syn/.cargo-checksum.json | 2 +-
- third_party/rust/syn/Cargo.toml | 35 +-
- third_party/rust/syn/README.md | 16 +-
- third_party/rust/syn/benches/file.rs | 7 +
- third_party/rust/syn/benches/rust.rs | 45 +-
- third_party/rust/syn/build.rs | 38 +-
- third_party/rust/syn/src/attr.rs | 126 +-
- third_party/rust/syn/src/buffer.rs | 56 +-
- third_party/rust/syn/src/custom_keyword.rs | 12 +-
- .../rust/syn/src/custom_punctuation.rs | 50 +-
- third_party/rust/syn/src/data.rs | 96 +-
- third_party/rust/syn/src/derive.rs | 10 +-
- third_party/rust/syn/src/discouraged.rs | 27 +-
- third_party/rust/syn/src/error.rs | 33 +-
- third_party/rust/syn/src/expr.rs | 826 +++--
- third_party/rust/syn/src/ext.rs | 12 +-
- third_party/rust/syn/src/file.rs | 4 +-
- third_party/rust/syn/src/gen/clone.rs | 2051 ++++++++++++
- third_party/rust/syn/src/gen/debug.rs | 2857 +++++++++++++++++
- third_party/rust/syn/src/gen/eq.rs | 1930 +++++++++++
- third_party/rust/syn/src/gen/fold.rs | 287 +-
- third_party/rust/syn/src/gen/hash.rs | 2691 ++++++++++++++++
- third_party/rust/syn/src/gen/visit.rs | 19 +-
- third_party/rust/syn/src/gen/visit_mut.rs | 19 +-
- third_party/rust/syn/src/generics.rs | 255 +-
- third_party/rust/syn/src/item.rs | 1515 +++++----
- third_party/rust/syn/src/keyword.rs | 0
- third_party/rust/syn/src/lib.rs | 109 +-
- third_party/rust/syn/src/lifetime.rs | 13 +-
- third_party/rust/syn/src/lit.rs | 581 ++--
- third_party/rust/syn/src/mac.rs | 55 +-
- third_party/rust/syn/src/macros.rs | 61 +-
- third_party/rust/syn/src/op.rs | 6 +-
- third_party/rust/syn/src/parse.rs | 211 +-
- third_party/rust/syn/src/parse_macro_input.rs | 32 +-
- third_party/rust/syn/src/parse_quote.rs | 15 +-
- third_party/rust/syn/src/pat.rs | 313 +-
- third_party/rust/syn/src/path.rs | 33 +-
- third_party/rust/syn/src/punctuated.rs | 123 +-
- third_party/rust/syn/src/reserved.rs | 42 +
- third_party/rust/syn/src/spanned.rs | 4 +-
- third_party/rust/syn/src/stmt.rs | 141 +-
- third_party/rust/syn/src/token.rs | 99 +-
- third_party/rust/syn/src/tt.rs | 6 +-
- third_party/rust/syn/src/ty.rs | 364 ++-
- third_party/rust/syn/src/verbatim.rs | 15 +
- third_party/rust/syn/src/whitespace.rs | 65 +
- third_party/rust/syn/tests/clone.sh | 16 -
- third_party/rust/syn/tests/common/eq.rs | 247 +-
- third_party/rust/syn/tests/common/mod.rs | 13 +
- third_party/rust/syn/tests/common/parse.rs | 24 +-
- third_party/rust/syn/tests/debug/gen.rs | 50 +-
- third_party/rust/syn/tests/debug/mod.rs | 17 +-
- third_party/rust/syn/tests/features/error.rs | 1 -
- third_party/rust/syn/tests/features/mod.rs | 22 -
- third_party/rust/syn/tests/macros/mod.rs | 8 +-
- third_party/rust/syn/tests/repo/mod.rs | 137 +-
- third_party/rust/syn/tests/repo/progress.rs | 37 +
- third_party/rust/syn/tests/test_asyncness.rs | 38 +-
- third_party/rust/syn/tests/test_attribute.rs | 452 +--
- .../rust/syn/tests/test_derive_input.rs | 1321 ++++----
- third_party/rust/syn/tests/test_expr.rs | 314 +-
- third_party/rust/syn/tests/test_generics.rs | 371 ++-
- third_party/rust/syn/tests/test_grouping.rs | 53 +-
- third_party/rust/syn/tests/test_ident.rs | 5 -
- third_party/rust/syn/tests/test_item.rs | 45 +
- third_party/rust/syn/tests/test_iterators.rs | 7 +-
- third_party/rust/syn/tests/test_lit.rs | 75 +-
- third_party/rust/syn/tests/test_meta.rs | 498 ++-
- .../rust/syn/tests/test_parse_buffer.rs | 41 +-
- .../rust/syn/tests/test_parse_stream.rs | 12 +
- third_party/rust/syn/tests/test_pat.rs | 27 +-
- third_party/rust/syn/tests/test_path.rs | 52 +
- third_party/rust/syn/tests/test_precedence.rs | 196 +-
- third_party/rust/syn/tests/test_receiver.rs | 127 +
- third_party/rust/syn/tests/test_round_trip.rs | 41 +-
- third_party/rust/syn/tests/test_shebang.rs | 59 +
- .../rust/syn/tests/test_should_parse.rs | 4 -
- third_party/rust/syn/tests/test_size.rs | 2 -
- third_party/rust/syn/tests/test_stmt.rs | 44 +
- .../rust/syn/tests/test_token_trees.rs | 12 +-
- third_party/rust/syn/tests/test_ty.rs | 53 +
- third_party/rust/syn/tests/test_visibility.rs | 145 +
- third_party/rust/syn/tests/zzz_stable.rs | 4 +-
- 103 files changed, 17319 insertions(+), 5831 deletions(-)
- create mode 100644 third_party/rust/proc-macro2/src/detection.rs
- create mode 100644 third_party/rust/proc-macro2/src/marker.rs
- create mode 100644 third_party/rust/proc-macro2/src/parse.rs
- delete mode 100644 third_party/rust/proc-macro2/src/strnom.rs
- create mode 100644 third_party/rust/proc-macro2/tests/comments.rs
- create mode 100644 third_party/rust/proc-macro2/tests/test_fmt.rs
- create mode 100644 third_party/rust/syn/src/gen/clone.rs
- create mode 100644 third_party/rust/syn/src/gen/debug.rs
- create mode 100644 third_party/rust/syn/src/gen/eq.rs
- create mode 100644 third_party/rust/syn/src/gen/hash.rs
- delete mode 100644 third_party/rust/syn/src/keyword.rs
- create mode 100644 third_party/rust/syn/src/reserved.rs
- create mode 100644 third_party/rust/syn/src/verbatim.rs
- create mode 100644 third_party/rust/syn/src/whitespace.rs
- delete mode 100755 third_party/rust/syn/tests/clone.sh
- delete mode 100644 third_party/rust/syn/tests/features/error.rs
- delete mode 100644 third_party/rust/syn/tests/features/mod.rs
- create mode 100644 third_party/rust/syn/tests/repo/progress.rs
- create mode 100644 third_party/rust/syn/tests/test_item.rs
- create mode 100644 third_party/rust/syn/tests/test_parse_stream.rs
- create mode 100644 third_party/rust/syn/tests/test_path.rs
- create mode 100644 third_party/rust/syn/tests/test_receiver.rs
- create mode 100644 third_party/rust/syn/tests/test_shebang.rs
- create mode 100644 third_party/rust/syn/tests/test_stmt.rs
- create mode 100644 third_party/rust/syn/tests/test_ty.rs
- create mode 100644 third_party/rust/syn/tests/test_visibility.rs
-
-diff --git a/Cargo.lock b/Cargo.lock
-index 19117e8368..d5fe0f6457 100644
---- a/Cargo.lock
-+++ b/Cargo.lock
-@@ -3717,9 +3717,9 @@ dependencies = [
-
- [[package]]
- name = "proc-macro2"
--version = "1.0.5"
-+version = "1.0.24"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "90cf5f418035b98e655e9cdb225047638296b862b42411c4e45bb88d700f7fc0"
-+checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"
- dependencies = [
- "unicode-xid",
- ]
-@@ -4647,9 +4647,9 @@ dependencies = [
-
- [[package]]
- name = "syn"
--version = "1.0.5"
-+version = "1.0.40"
- source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf"
-+checksum = "963f7d3cc59b59b9325165add223142bbf1df27655d07789f109896d353d8350"
- dependencies = [
- "proc-macro2",
- "quote",
-diff --git a/third_party/rust/lucet-wasi/.cargo-checksum.json b/third_party/rust/lucet-wasi/.cargo-checksum.json
-index 229fc9978c..2c8c0a3c22 100644
---- a/third_party/rust/lucet-wasi/.cargo-checksum.json
-+++ b/third_party/rust/lucet-wasi/.cargo-checksum.json
-@@ -1 +1 @@
--{"files":{"Cargo.toml":"fea1408a1c1b1e84b06044a0b12cb26c8fd3253ca124debb6cd3e4faab48fcbd","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","LICENSE.cloudabi-utils":"86a34251f0aab76b7dc3daf8d252afbdf481ea94aa5b46d020205178b7e2eac1","LICENSE.wasmtime":"a6c48161a09acc75a0e25503bab66a731eb5fba5392ed4bb4743e4ba5085327a","bindings.json":"fad8362f845e6f7a2af1d7547cee5730894e7b96804f338181fc070ffdcfae1e","build.rs":"593173ad03963afcbef43f1843be6f04cde1df3eae0298ca20bf881019dd350a","examples/.gitignore":"44575cf5b28512d75644bf54a517dcef304ff809fd511747621b4d64f19aac66","examples/Makefile":"d2d2ceeb1bc4435189ea9a2710b6f5f5331ce6aa73ae8a4f4edcca215058a9b4","examples/README.md":"f2a5be6cc88d511c9f4d3bfefdd42dcb2ace813bc23f6a4430b6b543f7373341","examples/hello.c":"9cbc0d3173e02309e15372835fa849d196b2a202d81806fea60378e1878d0c53","examples/pseudoquine.c":"8fd696f8e1b8fb86188564a05f4776875ead31d785a12e3aa4af9d9c1b46d5b5","include/lucet_wasi.h":"497f712c64f753ebdf73ab05b0b340d50094f9c59bb8637ccbf99d895cd20966","src/bindings.rs":"edbeb51d1a93fd31039ee1f1dc7c1b6c0bded2cf5dad10039e8b7da81a4d4a12","src/c_api.rs":"a9c73070a88a461882a28e3e2adfd773f569b964c7ffabde39a3cef907782f71","src/ctx.rs":"578f87c35cce12eaebec95d03e31954c3e6cd0afa214a0fec068f03814eb0cc7","src/fdentry.rs":"94a8480fa587e5586327dfd6b66d8a6a3ef1f8091ba8deb335bf45642f4f98e6","src/host.rs":"6f05f8fea2afed827abfc3c008a5854a8023d91d066580ecfb49e5c8036ef3a3","src/hostcalls/fs.rs":"4726e6f695f7d1d4e371ec52c57f4e36b0ba0d2302fc008b21a301f5fd7a5c97","src/hostcalls/fs_helpers.rs":"474bce0a1f15fa23b0b0b8aa83143d993dd2cbd7cdfc38c118d452d04e80caea","src/hostcalls/misc.rs":"83d087891d92af08cfa2d2e0c5f41cc47cb8219460f6dbcc8666b418dfef206e","src/hostcalls/mod.rs":"4c5d3f65c69503e11e647770879026c37c0e5e01a99b7116c8fb9411b4797187","src/hostcalls/timers.rs":"e65d6a491256b5d6051b6816f6c5049ba3cdc6142651bac81f34d659c1c2a104","src/lib.rs":"5554e1a3f0cd3756173ece6435a0d01b2f520b3401cd5fc33180a04fb9f69bbe","src/memory.rs":"0a09026b15d27f99d74e560cd94795f645cba414a8491bc961987fab9d9da69b","src/wasi_host.rs":"cacbdac28304a837b11e5ad400ae9de3ee79c0284be335e64606ecdfe426ad6e","src/wasm32.rs":"13a5dc6e59784662f1e55eccb457cbbae241a96f70cfa72c41d55858ca05b980","tests/guests/cant_dotdot.c":"609b8cece9443e375a0b38a7e43651b179f66ee9c686edba6696fe1bcd45b111","tests/guests/clock_getres.c":"f5e41c0a2b05a8d7cdb5b4da6c8b6778b858004c1e9d115503c45a1d976be33b","tests/guests/duplicate_import.wat":"4bd8d7a5c1d1597dbe7648300e94e3fab84d7ab068d56cfb656aa1a208026cee","tests/guests/exitcode.c":"b7c5cec3ead0ed82326c568287a1f3398e71ae7e447ce49a3c4c7114c82495af","tests/guests/follow_symlink.c":"de3143ad2bbbfe834c0c32b54c9fcf144ca4eba5cdcf7588929e5f47225ab616","tests/guests/fs.c":"0dca5232ff5da1b7745e3b44bca39333c01a20ba4eae1a6a0a1c492c71ca1efa","tests/guests/getentropy.c":"5d80bcc68dcf3ba91576969055099d61635ae713c057b3cb36afb122a5f26347","tests/guests/getrusage.c":"8114c103b85eb564d9ab43684958bc1939de3794d314b7c121762f3a2f0434a6","tests/guests/gettimeofday.c":"4a57f376b06f4228017b82695448a0bd213fb91455f5301d689cd87fcff01f06","tests/guests/notdir.c":"bd8f8b24360b7cf8d5dced9d9ba4c15843fcbbae89fecc13e3a457c33a275e28","tests/guests/poll.c":"aefaa9b58ce9906dc379e0bd25fa68dfbf8cdffb48cd5ecde1d67708b83b366d","tests/guests/preopen_populates.c":"f186e4eb4aab6a1d9ec7bc5c49eaea6d9d162e0159dfe8f953bb48ade9b58d43","tests/guests/read_file.c":"1aab9393f005f05b69592826d7c4d384a115d5bca42c66f10a901811b4b1dcac","tests/guests/read_file_twice.c":"04a3dad7a43b93e36efd4e2c822c11b3f129429ec799af304d82b358686c578a","tests/guests/stat.c":"02756933ea7d4337b4fa04344b32968851b02f9d0bd5ea1cb0e2f022e8c65ab0","tests/guests/stdin.c":"66efc4b54f68d1138046f1afefae15f7d4555b2904b4a988818e61e67fe8fefb","tests/guests/symlink_escape.c":"686e047b5c986e29c854bcd93996d027dcdc8721219fa9fa532efc98d2798f5c","tests/guests/symlink_loop.c":"2bbddf3a5edfc6e5f3c0fa82cee4ac92b18804810509e263abd17f5240cd37e5","tests/guests/write_file.c":"9e9b14552c2445cfa6d0aa26b334081a59e6e3428dbb17ceca005a9ba59d3220","tests/test_helpers/mod.rs":"bc18194317611fe1be5c439a7a9e0de75399555c3b6de4275af149fb180456c8","tests/tests.rs":"173a7e0f086f6ed46474686cc3413ee68bbd2ff67004f7790e963a1392c7c46e"},"package":null}
-\ No newline at end of file
-+{"files":{"Cargo.toml":"fea1408a1c1b1e84b06044a0b12cb26c8fd3253ca124debb6cd3e4faab48fcbd","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","LICENSE.cloudabi-utils":"86a34251f0aab76b7dc3daf8d252afbdf481ea94aa5b46d020205178b7e2eac1","LICENSE.wasmtime":"a6c48161a09acc75a0e25503bab66a731eb5fba5392ed4bb4743e4ba5085327a","bindings.json":"fad8362f845e6f7a2af1d7547cee5730894e7b96804f338181fc070ffdcfae1e","build.rs":"593173ad03963afcbef43f1843be6f04cde1df3eae0298ca20bf881019dd350a","examples/Makefile":"d2d2ceeb1bc4435189ea9a2710b6f5f5331ce6aa73ae8a4f4edcca215058a9b4","examples/README.md":"f2a5be6cc88d511c9f4d3bfefdd42dcb2ace813bc23f6a4430b6b543f7373341","examples/hello.c":"9cbc0d3173e02309e15372835fa849d196b2a202d81806fea60378e1878d0c53","examples/pseudoquine.c":"8fd696f8e1b8fb86188564a05f4776875ead31d785a12e3aa4af9d9c1b46d5b5","include/lucet_wasi.h":"497f712c64f753ebdf73ab05b0b340d50094f9c59bb8637ccbf99d895cd20966","src/bindings.rs":"edbeb51d1a93fd31039ee1f1dc7c1b6c0bded2cf5dad10039e8b7da81a4d4a12","src/c_api.rs":"a9c73070a88a461882a28e3e2adfd773f569b964c7ffabde39a3cef907782f71","src/ctx.rs":"578f87c35cce12eaebec95d03e31954c3e6cd0afa214a0fec068f03814eb0cc7","src/fdentry.rs":"94a8480fa587e5586327dfd6b66d8a6a3ef1f8091ba8deb335bf45642f4f98e6","src/host.rs":"6f05f8fea2afed827abfc3c008a5854a8023d91d066580ecfb49e5c8036ef3a3","src/hostcalls/fs.rs":"4726e6f695f7d1d4e371ec52c57f4e36b0ba0d2302fc008b21a301f5fd7a5c97","src/hostcalls/fs_helpers.rs":"474bce0a1f15fa23b0b0b8aa83143d993dd2cbd7cdfc38c118d452d04e80caea","src/hostcalls/misc.rs":"83d087891d92af08cfa2d2e0c5f41cc47cb8219460f6dbcc8666b418dfef206e","src/hostcalls/mod.rs":"4c5d3f65c69503e11e647770879026c37c0e5e01a99b7116c8fb9411b4797187","src/hostcalls/timers.rs":"e65d6a491256b5d6051b6816f6c5049ba3cdc6142651bac81f34d659c1c2a104","src/lib.rs":"5554e1a3f0cd3756173ece6435a0d01b2f520b3401cd5fc33180a04fb9f69bbe","src/memory.rs":"0a09026b15d27f99d74e560cd94795f645cba414a8491bc961987fab9d9da69b","src/wasi_host.rs":"cacbdac28304a837b11e5ad400ae9de3ee79c0284be335e64606ecdfe426ad6e","src/wasm32.rs":"13a5dc6e59784662f1e55eccb457cbbae241a96f70cfa72c41d55858ca05b980","tests/guests/cant_dotdot.c":"609b8cece9443e375a0b38a7e43651b179f66ee9c686edba6696fe1bcd45b111","tests/guests/clock_getres.c":"f5e41c0a2b05a8d7cdb5b4da6c8b6778b858004c1e9d115503c45a1d976be33b","tests/guests/duplicate_import.wat":"4bd8d7a5c1d1597dbe7648300e94e3fab84d7ab068d56cfb656aa1a208026cee","tests/guests/exitcode.c":"b7c5cec3ead0ed82326c568287a1f3398e71ae7e447ce49a3c4c7114c82495af","tests/guests/follow_symlink.c":"de3143ad2bbbfe834c0c32b54c9fcf144ca4eba5cdcf7588929e5f47225ab616","tests/guests/fs.c":"0dca5232ff5da1b7745e3b44bca39333c01a20ba4eae1a6a0a1c492c71ca1efa","tests/guests/getentropy.c":"5d80bcc68dcf3ba91576969055099d61635ae713c057b3cb36afb122a5f26347","tests/guests/getrusage.c":"8114c103b85eb564d9ab43684958bc1939de3794d314b7c121762f3a2f0434a6","tests/guests/gettimeofday.c":"4a57f376b06f4228017b82695448a0bd213fb91455f5301d689cd87fcff01f06","tests/guests/notdir.c":"bd8f8b24360b7cf8d5dced9d9ba4c15843fcbbae89fecc13e3a457c33a275e28","tests/guests/poll.c":"aefaa9b58ce9906dc379e0bd25fa68dfbf8cdffb48cd5ecde1d67708b83b366d","tests/guests/preopen_populates.c":"f186e4eb4aab6a1d9ec7bc5c49eaea6d9d162e0159dfe8f953bb48ade9b58d43","tests/guests/read_file.c":"1aab9393f005f05b69592826d7c4d384a115d5bca42c66f10a901811b4b1dcac","tests/guests/read_file_twice.c":"04a3dad7a43b93e36efd4e2c822c11b3f129429ec799af304d82b358686c578a","tests/guests/stat.c":"02756933ea7d4337b4fa04344b32968851b02f9d0bd5ea1cb0e2f022e8c65ab0","tests/guests/stdin.c":"66efc4b54f68d1138046f1afefae15f7d4555b2904b4a988818e61e67fe8fefb","tests/guests/symlink_escape.c":"686e047b5c986e29c854bcd93996d027dcdc8721219fa9fa532efc98d2798f5c","tests/guests/symlink_loop.c":"2bbddf3a5edfc6e5f3c0fa82cee4ac92b18804810509e263abd17f5240cd37e5","tests/guests/write_file.c":"9e9b14552c2445cfa6d0aa26b334081a59e6e3428dbb17ceca005a9ba59d3220","tests/test_helpers/mod.rs":"bc18194317611fe1be5c439a7a9e0de75399555c3b6de4275af149fb180456c8","tests/tests.rs":"173a7e0f086f6ed46474686cc3413ee68bbd2ff67004f7790e963a1392c7c46e"},"package":null}
-\ No newline at end of file
-diff --git a/third_party/rust/packed_simd/.cargo-checksum.json b/third_party/rust/packed_simd/.cargo-checksum.json
-index 01afcc1efd..c727a10006 100644
---- a/third_party/rust/packed_simd/.cargo-checksum.json
-+++ b/third_party/rust/packed_simd/.cargo-checksum.json
-@@ -1 +1 @@
--{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"e9258d9a54fdaf4cbc12405fe5993ac4497eb2b29021691dbc91b19cb9b52227","Cargo.toml":"089941ba3c89ea111cbea3cc3abdcdcf2b9d0ae0db268d7269ee38226db950e5","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"f3baefc5e5bb9b250e762a1466371b922fd7ee4243c217b2d014307603c2f57a","ci/all.sh":"a23d14e10cb26a0eb719e389c30eb955fa53cddcd436890646df09af640bd2eb","ci/android-install-ndk.sh":"0f1746108cc30bf9b9ba45bcde7b19fc1a8bdf5b0258035b4eb8dc69b75efac4","ci/android-install-sdk.sh":"3490432022c5c8f5a115c084f7a9aca1626f96c0c87ffb62019228c4346b47e4","ci/android-sysimage.sh":"ebf4e5daa1f0fe1b2092b79f0f3f161c4c4275cb744e52352c4d81ab451e4c5a","ci/benchmark.sh":"b61d19ef6b90deba8fb79dee74c8b062d94844676293da346da87bb78a9a49a4","ci/deploy_and_run_on_ios_simulator.rs":"ec8ecf82d92072676aa47f0d1a3d021b60a7ae3531153ef12d2ff4541fc294dc","ci/docker/aarch64-linux-android/Dockerfile":"ace2e7d33c87bc0f6d3962a4a3408c04557646f7f51ab99cfbf574906796b016","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"1ecdac757101d951794fb2ab0deaa278199cf25f2e08a15c7d40ff31a8556184","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"e25d88f6c0c94aada3d2e3f08243f755feb7e869dc5dc505b3799719cb1af591","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"f126f4c7bae8c11ab8b16df06ad997863f0838825a9c08c9899a3eedb6d570bd","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"b647545c158ee480a4c581dbdc1f57833aef056c8d498acc04b573e842bf803c","ci/docker/i586-unknown-linux-gnu/Dockerfile":"0d492759017307ccf74dc2aa4a8cf6623daf3dc728c708dc2b18fa7940800cba","ci/docker/i686-unknown-linux-gnu/Dockerfile":"0d492759017307ccf74dc2aa4a8cf6623daf3dc728c708dc2b18fa7940800cba","ci/docker/mips-unknown-linux-gnu/Dockerfile":"323776469bb7b160385f3621d66e3ee14c75242f8180f916e65af048a29d4ea0","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"c647f6948a9a43b0be695cbed4eac752120d0faf28e5e69c718cb10406921dab","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"77bfd00cc8639509be381b394f077e39b45a00158ad61b4e1656714c714665d1","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"ec5bea6c98a3b626731fdb95f9ff2d1182639c76e8fb16d3271d0fc884901524","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"4f2b662de66e83d1354f650b7077692309637f786c2ea5516c31b5c2ee10af2d","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"a9595402b772bc365982e22a0096a8988825d90b09b5faa97ab192e76072f71d","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"df3c381c157439695ae8cd10ab71664702c061e3b4ab22906a5ad6c2680acfed","ci/docker/s390x-unknown-linux-gnu/Dockerfile":"93fb44df3d7fd31ead158570667c97b5076a05c3d968af4a84bc13819a8f2db8","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"da1c39a3ff1fe22e41395fa7c8934e90b4c1788e551b9aec6e38bfd94effc437","ci/docker/thumbv7neon-linux-androideabi/Dockerfile":"c2decd5591bd7a09378901bef629cd944acf052eb55e4f35b79eb9cb4d62246a","ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile":"75c0c56161c7382b439de74c00de1c0e3dc9d59560cd6720976a751034b78714","ci/docker/wasm32-unknown-unknown/Dockerfile":"3e5f294bc1e004aa599086c2af49d6f3e7459fa250f5fbdd60cf67d53db78758","ci/docker/x86_64-linux-android/Dockerfile":"685040273cf350d5509e580ac451555efa19790c8723ca2af066adadc6880ad2","ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile":"44b6203d9290bfdc53d81219f0937e1110847a23dd982ec8c4de388354f01536","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"d253c86803b22da428fa9cc671a05f18d3318eca7733b8dccb4f7be1ddf524c5","ci/dox.sh":"5b61711be47a4e3dde0ddd15ba73d256ea95fd75af3897732c24db1dc7e66366","ci/linux-s390x.sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/lld-shim.rs":"3d7f71ec23a49e2b67f694a0168786f9a954dda15f5a138815d966643fd3fcc3","ci/max_line_width.sh":"0a1518bba4c9ecaa55694cb2e9930d0e19c265baabf73143f17f9cf285aaa5bb","ci/run-docker.sh":"92e036390ad9b0d16f109579df1b5ced2e72e9afea40c7d011400ebd3a2a90de","ci/run.sh":"63259e22a96ba539f53c06b1b39f53e3a78a71171652e7afc170836110ccd913","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"73fb981a8fdb1dcd54409d3c0fbbfb8f77a3ceabf8626a6b9bf9d21d6bc8ce72","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2cc8c9c560ae17867e69b06d09b758dbf7bc39eb774ada50a743724b10acc0a2","perf-guide/.gitignore":"fe82c7da551079d832cf74200b0b359b4df9828cb4a0416fa7384f07a2ae6a13","perf-guide/book.toml":"115a98284126c6b180178b44713314cc494f08a71662ee2ce15cf67f17a51064","perf-guide/src/SUMMARY.md":"3e03bffc991fdc2050f3d51842d72d9d21ea6abab56a3baf3b2d5973a78b89e1","perf-guide/src/ascii.css":"29afb08833b2fe2250f0412e1fa1161a2432a0820a14953c87124407417c741a","perf-guide/src/bound_checks.md":"5e4991ff58a183ef0cd9fdc1feb4cd12d083b44bdf87393bbb0927808ef3ce7d","perf-guide/src/float-math/approx.md":"8c09032fa2d795a0c5db1775826c850d28eb2627846d0965c60ee72de63735ad","perf-guide/src/float-math/fma.md":"311076ba4b741d604a82e74b83a8d7e8c318fcbd7f64c4392d1cf5af95c60243","perf-guide/src/float-math/fp.md":"04153e775ab6e4f0d7837bcc515230d327b04edfa34c84ce9c9e10ebaeef2be8","perf-guide/src/float-math/svml.md":"0798873b8eedaeda5fed62dc91645b57c20775a02d3cd74d8bd06958f1516506","perf-guide/src/introduction.md":"9f5a19e9e6751f25d2daad39891a0cc600974527ec4c8305843f9618910671bd","perf-guide/src/prof/linux.md":"447731eb5de7d69166728fdbc5ecb0c0c9db678ea493b45a592d67dd002184c0","perf-guide/src/prof/mca.md":"f56d54f3d20e7aa4d32052186e8237b03d65971eb5d112802b442570ff11d344","perf-guide/src/prof/profiling.md":"8a650c0fd6ede0964789bb6577557eeef1d8226a896788602ce61528e260e43c","perf-guide/src/target-feature/attribute.md":"615f88dca0a707b6c416fa605435dd6e1fb5361cc639429cbf68cd87624bd78b","perf-guide/src/target-feature/features.md":"17077760ff24c006b606dd21889c53d87228f4311f3ba3a574f9afdeacd86165","perf-guide/src/target-feature/inlining.md":"7ed1d7068d8173a00d84c16cfe5871cd68b9f04f8d0cca2d01ebc84957ebf2f6","perf-guide/src/target-feature/practice.md":"c4b371842e0086df178488fec97f20def8f0c62ee588bcd25fd948b9b1fa227e","perf-guide/src/target-feature/runtime.md":"835425f5ee597fb3e51d36e725a81ebee29f4561231d19563cd4da81dbb1cfcb","perf-guide/src/target-feature/rustflags.md":"ab49712e9293a65d74d540ba4784fcb57ff1119ec05a575d895c071f1a620f64","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","readme.md":"585a8f0e16877fb9abb00cd17a175fcb9d7857840c6c61209f1827ffab095070","rustfmt.toml":"de6101d0670bad65fb3b337d56957d2a024e017e5ab146ec784d77312daaf8ff","src/api.rs":"331a3a4abb19cee2df5f2df4ad7c3e88b45e62cf23fdacfc9bbaa633dc5cf788","src/api/bit_manip.rs":"e68290ee679cc5abc9c73afbe635c1035f8cbfe849e5c751a1680e459244c39e","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"63e28c6a3edf1a7a635f51b8d3c6adbb1d46f884d92a196b3d4a6e743d809416","src/api/cast/v16.rs":"2a584eeb57fd47baad6f3533764301b04aaaac23702b7a8db12598ac02899262","src/api/cast/v256.rs":"b91c15ed8d1536ecd97b4eb79ff9d5aba0552cd9b6f0ea6435b05f2273e23b3a","src/api/cast/v32.rs":"62ec89fcce7fa7f28497ee5770adc8f81d2d3a6b2925b02f7dc06504c40e8f38","src/api/cast/v512.rs":"d855cb943ae7106e9599ef38e30a3afb1c6bd5433178baca54cb128fd9a7d143","src/api/cast/v64.rs":"fe0f7dfaf4fc0c0c1a78c96fcfcdfdc2a1e2845843b11aa797a0c6fb52a8f774","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"3ed23d2a930b0f9750c3a5309da766b03dc4f9c4d375b42ad3c50fe732693d15","src/api/cmp/partial_ord.rs":"e16b11805c94048acd058c93994b5bc74bb187f8d7e3b86a87df60e1601467f9","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"b61f92fc0e33a2633b3375eb405beba480da071cde03df4d437d8a6058afcd97","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"35cb5c266197d6224d598fb3d286e5fe48ef0c01ed356c2ff6fe9ba946f96a92","src/api/fmt/debug.rs":"aa18eea443bf353fea3db8b1a025132bbcaf91e747ecfa43b8d9fce9af395a0c","src/api/fmt/lower_hex.rs":"69d5be366631af309f214e8031c8c20267fcc27a695eac6f45c6bc1df72a67e6","src/api/fmt/octal.rs":"9eb11ba3d990213f3c7f1ec25edba7ce997cb1320e16d308c83498ba6b9bfbd9","src/api/fmt/upper_hex.rs":"a4637d085b7bb20e759ce58e08435b510a563ba3dd468af2b03560fdc5511562","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"4151593c7bba7455821fffa5b59867005a77c95d32f1f0cc3fd87294000157d9","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"562cfa3f1d8eb9a733c035a3665a599c2f1e341ee820d8fbdd102a4398a441bc","src/api/into_bits.rs":"82297f0697d67b5a015e904e7e6e7b2a7066ba825bc54b94b4ff3e22d7a1eefb","src/api/into_bits/arch_specific.rs":"1f925390b0ce7132587d95f2419c6e2ad3e1a9d17eb1d9c120a1c1c4bdf4277e","src/api/into_bits/macros.rs":"d762406de25aedff88d460dec7a80dc8e825a2a419d53218ce007efa6a1d3e04","src/api/into_bits/v128.rs":"ecdc5893664c71d7ab1ff3697c3fbe490d20d8748b9b76881d05e7625e40d74c","src/api/into_bits/v16.rs":"5459ec7dad1ad7bd30dc7e48374580b993abf23701d9c3cb22203fa0a9aabb6d","src/api/into_bits/v256.rs":"90ea351da0380ead1bf0f63b620afd40d01d638d09f7e7be31840bd2c1d9c663","src/api/into_bits/v32.rs":"ee1dc5a430050e16f51154b5fe85b1536f5feddf2ea23dd1d3859b67c4afc6fc","src/api/into_bits/v512.rs":"f72098ed1c9a23944f3d01abaf5e0f2d0e81d35a06fdadd2183e896d41b59867","src/api/into_bits/v64.rs":"6394462facdfe7827349c742b7801f1291e75a720dfb8c0b52100df46f371c98","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"78acba000d3fa527111300b6327c1932de9c4c1e02d4174e1a5615c01463d38c","src/api/math/float/cos.rs":"4c2dd7173728ef189314f1576c9486e03be21b7da98843b2f9011282a7979e31","src/api/math/float/exp.rs":"7c6d5f1e304f498a01cfa23b92380c815d7da0ad94eae3483783bc377d287eef","src/api/math/float/ln.rs":"54c7583f3df793b39ff57534fade27b41bb992439e5dc178252f5ca3190a3e54","src/api/math/float/mul_add.rs":"62cac77660d20159276d4c9ef066eb90c81cbddb808e8e157182c607625ad2eb","src/api/math/float/mul_adde.rs":"bae056ee9f3a70df39ec3c3b2f6437c65303888a7b843ef1a5bcf1f5aca0e602","src/api/math/float/powf.rs":"9ddb938984b36d39d82a82f862f80df8f7fb013f1d222d45698d41d88472f568","src/api/math/float/recpre.rs":"589225794ff1dbf31158dff660e6d4509ecc8befbb57c633900dea5ac0b840d6","src/api/math/float/rsqrte.rs":"a32abdcc318d7ccc8448231f54d75b884b7cbeb03a7d595713ab6243036f4dbf","src/api/math/float/sin.rs":"cbd3622b7df74f19691743001c8cf747a201f8977ad90542fee915f37dcd1e49","src/api/math/float/sqrt.rs":"0c66d5d63fb08e4d99c6b82a8828e41173aff1ac9fa1a2764a11fac217ccf2ac","src/api/math/float/sqrte.rs":"731e1c9f321b662accdd27dacb3aac2e8043b7aecb2f2161dde733bd9f025362","src/api/minimal.rs":"1f22bcc528555444e76de569ec0ae2029b9ae9d04805efeafa93369c8098036b","src/api/minimal/iuf.rs":"c501a6696950cf5e521765f178de548af64fdfb6e10d026616d09fab93ca2d17","src/api/minimal/mask.rs":"42e415f536c5193d0218f5a754b34b87fd7c971bff068009f958712166ff056d","src/api/minimal/ptr.rs":"a9ee482d1dd1c956fb8f3f179e6e620b1de4e9d713961461d4c6923a4ef2e67c","src/api/ops.rs":"3e273b277a0f3019d42c3c59ca94a5afd4885d5ae6d2182e5089bbeec9de42ee","src/api/ops/scalar_arithmetic.rs":"d2d5ad897a59dd0787544f927e0e7ca4072c3e58b0f4a2324083312b0d5a21d7","src/api/ops/scalar_bitwise.rs":"482204e459ca6be79568e1c9f70adbe2d2151412ddf122fb2161be8ebb51c40c","src/api/ops/scalar_mask_bitwise.rs":"c250f52042e37b22d57256c80d4604104cfd2fbe2a2e127c676267270ca5d350","src/api/ops/scalar_shifts.rs":"987f8fdebeedc16e3d77c1b732e7826ef70633c541d16dfa290845d5c6289150","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"f5155dce75219f4ba11275b1f295d2fdcddd49d174a6f1fb2ace7ea42813ce41","src/api/ops/vector_int_min_max.rs":"a378789c6ff9b32a51fbd0a97ffd36ed102cd1fe6a067d2b02017c1df342def6","src/api/ops/vector_mask_bitwise.rs":"5052d18517d765415d40327e6e8e55a312daaca0a5e2aec959bfa54b1675f9c8","src/api/ops/vector_neg.rs":"5c62f6b0221983cdbd23cd0a3af3672e6ba1255f0dfe8b19aae6fbd6503e231b","src/api/ops/vector_rotates.rs":"03cbe8a400fd7c688e4ee771a990a6754f2031b1a59b19ae81158b21471167e5","src/api/ops/vector_shifts.rs":"9bf69d0087268f61009e39aea52e03a90f378910206b6a28e8393178b6a5d0e0","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"9ddd960365e050674b25b2fd3116e24d94669b4375d74e71c03e3f1469576066","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"e58c8c87806a95df2b2b5b48ac5991036df024096d9d7c171a480fe9282896a4","src/api/reductions/integer_arithmetic.rs":"47471da1c5f859489680bb5d34ced3d3aa20081c16053a3af121a4496fcb57bf","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"f27be3aa28e1c1f46de7890198db6e12f00c207085e89ef2de7e57ee443cdb98","src/api/select.rs":"a98e2ccf9fc6bdeed32d337c8675bc96c2fbe2cc34fbf149ad6047fb8e749774","src/api/shuffle.rs":"da58200790868c09659819322a489929a5b6e56c596ed07e6a44293ea02e7d09","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"4d4fe8a329c885fcb4fbcbedf99efb15a95296fe6b3f595056cc37037450d5ac","src/api/slice/write_to_slice.rs":"f5b23b2c4b91cfb26b713a9013a6c0da7f45eaefb79ba06dcbc27f3f23bda679","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codegen.rs":"c6eebc3d3665420aa6a2f317977e3c41a4f43e0550ac630cdbe8e4bbed5e2031","src/codegen/bit_manip.rs":"5559e095105a80003e0de35af1d19b0c65c9ab04eb743c7e01c5442d882eb34e","src/codegen/llvm.rs":"d1299c189abb17a6133f047574cffc7a6db4c1be37cb7d4785491cb5e8f8cf54","src/codegen/math.rs":"35f96e37a78fcf0cdb02146b7f27a45108fe06a37fc2a54d8851ce131a326178","src/codegen/math/float.rs":"dd86c0449e576c83b719700962ac017c332987fac08d91f2b7a2b1b883598170","src/codegen/math/float/abs.rs":"f56e2b4b8055ea861c1f5cbc6b6e1d8e7e5af163b62c13574ddee4e09513bfbc","src/codegen/math/float/cos.rs":"ef3b511a24d23045b310315e80348a9b7fedb576fc2de52d74290616a0abeb2a","src/codegen/math/float/cos_pi.rs":"4e7631a5d73dac21531e09ef1802d1180f8997509c2c8fa9f67f322194263a97","src/codegen/math/float/exp.rs":"61b691598c41b5622f24e4320c1bdd08701e612a516438bdddcc728fc3405c8c","src/codegen/math/float/ln.rs":"46b718b1ba8c9d99e1ad40f53d20dfde08a3063ca7bd2a9fdd6698e060da687e","src/codegen/math/float/macros.rs":"dd42135fff13f9aca4fd3a1a4e14c7e6c31aadc6d817d63b0d2fb9e62e062744","src/codegen/math/float/mul_add.rs":"a37bf764345d4b1714f97e83897b7cf0855fc2811704bcbc0012db91825339e1","src/codegen/math/float/mul_adde.rs":"c75702bfcb361de45964a93caf959a695ef2376bd069227600b8c6872665c755","src/codegen/math/float/powf.rs":"642346e982bc4c39203de0864d2149c4179cd7b21cf67a2951687932b4675872","src/codegen/math/float/sin.rs":"9d68164c90cdca6a85155040cdac42e27342ebe0b925273ef1593df721af4258","src/codegen/math/float/sin_cos_pi.rs":"9be02ad48585a1e8d99129382fbffbaed47852f15459256a708850b6b7a75405","src/codegen/math/float/sin_pi.rs":"9890347905b4d4a3c7341c3eb06406e46e60582bcf6960688bd727e5dadc6c57","src/codegen/math/float/sqrt.rs":"e3c60dcfb0c6d2fc62adabcc931b2d4040b83cab294dea36443fb4b89eb79e34","src/codegen/math/float/sqrte.rs":"f0f4ef9eb475ae41bcc7ec6a95ad744ba6b36925faa8b2c2814004396d196b63","src/codegen/pointer_sized_int.rs":"a70697169c28218b56fd2e8d5353f2e00671d1150d0c8cef77d613bdfacd84cb","src/codegen/reductions.rs":"645e2514746d01387ddd07f0aa4ffd8430cc9ab428d4fb13773ea319fa25dd95","src/codegen/reductions/mask.rs":"8f1afe6aabf096a3278e1fc3a30f736e04aa8b9ce96373cee22162d18cfe2702","src/codegen/reductions/mask/aarch64.rs":"cba6e17603d39795dcfe8339b6b7d8714c3e162a1f0a635979f037aa24fe4206","src/codegen/reductions/mask/arm.rs":"9447904818aa2c7c25d0963eead452a639a11ca7dbd6d21eedbfcaade07a0f33","src/codegen/reductions/mask/fallback.rs":"7a0ef9f7fd03ae318b495b95e121350cd61caffc5cc6ee17fabf130d5d933453","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"14bd2c482071f2355beebcf7b7ecf950ff2dfcdb08c3ca50993092434a9de717","src/codegen/reductions/mask/x86/avx.rs":"b4913d87844c522903641cbbf10db4551addb1ce5e9e78278e21612fa65c733b","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"226610b4ff88c676d5187114dd57b4a8800de6ce40884675e9198445b1ed0306","src/codegen/reductions/mask/x86/sse2.rs":"bc38e6c31cb4b3d62147eba6cac264e519e2a48e0f7ce9010cfa9ef0cf0ec9fd","src/codegen/shuffle.rs":"0abca97e92cdce49a58a39cc447eb09dc7d7715ef256c8dbd2181a186e61bb64","src/codegen/shuffle1_dyn.rs":"04523e9338133bdedb012dd076c2c564b79ce5593b0fc56d0fb6910e04190a81","src/codegen/swap_bytes.rs":"1d6cdc716eadddc92b4fd506b2445a821caa8dc00860447de09d7ebd69c2087f","src/codegen/v128.rs":"94226b31ec403d18d9d2fe06713f147c9c79e9b5f9105089088266313f843185","src/codegen/v16.rs":"ddec4ffb66b6f7aaffb9a1780c5ddba82557abd74f45073d335047e04cf74924","src/codegen/v256.rs":"6b63917f0444118d6b1595bff2045e59b97c4d24012bd575f69f1f0efc5a0241","src/codegen/v32.rs":"3477b3c5540aed86e61e2f5807dd31db947413cec9181c587d93ed6ec74f0eba","src/codegen/v512.rs":"5854f99d3aabc4cd42b28a20d9ce447756dc2ba024a409a69b6a8ae1f1842fc5","src/codegen/v64.rs":"e9e89caebfe63d10c0cbca61e4dfdba3b7e02ee0989170f80beed23237ddd950","src/codegen/vPtr.rs":"96d609a9eece4dcbbcc01ba0b8744d7f5958be12774176a2945bc676f4e6b5cb","src/codegen/vSize.rs":"eeee9858749aa82142b27bc120d1989bb74a6b82e1e4efbbeaccc9634dc9acfc","src/lib.rs":"1b5d419ff05ee0370d671810423ccc254708cc8d415c1dbac2a7a36be4bf63a8","src/masks.rs":"870f429967b2d7d5133f4d28d6c753fc5cef0570b27b29d4e966a066d22d2d0e","src/sealed.rs":"ff7f0324276408ae8249941cfa32c90b8835a54d750896b683efea857af19db2","src/testing.rs":"1d3a7862ef625e235a5734ad7204e68d350f902c0695182b1f08a0552432416e","src/testing/macros.rs":"6378856d7a40ba5ec5c7c0dad6327d79f0c77266921c24296d10aed6c68e9b98","src/testing/utils.rs":"d6fd5a5017f1f85d9d99585754f8f6ad06fc3d683b34083543e67a7cc6c1772c","src/v128.rs":"18fe263c4aa28cd06461c7070b0269f69f4a2e75749b8f142a83dfdfe4d22bf5","src/v16.rs":"e5c663c9fb3547eaeac78a5f7db9969f4d8b5ec96112bf2954602fff11f0aebd","src/v256.rs":"68732cd688ad12a56d8b4f8ddf279f77bdfe1be2943c7dc0c1b4f1a76798aa0f","src/v32.rs":"785b22a1ccb4a41bb53dfeb0670f624c0ce42e6cdf62d1747e3283777a1c70bd","src/v512.rs":"d1337bfe07f06a8f37f8e8fa7d4315b9307476ee435ad80dd5269eaed564fbfa","src/v64.rs":"3077468d65125b8f085e9454c8b2463a4d5225697464ba6a1300f8799528fd4b","src/vPtr.rs":"c9a53f41f466e17b6648a4ce390fd8f4d3a848d440eb8a9a803a11608d76eb05","src/vSize.rs":"5c46d3e8c3ee5863d9b6e37e681f871386e0efc254d6d84ba711edb529ce7b3c","tests/endianness.rs":"541a144be017e3dd7da7c8ea49d907dc02538245e8c5f3deb5bd43da92c929e1"},"package":null}
-\ No newline at end of file
-+{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"e9258d9a54fdaf4cbc12405fe5993ac4497eb2b29021691dbc91b19cb9b52227","Cargo.toml":"089941ba3c89ea111cbea3cc3abdcdcf2b9d0ae0db268d7269ee38226db950e5","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"f3baefc5e5bb9b250e762a1466371b922fd7ee4243c217b2d014307603c2f57a","ci/all.sh":"a23d14e10cb26a0eb719e389c30eb955fa53cddcd436890646df09af640bd2eb","ci/android-install-ndk.sh":"0f1746108cc30bf9b9ba45bcde7b19fc1a8bdf5b0258035b4eb8dc69b75efac4","ci/android-install-sdk.sh":"3490432022c5c8f5a115c084f7a9aca1626f96c0c87ffb62019228c4346b47e4","ci/android-sysimage.sh":"ebf4e5daa1f0fe1b2092b79f0f3f161c4c4275cb744e52352c4d81ab451e4c5a","ci/benchmark.sh":"b61d19ef6b90deba8fb79dee74c8b062d94844676293da346da87bb78a9a49a4","ci/deploy_and_run_on_ios_simulator.rs":"ec8ecf82d92072676aa47f0d1a3d021b60a7ae3531153ef12d2ff4541fc294dc","ci/docker/aarch64-linux-android/Dockerfile":"ace2e7d33c87bc0f6d3962a4a3408c04557646f7f51ab99cfbf574906796b016","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"1ecdac757101d951794fb2ab0deaa278199cf25f2e08a15c7d40ff31a8556184","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"e25d88f6c0c94aada3d2e3f08243f755feb7e869dc5dc505b3799719cb1af591","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"f126f4c7bae8c11ab8b16df06ad997863f0838825a9c08c9899a3eedb6d570bd","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"b647545c158ee480a4c581dbdc1f57833aef056c8d498acc04b573e842bf803c","ci/docker/i586-unknown-linux-gnu/Dockerfile":"0d492759017307ccf74dc2aa4a8cf6623daf3dc728c708dc2b18fa7940800cba","ci/docker/i686-unknown-linux-gnu/Dockerfile":"0d492759017307ccf74dc2aa4a8cf6623daf3dc728c708dc2b18fa7940800cba","ci/docker/mips-unknown-linux-gnu/Dockerfile":"323776469bb7b160385f3621d66e3ee14c75242f8180f916e65af048a29d4ea0","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"c647f6948a9a43b0be695cbed4eac752120d0faf28e5e69c718cb10406921dab","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"77bfd00cc8639509be381b394f077e39b45a00158ad61b4e1656714c714665d1","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"ec5bea6c98a3b626731fdb95f9ff2d1182639c76e8fb16d3271d0fc884901524","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"4f2b662de66e83d1354f650b7077692309637f786c2ea5516c31b5c2ee10af2d","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"a9595402b772bc365982e22a0096a8988825d90b09b5faa97ab192e76072f71d","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"df3c381c157439695ae8cd10ab71664702c061e3b4ab22906a5ad6c2680acfed","ci/docker/s390x-unknown-linux-gnu/Dockerfile":"93fb44df3d7fd31ead158570667c97b5076a05c3d968af4a84bc13819a8f2db8","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"da1c39a3ff1fe22e41395fa7c8934e90b4c1788e551b9aec6e38bfd94effc437","ci/docker/thumbv7neon-linux-androideabi/Dockerfile":"c2decd5591bd7a09378901bef629cd944acf052eb55e4f35b79eb9cb4d62246a","ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile":"75c0c56161c7382b439de74c00de1c0e3dc9d59560cd6720976a751034b78714","ci/docker/wasm32-unknown-unknown/Dockerfile":"3e5f294bc1e004aa599086c2af49d6f3e7459fa250f5fbdd60cf67d53db78758","ci/docker/x86_64-linux-android/Dockerfile":"685040273cf350d5509e580ac451555efa19790c8723ca2af066adadc6880ad2","ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile":"44b6203d9290bfdc53d81219f0937e1110847a23dd982ec8c4de388354f01536","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"d253c86803b22da428fa9cc671a05f18d3318eca7733b8dccb4f7be1ddf524c5","ci/dox.sh":"5b61711be47a4e3dde0ddd15ba73d256ea95fd75af3897732c24db1dc7e66366","ci/linux-s390x.sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/lld-shim.rs":"3d7f71ec23a49e2b67f694a0168786f9a954dda15f5a138815d966643fd3fcc3","ci/max_line_width.sh":"0a1518bba4c9ecaa55694cb2e9930d0e19c265baabf73143f17f9cf285aaa5bb","ci/run-docker.sh":"92e036390ad9b0d16f109579df1b5ced2e72e9afea40c7d011400ebd3a2a90de","ci/run.sh":"63259e22a96ba539f53c06b1b39f53e3a78a71171652e7afc170836110ccd913","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"73fb981a8fdb1dcd54409d3c0fbbfb8f77a3ceabf8626a6b9bf9d21d6bc8ce72","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2cc8c9c560ae17867e69b06d09b758dbf7bc39eb774ada50a743724b10acc0a2","perf-guide/book.toml":"115a98284126c6b180178b44713314cc494f08a71662ee2ce15cf67f17a51064","perf-guide/src/SUMMARY.md":"3e03bffc991fdc2050f3d51842d72d9d21ea6abab56a3baf3b2d5973a78b89e1","perf-guide/src/ascii.css":"29afb08833b2fe2250f0412e1fa1161a2432a0820a14953c87124407417c741a","perf-guide/src/bound_checks.md":"5e4991ff58a183ef0cd9fdc1feb4cd12d083b44bdf87393bbb0927808ef3ce7d","perf-guide/src/float-math/approx.md":"8c09032fa2d795a0c5db1775826c850d28eb2627846d0965c60ee72de63735ad","perf-guide/src/float-math/fma.md":"311076ba4b741d604a82e74b83a8d7e8c318fcbd7f64c4392d1cf5af95c60243","perf-guide/src/float-math/fp.md":"04153e775ab6e4f0d7837bcc515230d327b04edfa34c84ce9c9e10ebaeef2be8","perf-guide/src/float-math/svml.md":"0798873b8eedaeda5fed62dc91645b57c20775a02d3cd74d8bd06958f1516506","perf-guide/src/introduction.md":"9f5a19e9e6751f25d2daad39891a0cc600974527ec4c8305843f9618910671bd","perf-guide/src/prof/linux.md":"447731eb5de7d69166728fdbc5ecb0c0c9db678ea493b45a592d67dd002184c0","perf-guide/src/prof/mca.md":"f56d54f3d20e7aa4d32052186e8237b03d65971eb5d112802b442570ff11d344","perf-guide/src/prof/profiling.md":"8a650c0fd6ede0964789bb6577557eeef1d8226a896788602ce61528e260e43c","perf-guide/src/target-feature/attribute.md":"615f88dca0a707b6c416fa605435dd6e1fb5361cc639429cbf68cd87624bd78b","perf-guide/src/target-feature/features.md":"17077760ff24c006b606dd21889c53d87228f4311f3ba3a574f9afdeacd86165","perf-guide/src/target-feature/inlining.md":"7ed1d7068d8173a00d84c16cfe5871cd68b9f04f8d0cca2d01ebc84957ebf2f6","perf-guide/src/target-feature/practice.md":"c4b371842e0086df178488fec97f20def8f0c62ee588bcd25fd948b9b1fa227e","perf-guide/src/target-feature/runtime.md":"835425f5ee597fb3e51d36e725a81ebee29f4561231d19563cd4da81dbb1cfcb","perf-guide/src/target-feature/rustflags.md":"ab49712e9293a65d74d540ba4784fcb57ff1119ec05a575d895c071f1a620f64","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","readme.md":"585a8f0e16877fb9abb00cd17a175fcb9d7857840c6c61209f1827ffab095070","rustfmt.toml":"de6101d0670bad65fb3b337d56957d2a024e017e5ab146ec784d77312daaf8ff","src/api.rs":"331a3a4abb19cee2df5f2df4ad7c3e88b45e62cf23fdacfc9bbaa633dc5cf788","src/api/bit_manip.rs":"e68290ee679cc5abc9c73afbe635c1035f8cbfe849e5c751a1680e459244c39e","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"63e28c6a3edf1a7a635f51b8d3c6adbb1d46f884d92a196b3d4a6e743d809416","src/api/cast/v16.rs":"2a584eeb57fd47baad6f3533764301b04aaaac23702b7a8db12598ac02899262","src/api/cast/v256.rs":"b91c15ed8d1536ecd97b4eb79ff9d5aba0552cd9b6f0ea6435b05f2273e23b3a","src/api/cast/v32.rs":"62ec89fcce7fa7f28497ee5770adc8f81d2d3a6b2925b02f7dc06504c40e8f38","src/api/cast/v512.rs":"d855cb943ae7106e9599ef38e30a3afb1c6bd5433178baca54cb128fd9a7d143","src/api/cast/v64.rs":"fe0f7dfaf4fc0c0c1a78c96fcfcdfdc2a1e2845843b11aa797a0c6fb52a8f774","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"3ed23d2a930b0f9750c3a5309da766b03dc4f9c4d375b42ad3c50fe732693d15","src/api/cmp/partial_ord.rs":"e16b11805c94048acd058c93994b5bc74bb187f8d7e3b86a87df60e1601467f9","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"b61f92fc0e33a2633b3375eb405beba480da071cde03df4d437d8a6058afcd97","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"35cb5c266197d6224d598fb3d286e5fe48ef0c01ed356c2ff6fe9ba946f96a92","src/api/fmt/debug.rs":"aa18eea443bf353fea3db8b1a025132bbcaf91e747ecfa43b8d9fce9af395a0c","src/api/fmt/lower_hex.rs":"69d5be366631af309f214e8031c8c20267fcc27a695eac6f45c6bc1df72a67e6","src/api/fmt/octal.rs":"9eb11ba3d990213f3c7f1ec25edba7ce997cb1320e16d308c83498ba6b9bfbd9","src/api/fmt/upper_hex.rs":"a4637d085b7bb20e759ce58e08435b510a563ba3dd468af2b03560fdc5511562","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"4151593c7bba7455821fffa5b59867005a77c95d32f1f0cc3fd87294000157d9","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"562cfa3f1d8eb9a733c035a3665a599c2f1e341ee820d8fbdd102a4398a441bc","src/api/into_bits.rs":"82297f0697d67b5a015e904e7e6e7b2a7066ba825bc54b94b4ff3e22d7a1eefb","src/api/into_bits/arch_specific.rs":"1f925390b0ce7132587d95f2419c6e2ad3e1a9d17eb1d9c120a1c1c4bdf4277e","src/api/into_bits/macros.rs":"d762406de25aedff88d460dec7a80dc8e825a2a419d53218ce007efa6a1d3e04","src/api/into_bits/v128.rs":"ecdc5893664c71d7ab1ff3697c3fbe490d20d8748b9b76881d05e7625e40d74c","src/api/into_bits/v16.rs":"5459ec7dad1ad7bd30dc7e48374580b993abf23701d9c3cb22203fa0a9aabb6d","src/api/into_bits/v256.rs":"90ea351da0380ead1bf0f63b620afd40d01d638d09f7e7be31840bd2c1d9c663","src/api/into_bits/v32.rs":"ee1dc5a430050e16f51154b5fe85b1536f5feddf2ea23dd1d3859b67c4afc6fc","src/api/into_bits/v512.rs":"f72098ed1c9a23944f3d01abaf5e0f2d0e81d35a06fdadd2183e896d41b59867","src/api/into_bits/v64.rs":"6394462facdfe7827349c742b7801f1291e75a720dfb8c0b52100df46f371c98","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"78acba000d3fa527111300b6327c1932de9c4c1e02d4174e1a5615c01463d38c","src/api/math/float/cos.rs":"4c2dd7173728ef189314f1576c9486e03be21b7da98843b2f9011282a7979e31","src/api/math/float/exp.rs":"7c6d5f1e304f498a01cfa23b92380c815d7da0ad94eae3483783bc377d287eef","src/api/math/float/ln.rs":"54c7583f3df793b39ff57534fade27b41bb992439e5dc178252f5ca3190a3e54","src/api/math/float/mul_add.rs":"62cac77660d20159276d4c9ef066eb90c81cbddb808e8e157182c607625ad2eb","src/api/math/float/mul_adde.rs":"bae056ee9f3a70df39ec3c3b2f6437c65303888a7b843ef1a5bcf1f5aca0e602","src/api/math/float/powf.rs":"9ddb938984b36d39d82a82f862f80df8f7fb013f1d222d45698d41d88472f568","src/api/math/float/recpre.rs":"589225794ff1dbf31158dff660e6d4509ecc8befbb57c633900dea5ac0b840d6","src/api/math/float/rsqrte.rs":"a32abdcc318d7ccc8448231f54d75b884b7cbeb03a7d595713ab6243036f4dbf","src/api/math/float/sin.rs":"cbd3622b7df74f19691743001c8cf747a201f8977ad90542fee915f37dcd1e49","src/api/math/float/sqrt.rs":"0c66d5d63fb08e4d99c6b82a8828e41173aff1ac9fa1a2764a11fac217ccf2ac","src/api/math/float/sqrte.rs":"731e1c9f321b662accdd27dacb3aac2e8043b7aecb2f2161dde733bd9f025362","src/api/minimal.rs":"1f22bcc528555444e76de569ec0ae2029b9ae9d04805efeafa93369c8098036b","src/api/minimal/iuf.rs":"c501a6696950cf5e521765f178de548af64fdfb6e10d026616d09fab93ca2d17","src/api/minimal/mask.rs":"42e415f536c5193d0218f5a754b34b87fd7c971bff068009f958712166ff056d","src/api/minimal/ptr.rs":"a9ee482d1dd1c956fb8f3f179e6e620b1de4e9d713961461d4c6923a4ef2e67c","src/api/ops.rs":"3e273b277a0f3019d42c3c59ca94a5afd4885d5ae6d2182e5089bbeec9de42ee","src/api/ops/scalar_arithmetic.rs":"d2d5ad897a59dd0787544f927e0e7ca4072c3e58b0f4a2324083312b0d5a21d7","src/api/ops/scalar_bitwise.rs":"482204e459ca6be79568e1c9f70adbe2d2151412ddf122fb2161be8ebb51c40c","src/api/ops/scalar_mask_bitwise.rs":"c250f52042e37b22d57256c80d4604104cfd2fbe2a2e127c676267270ca5d350","src/api/ops/scalar_shifts.rs":"987f8fdebeedc16e3d77c1b732e7826ef70633c541d16dfa290845d5c6289150","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"f5155dce75219f4ba11275b1f295d2fdcddd49d174a6f1fb2ace7ea42813ce41","src/api/ops/vector_int_min_max.rs":"a378789c6ff9b32a51fbd0a97ffd36ed102cd1fe6a067d2b02017c1df342def6","src/api/ops/vector_mask_bitwise.rs":"5052d18517d765415d40327e6e8e55a312daaca0a5e2aec959bfa54b1675f9c8","src/api/ops/vector_neg.rs":"5c62f6b0221983cdbd23cd0a3af3672e6ba1255f0dfe8b19aae6fbd6503e231b","src/api/ops/vector_rotates.rs":"03cbe8a400fd7c688e4ee771a990a6754f2031b1a59b19ae81158b21471167e5","src/api/ops/vector_shifts.rs":"9bf69d0087268f61009e39aea52e03a90f378910206b6a28e8393178b6a5d0e0","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"9ddd960365e050674b25b2fd3116e24d94669b4375d74e71c03e3f1469576066","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"e58c8c87806a95df2b2b5b48ac5991036df024096d9d7c171a480fe9282896a4","src/api/reductions/integer_arithmetic.rs":"47471da1c5f859489680bb5d34ced3d3aa20081c16053a3af121a4496fcb57bf","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"f27be3aa28e1c1f46de7890198db6e12f00c207085e89ef2de7e57ee443cdb98","src/api/select.rs":"a98e2ccf9fc6bdeed32d337c8675bc96c2fbe2cc34fbf149ad6047fb8e749774","src/api/shuffle.rs":"da58200790868c09659819322a489929a5b6e56c596ed07e6a44293ea02e7d09","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"4d4fe8a329c885fcb4fbcbedf99efb15a95296fe6b3f595056cc37037450d5ac","src/api/slice/write_to_slice.rs":"f5b23b2c4b91cfb26b713a9013a6c0da7f45eaefb79ba06dcbc27f3f23bda679","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codegen.rs":"c6eebc3d3665420aa6a2f317977e3c41a4f43e0550ac630cdbe8e4bbed5e2031","src/codegen/bit_manip.rs":"5559e095105a80003e0de35af1d19b0c65c9ab04eb743c7e01c5442d882eb34e","src/codegen/llvm.rs":"d1299c189abb17a6133f047574cffc7a6db4c1be37cb7d4785491cb5e8f8cf54","src/codegen/math.rs":"35f96e37a78fcf0cdb02146b7f27a45108fe06a37fc2a54d8851ce131a326178","src/codegen/math/float.rs":"dd86c0449e576c83b719700962ac017c332987fac08d91f2b7a2b1b883598170","src/codegen/math/float/abs.rs":"f56e2b4b8055ea861c1f5cbc6b6e1d8e7e5af163b62c13574ddee4e09513bfbc","src/codegen/math/float/cos.rs":"ef3b511a24d23045b310315e80348a9b7fedb576fc2de52d74290616a0abeb2a","src/codegen/math/float/cos_pi.rs":"4e7631a5d73dac21531e09ef1802d1180f8997509c2c8fa9f67f322194263a97","src/codegen/math/float/exp.rs":"61b691598c41b5622f24e4320c1bdd08701e612a516438bdddcc728fc3405c8c","src/codegen/math/float/ln.rs":"46b718b1ba8c9d99e1ad40f53d20dfde08a3063ca7bd2a9fdd6698e060da687e","src/codegen/math/float/macros.rs":"dd42135fff13f9aca4fd3a1a4e14c7e6c31aadc6d817d63b0d2fb9e62e062744","src/codegen/math/float/mul_add.rs":"a37bf764345d4b1714f97e83897b7cf0855fc2811704bcbc0012db91825339e1","src/codegen/math/float/mul_adde.rs":"c75702bfcb361de45964a93caf959a695ef2376bd069227600b8c6872665c755","src/codegen/math/float/powf.rs":"642346e982bc4c39203de0864d2149c4179cd7b21cf67a2951687932b4675872","src/codegen/math/float/sin.rs":"9d68164c90cdca6a85155040cdac42e27342ebe0b925273ef1593df721af4258","src/codegen/math/float/sin_cos_pi.rs":"9be02ad48585a1e8d99129382fbffbaed47852f15459256a708850b6b7a75405","src/codegen/math/float/sin_pi.rs":"9890347905b4d4a3c7341c3eb06406e46e60582bcf6960688bd727e5dadc6c57","src/codegen/math/float/sqrt.rs":"e3c60dcfb0c6d2fc62adabcc931b2d4040b83cab294dea36443fb4b89eb79e34","src/codegen/math/float/sqrte.rs":"f0f4ef9eb475ae41bcc7ec6a95ad744ba6b36925faa8b2c2814004396d196b63","src/codegen/pointer_sized_int.rs":"a70697169c28218b56fd2e8d5353f2e00671d1150d0c8cef77d613bdfacd84cb","src/codegen/reductions.rs":"645e2514746d01387ddd07f0aa4ffd8430cc9ab428d4fb13773ea319fa25dd95","src/codegen/reductions/mask.rs":"8f1afe6aabf096a3278e1fc3a30f736e04aa8b9ce96373cee22162d18cfe2702","src/codegen/reductions/mask/aarch64.rs":"cba6e17603d39795dcfe8339b6b7d8714c3e162a1f0a635979f037aa24fe4206","src/codegen/reductions/mask/arm.rs":"9447904818aa2c7c25d0963eead452a639a11ca7dbd6d21eedbfcaade07a0f33","src/codegen/reductions/mask/fallback.rs":"7a0ef9f7fd03ae318b495b95e121350cd61caffc5cc6ee17fabf130d5d933453","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"14bd2c482071f2355beebcf7b7ecf950ff2dfcdb08c3ca50993092434a9de717","src/codegen/reductions/mask/x86/avx.rs":"b4913d87844c522903641cbbf10db4551addb1ce5e9e78278e21612fa65c733b","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"226610b4ff88c676d5187114dd57b4a8800de6ce40884675e9198445b1ed0306","src/codegen/reductions/mask/x86/sse2.rs":"bc38e6c31cb4b3d62147eba6cac264e519e2a48e0f7ce9010cfa9ef0cf0ec9fd","src/codegen/shuffle.rs":"0abca97e92cdce49a58a39cc447eb09dc7d7715ef256c8dbd2181a186e61bb64","src/codegen/shuffle1_dyn.rs":"04523e9338133bdedb012dd076c2c564b79ce5593b0fc56d0fb6910e04190a81","src/codegen/swap_bytes.rs":"1d6cdc716eadddc92b4fd506b2445a821caa8dc00860447de09d7ebd69c2087f","src/codegen/v128.rs":"94226b31ec403d18d9d2fe06713f147c9c79e9b5f9105089088266313f843185","src/codegen/v16.rs":"ddec4ffb66b6f7aaffb9a1780c5ddba82557abd74f45073d335047e04cf74924","src/codegen/v256.rs":"6b63917f0444118d6b1595bff2045e59b97c4d24012bd575f69f1f0efc5a0241","src/codegen/v32.rs":"3477b3c5540aed86e61e2f5807dd31db947413cec9181c587d93ed6ec74f0eba","src/codegen/v512.rs":"5854f99d3aabc4cd42b28a20d9ce447756dc2ba024a409a69b6a8ae1f1842fc5","src/codegen/v64.rs":"e9e89caebfe63d10c0cbca61e4dfdba3b7e02ee0989170f80beed23237ddd950","src/codegen/vPtr.rs":"96d609a9eece4dcbbcc01ba0b8744d7f5958be12774176a2945bc676f4e6b5cb","src/codegen/vSize.rs":"eeee9858749aa82142b27bc120d1989bb74a6b82e1e4efbbeaccc9634dc9acfc","src/lib.rs":"1b5d419ff05ee0370d671810423ccc254708cc8d415c1dbac2a7a36be4bf63a8","src/masks.rs":"870f429967b2d7d5133f4d28d6c753fc5cef0570b27b29d4e966a066d22d2d0e","src/sealed.rs":"ff7f0324276408ae8249941cfa32c90b8835a54d750896b683efea857af19db2","src/testing.rs":"1d3a7862ef625e235a5734ad7204e68d350f902c0695182b1f08a0552432416e","src/testing/macros.rs":"6378856d7a40ba5ec5c7c0dad6327d79f0c77266921c24296d10aed6c68e9b98","src/testing/utils.rs":"d6fd5a5017f1f85d9d99585754f8f6ad06fc3d683b34083543e67a7cc6c1772c","src/v128.rs":"18fe263c4aa28cd06461c7070b0269f69f4a2e75749b8f142a83dfdfe4d22bf5","src/v16.rs":"e5c663c9fb3547eaeac78a5f7db9969f4d8b5ec96112bf2954602fff11f0aebd","src/v256.rs":"68732cd688ad12a56d8b4f8ddf279f77bdfe1be2943c7dc0c1b4f1a76798aa0f","src/v32.rs":"785b22a1ccb4a41bb53dfeb0670f624c0ce42e6cdf62d1747e3283777a1c70bd","src/v512.rs":"d1337bfe07f06a8f37f8e8fa7d4315b9307476ee435ad80dd5269eaed564fbfa","src/v64.rs":"3077468d65125b8f085e9454c8b2463a4d5225697464ba6a1300f8799528fd4b","src/vPtr.rs":"c9a53f41f466e17b6648a4ce390fd8f4d3a848d440eb8a9a803a11608d76eb05","src/vSize.rs":"5c46d3e8c3ee5863d9b6e37e681f871386e0efc254d6d84ba711edb529ce7b3c","tests/endianness.rs":"541a144be017e3dd7da7c8ea49d907dc02538245e8c5f3deb5bd43da92c929e1"},"package":null}
-\ No newline at end of file
-diff --git a/third_party/rust/proc-macro2/.cargo-checksum.json b/third_party/rust/proc-macro2/.cargo-checksum.json
-index eeef4120af..e7849f2896 100644
---- a/third_party/rust/proc-macro2/.cargo-checksum.json
-+++ b/third_party/rust/proc-macro2/.cargo-checksum.json
-@@ -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":"302d447d62c8d091d6241cf62bdad607c0d4ed8ff9f43d9b254c9d99c253ee8e","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"e1f9d4fc22cff2c049f166a403b41458632a94357890d31cf0e3ad83807fb430","build.rs":"a71283fbc495095eebbbf46753df3fe2c19505c745b508dea157f65796b64dd7","src/detection.rs":"9d25d896889e65330858f2d6f6223c1b98cd1dad189813ad4161ff189fbda2b8","src/fallback.rs":"b114e013695260f6066395c8712cea112ec2a386010397a80f15a60f8b986444","src/lib.rs":"7f528764a958587f007f0c2a330a6a414bae2c8e73d5ed9fb64ff1b42b1805b1","src/marker.rs":"87fce2d0357f5b7998b6d9dfb064f4a0cbc9dabb19e33d4b514a446243ebe2e8","src/parse.rs":"1d2253eacbd40eb3a2a933be2adcee356af922bdb48cc89ff266252a41fd98a1","src/wrapper.rs":"f52646ce1705c1f6265516f30d4c43297b5f529dd31fb91f4c806be89d5a4122","tests/comments.rs":"ea6cbe6f4c8852e6a0612893c7d4f2c144a2e6a134a6c3db641a320cbfc3c800","tests/features.rs":"a86deb8644992a4eb64d9fd493eff16f9cf9c5cb6ade3a634ce0c990cf87d559","tests/marker.rs":"652db9f25c69ffc65baa60cdca8f195aa2e254d4de0a9ddc85de4dc2470544b6","tests/test.rs":"5f30a704eeb2b9198b57f416d622da72d25cb9bf8d8b12e6d0e90aa2cb0e43fc","tests/test_fmt.rs":"745dfdc41d09c5308c221395eb43f2041f0a1413d2927a813bc2ad4554438fe2"},"package":"1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"}
-\ No newline at end of file
-diff --git a/third_party/rust/proc-macro2/Cargo.toml b/third_party/rust/proc-macro2/Cargo.toml
-index 95d653633d..22150c516a 100644
---- a/third_party/rust/proc-macro2/Cargo.toml
-+++ b/third_party/rust/proc-macro2/Cargo.toml
-@@ -13,21 +13,22 @@
- [package]
- edition = "2018"
- name = "proc-macro2"
--version = "1.0.5"
--authors = ["Alex Crichton <alex@alexcrichton.com>"]
--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.24"
-+authors = ["Alex Crichton <alex@alexcrichton.com>", "David Tolnay <dtolnay@gmail.com>"]
-+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]
-@@ -39,5 +40,3 @@ 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
-index 19b0c3b5f8..3d05e871a7 100644
---- a/third_party/rust/proc-macro2/README.md
-+++ b/third_party/rust/proc-macro2/README.md
-@@ -1,6 +1,6 @@
- # 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)
-
-diff --git a/third_party/rust/proc-macro2/build.rs b/third_party/rust/proc-macro2/build.rs
-index deb9b92719..b247d874f6 100644
---- a/third_party/rust/proc-macro2/build.rs
-+++ b/third_party/rust/proc-macro2/build.rs
-@@ -14,6 +14,10 @@
- // 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
-@@ -57,6 +61,22 @@ fn main() {
- println!("cargo:rustc-cfg=span_locations");
- }
-
-+ if version.minor < 32 {
-+ println!("cargo:rustc-cfg=no_libprocmacro_unwind_safe");
-+ }
-+
-+ if version.minor < 39 {
-+ println!("cargo:rustc-cfg=no_bind_by_move_pattern_guard");
-+ }
-+
-+ if version.minor >= 44 {
-+ println!("cargo:rustc-cfg=lexerror_display");
-+ }
-+
-+ if version.minor >= 45 {
-+ println!("cargo:rustc-cfg=hygiene");
-+ }
-+
- let target = env::var("TARGET").unwrap();
- if !enable_use_proc_macro(&target) {
- return;
-diff --git a/third_party/rust/proc-macro2/src/detection.rs b/third_party/rust/proc-macro2/src/detection.rs
-new file mode 100644
-index 0000000000..c597bc99c6
---- /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<PanicHook> = 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
-index fe582b3b5f..8900c5ff0f 100644
---- a/third_party/rust/proc-macro2/src/fallback.rs
-+++ b/third_party/rust/proc-macro2/src/fallback.rs
-@@ -1,27 +1,41 @@
-+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<TokenTree>,
-+pub(crate) struct TokenStream {
-+ pub(crate) inner: Vec<TokenTree>,
- }
-
- #[derive(Debug)]
--pub struct LexError;
-+pub(crate) struct LexError;
-
- impl TokenStream {
- pub fn new() -> TokenStream {
-@@ -31,6 +45,72 @@ impl TokenStream {
- pub fn is_empty(&self) -> bool {
- self.inner.len() == 0
- }
-+
-+ fn take_inner(&mut self) -> Vec<TokenTree> {
-+ 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)]
-@@ -59,20 +139,22 @@ impl FromStr for TokenStream {
- // 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 LexError {
-+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-+ f.write_str("cannot parse string into token stream")
-+ }
-+}
-+
-+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() {
-@@ -80,37 +162,22 @@ impl fmt::Display for TokenStream {
- 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)?
-- }
-- }
-- 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,
-- }
-+ 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::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()
-@@ -139,28 +206,26 @@ impl From<TokenStream> for proc_macro::TokenStream {
-
- impl From<TokenTree> for TokenStream {
- fn from(tree: TokenTree) -> TokenStream {
-- TokenStream { inner: vec![tree] }
-+ let mut stream = TokenStream::new();
-+ stream.push_token(tree);
-+ stream
- }
- }
-
--impl iter::FromIterator<TokenTree> for TokenStream {
-- fn from_iter<I: IntoIterator<Item = TokenTree>>(streams: I) -> Self {
-- let mut v = Vec::new();
--
-- for token in streams.into_iter() {
-- v.push(token);
-- }
--
-- TokenStream { inner: v }
-+impl FromIterator<TokenTree> for TokenStream {
-+ fn from_iter<I: IntoIterator<Item = TokenTree>>(tokens: I) -> Self {
-+ let mut stream = TokenStream::new();
-+ stream.extend(tokens);
-+ stream
- }
- }
-
--impl iter::FromIterator<TokenStream> for TokenStream {
-+impl FromIterator<TokenStream> for TokenStream {
- fn from_iter<I: IntoIterator<Item = TokenStream>>(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 }
-@@ -168,31 +233,30 @@ impl iter::FromIterator<TokenStream> for TokenStream {
- }
-
- impl Extend<TokenTree> for TokenStream {
-- fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, streams: I) {
-- self.inner.extend(streams);
-+ fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, tokens: I) {
-+ tokens.into_iter().for_each(|token| self.push_token(token));
- }
- }
-
- impl Extend<TokenStream> for TokenStream {
- fn extend<I: IntoIterator<Item = TokenStream>>(&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<TokenTree>;
-+pub(crate) type TokenTreeIter = vec::IntoIter<TokenTree>;
-
- 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,
- }
-
-@@ -208,7 +272,7 @@ impl SourceFile {
- }
- }
-
--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())
-@@ -218,7 +282,7 @@ impl fmt::Debug for SourceFile {
- }
-
- #[derive(Clone, Copy, Debug, PartialEq, Eq)]
--pub struct LineColumn {
-+pub(crate) struct LineColumn {
- pub line: usize,
- pub column: usize,
- }
-@@ -228,23 +292,11 @@ thread_local! {
- static SOURCE_MAP: RefCell<SourceMap> = 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: "<unspecified>".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: "<unspecified>".to_owned(),
-+ span: Span { lo: 0, hi: 0 },
-+ lines: vec![0],
- }],
- });
- }
-@@ -282,16 +334,21 @@ impl FileInfo {
- }
- }
-
--/// 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<usize> {
-+fn lines_offsets(s: &str) -> (usize, Vec<usize>) {
- 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)]
-@@ -310,23 +367,22 @@ impl SourceMap {
- }
-
- 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
-@@ -343,11 +399,11 @@ impl SourceMap {
- }
-
- #[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 {
-@@ -361,12 +417,16 @@ impl 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
-@@ -374,7 +434,6 @@ impl Span {
- *self
- }
-
-- #[cfg(procmacro2_semver_exempt)]
- pub fn located_at(&self, other: Span) -> Span {
- other
- }
-@@ -427,26 +486,59 @@ impl Span {
- })
- })
- }
-+
-+ #[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,
-@@ -474,11 +566,11 @@ impl Group {
- }
-
- 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) {
-@@ -486,36 +578,45 @@ impl Group {
- }
- }
-
--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,
-@@ -549,16 +650,14 @@ impl Ident {
- }
- }
-
--#[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 == '_'
-@@ -615,18 +714,18 @@ where
- }
- }
-
--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));
-@@ -637,17 +736,17 @@ impl fmt::Debug for 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,
- }
-@@ -669,7 +768,7 @@ macro_rules! unsuffixed_numbers {
- }
-
- impl Literal {
-- fn _new(text: String) -> Literal {
-+ pub(crate) fn _new(text: String) -> Literal {
- Literal {
- text,
- span: Span::call_site(),
-@@ -711,7 +810,7 @@ impl Literal {
-
- 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)
-@@ -719,7 +818,7 @@ impl Literal {
-
- 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)
-@@ -730,10 +829,10 @@ impl Literal {
- 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('"');
-@@ -744,10 +843,10 @@ impl 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)
-@@ -756,6 +855,7 @@ impl Literal {
- 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"),
-@@ -784,651 +884,17 @@ impl Literal {
- }
- }
-
--impl fmt::Display for Literal {
-+impl Display for Literal {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-- self.text.fmt(f)
-+ Display::fmt(&self.text, f)
- }
- }
-
--impl fmt::Debug for Literal {
-+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));
-- #[cfg(procmacro2_semver_exempt)]
-- debug.field("span", &self.span);
-+ debug_span_field_if_nontrivial(&mut debug, self.span);
- debug.finish()
- }
- }
--
--fn token_stream(mut input: Cursor) -> PResult<TokenStream> {
-- 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<TokenTree> {
-- 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<TokenTree> {
-- symbol(skip_whitespace(input))
--}
--
--fn symbol(input: Cursor) -> PResult<TokenTree> {
-- 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<Literal> {
-- 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),
-- }
--}
--
--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)
-- }
--}
--
--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<I>(chars: &mut I) -> bool
--where
-- I: Iterator<Item = (usize, char)>,
--{
-- next_ch!(chars @ '0'..='7');
-- next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F');
-- true
--}
--
--fn backslash_x_byte<I>(chars: &mut I) -> bool
--where
-- I: Iterator<Item = (usize, u8)>,
--{
-- 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<I>(chars: &mut I) -> bool
--where
-- I: Iterator<Item = (usize, char)>,
--{
-- 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<Punct> {
-- 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<char> {
-- 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<Vec<TokenTree>> {
-- 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
-index a08be3e815..c20fb50d4a 100644
---- a/third_party/rust/proc-macro2/src/lib.rs
-+++ b/third_party/rust/proc-macro2/src/lib.rs
-@@ -78,27 +78,24 @@
- //! 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.24")]
- #![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::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;
-+mod marker;
-+mod parse;
-+
-+#[cfg(wrap_proc_macro)]
-+mod detection;
-
--#[macro_use]
--mod strnom;
--mod fallback;
-+// 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;
-@@ -106,6 +103,17 @@ use crate::fallback as imp;
- #[cfg(wrap_proc_macro)]
- mod imp;
-
-+use crate::marker::Marker;
-+use std::cmp::Ordering;
-+use std::error::Error;
-+use std::fmt::{self, Debug, Display};
-+use std::hash::{Hash, Hasher};
-+use std::iter::FromIterator;
-+use std::ops::RangeBounds;
-+#[cfg(procmacro2_semver_exempt)]
-+use std::path::PathBuf;
-+use std::str::FromStr;
-+
- /// An abstract stream of tokens, or more concretely a sequence of token trees.
- ///
- /// This type provides interfaces for iterating over token trees and for
-@@ -116,27 +124,27 @@ mod imp;
- #[derive(Clone)]
- pub struct TokenStream {
- inner: imp::TokenStream,
-- _marker: marker::PhantomData<Rc<()>>,
-+ _marker: Marker,
- }
-
- /// Error returned from `TokenStream::from_str`.
- pub struct LexError {
- inner: imp::LexError,
-- _marker: marker::PhantomData<Rc<()>>,
-+ _marker: Marker,
- }
-
- impl TokenStream {
- fn _new(inner: imp::TokenStream) -> TokenStream {
- TokenStream {
- inner,
-- _marker: marker::PhantomData,
-+ _marker: Marker,
- }
- }
-
- fn _new_stable(inner: fallback::TokenStream) -> TokenStream {
- TokenStream {
- inner: inner.into(),
-- _marker: marker::PhantomData,
-+ _marker: Marker,
- }
- }
-
-@@ -173,7 +181,7 @@ impl FromStr for TokenStream {
- fn from_str(src: &str) -> Result<TokenStream, LexError> {
- let e = src.parse().map_err(|e| LexError {
- inner: e,
-- _marker: marker::PhantomData,
-+ _marker: Marker,
- })?;
- Ok(TokenStream::_new(e))
- }
-@@ -228,25 +236,33 @@ impl FromIterator<TokenStream> for TokenStream {
- /// 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 {
-+ Debug::fmt(&self.inner, f)
-+ }
-+}
-+
-+impl Debug for LexError {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-- self.inner.fmt(f)
-+ Debug::fmt(&self.inner, f)
- }
- }
-
--impl fmt::Debug for LexError {
-+impl Display for LexError {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-- self.inner.fmt(f)
-+ Display::fmt(&self.inner, f)
- }
- }
-
-+impl Error for LexError {}
-+
- /// The source file of a given `Span`.
- ///
- /// This type is semver exempt and not exposed by default.
-@@ -254,7 +270,7 @@ impl fmt::Debug for LexError {
- #[derive(Clone, PartialEq, Eq)]
- pub struct SourceFile {
- inner: imp::SourceFile,
-- _marker: marker::PhantomData<Rc<()>>,
-+ _marker: Marker,
- }
-
- #[cfg(procmacro2_semver_exempt)]
-@@ -262,7 +278,7 @@ impl SourceFile {
- fn _new(inner: imp::SourceFile) -> Self {
- SourceFile {
- inner,
-- _marker: marker::PhantomData,
-+ _marker: Marker,
- }
- }
-
-@@ -291,9 +307,9 @@ impl SourceFile {
- }
-
- #[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)
- }
- }
-
-@@ -311,25 +327,41 @@ pub struct LineColumn {
- 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<Ordering> {
-+ 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<Rc<()>>,
-+ _marker: Marker,
- }
-
- impl Span {
- fn _new(inner: imp::Span) -> Span {
- Span {
- inner,
-- _marker: marker::PhantomData,
-+ _marker: Marker,
- }
- }
-
- fn _new_stable(inner: fallback::Span) -> Span {
- Span {
- inner: inner.into(),
-- _marker: marker::PhantomData,
-+ _marker: Marker,
- }
- }
-
-@@ -342,6 +374,16 @@ impl 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.
-@@ -352,18 +394,12 @@ impl Span {
-
- /// 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))
- }
-@@ -439,9 +475,9 @@ impl Span {
- }
-
- /// 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)
- }
- }
-
-@@ -462,11 +498,11 @@ 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(),
- }
- }
-
-@@ -476,11 +512,11 @@ impl TokenTree {
- /// 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),
- }
- }
- }
-@@ -513,32 +549,32 @@ impl From<Literal> for TokenTree {
- /// 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),
- }
- }
- }
-@@ -651,15 +687,15 @@ impl Group {
- /// 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)
- }
- }
-
-@@ -669,7 +705,7 @@ impl fmt::Debug for Group {
- /// `Punct` with different forms of `Spacing` returned.
- #[derive(Clone)]
- pub struct Punct {
-- op: char,
-+ ch: char,
- spacing: Spacing,
- span: Span,
- }
-@@ -695,9 +731,9 @@ impl Punct {
- ///
- /// The returned `Punct` will have the default span of `Span::call_site()`
- /// which can be further configured with the `set_span` method below.
-- pub fn new(op: char, spacing: Spacing) -> Punct {
-+ pub fn new(ch: char, spacing: Spacing) -> Punct {
- Punct {
-- op,
-+ ch,
- spacing,
- span: Span::call_site(),
- }
-@@ -705,7 +741,7 @@ impl Punct {
-
- /// Returns the value of this punctuation character as `char`.
- pub fn as_char(&self) -> char {
-- self.op
-+ self.ch
- }
-
- /// Returns the spacing of this punctuation character, indicating whether
-@@ -730,16 +766,16 @@ impl Punct {
-
- /// 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.ch, 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("char", &self.ch);
- debug.field("spacing", &self.spacing);
- imp::debug_span_field_if_nontrivial(&mut debug, self.span.inner);
- debug.finish()
-@@ -813,14 +849,14 @@ impl fmt::Debug for Punct {
- #[derive(Clone)]
- pub struct Ident {
- inner: imp::Ident,
-- _marker: marker::PhantomData<Rc<()>>,
-+ _marker: Marker,
- }
-
- impl Ident {
- fn _new(inner: imp::Ident) -> Ident {
- Ident {
- inner,
-- _marker: marker::PhantomData,
-+ _marker: Marker,
- }
- }
-
-@@ -920,15 +956,15 @@ impl Hash for Ident {
-
- /// 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)
- }
- }
-
-@@ -941,7 +977,7 @@ impl fmt::Debug for Ident {
- #[derive(Clone)]
- pub struct Literal {
- inner: imp::Literal,
-- _marker: marker::PhantomData<Rc<()>>,
-+ _marker: Marker,
- }
-
- macro_rules! suffixed_int_literals {
-@@ -988,14 +1024,14 @@ impl Literal {
- fn _new(inner: imp::Literal) -> Literal {
- Literal {
- inner,
-- _marker: marker::PhantomData,
-+ _marker: Marker,
- }
- }
-
- fn _new_stable(inner: fallback::Literal) -> Literal {
- Literal {
- inner: inner.into(),
-- _marker: marker::PhantomData,
-+ _marker: Marker,
- }
- }
-
-@@ -1140,26 +1176,25 @@ impl Literal {
- }
- }
-
--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 std::marker;
-- use std::rc::Rc;
-+ use crate::marker::Marker;
-+ use crate::{imp, TokenTree};
-+ use std::fmt::{self, Debug};
-
- pub use crate::TokenStream;
-- use crate::{imp, TokenTree};
-
- /// An iterator over `TokenStream`'s `TokenTree`s.
- ///
-@@ -1168,7 +1203,7 @@ pub mod token_stream {
- #[derive(Clone)]
- pub struct IntoIter {
- inner: imp::TokenTreeIter,
-- _marker: marker::PhantomData<Rc<()>>,
-+ _marker: Marker,
- }
-
- impl Iterator for IntoIter {
-@@ -1179,9 +1214,9 @@ pub mod token_stream {
- }
- }
-
-- 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)
- }
- }
-
-@@ -1192,7 +1227,7 @@ pub mod token_stream {
- fn into_iter(self) -> IntoIter {
- IntoIter {
- inner: self.inner.into_iter(),
-- _marker: marker::PhantomData,
-+ _marker: Marker,
- }
- }
- }
-diff --git a/third_party/rust/proc-macro2/src/marker.rs b/third_party/rust/proc-macro2/src/marker.rs
-new file mode 100644
-index 0000000000..58729baf4a
---- /dev/null
-+++ b/third_party/rust/proc-macro2/src/marker.rs
-@@ -0,0 +1,18 @@
-+use std::marker::PhantomData;
-+use std::panic::{RefUnwindSafe, UnwindSafe};
-+use std::rc::Rc;
-+
-+// Zero sized marker with the correct set of autotrait impls we want all proc
-+// macro types to have.
-+pub(crate) type Marker = PhantomData<ProcMacroAutoTraits>;
-+
-+pub(crate) use self::value::*;
-+
-+mod value {
-+ pub(crate) use std::marker::PhantomData as Marker;
-+}
-+
-+pub(crate) struct ProcMacroAutoTraits(Rc<()>);
-+
-+impl UnwindSafe for ProcMacroAutoTraits {}
-+impl RefUnwindSafe for ProcMacroAutoTraits {}
-diff --git a/third_party/rust/proc-macro2/src/parse.rs b/third_party/rust/proc-macro2/src/parse.rs
-new file mode 100644
-index 0000000000..365fe0484d
---- /dev/null
-+++ b/third_party/rust/proc-macro2/src/parse.rs
-@@ -0,0 +1,849 @@
-+use crate::fallback::{
-+ is_ident_continue, is_ident_start, Group, LexError, Literal, Span, TokenStream,
-+};
-+use crate::{Delimiter, Punct, Spacing, TokenTree};
-+use std::char;
-+use std::str::{Bytes, CharIndices, Chars};
-+
-+#[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<Cursor<'a>, 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<Cursor, LexError> {
-+ match input.chars().next() {
-+ Some(ch) if is_ident_continue(ch) => Err(LexError),
-+ Some(_) | None => Ok(input),
-+ }
-+}
-+
-+pub(crate) fn token_stream(mut input: Cursor) -> PResult<TokenStream> {
-+ 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<TokenTree> {
-+ 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)) = punct(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<crate::Ident> {
-+ if ["r\"", "r#\"", "r##", "b\"", "b\'", "br\"", "br#"]
-+ .iter()
-+ .any(|prefix| input.starts_with(prefix))
-+ {
-+ Err(LexError)
-+ } else {
-+ ident_any(input)
-+ }
-+}
-+
-+fn ident_any(input: Cursor) -> PResult<crate::Ident> {
-+ 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<Literal> {
-+ 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<Cursor, LexError> {
-+ 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<Cursor, LexError> {
-+ 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<Cursor, LexError> {
-+ 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' => match chars.next() {
-+ Some((_, '\n')) => {}
-+ _ => 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((_, ch @ '\n')) | Some((_, ch @ '\r')) => {
-+ let mut last = ch;
-+ loop {
-+ if last == '\r' && chars.next().map_or(true, |(_, ch)| ch != '\n') {
-+ return Err(LexError);
-+ }
-+ match chars.peek() {
-+ Some((_, ch)) if ch.is_whitespace() => {
-+ last = *ch;
-+ chars.next();
-+ }
-+ _ => break,
-+ }
-+ }
-+ }
-+ _ => break,
-+ },
-+ _ch => {}
-+ }
-+ }
-+ Err(LexError)
-+}
-+
-+fn byte_string(input: Cursor) -> Result<Cursor, LexError> {
-+ 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<Cursor, LexError> {
-+ let mut bytes = input.bytes().enumerate();
-+ while let Some((offset, b)) = bytes.next() {
-+ match b {
-+ b'"' => {
-+ let input = input.advance(offset + 1);
-+ return Ok(literal_suffix(input));
-+ }
-+ b'\r' => match bytes.next() {
-+ Some((_, b'\n')) => {}
-+ _ => 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 @ b'\n')) | Some((newline, b @ b'\r')) => {
-+ let mut last = b as char;
-+ let rest = input.advance(newline + 1);
-+ let mut chars = rest.char_indices();
-+ loop {
-+ if last == '\r' && chars.next().map_or(true, |(_, ch)| ch != '\n') {
-+ return Err(LexError);
-+ }
-+ match chars.next() {
-+ Some((_, ch)) if ch.is_whitespace() => last = ch,
-+ Some((offset, _)) => {
-+ input = rest.advance(offset);
-+ bytes = input.bytes().enumerate();
-+ break;
-+ }
-+ None => return Err(LexError),
-+ }
-+ }
-+ }
-+ _ => break,
-+ },
-+ b if b < 0x80 => {}
-+ _ => break,
-+ }
-+ }
-+ Err(LexError)
-+}
-+
-+fn raw_string(input: Cursor) -> Result<Cursor, LexError> {
-+ 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),
-+ }
-+ }
-+ while let Some((i, ch)) = chars.next() {
-+ 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' => match chars.next() {
-+ Some((_, '\n')) => {}
-+ _ => break,
-+ },
-+ _ => {}
-+ }
-+ }
-+ Err(LexError)
-+}
-+
-+fn byte(input: Cursor) -> Result<Cursor, LexError> {
-+ 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<Cursor, LexError> {
-+ 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<I>(chars: &mut I) -> bool
-+where
-+ I: Iterator<Item = (usize, char)>,
-+{
-+ next_ch!(chars @ '0'..='7');
-+ next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F');
-+ true
-+}
-+
-+fn backslash_x_byte<I>(chars: &mut I) -> bool
-+where
-+ I: Iterator<Item = (usize, u8)>,
-+{
-+ 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<I>(chars: &mut I) -> bool
-+where
-+ I: Iterator<Item = (usize, char)>,
-+{
-+ next_ch!(chars @ '{');
-+ let mut value = 0;
-+ let mut len = 0;
-+ while let Some((_, ch)) = chars.next() {
-+ let digit = match ch {
-+ '0'..='9' => ch as u8 - b'0',
-+ 'a'..='f' => 10 + ch as u8 - b'a',
-+ 'A'..='F' => 10 + ch as u8 - b'A',
-+ '_' if len > 0 => continue,
-+ '}' if len > 0 => return char::from_u32(value).is_some(),
-+ _ => return false,
-+ };
-+ if len == 6 {
-+ return false;
-+ }
-+ value *= 0x10;
-+ value += u32::from(digit);
-+ len += 1;
-+ }
-+ false
-+}
-+
-+fn float(input: Cursor) -> Result<Cursor, LexError> {
-+ 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<Cursor, LexError> {
-+ 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,
-+ }
-+ }
-+
-+ if !(has_dot || has_exp) {
-+ return Err(LexError);
-+ }
-+
-+ if has_exp {
-+ let token_before_exp = if has_dot {
-+ Ok(input.advance(len - 1))
-+ } else {
-+ Err(LexError)
-+ };
-+ let mut has_sign = false;
-+ let mut has_exp_value = false;
-+ while let Some(&ch) = chars.peek() {
-+ match ch {
-+ '+' | '-' => {
-+ if has_exp_value {
-+ break;
-+ }
-+ if has_sign {
-+ return token_before_exp;
-+ }
-+ chars.next();
-+ len += 1;
-+ has_sign = true;
-+ }
-+ '0'..='9' => {
-+ chars.next();
-+ len += 1;
-+ has_exp_value = true;
-+ }
-+ '_' => {
-+ chars.next();
-+ len += 1;
-+ }
-+ _ => break,
-+ }
-+ }
-+ if !has_exp_value {
-+ return token_before_exp;
-+ }
-+ }
-+
-+ Ok(input.advance(len))
-+}
-+
-+fn int(input: Cursor) -> Result<Cursor, LexError> {
-+ 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<Cursor, LexError> {
-+ 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() {
-+ match b {
-+ b'0'..=b'9' => {
-+ let digit = (b - b'0') as u64;
-+ if digit >= base {
-+ return Err(LexError);
-+ }
-+ }
-+ b'a'..=b'f' => {
-+ let digit = 10 + (b - b'a') as u64;
-+ if digit >= base {
-+ break;
-+ }
-+ }
-+ b'A'..=b'F' => {
-+ let digit = 10 + (b - b'A') as u64;
-+ if digit >= base {
-+ break;
-+ }
-+ }
-+ b'_' => {
-+ if empty && base == 10 {
-+ return Err(LexError);
-+ }
-+ len += 1;
-+ continue;
-+ }
-+ _ => break,
-+ };
-+ len += 1;
-+ empty = false;
-+ }
-+ if empty {
-+ Err(LexError)
-+ } else {
-+ Ok(input.advance(len))
-+ }
-+}
-+
-+fn punct(input: Cursor) -> PResult<Punct> {
-+ match punct_char(input) {
-+ Ok((rest, '\'')) => {
-+ if ident_any(rest)?.0.starts_with("'") {
-+ Err(LexError)
-+ } else {
-+ Ok((rest, Punct::new('\'', Spacing::Joint)))
-+ }
-+ }
-+ Ok((rest, ch)) => {
-+ let kind = match punct_char(rest) {
-+ Ok(_) => Spacing::Joint,
-+ Err(LexError) => Spacing::Alone,
-+ };
-+ Ok((rest, Punct::new(ch, kind)))
-+ }
-+ Err(LexError) => Err(LexError),
-+ }
-+}
-+
-+fn punct_char(input: Cursor) -> PResult<char> {
-+ if input.starts_with("//") || input.starts_with("/*") {
-+ // Do not accept `/` of a comment as a punct.
-+ 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<Vec<TokenTree>> {
-+ #[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
-index eb7d0b8a8e..0000000000
---- 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<usize> {
-- 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
-index 552b9381cf..3df044af17 100644
---- a/third_party/rust/proc-macro2/src/wrapper.rs
-+++ b/third_party/rust/proc-macro2/src/wrapper.rs
-@@ -1,15 +1,15 @@
--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),
- }
-@@ -19,73 +19,16 @@ pub enum TokenStream {
- // 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<proc_macro::TokenTree>,
- }
-
--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<PanicHook> = 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")
- }
-@@ -103,7 +46,12 @@ impl DeferredTokenStream {
- }
-
- 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 {
-@@ -114,7 +62,7 @@ impl DeferredTokenStream {
-
- 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())
-@@ -147,9 +95,9 @@ impl FromStr for TokenStream {
- type Err = LexError;
-
- fn from_str(src: &str) -> Result<TokenStream, LexError> {
-- if nightly_works() {
-+ if inside_proc_macro() {
- Ok(TokenStream::Compiler(DeferredTokenStream::new(
-- src.parse()?,
-+ proc_macro_parse(src)?,
- )))
- } else {
- Ok(TokenStream::Fallback(src.parse()?))
-@@ -157,11 +105,17 @@ impl FromStr for TokenStream {
- }
- }
-
--impl fmt::Display for TokenStream {
-+// Work around https://github.com/rust-lang/rust/issues/58736.
-+fn proc_macro_parse(src: &str) -> Result<proc_macro::TokenStream, LexError> {
-+ 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),
- }
- }
- }
-@@ -187,7 +141,7 @@ impl From<fallback::TokenStream> for TokenStream {
- }
- }
-
--// 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(),
-@@ -196,9 +150,9 @@ fn into_compiler_token(token: TokenTree) -> proc_macro::TokenTree {
- Spacing::Joint => proc_macro::Spacing::Joint,
- Spacing::Alone => proc_macro::Spacing::Alone,
- };
-- let mut op = proc_macro::Punct::new(tt.as_char(), spacing);
-- op.set_span(tt.span().inner.unwrap_nightly());
-- op.into()
-+ let mut punct = proc_macro::Punct::new(tt.as_char(), spacing);
-+ punct.set_span(tt.span().inner.unwrap_nightly());
-+ punct.into()
- }
- TokenTree::Ident(tt) => tt.inner.unwrap_nightly().into(),
- TokenTree::Literal(tt) => tt.inner.unwrap_nightly().into(),
-@@ -207,7 +161,7 @@ fn into_compiler_token(token: TokenTree) -> proc_macro::TokenTree {
-
- impl From<TokenTree> 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())
-@@ -215,9 +169,9 @@ impl From<TokenTree> for TokenStream {
- }
- }
-
--impl iter::FromIterator<TokenTree> for TokenStream {
-+impl FromIterator<TokenTree> for TokenStream {
- fn from_iter<I: IntoIterator<Item = TokenTree>>(trees: I) -> Self {
-- if nightly_works() {
-+ if inside_proc_macro() {
- TokenStream::Compiler(DeferredTokenStream::new(
- trees.into_iter().map(into_compiler_token).collect(),
- ))
-@@ -227,7 +181,7 @@ impl iter::FromIterator<TokenTree> for TokenStream {
- }
- }
-
--impl iter::FromIterator<TokenStream> for TokenStream {
-+impl FromIterator<TokenStream> for TokenStream {
- fn from_iter<I: IntoIterator<Item = TokenStream>>(streams: I) -> Self {
- let mut streams = streams.into_iter();
- match streams.next() {
-@@ -252,14 +206,15 @@ impl iter::FromIterator<TokenStream> for TokenStream {
- }
-
- impl Extend<TokenTree> for TokenStream {
-- fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, streams: I) {
-+ fn extend<I: IntoIterator<Item = TokenTree>>(&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),
- }
- }
- }
-@@ -270,20 +225,20 @@ impl Extend<TokenStream> for TokenStream {
- 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),
- }
- }
- }
-@@ -300,17 +255,29 @@ impl From<fallback::LexError> for LexError {
- }
- }
-
--impl fmt::Debug for LexError {
-+impl Debug for LexError {
-+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ LexError::Compiler(e) => Debug::fmt(e, f),
-+ LexError::Fallback(e) => Debug::fmt(e, f),
-+ }
-+ }
-+}
-+
-+impl Display 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),
-+ #[cfg(lexerror_display)]
-+ LexError::Compiler(e) => Display::fmt(e, f),
-+ #[cfg(not(lexerror_display))]
-+ LexError::Compiler(_e) => Display::fmt(&fallback::LexError, f),
-+ LexError::Fallback(e) => Display::fmt(e, f),
- }
- }
- }
-
- #[derive(Clone)]
--pub enum TokenTreeIter {
-+pub(crate) enum TokenTreeIter {
- Compiler(proc_macro::token_stream::IntoIter),
- Fallback(fallback::TokenTreeIter),
- }
-@@ -361,7 +328,7 @@ impl Iterator for TokenTreeIter {
- }
- }
-
--impl fmt::Debug for TokenTreeIter {
-+impl Debug for TokenTreeIter {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- f.debug_struct("TokenTreeIter").finish()
- }
-@@ -369,7 +336,7 @@ impl fmt::Debug for TokenTreeIter {
-
- #[derive(Clone, PartialEq, Eq)]
- #[cfg(super_unstable)]
--pub enum SourceFile {
-+pub(crate) enum SourceFile {
- Compiler(proc_macro::SourceFile),
- Fallback(fallback::SourceFile),
- }
-@@ -397,58 +364,77 @@ impl SourceFile {
- }
-
- #[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(),
- }
-@@ -542,16 +528,16 @@ impl From<fallback::Span> for Span {
- }
- }
-
--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);
-@@ -561,7 +547,7 @@ pub fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span)
- }
-
- #[derive(Clone)]
--pub enum Group {
-+pub(crate) enum Group {
- Compiler(proc_macro::Group),
- Fallback(fallback::Group),
- }
-@@ -652,26 +638,26 @@ impl From<fallback::Group> for Group {
- }
- }
-
--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),
- }
-@@ -747,26 +733,26 @@ where
- }
- }
-
--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),
- }
-@@ -774,7 +760,7 @@ pub enum 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))
-@@ -786,7 +772,7 @@ macro_rules! suffixed_numbers {
- 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))
-@@ -830,7 +816,7 @@ impl Literal {
- }
-
- 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))
-@@ -838,7 +824,7 @@ impl Literal {
- }
-
- 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))
-@@ -846,7 +832,7 @@ impl Literal {
- }
-
- 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))
-@@ -854,7 +840,7 @@ impl Literal {
- }
-
- 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))
-@@ -862,7 +848,7 @@ impl Literal {
- }
-
- 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))
-@@ -908,20 +894,20 @@ impl From<fallback::Literal> for Literal {
- }
- }
-
--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
-index 0000000000..708cccb880
---- /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::<TokenStream>().unwrap();
-+ let tokens = stream.into_iter().collect::<Vec<_>>();
-+ assert!(tokens.is_empty(), "not empty -- {:?}", tokens);
-+}
-+
-+#[test]
-+fn incomplete() {
-+ assert!("/*/".parse::<TokenStream>().is_err());
-+}
-+
-+#[test]
-+fn lit() {
-+ let stream = "/// doc".parse::<TokenStream>().unwrap();
-+ let lit = lit_of_outer_doc_comment(stream);
-+ assert_eq!(lit.to_string(), "\" doc\"");
-+
-+ let stream = "//! doc".parse::<TokenStream>().unwrap();
-+ let lit = lit_of_inner_doc_comment(stream);
-+ assert_eq!(lit.to_string(), "\" doc\"");
-+
-+ let stream = "/** doc */".parse::<TokenStream>().unwrap();
-+ let lit = lit_of_outer_doc_comment(stream);
-+ assert_eq!(lit.to_string(), "\" doc \"");
-+
-+ let stream = "/*! doc */".parse::<TokenStream>().unwrap();
-+ let lit = lit_of_inner_doc_comment(stream);
-+ assert_eq!(lit.to_string(), "\" doc \"");
-+}
-+
-+#[test]
-+fn carriage_return() {
-+ let stream = "///\r\n".parse::<TokenStream>().unwrap();
-+ let lit = lit_of_outer_doc_comment(stream);
-+ assert_eq!(lit.to_string(), "\"\"");
-+
-+ let stream = "/**\r\n*/".parse::<TokenStream>().unwrap();
-+ let lit = lit_of_outer_doc_comment(stream);
-+ assert_eq!(lit.to_string(), "\"\\r\\n\"");
-+
-+ "///\r".parse::<TokenStream>().unwrap_err();
-+ "///\r \n".parse::<TokenStream>().unwrap_err();
-+ "/**\r \n*/".parse::<TokenStream>().unwrap_err();
-+}
-diff --git a/third_party/rust/proc-macro2/tests/marker.rs b/third_party/rust/proc-macro2/tests/marker.rs
-index 7af2539c1a..70e57677cd 100644
---- a/third_party/rust/proc-macro2/tests/marker.rs
-+++ b/third_party/rust/proc-macro2/tests/marker.rs
-@@ -57,3 +57,36 @@ mod semver_exempt {
-
- assert_impl!(SourceFile is not Send or Sync);
- }
-+
-+#[cfg(not(no_libprocmacro_unwind_safe))]
-+mod unwind_safe {
-+ use super::*;
-+ use std::panic::{RefUnwindSafe, UnwindSafe};
-+
-+ macro_rules! assert_unwind_safe {
-+ ($($types:ident)*) => {
-+ $(
-+ assert_impl!($types is UnwindSafe and RefUnwindSafe);
-+ )*
-+ };
-+ }
-+
-+ assert_unwind_safe! {
-+ Delimiter
-+ Group
-+ Ident
-+ LexError
-+ Literal
-+ Punct
-+ Spacing
-+ Span
-+ TokenStream
-+ TokenTree
-+ }
-+
-+ #[cfg(procmacro2_semver_exempt)]
-+ assert_unwind_safe! {
-+ LineColumn
-+ SourceFile
-+ }
-+}
-diff --git a/third_party/rust/proc-macro2/tests/test.rs b/third_party/rust/proc-macro2/tests/test.rs
-index 7528388138..1e9f633944 100644
---- a/third_party/rust/proc-macro2/tests/test.rs
-+++ b/third_party/rust/proc-macro2/tests/test.rs
-@@ -1,7 +1,6 @@
-+use proc_macro2::{Ident, Literal, Punct, Spacing, Span, TokenStream, TokenTree};
- use std::str::{self, FromStr};
-
--use proc_macro2::{Ident, Literal, Spacing, Span, TokenStream, TokenTree};
--
- #[test]
- fn idents() {
- assert_eq!(
-@@ -84,6 +83,11 @@ fn literal_string() {
- assert_eq!(Literal::string("didn't").to_string(), "\"didn't\"");
- }
-
-+#[test]
-+fn literal_raw_string() {
-+ "r\"\r\n\"".parse::<TokenStream>().unwrap();
-+}
-+
- #[test]
- fn literal_character() {
- assert_eq!(Literal::character('x').to_string(), "'x'");
-@@ -110,6 +114,37 @@ fn literal_suffix() {
- 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);
-+ assert_eq!(token_count("0E"), 1);
-+ assert_eq!(token_count("0o0A"), 1);
-+ assert_eq!(token_count("0E--0"), 4);
-+ assert_eq!(token_count("0.0ECMA"), 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]
-@@ -161,41 +196,21 @@ fn fail() {
- fail("' static");
- fail("r#1");
- fail("r#_");
-+ fail("\"\\u{0000000}\""); // overlong unicode escape (rust allows at most 6 hex digits)
-+ fail("\"\\u{999999}\""); // outside of valid range of char
-+ fail("\"\\u{_0}\""); // leading underscore
-+ fail("\"\\u{}\""); // empty
-+ fail("b\"\r\""); // bare carriage return in byte string
-+ fail("r\"\r\""); // bare carriage return in raw string
-+ fail("\"\\\r \""); // backslash carriage return
-+ fail("'aa'aa");
-+ fail("br##\"\"#");
-+ fail("\"\\\n\u{85}\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::<TokenStream>().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
-@@ -274,53 +289,11 @@ fn span_join() {
- #[test]
- fn no_panic() {
- let s = str::from_utf8(b"b\'\xc2\x86 \x00\x00\x00^\"").unwrap();
-- assert!(s.parse::<proc_macro2::TokenStream>().is_err());
-+ assert!(s.parse::<TokenStream>().is_err());
- }
-
- #[test]
--fn tricky_doc_comment() {
-- let stream = "/**/".parse::<proc_macro2::TokenStream>().unwrap();
-- let tokens = stream.into_iter().collect::<Vec<_>>();
-- assert!(tokens.is_empty(), "not empty -- {:?}", tokens);
--
-- let stream = "/// doc".parse::<proc_macro2::TokenStream>().unwrap();
-- let tokens = stream.into_iter().collect::<Vec<_>>();
-- 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::<proc_macro2::TokenStream>().unwrap();
-- let tokens = stream.into_iter().collect::<Vec<_>>();
-- assert!(tokens.len() == 3, "not length 3 -- {:?}", tokens);
--}
--
--#[test]
--fn op_before_comment() {
-+fn punct_before_comment() {
- let mut tts = TokenStream::from_str("~// comment").unwrap().into_iter();
- match tts.next().unwrap() {
- TokenTree::Punct(tt) => {
-@@ -331,6 +304,22 @@ fn op_before_comment() {
- }
- }
-
-+#[test]
-+fn joint_last_token() {
-+ // This test verifies that we match the behavior of libproc_macro *not* in
-+ // the range nightly-2020-09-06 through nightly-2020-09-10, in which this
-+ // behavior was temporarily broken.
-+ // See https://github.com/rust-lang/rust/issues/76399
-+
-+ let joint_punct = Punct::new(':', Spacing::Joint);
-+ let stream = TokenStream::from(TokenTree::Punct(joint_punct));
-+ let punct = match stream.into_iter().next().unwrap() {
-+ TokenTree::Punct(punct) => punct,
-+ _ => unreachable!(),
-+ };
-+ assert_eq!(punct.spacing(), Spacing::Joint);
-+}
-+
- #[test]
- fn raw_identifier() {
- let mut tts = TokenStream::from_str("r#dyn").unwrap().into_iter();
-@@ -345,11 +334,11 @@ fn raw_identifier() {
- 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));
- }
-@@ -358,7 +347,7 @@ fn test_debug_ident() {
- 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 {
-@@ -368,7 +357,7 @@ TokenStream [
- sym: a,
- },
- Punct {
-- op: '+',
-+ char: '+',
- spacing: Alone,
- },
- Literal {
-@@ -379,7 +368,7 @@ TokenStream [
- ]\
- ";
-
-- #[cfg(not(procmacro2_semver_exempt))]
-+ #[cfg(not(span_locations))]
- let expected_before_trailing_commas = "\
- TokenStream [
- Group {
-@@ -389,7 +378,7 @@ TokenStream [
- sym: a
- },
- Punct {
-- op: '+',
-+ char: '+',
- spacing: Alone
- },
- Literal {
-@@ -400,7 +389,7 @@ TokenStream [
- ]\
- ";
-
-- #[cfg(procmacro2_semver_exempt)]
-+ #[cfg(span_locations)]
- let expected = "\
- TokenStream [
- Group {
-@@ -411,7 +400,7 @@ TokenStream [
- span: bytes(2..3),
- },
- Punct {
-- op: '+',
-+ char: '+',
- spacing: Alone,
- span: bytes(4..5),
- },
-@@ -425,7 +414,7 @@ TokenStream [
- ]\
- ";
-
-- #[cfg(procmacro2_semver_exempt)]
-+ #[cfg(span_locations)]
- let expected_before_trailing_commas = "\
- TokenStream [
- Group {
-@@ -436,7 +425,7 @@ TokenStream [
- span: bytes(2..3)
- },
- Punct {
-- op: '+',
-+ char: '+',
- spacing: Alone,
- span: bytes(4..5)
- },
-@@ -464,3 +453,80 @@ fn default_tokenstream_is_empty() {
-
- 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::<TokenStream>().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::<TokenStream>().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
-index 0000000000..99a0aee5c8
---- /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/spirv-cross-internal/.cargo-checksum.json b/third_party/rust/spirv-cross-internal/.cargo-checksum.json
-index 3c732d6d0e..014aa640e1 100644
---- a/third_party/rust/spirv-cross-internal/.cargo-checksum.json
-+++ b/third_party/rust/spirv-cross-internal/.cargo-checksum.json
-@@ -1 +1 @@
--{"files":{"Cargo.toml":"32644850d6dd8a8496fcf2dd0327dfc18a41f87bbd5f0922e174a905babde20d","build.rs":"68d1e7d99b4d890e21606aa7e7904d4f9b8caed6c0951bb8f5028745a7103d1e","src/bindings_native.rs":"6aa4e3a3bd73a638b3282405c0eaf2565ff8f364919c509f94f79e326679b03e","src/bindings_wasm.rs":"331d19691566beb163fc459d630e9830167cc86ec8cacde6be53fb0a7ca2b1be","src/bindings_wasm_functions.rs":"2515dd91e98e769fe282e7dc4f60820f4be7365c784a9f3bd17310d18a136da8","src/compiler.rs":"a53c7e0136ea3deddbfaf158295daca36623a0e244426b7c04d2856922d91c73","src/emscripten.rs":"3169890001970610013026468739910afca0d85e00d7e34beadfdd31bbcbeeb7","src/glsl.rs":"7ca1f6a11db8e7926a813fb91298dac1c0e2f90fe5426cc985cde7d8f36c05c9","src/hlsl.rs":"3734ad89a4f51647ebeb761753cb324a48ebca724970201e7598a3763d094d73","src/lib.rs":"cc41cbbe48f3e96791ba5338c66fa1fe0e533eaed6bbdced3f008d5e9fe6c6ce","src/msl.rs":"5505d1d626d8e7903ffa9d137e7392a1670fa7b574eacc4bbd33673937b36ea7","src/ptr_util.rs":"280404beede469b2c9ae40536323515a9213dac5d30014fac870a23b37672442","src/spirv.rs":"8a2cbe6b554bb6312f2aede0469338ace21e79720b5128c653e7a68c0e161277","src/vendor/SPIRV-Cross/.clang-format":"9ec4314e20afecad827a2dbd4832256be8464e88aab4a53fab45173ed129b2ed","src/vendor/SPIRV-Cross/.gitignore":"7f23cc92ddb5e1f584447e98d3e8ab6543fc182f1543f0f6ec29856f9250cdd6","src/vendor/SPIRV-Cross/.travis.yml":"abcc1b2f622b65feafd3e37a2b5e867fce3cf7211cae9fb2bf92a6de79100be4","src/vendor/SPIRV-Cross/CMakeLists.txt":"0972ab271e1eecdfe41ae0a85bf14ce7fe142b7609f8d2965b2c94f92c63b6aa","src/vendor/SPIRV-Cross/CODE_OF_CONDUCT.md":"a25e58cd66a9543e1500db9a5c3c027e874893ad1a264530bf26eb10918b5d80","src/vendor/SPIRV-Cross/GLSL.std.450.h":"20f32378793c5f416bc0704f44345c2a14c99cba3f411e3beaf1bcea372d58ba","src/vendor/SPIRV-Cross/LICENSE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","src/vendor/SPIRV-Cross/Makefile":"e2255d32e47d447b100ce3cd0753d0758dc26460e0440d14cc157d4caf9b62f1","src/vendor/SPIRV-Cross/README.md":"b944fc5b1de709089fc3cae0dba09186ce2e43b64de6dcae1423ba1c139ee395","src/vendor/SPIRV-Cross/appveyor.yml":"0f18b8ae5fadc027a20f69307fc32e56a97edfbdcb55ac392852308f88545a04","src/vendor/SPIRV-Cross/include/spirv_cross/barrier.hpp":"bb796625e89f75e239e92f9a61597d421ffe5fb1902d200691ebe95cf856a1f8","src/vendor/SPIRV-Cross/include/spirv_cross/external_interface.h":"cdceda962d87133e44989510edc944e99052d713869b406a8b6b2d54e3d02dd7","src/vendor/SPIRV-Cross/include/spirv_cross/image.hpp":"681d0964b144c5009424196a8bc832cb81cfe5df5b91c2f3e1bfb625765a0c50","src/vendor/SPIRV-Cross/include/spirv_cross/internal_interface.hpp":"ab8851e5708b944a9bf340ce17297d94bef4876d30c833ea83d44b16f60726f6","src/vendor/SPIRV-Cross/include/spirv_cross/sampler.hpp":"b0b1bd4796b4315e826985c224ea5fa7d5bc823fcd6091f7527a5e18d9ae42fb","src/vendor/SPIRV-Cross/include/spirv_cross/thread_group.hpp":"70d9e0400f62de71d3775972eadc196ddb218254fa8155e8e33daf8d99957cc0","src/vendor/SPIRV-Cross/main.cpp":"ab2835f6dff9299f562a89755893f98a4bd946d4460abca885ba2172ebce851c","src/vendor/SPIRV-Cross/pkg-config/spirv-cross-c-shared.pc.in":"75a27e069ee07362bc6b7412b2c4e1270778dd639a8b96b8afbb113d21de79e7","src/vendor/SPIRV-Cross/spirv.h":"2c19cd1d262a3757e92276fbaa8e1a706b2328a92f47bda88f849b5cebebb630","src/vendor/SPIRV-Cross/spirv.hpp":"eb7c39a017f0a33e9d9bae7556c678c2840af4cc0beb98b2aeff9d651e370128","src/vendor/SPIRV-Cross/spirv_cfg.cpp":"09b756068d95a87a65a186831484fe21a973d3eb19675225b23864b9d37fe3d0","src/vendor/SPIRV-Cross/spirv_cfg.hpp":"ad98c4e82d6da3ed450dfc7939814115ae6b29ba2a25b0148cfc8c88774055b5","src/vendor/SPIRV-Cross/spirv_common.hpp":"5d0658a6fe9ac2f628754d2439b4d26ec8df7e50e4b196567cd4c7e7b8ce7574","src/vendor/SPIRV-Cross/spirv_cpp.cpp":"d067269ec6fc56860b4ed39edddf0a127f5e2d091512a85a79f02d5f3beccd19","src/vendor/SPIRV-Cross/spirv_cpp.hpp":"751ce82c70a399781f18aca54ea7fbb98083b98706f2a6be1cd1aa90627ef597","src/vendor/SPIRV-Cross/spirv_cross.cpp":"225b4cf4c7f8868019680d0a75a3da7983db428783ee1a3dcbb8c2765a71e79a","src/vendor/SPIRV-Cross/spirv_cross.hpp":"7eab2d7ae4b25a3c4fe85631e664727e036ae23a776aeb8c17db23f08020258a","src/vendor/SPIRV-Cross/spirv_cross_c.cpp":"80f438f4700f0b0b02547771f82be0610ba5e24ba3edb56d4331d59a206a4c2e","src/vendor/SPIRV-Cross/spirv_cross_c.h":"8b0ad63ed9fe52bc62f305afa27b5e33d9bd689a8b3f9935353742faf88a1e91","src/vendor/SPIRV-Cross/spirv_cross_containers.hpp":"409f60a5cb1dba1d0c96ef61761d8643402fc5ab67cecce12f6af3d135cfa338","src/vendor/SPIRV-Cross/spirv_cross_error_handling.hpp":"45868796346eef895cc05825582e60d26c34ec35d1a2b97f5e172f05fc565b19","src/vendor/SPIRV-Cross/spirv_cross_parsed_ir.cpp":"7c7e08db4dfc1084fd9cd266a6f829d35a6b2856198b16307a44f4d1c0743106","src/vendor/SPIRV-Cross/spirv_cross_parsed_ir.hpp":"d15446565eaa430bf2b14b596b3e579a72095a386b1eb256afc977cdf42ec5b9","src/vendor/SPIRV-Cross/spirv_cross_util.cpp":"f2426dccad2fff44053f6b1b9558719471a1ba0445c317f2c0311bc0d8b4636d","src/vendor/SPIRV-Cross/spirv_cross_util.hpp":"63ca5b2d6c80b5ad39473d6841676e48d5db3d2cbcb252fe6a6db0ef2077f0f5","src/vendor/SPIRV-Cross/spirv_glsl.cpp":"c1704189895442d593819472d3f852979107ac1798375d5a44d8f97be17fa3b5","src/vendor/SPIRV-Cross/spirv_glsl.hpp":"fb5e00ff589e3c5a25c5a15e78cf4809b753ebe04c84a008dc977330b8cbbc27","src/vendor/SPIRV-Cross/spirv_hlsl.cpp":"549ff42d0773a3f9e555d1aebd4c0084709e11528082f47c5f2b8b07de029f7c","src/vendor/SPIRV-Cross/spirv_hlsl.hpp":"18f303e7a384acf0e14677b579b100aee838813f54735330f0d1387f2493b363","src/vendor/SPIRV-Cross/spirv_msl.cpp":"7266afeb827e50782cb35362788d27fa9bd641992380008604ea1a4e48ec9c37","src/vendor/SPIRV-Cross/spirv_msl.hpp":"76b609e0b8d2f421c51e98d6357fcf44666b0d510935e083e4e02f20a80051e1","src/vendor/SPIRV-Cross/spirv_parser.cpp":"4def4db8c77967dcd2d6d93330343dc6ebb309e8cd696f52ee568a7c3ee97036","src/vendor/SPIRV-Cross/spirv_parser.hpp":"fc5f92184d1b4986f78088bee8ed7ddb9b342a34f9a3e55a4a594187292b66b8","src/vendor/SPIRV-Cross/spirv_reflect.cpp":"995a4e4315f67d4a2084e2b5d982de9baf72c7e265dde71d03ae0b8a29a24b92","src/vendor/SPIRV-Cross/spirv_reflect.hpp":"a874b40be0b210c69718e87a90e9add24653957656a995d83656f0918cfd10e4","src/wrapper.cpp":"7800cec5564dc1c7c13059cb1b1cac8d9be9248bbc887d5176600980c0d18142","src/wrapper.hpp":"b9a4f846bf57ee7a10fbb81f8f49df96ad11b1e5749c3c510925bb9b029ac08a","tests/common/mod.rs":"2843bf104c7938d93065f7b5688c9f063ad9e5720c407c737aedc5f2dee5a80f","tests/glsl_tests.rs":"ddd85107370dbfcde9d004d6717e229a7278d29ecba375828d8cb79e86625f66","tests/hlsl_tests.rs":"2058cb590c5ab85a636c93c18d0f2a79eb5ea5e647b7f10a2c83fbf394964dd6","tests/msl_tests.rs":"211d3b9cb43455a4c55bd619c05acdd21953358580c50ae75cac3f06eb26c5dd","tests/shaders/array.vert":"d0dab7ddea131e069961054f40a164602448aa78720b7ff480e141d1f7b0b2d6","tests/shaders/array.vert.spv":"8e44421590ade1716be66ad39f60fb1ce58eedeab8f0806335a7369687b308b1","tests/shaders/multiple_entry_points.cl":"2abbe57f2387f07f7f5f4cd375e47900be9c13bdc79aa0ed98a43a798cb0df81","tests/shaders/multiple_entry_points.cl.spv":"bdd34ce6765dbeab637631c3cbdf251532870d9fd6cd6c54883c0c872058ab3b","tests/shaders/rasterize_disabled.vert":"da6de172549830216933c44edf18b13113d7ca87462e3d09ad50dfc9c9836821","tests/shaders/rasterize_disabled.vert.spv":"2ba809eb500ed6e5a067389ccc056551e796e7019517593d110fb62c9dca2056","tests/shaders/sampler.frag":"4c568e65176afe596dd8ef279485e992607e94d612786214ae1c6702d0322e1f","tests/shaders/sampler.frag.spv":"bd7bd1973a82dcfdf5755361fa4dd420fdf1c32c5de0a6f0896a8d5971f98684","tests/shaders/simple.vert":"ea143c97dff5ef03728b96b2dd893bdc59d56651581ecf9fe50f10807b0efdd0","tests/shaders/simple.vert.spv":"a2b5094ffd76288e0d08c37ce0351e28f20bb6d80ddd73fc44a71c1c7cbbf7db","tests/shaders/specialization.comp":"ce32fa1615737209f2e465ea347d79030ddcb33a88c38447e7cde7dffc920163","tests/shaders/specialization.comp.spv":"848604e37b870b8999692b266677be2ce0df6ce38093a0d81e6bc43d0bdf8a3f","tests/shaders/struct.frag":"d8840bb1961d6f14609b00ee54406c1e3ea31cecd8231b77cfb73d28b71910c0","tests/shaders/struct.frag.spv":"774aa886374eb95abf9bb7d0045ee77d97e26529e9ec96b90991a515fdbca4be","tests/shaders/struct.vert":"9299cda83ddb5b5c3d95ab0d057e4df2af137dfd92d6c4d3e96295b7d42e29a1","tests/shaders/struct.vert.spv":"4a82bdee72616ac058bc60d4255efa3e78199a2b8597570c013bebbee7107fb7","tests/shaders/two_ubo.vert":"be109b2c65e5e9e1bb0dab968d7f651232f6b1c46935a3928f980bf7a40f2d62","tests/shaders/two_ubo.vert.spv":"efd14e2d0a782d61dd944711f30b9e7fcb14af17593c1fe4e11cf2b7e232bcc2","tests/shaders/workgroup.comp":"478044b5392e0d1fb042253d71ea6bf7b8a014af4a6ee35d8db4c5343ac69739","tests/shaders/workgroup.comp.spv":"72f636fe3d1d6d0c5963f71bf4349c7e40d544331b33b6b64fb5b65784e6abee","tests/spirv_tests.rs":"6de5c893f631d550fc86853537bddb824ffb534a0a7f130406be3b9ed166f198"},"package":null}
-\ No newline at end of file
-+{"files":{"Cargo.toml":"32644850d6dd8a8496fcf2dd0327dfc18a41f87bbd5f0922e174a905babde20d","build.rs":"68d1e7d99b4d890e21606aa7e7904d4f9b8caed6c0951bb8f5028745a7103d1e","src/bindings_native.rs":"6aa4e3a3bd73a638b3282405c0eaf2565ff8f364919c509f94f79e326679b03e","src/bindings_wasm.rs":"331d19691566beb163fc459d630e9830167cc86ec8cacde6be53fb0a7ca2b1be","src/bindings_wasm_functions.rs":"2515dd91e98e769fe282e7dc4f60820f4be7365c784a9f3bd17310d18a136da8","src/compiler.rs":"a53c7e0136ea3deddbfaf158295daca36623a0e244426b7c04d2856922d91c73","src/emscripten.rs":"3169890001970610013026468739910afca0d85e00d7e34beadfdd31bbcbeeb7","src/glsl.rs":"7ca1f6a11db8e7926a813fb91298dac1c0e2f90fe5426cc985cde7d8f36c05c9","src/hlsl.rs":"3734ad89a4f51647ebeb761753cb324a48ebca724970201e7598a3763d094d73","src/lib.rs":"cc41cbbe48f3e96791ba5338c66fa1fe0e533eaed6bbdced3f008d5e9fe6c6ce","src/msl.rs":"5505d1d626d8e7903ffa9d137e7392a1670fa7b574eacc4bbd33673937b36ea7","src/ptr_util.rs":"280404beede469b2c9ae40536323515a9213dac5d30014fac870a23b37672442","src/spirv.rs":"8a2cbe6b554bb6312f2aede0469338ace21e79720b5128c653e7a68c0e161277","src/vendor/SPIRV-Cross/.clang-format":"9ec4314e20afecad827a2dbd4832256be8464e88aab4a53fab45173ed129b2ed","src/vendor/SPIRV-Cross/.travis.yml":"abcc1b2f622b65feafd3e37a2b5e867fce3cf7211cae9fb2bf92a6de79100be4","src/vendor/SPIRV-Cross/CMakeLists.txt":"0972ab271e1eecdfe41ae0a85bf14ce7fe142b7609f8d2965b2c94f92c63b6aa","src/vendor/SPIRV-Cross/CODE_OF_CONDUCT.md":"a25e58cd66a9543e1500db9a5c3c027e874893ad1a264530bf26eb10918b5d80","src/vendor/SPIRV-Cross/GLSL.std.450.h":"20f32378793c5f416bc0704f44345c2a14c99cba3f411e3beaf1bcea372d58ba","src/vendor/SPIRV-Cross/LICENSE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","src/vendor/SPIRV-Cross/Makefile":"e2255d32e47d447b100ce3cd0753d0758dc26460e0440d14cc157d4caf9b62f1","src/vendor/SPIRV-Cross/README.md":"b944fc5b1de709089fc3cae0dba09186ce2e43b64de6dcae1423ba1c139ee395","src/vendor/SPIRV-Cross/appveyor.yml":"0f18b8ae5fadc027a20f69307fc32e56a97edfbdcb55ac392852308f88545a04","src/vendor/SPIRV-Cross/include/spirv_cross/barrier.hpp":"bb796625e89f75e239e92f9a61597d421ffe5fb1902d200691ebe95cf856a1f8","src/vendor/SPIRV-Cross/include/spirv_cross/external_interface.h":"cdceda962d87133e44989510edc944e99052d713869b406a8b6b2d54e3d02dd7","src/vendor/SPIRV-Cross/include/spirv_cross/image.hpp":"681d0964b144c5009424196a8bc832cb81cfe5df5b91c2f3e1bfb625765a0c50","src/vendor/SPIRV-Cross/include/spirv_cross/internal_interface.hpp":"ab8851e5708b944a9bf340ce17297d94bef4876d30c833ea83d44b16f60726f6","src/vendor/SPIRV-Cross/include/spirv_cross/sampler.hpp":"b0b1bd4796b4315e826985c224ea5fa7d5bc823fcd6091f7527a5e18d9ae42fb","src/vendor/SPIRV-Cross/include/spirv_cross/thread_group.hpp":"70d9e0400f62de71d3775972eadc196ddb218254fa8155e8e33daf8d99957cc0","src/vendor/SPIRV-Cross/main.cpp":"ab2835f6dff9299f562a89755893f98a4bd946d4460abca885ba2172ebce851c","src/vendor/SPIRV-Cross/pkg-config/spirv-cross-c-shared.pc.in":"75a27e069ee07362bc6b7412b2c4e1270778dd639a8b96b8afbb113d21de79e7","src/vendor/SPIRV-Cross/spirv.h":"2c19cd1d262a3757e92276fbaa8e1a706b2328a92f47bda88f849b5cebebb630","src/vendor/SPIRV-Cross/spirv.hpp":"eb7c39a017f0a33e9d9bae7556c678c2840af4cc0beb98b2aeff9d651e370128","src/vendor/SPIRV-Cross/spirv_cfg.cpp":"09b756068d95a87a65a186831484fe21a973d3eb19675225b23864b9d37fe3d0","src/vendor/SPIRV-Cross/spirv_cfg.hpp":"ad98c4e82d6da3ed450dfc7939814115ae6b29ba2a25b0148cfc8c88774055b5","src/vendor/SPIRV-Cross/spirv_common.hpp":"5d0658a6fe9ac2f628754d2439b4d26ec8df7e50e4b196567cd4c7e7b8ce7574","src/vendor/SPIRV-Cross/spirv_cpp.cpp":"d067269ec6fc56860b4ed39edddf0a127f5e2d091512a85a79f02d5f3beccd19","src/vendor/SPIRV-Cross/spirv_cpp.hpp":"751ce82c70a399781f18aca54ea7fbb98083b98706f2a6be1cd1aa90627ef597","src/vendor/SPIRV-Cross/spirv_cross.cpp":"225b4cf4c7f8868019680d0a75a3da7983db428783ee1a3dcbb8c2765a71e79a","src/vendor/SPIRV-Cross/spirv_cross.hpp":"7eab2d7ae4b25a3c4fe85631e664727e036ae23a776aeb8c17db23f08020258a","src/vendor/SPIRV-Cross/spirv_cross_c.cpp":"80f438f4700f0b0b02547771f82be0610ba5e24ba3edb56d4331d59a206a4c2e","src/vendor/SPIRV-Cross/spirv_cross_c.h":"8b0ad63ed9fe52bc62f305afa27b5e33d9bd689a8b3f9935353742faf88a1e91","src/vendor/SPIRV-Cross/spirv_cross_containers.hpp":"409f60a5cb1dba1d0c96ef61761d8643402fc5ab67cecce12f6af3d135cfa338","src/vendor/SPIRV-Cross/spirv_cross_error_handling.hpp":"45868796346eef895cc05825582e60d26c34ec35d1a2b97f5e172f05fc565b19","src/vendor/SPIRV-Cross/spirv_cross_parsed_ir.cpp":"7c7e08db4dfc1084fd9cd266a6f829d35a6b2856198b16307a44f4d1c0743106","src/vendor/SPIRV-Cross/spirv_cross_parsed_ir.hpp":"d15446565eaa430bf2b14b596b3e579a72095a386b1eb256afc977cdf42ec5b9","src/vendor/SPIRV-Cross/spirv_cross_util.cpp":"f2426dccad2fff44053f6b1b9558719471a1ba0445c317f2c0311bc0d8b4636d","src/vendor/SPIRV-Cross/spirv_cross_util.hpp":"63ca5b2d6c80b5ad39473d6841676e48d5db3d2cbcb252fe6a6db0ef2077f0f5","src/vendor/SPIRV-Cross/spirv_glsl.cpp":"c1704189895442d593819472d3f852979107ac1798375d5a44d8f97be17fa3b5","src/vendor/SPIRV-Cross/spirv_glsl.hpp":"fb5e00ff589e3c5a25c5a15e78cf4809b753ebe04c84a008dc977330b8cbbc27","src/vendor/SPIRV-Cross/spirv_hlsl.cpp":"549ff42d0773a3f9e555d1aebd4c0084709e11528082f47c5f2b8b07de029f7c","src/vendor/SPIRV-Cross/spirv_hlsl.hpp":"18f303e7a384acf0e14677b579b100aee838813f54735330f0d1387f2493b363","src/vendor/SPIRV-Cross/spirv_msl.cpp":"7266afeb827e50782cb35362788d27fa9bd641992380008604ea1a4e48ec9c37","src/vendor/SPIRV-Cross/spirv_msl.hpp":"76b609e0b8d2f421c51e98d6357fcf44666b0d510935e083e4e02f20a80051e1","src/vendor/SPIRV-Cross/spirv_parser.cpp":"4def4db8c77967dcd2d6d93330343dc6ebb309e8cd696f52ee568a7c3ee97036","src/vendor/SPIRV-Cross/spirv_parser.hpp":"fc5f92184d1b4986f78088bee8ed7ddb9b342a34f9a3e55a4a594187292b66b8","src/vendor/SPIRV-Cross/spirv_reflect.cpp":"995a4e4315f67d4a2084e2b5d982de9baf72c7e265dde71d03ae0b8a29a24b92","src/vendor/SPIRV-Cross/spirv_reflect.hpp":"a874b40be0b210c69718e87a90e9add24653957656a995d83656f0918cfd10e4","src/wrapper.cpp":"7800cec5564dc1c7c13059cb1b1cac8d9be9248bbc887d5176600980c0d18142","src/wrapper.hpp":"b9a4f846bf57ee7a10fbb81f8f49df96ad11b1e5749c3c510925bb9b029ac08a","tests/common/mod.rs":"2843bf104c7938d93065f7b5688c9f063ad9e5720c407c737aedc5f2dee5a80f","tests/glsl_tests.rs":"ddd85107370dbfcde9d004d6717e229a7278d29ecba375828d8cb79e86625f66","tests/hlsl_tests.rs":"2058cb590c5ab85a636c93c18d0f2a79eb5ea5e647b7f10a2c83fbf394964dd6","tests/msl_tests.rs":"211d3b9cb43455a4c55bd619c05acdd21953358580c50ae75cac3f06eb26c5dd","tests/shaders/array.vert":"d0dab7ddea131e069961054f40a164602448aa78720b7ff480e141d1f7b0b2d6","tests/shaders/array.vert.spv":"8e44421590ade1716be66ad39f60fb1ce58eedeab8f0806335a7369687b308b1","tests/shaders/multiple_entry_points.cl":"2abbe57f2387f07f7f5f4cd375e47900be9c13bdc79aa0ed98a43a798cb0df81","tests/shaders/multiple_entry_points.cl.spv":"bdd34ce6765dbeab637631c3cbdf251532870d9fd6cd6c54883c0c872058ab3b","tests/shaders/rasterize_disabled.vert":"da6de172549830216933c44edf18b13113d7ca87462e3d09ad50dfc9c9836821","tests/shaders/rasterize_disabled.vert.spv":"2ba809eb500ed6e5a067389ccc056551e796e7019517593d110fb62c9dca2056","tests/shaders/sampler.frag":"4c568e65176afe596dd8ef279485e992607e94d612786214ae1c6702d0322e1f","tests/shaders/sampler.frag.spv":"bd7bd1973a82dcfdf5755361fa4dd420fdf1c32c5de0a6f0896a8d5971f98684","tests/shaders/simple.vert":"ea143c97dff5ef03728b96b2dd893bdc59d56651581ecf9fe50f10807b0efdd0","tests/shaders/simple.vert.spv":"a2b5094ffd76288e0d08c37ce0351e28f20bb6d80ddd73fc44a71c1c7cbbf7db","tests/shaders/specialization.comp":"ce32fa1615737209f2e465ea347d79030ddcb33a88c38447e7cde7dffc920163","tests/shaders/specialization.comp.spv":"848604e37b870b8999692b266677be2ce0df6ce38093a0d81e6bc43d0bdf8a3f","tests/shaders/struct.frag":"d8840bb1961d6f14609b00ee54406c1e3ea31cecd8231b77cfb73d28b71910c0","tests/shaders/struct.frag.spv":"774aa886374eb95abf9bb7d0045ee77d97e26529e9ec96b90991a515fdbca4be","tests/shaders/struct.vert":"9299cda83ddb5b5c3d95ab0d057e4df2af137dfd92d6c4d3e96295b7d42e29a1","tests/shaders/struct.vert.spv":"4a82bdee72616ac058bc60d4255efa3e78199a2b8597570c013bebbee7107fb7","tests/shaders/two_ubo.vert":"be109b2c65e5e9e1bb0dab968d7f651232f6b1c46935a3928f980bf7a40f2d62","tests/shaders/two_ubo.vert.spv":"efd14e2d0a782d61dd944711f30b9e7fcb14af17593c1fe4e11cf2b7e232bcc2","tests/shaders/workgroup.comp":"478044b5392e0d1fb042253d71ea6bf7b8a014af4a6ee35d8db4c5343ac69739","tests/shaders/workgroup.comp.spv":"72f636fe3d1d6d0c5963f71bf4349c7e40d544331b33b6b64fb5b65784e6abee","tests/spirv_tests.rs":"6de5c893f631d550fc86853537bddb824ffb534a0a7f130406be3b9ed166f198"},"package":null}
-\ No newline at end of file
-diff --git a/third_party/rust/syn/.cargo-checksum.json b/third_party/rust/syn/.cargo-checksum.json
-index 77939d8fc6..704f2ed200 100644
---- a/third_party/rust/syn/.cargo-checksum.json
-+++ b/third_party/rust/syn/.cargo-checksum.json
-@@ -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/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
-index 7a5c962f06..20277fc461 100644
---- a/third_party/rust/syn/Cargo.toml
-+++ b/third_party/rust/syn/Cargo.toml
-@@ -13,7 +13,7 @@
- [package]
- edition = "2018"
- name = "syn"
--version = "1.0.5"
-+version = "1.0.40"
- authors = ["David Tolnay <dtolnay@gmail.com>"]
- include = ["/benches/**", "/build.rs", "/Cargo.toml", "/LICENSE-APACHE", "/LICENSE-MIT", "/README.md", "/src/**", "/tests/**"]
- description = "Parser for Rust source code"
-@@ -24,25 +24,21 @@ 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]
-@@ -52,18 +48,34 @@ 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"
-
-@@ -80,7 +92,6 @@ 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
-index 29a7f32a46..12b5f45b3d 100644
---- a/third_party/rust/syn/README.md
-+++ b/third_party/rust/syn/README.md
-@@ -1,10 +1,10 @@
- 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)
-+[<img alt="github" src="https://img.shields.io/badge/github-dtolnay/syn-8da0cb?style=for-the-badge&labelColor=555555&logo=github" height="20">](https://github.com/dtolnay/syn)
-+[<img alt="crates.io" src="https://img.shields.io/crates/v/syn.svg?style=for-the-badge&color=fc8d62&logo=rust" height="20">](https://crates.io/crates/syn)
-+[<img alt="docs.rs" src="https://img.shields.io/badge/docs.rs-syn-66c2a5?style=for-the-badge&labelColor=555555&logoColor=white&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K" height="20">](https://docs.rs/syn)
-+[<img alt="build status" src="https://img.shields.io/github/workflow/status/dtolnay/syn/CI/master?style=for-the-badge" height="20">](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.
-@@ -46,10 +46,6 @@ contains some APIs that may be useful more generally.
- [`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)
-@@ -88,8 +84,6 @@ proc-macro = true
- ```
-
- ```rust
--extern crate proc_macro;
--
- use proc_macro::TokenStream;
- use quote::quote;
- use syn::{parse_macro_input, DeriveInput};
-@@ -271,7 +265,7 @@ 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/
-
- <br>
-
-diff --git a/third_party/rust/syn/benches/file.rs b/third_party/rust/syn/benches/file.rs
-index 08ecd90960..58ab8df297 100644
---- a/third_party/rust/syn/benches/file.rs
-+++ b/third_party/rust/syn/benches/file.rs
-@@ -1,9 +1,16 @@
- // $ 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;
-
-diff --git a/third_party/rust/syn/benches/rust.rs b/third_party/rust/syn/benches/rust.rs
-index e3d9cd29ba..50e1a7f601 100644
---- a/third_party/rust/syn/benches/rust.rs
-+++ b/third_party/rust/syn/benches/rust.rs
-@@ -4,7 +4,14 @@
- // $ 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;
-
-@@ -28,31 +35,35 @@ mod syn_parse {
- }
-
- #[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<SourceMap>> {
-+ 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,
-@@ -104,11 +115,11 @@ 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<(), ()>),
- )*
- ]
- };
-@@ -128,12 +139,12 @@ fn main() {
-
- 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);
-diff --git a/third_party/rust/syn/build.rs b/third_party/rust/syn/build.rs
-index c0f9ed3406..cf7681c3f9 100644
---- a/third_party/rust/syn/build.rs
-+++ b/third_party/rust/syn/build.rs
-@@ -1,6 +1,6 @@
- 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
-@@ -26,38 +26,14 @@ struct Compiler {
- }
-
- fn rustc_version() -> Option<Compiler> {
-- 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
-index 34009deabc..fa4f1cb2a3 100644
---- a/third_party/rust/syn/src/attr.rs
-+++ b/third_party/rust/syn/src/attr.rs
-@@ -9,15 +9,11 @@ use proc_macro2::TokenStream;
- 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.*
- ///
- /// <br>
-@@ -111,7 +107,46 @@ ast_struct! {
- ///
- /// [`parse_meta()`]: Attribute::parse_meta
- /// [`parse_args()`]: Attribute::parse_args
-- pub struct Attribute #manual_extra_traits {
-+ ///
-+ /// <p><br></p>
-+ ///
-+ /// # 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,
-@@ -120,39 +155,11 @@ ast_struct! {
- }
- }
-
--#[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<H>(&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<Meta> {
-@@ -199,7 +206,7 @@ impl Attribute {
- /// ^^^^^^^^^ 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<T: Parse>(&self) -> Result<T> {
-@@ -208,7 +215,7 @@ impl Attribute {
-
- /// 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<F: Parser>(&self, parser: F) -> Result<F::Output> {
-@@ -221,7 +228,7 @@ impl Attribute {
-
- /// 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<Vec<Self>> {
-@@ -234,7 +241,7 @@ impl Attribute {
-
- /// 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<Vec<Self>> {
-@@ -247,7 +254,7 @@ impl Attribute {
- }
-
- #[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(_) => "#!",
-@@ -261,19 +268,23 @@ fn error_expected_args(attr: &Attribute) -> Error {
- 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<ParseBuffer<'a>> {
- 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;
-@@ -298,7 +309,7 @@ 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
-@@ -312,7 +323,6 @@ ast_enum! {
- /// - `#![feature(proc_macro)]`
- /// - `//! # Example`
- /// - `/*! Please file an issue */`
-- #[cfg_attr(feature = "clone-impls", derive(Copy))]
- pub enum AttrStyle {
- Outer,
- Inner(Token![!]),
-@@ -322,7 +332,7 @@ ast_enum! {
- 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
-@@ -360,7 +370,7 @@ ast_enum_of_structs! {
- 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,
-@@ -372,7 +382,7 @@ ast_struct! {
- 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,
-@@ -398,7 +408,7 @@ impl Meta {
- 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
-@@ -429,8 +439,8 @@ ast_enum_of_structs! {
- /// as type `AttributeArgs`.
- ///
- /// ```
--/// extern crate proc_macro;
--///
-+/// # extern crate proc_macro;
-+/// #
- /// use proc_macro::TokenStream;
- /// use syn::{parse_macro_input, AttributeArgs, ItemFn};
- ///
-@@ -464,7 +474,7 @@ where
- fn is_outer(attr: &&Attribute) -> bool {
- match attr.style {
- AttrStyle::Outer => true,
-- _ => false,
-+ AttrStyle::Inner(_) => false,
- }
- }
- self.into_iter().filter(is_outer)
-@@ -474,7 +484,7 @@ where
- fn is_inner(attr: &&Attribute) -> bool {
- match attr.style {
- AttrStyle::Inner(_) => true,
-- _ => false,
-+ AttrStyle::Outer => false,
- }
- }
- self.into_iter().filter(is_inner)
-diff --git a/third_party/rust/syn/src/buffer.rs b/third_party/rust/syn/src/buffer.rs
-index 551a5ac816..a461cc49ea 100644
---- a/third_party/rust/syn/src/buffer.rs
-+++ b/third_party/rust/syn/src/buffer.rs
-@@ -1,7 +1,7 @@
- //! 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
-@@ -36,7 +36,7 @@ enum Entry {
- /// `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
-@@ -98,7 +98,7 @@ impl TokenBuffer {
- /// 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"))),
-@@ -133,8 +133,7 @@ impl TokenBuffer {
- /// 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,
-@@ -201,13 +200,13 @@ impl<'a> 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
-@@ -215,13 +214,14 @@ impl<'a> Cursor<'a> {
- 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
-@@ -342,6 +342,44 @@ impl<'a> Cursor<'a> {
- 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<Cursor<'a>> {
-+ 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 {
-diff --git a/third_party/rust/syn/src/custom_keyword.rs b/third_party/rust/syn/src/custom_keyword.rs
-index 200e8478ef..a33044a564 100644
---- a/third_party/rust/syn/src/custom_keyword.rs
-+++ b/third_party/rust/syn/src/custom_keyword.rs
-@@ -86,7 +86,7 @@
- /// }
- /// }
- /// ```
--#[macro_export(local_inner_macros)]
-+#[macro_export]
- macro_rules! custom_keyword {
- ($ident:ident) => {
- #[allow(non_camel_case_types)]
-@@ -95,7 +95,7 @@ macro_rules! custom_keyword {
- }
-
- #[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 {
-@@ -112,10 +112,10 @@ macro_rules! custom_keyword {
- }
- }
-
-- 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);
- };
- }
-
-diff --git a/third_party/rust/syn/src/custom_punctuation.rs b/third_party/rust/syn/src/custom_punctuation.rs
-index 29fa448bd8..70dff42851 100644
---- a/third_party/rust/syn/src/custom_punctuation.rs
-+++ b/third_party/rust/syn/src/custom_punctuation.rs
-@@ -74,19 +74,19 @@
- /// 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<custom_punctuation_repr!($($tt)+)>>(
-+ #[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)
- }
-@@ -98,33 +98,33 @@ macro_rules! custom_punctuation {
- }
- }
-
-- 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))
- }
- }
-@@ -142,12 +142,12 @@ macro_rules! impl_parse_for_custom_punctuation {
- // 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)
- }
- }
- };
-@@ -221,16 +221,16 @@ macro_rules! impl_extra_traits_for_custom_punctuation {
-
- // 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 };
-@@ -279,7 +279,7 @@ macro_rules! custom_punctuation_len {
- ($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.
-@@ -297,13 +297,3 @@ macro_rules! stringify_punct {
- 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
-index be43679874..b217b8ca6f 100644
---- a/third_party/rust/syn/src/data.rs
-+++ b/third_party/rust/syn/src/data.rs
-@@ -4,7 +4,7 @@ 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.
-@@ -24,7 +24,7 @@ ast_struct! {
- 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
-@@ -52,7 +52,7 @@ 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,
-@@ -63,7 +63,7 @@ ast_struct! {
- 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,
-@@ -93,6 +93,24 @@ impl Fields {
- 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 {
-@@ -129,7 +147,7 @@ impl<'a> IntoIterator for &'a mut Fields {
- 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.
-@@ -154,7 +172,7 @@ 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
-@@ -184,7 +202,7 @@ ast_enum_of_structs! {
- 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],
-@@ -194,7 +212,7 @@ ast_struct! {
- 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],
-@@ -205,7 +223,7 @@ 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],
-@@ -220,12 +238,15 @@ 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<Self> {
-+ 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) {
-@@ -295,6 +316,17 @@ pub mod parsing {
-
- impl Parse for Visibility {
- fn parse(input: ParseStream) -> Result<Self> {
-+ // 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]) {
-@@ -310,27 +342,39 @@ pub mod parsing {
- let pub_token = input.parse::<Token![pub]>()?;
-
- 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])
- {
-- 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)?)),
-- }));
-+ 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: Some(content.parse()?),
-- path: Box::new(content.call(Path::parse_mod_style)?),
-+ paren_token,
-+ in_token: Some(in_token),
-+ path: Box::new(path),
- }));
- }
- }
-@@ -347,6 +391,14 @@ pub mod parsing {
- }))
- }
- }
-+
-+ #[cfg(feature = "full")]
-+ pub(crate) fn is_some(&self) -> bool {
-+ match self {
-+ Visibility::Inherited => false,
-+ _ => true,
-+ }
-+ }
- }
- }
-
-diff --git a/third_party/rust/syn/src/derive.rs b/third_party/rust/syn/src/derive.rs
-index 8cb9cf7b6d..3fa9d89a93 100644
---- a/third_party/rust/syn/src/derive.rs
-+++ b/third_party/rust/syn/src/derive.rs
-@@ -4,7 +4,7 @@ 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<Attribute>,
-@@ -26,7 +26,7 @@ ast_struct! {
- 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
- ///
-@@ -53,7 +53,7 @@ ast_enum_of_structs! {
- 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],
-@@ -65,7 +65,7 @@ ast_struct! {
- 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],
-@@ -77,7 +77,7 @@ ast_struct! {
- 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],
-diff --git a/third_party/rust/syn/src/discouraged.rs b/third_party/rust/syn/src/discouraged.rs
-index 4d9ff93728..76c9fce6f8 100644
---- a/third_party/rust/syn/src/discouraged.rs
-+++ b/third_party/rust/syn/src/discouraged.rs
-@@ -16,7 +16,7 @@ pub trait Speculative {
- /// 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
-@@ -72,7 +72,6 @@ pub trait Speculative {
- /// || 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));
-@@ -164,6 +163,30 @@ impl<'a> Speculative for ParseBuffer<'a> {
- 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::<Cursor, Cursor<'static>>(fork.cursor()) })
-diff --git a/third_party/rust/syn/src/error.rs b/third_party/rust/syn/src/error.rs
-index 146d652299..dba34f9254 100644
---- a/third_party/rust/syn/src/error.rs
-+++ b/third_party/rust/syn/src/error.rs
-@@ -1,4 +1,3 @@
--use std;
- use std::fmt::{self, Debug, Display};
- use std::iter::FromIterator;
- use std::slice;
-@@ -32,8 +31,8 @@ pub type Result<T> = std::result::Result<T, Error>;
- /// conversion to `compile_error!` automatically.
- ///
- /// ```
--/// extern crate proc_macro;
--///
-+/// # extern crate proc_macro;
-+/// #
- /// use proc_macro::TokenStream;
- /// use syn::{parse_macro_input, AttributeArgs, ItemFn};
- ///
-@@ -82,7 +81,6 @@ pub type Result<T> = std::result::Result<T, Error>;
- /// # }
- /// # }
- /// ```
--#[derive(Clone)]
- pub struct Error {
- messages: Vec<ErrorMessage>,
- }
-@@ -250,6 +248,17 @@ pub fn new_at<T: Display>(scope: Span, cursor: Cursor, message: T) -> Error {
- }
- }
-
-+#[cfg(all(feature = "parsing", any(feature = "full", feature = "derive")))]
-+pub fn new2<T: Display>(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 {
-@@ -278,6 +287,14 @@ impl Display for Error {
- }
- }
-
-+impl Clone for Error {
-+ fn clone(&self) -> Self {
-+ Error {
-+ messages: self.messages.clone(),
-+ }
-+ }
-+}
-+
- impl Clone for ErrorMessage {
- fn clone(&self) -> Self {
- let start = self
-@@ -355,3 +372,11 @@ impl<'a> Iterator for Iter<'a> {
- })
- }
- }
-+
-+impl Extend<Error> for Error {
-+ fn extend<T: IntoIterator<Item = Error>>(&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
-index 2874a463aa..2fe0e0b5d8 100644
---- a/third_party/rust/syn/src/expr.rs
-+++ b/third_party/rust/syn/src/expr.rs
-@@ -1,18 +1,21 @@
- 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
- ///
-@@ -83,7 +86,7 @@ ast_enum_of_structs! {
- /// 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),
-
-@@ -228,7 +231,7 @@ ast_enum_of_structs! {
- 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<Attribute>,
- pub bracket_token: token::Bracket,
-@@ -239,7 +242,7 @@ ast_struct! {
- 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<Attribute>,
- pub left: Box<Expr>,
-@@ -251,7 +254,7 @@ ast_struct! {
- 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<Attribute>,
- pub left: Box<Expr>,
-@@ -263,7 +266,7 @@ ast_struct! {
- 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<Attribute>,
- pub async_token: Token![async],
-@@ -275,7 +278,7 @@ ast_struct! {
- 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<Attribute>,
- pub base: Box<Expr>,
-@@ -287,7 +290,7 @@ ast_struct! {
- 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<Attribute>,
-@@ -300,7 +303,7 @@ ast_struct! {
- 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<Attribute>,
- pub label: Option<Label>,
-@@ -311,7 +314,7 @@ ast_struct! {
- ast_struct! {
- /// A box expression: `box f`.
- ///
-- /// *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 ExprBox #full {
- pub attrs: Vec<Attribute>,
- pub box_token: Token![box],
-@@ -323,7 +326,7 @@ ast_struct! {
- /// A `break`, with an optional label to break and an optional
- /// expression.
- ///
-- /// *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 ExprBreak #full {
- pub attrs: Vec<Attribute>,
- pub break_token: Token![break],
-@@ -335,7 +338,7 @@ ast_struct! {
- ast_struct! {
- /// A function call expression: `invoke(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 ExprCall {
- pub attrs: Vec<Attribute>,
-@@ -348,7 +351,7 @@ ast_struct! {
- ast_struct! {
- /// A cast expression: `foo as 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 ExprCast {
- pub attrs: Vec<Attribute>,
-@@ -361,7 +364,7 @@ ast_struct! {
- ast_struct! {
- /// A closure expression: `|a, b| a + b`.
- ///
-- /// *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 ExprClosure #full {
- pub attrs: Vec<Attribute>,
- pub asyncness: Option<Token![async]>,
-@@ -378,7 +381,7 @@ ast_struct! {
- ast_struct! {
- /// A `continue`, with an optional label.
- ///
-- /// *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 ExprContinue #full {
- pub attrs: Vec<Attribute>,
- pub continue_token: Token![continue],
-@@ -390,7 +393,7 @@ ast_struct! {
- /// Access of a named struct field (`obj.k`) or unnamed tuple struct
- /// field (`obj.0`).
- ///
-- /// *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 ExprField {
- pub attrs: Vec<Attribute>,
- pub base: Box<Expr>,
-@@ -402,7 +405,7 @@ ast_struct! {
- ast_struct! {
- /// A for loop: `for pat in expr { ... }`.
- ///
-- /// *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 ExprForLoop #full {
- pub attrs: Vec<Attribute>,
- pub label: Option<Label>,
-@@ -421,7 +424,7 @@ ast_struct! {
- /// of expressions and is related to `None`-delimited spans in a
- /// `TokenStream`.
- ///
-- /// *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 ExprGroup #full {
- pub attrs: Vec<Attribute>,
- pub group_token: token::Group,
-@@ -436,7 +439,7 @@ ast_struct! {
- /// The `else` branch expression may only be an `If` or `Block`
- /// expression, not any of the other types of expression.
- ///
-- /// *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 ExprIf #full {
- pub attrs: Vec<Attribute>,
- pub if_token: Token![if],
-@@ -449,7 +452,7 @@ ast_struct! {
- ast_struct! {
- /// A square bracketed indexing expression: `vector[2]`.
- ///
-- /// *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 ExprIndex {
- pub attrs: Vec<Attribute>,
-@@ -462,7 +465,7 @@ ast_struct! {
- ast_struct! {
- /// A `let` guard: `let Some(x) = opt`.
- ///
-- /// *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 ExprLet #full {
- pub attrs: Vec<Attribute>,
- pub let_token: Token![let],
-@@ -475,7 +478,7 @@ ast_struct! {
- ast_struct! {
- /// A literal in place of an expression: `1`, `"foo"`.
- ///
-- /// *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 ExprLit {
- pub attrs: Vec<Attribute>,
-@@ -486,7 +489,7 @@ ast_struct! {
- ast_struct! {
- /// Conditionless loop: `loop { ... }`.
- ///
-- /// *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 ExprLoop #full {
- pub attrs: Vec<Attribute>,
- pub label: Option<Label>,
-@@ -498,7 +501,7 @@ ast_struct! {
- ast_struct! {
- /// A macro invocation expression: `format!("{}", q)`.
- ///
-- /// *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 ExprMacro #full {
- pub attrs: Vec<Attribute>,
- pub mac: Macro,
-@@ -508,7 +511,7 @@ ast_struct! {
- ast_struct! {
- /// A `match` expression: `match n { Some(n) => {}, None => {} }`.
- ///
-- /// *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 ExprMatch #full {
- pub attrs: Vec<Attribute>,
- pub match_token: Token![match],
-@@ -521,7 +524,7 @@ ast_struct! {
- ast_struct! {
- /// A method call expression: `x.foo::<T>(a, b)`.
- ///
-- /// *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 ExprMethodCall #full {
- pub attrs: Vec<Attribute>,
- pub receiver: Box<Expr>,
-@@ -536,7 +539,7 @@ ast_struct! {
- ast_struct! {
- /// A parenthesized expression: `(a + b)`.
- ///
-- /// *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 ExprParen {
- pub attrs: Vec<Attribute>,
- pub paren_token: token::Paren,
-@@ -550,7 +553,7 @@ ast_struct! {
- ///
- /// A plain identifier like `x` is a path of length 1.
- ///
-- /// *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 ExprPath {
- pub attrs: Vec<Attribute>,
-@@ -562,7 +565,7 @@ ast_struct! {
- ast_struct! {
- /// A range expression: `1..2`, `1..`, `..2`, `1..=2`, `..=2`.
- ///
-- /// *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 ExprRange #full {
- pub attrs: Vec<Attribute>,
- pub from: Option<Box<Expr>>,
-@@ -574,7 +577,7 @@ ast_struct! {
- ast_struct! {
- /// A referencing operation: `&a` or `&mut a`.
- ///
-- /// *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 ExprReference #full {
- pub attrs: Vec<Attribute>,
- pub and_token: Token![&],
-@@ -587,7 +590,7 @@ ast_struct! {
- ast_struct! {
- /// An array literal constructed from one repeated element: `[0u8; N]`.
- ///
-- /// *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 ExprRepeat #full {
- pub attrs: Vec<Attribute>,
- pub bracket_token: token::Bracket,
-@@ -600,7 +603,7 @@ ast_struct! {
- ast_struct! {
- /// A `return`, with an optional value to be returned.
- ///
-- /// *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 ExprReturn #full {
- pub attrs: Vec<Attribute>,
- pub return_token: Token![return],
-@@ -614,7 +617,7 @@ ast_struct! {
- /// The `rest` provides the value of the remaining fields as in `S { a:
- /// 1, b: 1, ..rest }`.
- ///
-- /// *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 ExprStruct #full {
- pub attrs: Vec<Attribute>,
- pub path: Path,
-@@ -628,7 +631,7 @@ ast_struct! {
- ast_struct! {
- /// A try-expression: `expr?`.
- ///
-- /// *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 ExprTry #full {
- pub attrs: Vec<Attribute>,
- pub expr: Box<Expr>,
-@@ -639,7 +642,7 @@ ast_struct! {
- ast_struct! {
- /// A try block: `try { ... }`.
- ///
-- /// *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 ExprTryBlock #full {
- pub attrs: Vec<Attribute>,
- pub try_token: Token![try],
-@@ -650,7 +653,7 @@ ast_struct! {
- ast_struct! {
- /// A tuple 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 ExprTuple #full {
- pub attrs: Vec<Attribute>,
- pub paren_token: token::Paren,
-@@ -661,7 +664,7 @@ ast_struct! {
- ast_struct! {
- /// A type ascription expression: `foo: f64`.
- ///
-- /// *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 ExprType #full {
- pub attrs: Vec<Attribute>,
- pub expr: Box<Expr>,
-@@ -673,7 +676,7 @@ ast_struct! {
- ast_struct! {
- /// A unary operation: `!x`, `*x`.
- ///
-- /// *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 ExprUnary {
- pub attrs: Vec<Attribute>,
-@@ -685,7 +688,7 @@ ast_struct! {
- ast_struct! {
- /// An unsafe block: `unsafe { ... }`.
- ///
-- /// *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 ExprUnsafe #full {
- pub attrs: Vec<Attribute>,
- pub unsafe_token: Token![unsafe],
-@@ -696,7 +699,7 @@ ast_struct! {
- ast_struct! {
- /// A while loop: `while expr { ... }`.
- ///
-- /// *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 ExprWhile #full {
- pub attrs: Vec<Attribute>,
- pub label: Option<Label>,
-@@ -709,7 +712,7 @@ ast_struct! {
- ast_struct! {
- /// A yield expression: `yield expr`.
- ///
-- /// *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 ExprYield #full {
- pub attrs: Vec<Attribute>,
- pub yield_token: Token![yield],
-@@ -717,232 +720,6 @@ ast_struct! {
- }
- }
-
--#[cfg(feature = "extra-traits")]
--impl Eq for Expr {}
--
--#[cfg(feature = "extra-traits")]
--impl PartialEq for Expr {
-- fn eq(&self, other: &Self) -> bool {
-- match (self, other) {
-- (Expr::Array(this), Expr::Array(other)) => this == other,
-- (Expr::Assign(this), Expr::Assign(other)) => this == other,
-- (Expr::AssignOp(this), Expr::AssignOp(other)) => this == other,
-- (Expr::Async(this), Expr::Async(other)) => this == other,
-- (Expr::Await(this), Expr::Await(other)) => this == other,
-- (Expr::Binary(this), Expr::Binary(other)) => this == other,
-- (Expr::Block(this), Expr::Block(other)) => this == other,
-- (Expr::Box(this), Expr::Box(other)) => this == other,
-- (Expr::Break(this), Expr::Break(other)) => this == other,
-- (Expr::Call(this), Expr::Call(other)) => this == other,
-- (Expr::Cast(this), Expr::Cast(other)) => this == other,
-- (Expr::Closure(this), Expr::Closure(other)) => this == other,
-- (Expr::Continue(this), Expr::Continue(other)) => this == other,
-- (Expr::Field(this), Expr::Field(other)) => this == other,
-- (Expr::ForLoop(this), Expr::ForLoop(other)) => this == other,
-- (Expr::Group(this), Expr::Group(other)) => this == other,
-- (Expr::If(this), Expr::If(other)) => this == other,
-- (Expr::Index(this), Expr::Index(other)) => this == other,
-- (Expr::Let(this), Expr::Let(other)) => this == other,
-- (Expr::Lit(this), Expr::Lit(other)) => this == other,
-- (Expr::Loop(this), Expr::Loop(other)) => this == other,
-- (Expr::Macro(this), Expr::Macro(other)) => this == other,
-- (Expr::Match(this), Expr::Match(other)) => this == other,
-- (Expr::MethodCall(this), Expr::MethodCall(other)) => this == other,
-- (Expr::Paren(this), Expr::Paren(other)) => this == other,
-- (Expr::Path(this), Expr::Path(other)) => this == other,
-- (Expr::Range(this), Expr::Range(other)) => this == other,
-- (Expr::Reference(this), Expr::Reference(other)) => this == other,
-- (Expr::Repeat(this), Expr::Repeat(other)) => this == other,
-- (Expr::Return(this), Expr::Return(other)) => this == other,
-- (Expr::Struct(this), Expr::Struct(other)) => this == other,
-- (Expr::Try(this), Expr::Try(other)) => this == other,
-- (Expr::TryBlock(this), Expr::TryBlock(other)) => this == other,
-- (Expr::Tuple(this), Expr::Tuple(other)) => this == other,
-- (Expr::Type(this), Expr::Type(other)) => this == other,
-- (Expr::Unary(this), Expr::Unary(other)) => this == other,
-- (Expr::Unsafe(this), Expr::Unsafe(other)) => this == other,
-- (Expr::Verbatim(this), Expr::Verbatim(other)) => {
-- TokenStreamHelper(this) == TokenStreamHelper(other)
-- }
-- (Expr::While(this), Expr::While(other)) => this == other,
-- (Expr::Yield(this), Expr::Yield(other)) => this == other,
-- _ => false,
-- }
-- }
--}
--
--#[cfg(feature = "extra-traits")]
--impl Hash for Expr {
-- fn hash<H>(&self, hash: &mut H)
-- where
-- H: Hasher,
-- {
-- match self {
-- Expr::Array(expr) => {
-- hash.write_u8(0);
-- expr.hash(hash);
-- }
-- Expr::Assign(expr) => {
-- hash.write_u8(1);
-- expr.hash(hash);
-- }
-- Expr::AssignOp(expr) => {
-- hash.write_u8(2);
-- expr.hash(hash);
-- }
-- Expr::Async(expr) => {
-- hash.write_u8(3);
-- expr.hash(hash);
-- }
-- Expr::Await(expr) => {
-- hash.write_u8(4);
-- expr.hash(hash);
-- }
-- Expr::Binary(expr) => {
-- hash.write_u8(5);
-- expr.hash(hash);
-- }
-- Expr::Block(expr) => {
-- hash.write_u8(6);
-- expr.hash(hash);
-- }
-- Expr::Box(expr) => {
-- hash.write_u8(7);
-- expr.hash(hash);
-- }
-- Expr::Break(expr) => {
-- hash.write_u8(8);
-- expr.hash(hash);
-- }
-- Expr::Call(expr) => {
-- hash.write_u8(9);
-- expr.hash(hash);
-- }
-- Expr::Cast(expr) => {
-- hash.write_u8(10);
-- expr.hash(hash);
-- }
-- Expr::Closure(expr) => {
-- hash.write_u8(11);
-- expr.hash(hash);
-- }
-- Expr::Continue(expr) => {
-- hash.write_u8(12);
-- expr.hash(hash);
-- }
-- Expr::Field(expr) => {
-- hash.write_u8(13);
-- expr.hash(hash);
-- }
-- Expr::ForLoop(expr) => {
-- hash.write_u8(14);
-- expr.hash(hash);
-- }
-- Expr::Group(expr) => {
-- hash.write_u8(15);
-- expr.hash(hash);
-- }
-- Expr::If(expr) => {
-- hash.write_u8(16);
-- expr.hash(hash);
-- }
-- Expr::Index(expr) => {
-- hash.write_u8(17);
-- expr.hash(hash);
-- }
-- Expr::Let(expr) => {
-- hash.write_u8(18);
-- expr.hash(hash);
-- }
-- Expr::Lit(expr) => {
-- hash.write_u8(19);
-- expr.hash(hash);
-- }
-- Expr::Loop(expr) => {
-- hash.write_u8(20);
-- expr.hash(hash);
-- }
-- Expr::Macro(expr) => {
-- hash.write_u8(21);
-- expr.hash(hash);
-- }
-- Expr::Match(expr) => {
-- hash.write_u8(22);
-- expr.hash(hash);
-- }
-- Expr::MethodCall(expr) => {
-- hash.write_u8(23);
-- expr.hash(hash);
-- }
-- Expr::Paren(expr) => {
-- hash.write_u8(24);
-- expr.hash(hash);
-- }
-- Expr::Path(expr) => {
-- hash.write_u8(25);
-- expr.hash(hash);
-- }
-- Expr::Range(expr) => {
-- hash.write_u8(26);
-- expr.hash(hash);
-- }
-- Expr::Reference(expr) => {
-- hash.write_u8(27);
-- expr.hash(hash);
-- }
-- Expr::Repeat(expr) => {
-- hash.write_u8(28);
-- expr.hash(hash);
-- }
-- Expr::Return(expr) => {
-- hash.write_u8(29);
-- expr.hash(hash);
-- }
-- Expr::Struct(expr) => {
-- hash.write_u8(30);
-- expr.hash(hash);
-- }
-- Expr::Try(expr) => {
-- hash.write_u8(31);
-- expr.hash(hash);
-- }
-- Expr::TryBlock(expr) => {
-- hash.write_u8(32);
-- expr.hash(hash);
-- }
-- Expr::Tuple(expr) => {
-- hash.write_u8(33);
-- expr.hash(hash);
-- }
-- Expr::Type(expr) => {
-- hash.write_u8(34);
-- expr.hash(hash);
-- }
-- Expr::Unary(expr) => {
-- hash.write_u8(35);
-- expr.hash(hash);
-- }
-- Expr::Unsafe(expr) => {
-- hash.write_u8(36);
-- expr.hash(hash);
-- }
-- Expr::Verbatim(expr) => {
-- hash.write_u8(37);
-- TokenStreamHelper(expr).hash(hash);
-- }
-- Expr::While(expr) => {
-- hash.write_u8(38);
-- expr.hash(hash);
-- }
-- Expr::Yield(expr) => {
-- hash.write_u8(39);
-- expr.hash(hash);
-- }
-- Expr::__Nonexhaustive => unreachable!(),
-- }
-- }
--}
--
- impl Expr {
- #[cfg(all(feature = "parsing", feature = "full"))]
- pub(crate) fn replace_attrs(&mut self, new: Vec<Attribute>) -> Vec<Attribute> {
-@@ -996,7 +773,7 @@ ast_enum! {
- /// A struct or tuple struct field accessed in a struct literal or field
- /// expression.
- ///
-- /// *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 Member {
- /// A named field like `self.x`.
-@@ -1006,12 +783,50 @@ ast_enum! {
- }
- }
-
-+impl Eq for Member {}
-+
-+impl PartialEq for Member {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (Member::Named(this), Member::Named(other)) => this == other,
-+ (Member::Unnamed(this), Member::Unnamed(other)) => this == other,
-+ _ => false,
-+ }
-+ }
-+}
-+
-+impl Hash for Member {
-+ fn hash<H: Hasher>(&self, state: &mut H) {
-+ match self {
-+ Member::Named(m) => m.hash(state),
-+ Member::Unnamed(m) => m.hash(state),
-+ }
-+ }
-+}
-+
-+#[cfg(feature = "printing")]
-+impl IdentFragment for Member {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ Member::Named(m) => Display::fmt(m, formatter),
-+ Member::Unnamed(m) => Display::fmt(&m.index, formatter),
-+ }
-+ }
-+
-+ fn span(&self) -> Option<Span> {
-+ match self {
-+ Member::Named(m) => Some(m.span()),
-+ Member::Unnamed(m) => Some(m.span),
-+ }
-+ }
-+}
-+
- ast_struct! {
- /// The index of an unnamed tuple struct field.
- ///
-- /// *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 Index #manual_extra_traits {
-+ pub struct Index {
- pub index: u32,
- pub span: Span,
- }
-@@ -1027,28 +842,28 @@ impl From<usize> for Index {
- }
- }
-
--#[cfg(feature = "extra-traits")]
- impl Eq for Index {}
-
--#[cfg(feature = "extra-traits")]
- impl PartialEq for Index {
- fn eq(&self, other: &Self) -> bool {
- self.index == other.index
- }
- }
-
--#[cfg(feature = "extra-traits")]
- impl Hash for Index {
- fn hash<H: Hasher>(&self, state: &mut H) {
- self.index.hash(state);
- }
- }
-
--#[cfg(feature = "full")]
--ast_struct! {
-- #[derive(Default)]
-- pub struct Reserved {
-- private: (),
-+#[cfg(feature = "printing")]
-+impl IdentFragment for Index {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ Display::fmt(&self.index, formatter)
-+ }
-+
-+ fn span(&self) -> Option<Span> {
-+ Some(self.span)
- }
- }
-
-@@ -1057,7 +872,7 @@ ast_struct! {
- /// The `::<>` explicit type parameters passed to a method call:
- /// `parse::<u64>()`.
- ///
-- /// *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 MethodTurbofish {
- pub colon2_token: Token![::],
- pub lt_token: Token![<],
-@@ -1070,7 +885,7 @@ ast_struct! {
- ast_enum! {
- /// An individual generic argument to a method, like `T`.
- ///
-- /// *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 enum GenericMethodArgument {
- /// A type argument.
- Type(Type),
-@@ -1086,7 +901,7 @@ ast_enum! {
- ast_struct! {
- /// A field-value pair in a struct literal.
- ///
-- /// *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 FieldValue {
- /// Attributes tagged on the field.
- pub attrs: Vec<Attribute>,
-@@ -1107,7 +922,7 @@ ast_struct! {
- ast_struct! {
- /// A lifetime labeling a `for`, `while`, or `loop`.
- ///
-- /// *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 Label {
- pub name: Lifetime,
- pub colon_token: Token![:],
-@@ -1134,7 +949,7 @@ ast_struct! {
- /// # }
- /// ```
- ///
-- /// *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 Arm {
- pub attrs: Vec<Attribute>,
- pub pat: Pat,
-@@ -1149,8 +964,7 @@ ast_struct! {
- ast_enum! {
- /// Limit types of a range, inclusive or exclusive.
- ///
-- /// *This type is available if Syn is built with the `"full"` feature.*
-- #[cfg_attr(feature = "clone-impls", derive(Copy))]
-+ /// *This type is available only if Syn is built with the `"full"` feature.*
- pub enum RangeLimits {
- /// Inclusive at the beginning, exclusive at the end.
- HalfOpen(Token![..]),
-@@ -1162,7 +976,7 @@ ast_enum! {
- #[cfg(any(feature = "parsing", feature = "printing"))]
- #[cfg(feature = "full")]
- pub(crate) fn requires_terminator(expr: &Expr) -> bool {
-- // see https://github.com/rust-lang/rust/blob/eb8f2586e/src/libsyntax/parse/classify.rs#L17-L37
-+ // see https://github.com/rust-lang/rust/blob/2679c38fc/src/librustc_ast/util/classify.rs#L7-L25
- match *expr {
- Expr::Unsafe(..)
- | Expr::Block(..)
-@@ -1183,16 +997,17 @@ pub(crate) mod parsing {
-
- use crate::parse::{Parse, ParseStream, Result};
- use crate::path;
-+ use std::cmp::Ordering;
-+
-+ crate::custom_keyword!(raw);
-
- // When we're parsing expressions which occur before blocks, like in an if
- // statement's condition, we cannot parse a struct literal.
- //
- // Struct literals are ambiguous in certain positions
- // https://github.com/rust-lang/rfcs/pull/92
-- #[derive(Copy, Clone)]
- pub struct AllowStruct(bool);
-
-- #[derive(Copy, Clone, PartialEq, PartialOrd)]
- enum Precedence {
- Any,
- Assign,
-@@ -1246,9 +1061,121 @@ pub(crate) mod parsing {
- }
- }
-
-- #[cfg(feature = "full")]
-- fn expr_no_struct(input: ParseStream) -> Result<Expr> {
-- ambiguous_expr(input, AllowStruct(false))
-+ impl Expr {
-+ /// An alternative to the primary `Expr::parse` parser (from the
-+ /// [`Parse`] trait) for ambiguous syntactic positions in which a
-+ /// trailing brace should not be taken as part of the expression.
-+ ///
-+ /// Rust grammar has an ambiguity where braces sometimes turn a path
-+ /// expression into a struct initialization and sometimes do not. In the
-+ /// following code, the expression `S {}` is one expression. Presumably
-+ /// there is an empty struct `struct S {}` defined somewhere which it is
-+ /// instantiating.
-+ ///
-+ /// ```
-+ /// # struct S;
-+ /// # impl std::ops::Deref for S {
-+ /// # type Target = bool;
-+ /// # fn deref(&self) -> &Self::Target {
-+ /// # &true
-+ /// # }
-+ /// # }
-+ /// let _ = *S {};
-+ ///
-+ /// // parsed by rustc as: `*(S {})`
-+ /// ```
-+ ///
-+ /// We would want to parse the above using `Expr::parse` after the `=`
-+ /// token.
-+ ///
-+ /// But in the following, `S {}` is *not* a struct init expression.
-+ ///
-+ /// ```
-+ /// # const S: &bool = &true;
-+ /// if *S {} {}
-+ ///
-+ /// // parsed by rustc as:
-+ /// //
-+ /// // if (*S) {
-+ /// // /* empty block */
-+ /// // }
-+ /// // {
-+ /// // /* another empty block */
-+ /// // }
-+ /// ```
-+ ///
-+ /// For that reason we would want to parse if-conditions using
-+ /// `Expr::parse_without_eager_brace` after the `if` token. Same for
-+ /// similar syntactic positions such as the condition expr after a
-+ /// `while` token or the expr at the top of a `match`.
-+ ///
-+ /// The Rust grammar's choices around which way this ambiguity is
-+ /// resolved at various syntactic positions is fairly arbitrary. Really
-+ /// either parse behavior could work in most positions, and language
-+ /// designers just decide each case based on which is more likely to be
-+ /// what the programmer had in mind most of the time.
-+ ///
-+ /// ```
-+ /// # struct S;
-+ /// # fn doc() -> S {
-+ /// if return S {} {}
-+ /// # unreachable!()
-+ /// # }
-+ ///
-+ /// // parsed by rustc as:
-+ /// //
-+ /// // if (return (S {})) {
-+ /// // }
-+ /// //
-+ /// // but could equally well have been this other arbitrary choice:
-+ /// //
-+ /// // if (return S) {
-+ /// // }
-+ /// // {}
-+ /// ```
-+ ///
-+ /// Note the grammar ambiguity on trailing braces is distinct from
-+ /// precedence and is not captured by assigning a precedence level to
-+ /// the braced struct init expr in relation to other operators. This can
-+ /// be illustrated by `return 0..S {}` vs `match 0..S {}`. The former
-+ /// parses as `return (0..(S {}))` implying tighter precedence for
-+ /// struct init than `..`, while the latter parses as `match (0..S) {}`
-+ /// implying tighter precedence for `..` than struct init, a
-+ /// contradiction.
-+ #[cfg(feature = "full")]
-+ pub fn parse_without_eager_brace(input: ParseStream) -> Result<Expr> {
-+ ambiguous_expr(input, AllowStruct(false))
-+ }
-+ }
-+
-+ impl Copy for AllowStruct {}
-+
-+ impl Clone for AllowStruct {
-+ fn clone(&self) -> Self {
-+ *self
-+ }
-+ }
-+
-+ impl Copy for Precedence {}
-+
-+ impl Clone for Precedence {
-+ fn clone(&self) -> Self {
-+ *self
-+ }
-+ }
-+
-+ impl PartialEq for Precedence {
-+ fn eq(&self, other: &Self) -> bool {
-+ *self as u8 == *other as u8
-+ }
-+ }
-+
-+ impl PartialOrd for Precedence {
-+ fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
-+ let this = *self as u8;
-+ let other = *other as u8;
-+ Some(this.cmp(&other))
-+ }
- }
-
- #[cfg(feature = "full")]
-@@ -1430,56 +1357,84 @@ pub(crate) mod parsing {
- parse_expr(input, lhs, allow_struct, Precedence::Any)
- }
-
-+ #[cfg(feature = "full")]
-+ fn expr_attrs(input: ParseStream) -> Result<Vec<Attribute>> {
-+ let mut attrs = Vec::new();
-+ loop {
-+ if input.peek(token::Group) {
-+ let ahead = input.fork();
-+ let group = crate::group::parse_group(&ahead)?;
-+ if !group.content.peek(Token![#]) || group.content.peek2(Token![!]) {
-+ break;
-+ }
-+ let attr = group.content.call(attr::parsing::single_parse_outer)?;
-+ if !group.content.is_empty() {
-+ break;
-+ }
-+ attrs.push(attr);
-+ } else if input.peek(Token![#]) {
-+ attrs.push(input.call(attr::parsing::single_parse_outer)?);
-+ } else {
-+ break;
-+ }
-+ }
-+ Ok(attrs)
-+ }
-+
- // <UnOp> <trailer>
- // & <trailer>
- // &mut <trailer>
- // box <trailer>
- #[cfg(feature = "full")]
- fn unary_expr(input: ParseStream, allow_struct: AllowStruct) -> Result<Expr> {
-- // TODO: optimize using advance_to
-- let ahead = input.fork();
-- ahead.call(Attribute::parse_outer)?;
-- if ahead.peek(Token![&])
-- || ahead.peek(Token![box])
-- || ahead.peek(Token![*])
-- || ahead.peek(Token![!])
-- || ahead.peek(Token![-])
-- {
-- let attrs = input.call(Attribute::parse_outer)?;
-- if input.peek(Token![&]) {
-+ let begin = input.fork();
-+ let attrs = input.call(expr_attrs)?;
-+ if input.peek(Token![&]) {
-+ let and_token: Token![&] = input.parse()?;
-+ let raw: Option<raw> =
-+ if input.peek(raw) && (input.peek2(Token![mut]) || input.peek2(Token![const])) {
-+ Some(input.parse()?)
-+ } else {
-+ None
-+ };
-+ let mutability: Option<Token![mut]> = input.parse()?;
-+ if raw.is_some() && mutability.is_none() {
-+ input.parse::<Token![const]>()?;
-+ }
-+ let expr = Box::new(unary_expr(input, allow_struct)?);
-+ if raw.is_some() {
-+ Ok(Expr::Verbatim(verbatim::between(begin, input)))
-+ } else {
- Ok(Expr::Reference(ExprReference {
- attrs,
-- and_token: input.parse()?,
-+ and_token,
- raw: Reserved::default(),
-- mutability: input.parse()?,
-- expr: Box::new(unary_expr(input, allow_struct)?),
-- }))
-- } else if input.peek(Token![box]) {
-- Ok(Expr::Box(ExprBox {
-- attrs,
-- box_token: input.parse()?,
-- expr: Box::new(unary_expr(input, allow_struct)?),
-- }))
-- } else {
-- Ok(Expr::Unary(ExprUnary {
-- attrs,
-- op: input.parse()?,
-- expr: Box::new(unary_expr(input, allow_struct)?),
-+ mutability,
-+ expr,
- }))
- }
-+ } else if input.peek(Token![box]) {
-+ Ok(Expr::Box(ExprBox {
-+ attrs,
-+ box_token: input.parse()?,
-+ expr: Box::new(unary_expr(input, allow_struct)?),
-+ }))
-+ } else if input.peek(Token![*]) || input.peek(Token![!]) || input.peek(Token![-]) {
-+ Ok(Expr::Unary(ExprUnary {
-+ attrs,
-+ op: input.parse()?,
-+ expr: Box::new(unary_expr(input, allow_struct)?),
-+ }))
- } else {
-- trailer_expr(input, allow_struct)
-+ trailer_expr(attrs, input, allow_struct)
- }
- }
-
- #[cfg(not(feature = "full"))]
- fn unary_expr(input: ParseStream, allow_struct: AllowStruct) -> Result<Expr> {
-- // TODO: optimize using advance_to
-- let ahead = input.fork();
-- ahead.call(Attribute::parse_outer)?;
-- if ahead.peek(Token![*]) || ahead.peek(Token![!]) || ahead.peek(Token![-]) {
-+ if input.peek(Token![*]) || input.peek(Token![!]) || input.peek(Token![-]) {
- Ok(Expr::Unary(ExprUnary {
-- attrs: input.call(Attribute::parse_outer)?,
-+ attrs: Vec::new(),
- op: input.parse()?,
- expr: Box::new(unary_expr(input, allow_struct)?),
- }))
-@@ -1495,13 +1450,11 @@ pub(crate) mod parsing {
- // <atom> [ <expr> ] ...
- // <atom> ? ...
- #[cfg(feature = "full")]
-- fn trailer_expr(input: ParseStream, allow_struct: AllowStruct) -> Result<Expr> {
-- if input.peek(token::Group) {
-- return input.call(expr_group).map(Expr::Group);
-- }
--
-- let outer_attrs = input.call(Attribute::parse_outer)?;
--
-+ fn trailer_expr(
-+ outer_attrs: Vec<Attribute>,
-+ input: ParseStream,
-+ allow_struct: AllowStruct,
-+ ) -> Result<Expr> {
- let atom = atom_expr(input, allow_struct)?;
- let mut e = trailer_helper(input, atom)?;
-
-@@ -1523,18 +1476,26 @@ pub(crate) mod parsing {
- args: content.parse_terminated(Expr::parse)?,
- });
- } else if input.peek(Token![.]) && !input.peek(Token![..]) {
-- let dot_token: Token![.] = input.parse()?;
-+ let mut dot_token: Token![.] = input.parse()?;
-
-- if input.peek(token::Await) {
-+ let await_token: Option<token::Await> = input.parse()?;
-+ if let Some(await_token) = await_token {
- e = Expr::Await(ExprAwait {
- attrs: Vec::new(),
- base: Box::new(e),
- dot_token,
-- await_token: input.parse()?,
-+ await_token,
- });
- continue;
- }
-
-+ let float_token: Option<LitFloat> = input.parse()?;
-+ if let Some(float_token) = float_token {
-+ if multi_index(&mut e, &mut dot_token, float_token)? {
-+ continue;
-+ }
-+ }
-+
- let member: Member = input.parse()?;
- let turbofish = if member.is_named() && input.peek(Token![::]) {
- Some(MethodTurbofish {
-@@ -1620,10 +1581,17 @@ pub(crate) mod parsing {
- });
- } else if input.peek(Token![.]) && !input.peek(Token![..]) && !input.peek2(token::Await)
- {
-+ let mut dot_token: Token![.] = input.parse()?;
-+ let float_token: Option<LitFloat> = input.parse()?;
-+ if let Some(float_token) = float_token {
-+ if multi_index(&mut e, &mut dot_token, float_token)? {
-+ continue;
-+ }
-+ }
- e = Expr::Field(ExprField {
- attrs: Vec::new(),
- base: Box::new(e),
-- dot_token: input.parse()?,
-+ dot_token,
- member: input.parse()?,
- });
- } else if input.peek(token::Bracket) {
-@@ -1646,7 +1614,11 @@ pub(crate) mod parsing {
- // interactions, as they are fully contained.
- #[cfg(feature = "full")]
- fn atom_expr(input: ParseStream, allow_struct: AllowStruct) -> Result<Expr> {
-- if input.peek(token::Group) {
-+ if input.peek(token::Group)
-+ && !input.peek2(Token![::])
-+ && !input.peek2(Token![!])
-+ && !input.peek2(token::Brace)
-+ {
- input.call(expr_group).map(Expr::Group)
- } else if input.peek(Lit) {
- input.parse().map(Expr::Lit)
-@@ -1668,7 +1640,6 @@ pub(crate) mod parsing {
- || input.peek(Token![self])
- || input.peek(Token![Self])
- || input.peek(Token![super])
-- || input.peek(Token![extern])
- || input.peek(Token![crate])
- {
- path_or_macro_or_struct(input, allow_struct)
-@@ -1740,7 +1711,6 @@ pub(crate) mod parsing {
- || input.peek(Token![self])
- || input.peek(Token![Self])
- || input.peek(Token![super])
-- || input.peek(Token![extern])
- || input.peek(Token![crate])
- {
- input.parse().map(Expr::Path)
-@@ -1878,7 +1848,7 @@ pub(crate) mod parsing {
-
- #[cfg(feature = "full")]
- pub(crate) fn expr_early(input: ParseStream) -> Result<Expr> {
-- let mut attrs = input.call(Attribute::parse_outer)?;
-+ let mut attrs = input.call(expr_attrs)?;
- let mut expr = if input.peek(Token![if]) {
- Expr::If(input.parse()?)
- } else if input.peek(Token![while]) {
-@@ -1905,7 +1875,7 @@ pub(crate) mod parsing {
- return parse_expr(input, expr, allow_struct, Precedence::Any);
- };
-
-- if input.peek(Token![.]) || input.peek(Token![?]) {
-+ if input.peek(Token![.]) && !input.peek(Token![..]) || input.peek(Token![?]) {
- expr = trailer_helper(input, expr)?;
-
- attrs.extend(expr.replace_attrs(Vec::new()));
-@@ -1951,7 +1921,16 @@ pub(crate) mod parsing {
-
- #[cfg(feature = "full")]
- fn generic_method_argument(input: ParseStream) -> Result<GenericMethodArgument> {
-- // TODO parse const generics as well
-+ if input.peek(Lit) {
-+ let lit = input.parse()?;
-+ return Ok(GenericMethodArgument::Const(Expr::Lit(lit)));
-+ }
-+
-+ if input.peek(token::Brace) {
-+ let block = input.call(expr::parsing::expr_block)?;
-+ return Ok(GenericMethodArgument::Const(Expr::Block(block)));
-+ }
-+
- input.parse().map(GenericMethodArgument::Type)
- }
-
-@@ -1960,44 +1939,20 @@ pub(crate) mod parsing {
- Ok(ExprLet {
- attrs: Vec::new(),
- let_token: input.parse()?,
-- pat: {
-- let leading_vert: Option<Token![|]> = input.parse()?;
-- let pat: Pat = input.parse()?;
-- if leading_vert.is_some()
-- || input.peek(Token![|]) && !input.peek(Token![||]) && !input.peek(Token![|=])
-- {
-- let mut cases = Punctuated::new();
-- cases.push_value(pat);
-- while input.peek(Token![|])
-- && !input.peek(Token![||])
-- && !input.peek(Token![|=])
-- {
-- let punct = input.parse()?;
-- cases.push_punct(punct);
-- let pat: Pat = input.parse()?;
-- cases.push_value(pat);
-- }
-- Pat::Or(PatOr {
-- attrs: Vec::new(),
-- leading_vert,
-- cases,
-- })
-- } else {
-- pat
-- }
-- },
-+ pat: pat::parsing::multi_pat_with_leading_vert(input)?,
- eq_token: input.parse()?,
-- expr: Box::new(input.call(expr_no_struct)?),
-+ expr: Box::new(input.call(Expr::parse_without_eager_brace)?),
- })
- }
-
- #[cfg(feature = "full")]
- impl Parse for ExprIf {
- fn parse(input: ParseStream) -> Result<Self> {
-+ let attrs = input.call(Attribute::parse_outer)?;
- Ok(ExprIf {
-- attrs: Vec::new(),
-+ attrs,
- if_token: input.parse()?,
-- cond: Box::new(input.call(expr_no_struct)?),
-+ cond: Box::new(input.call(Expr::parse_without_eager_brace)?),
- then_branch: input.parse()?,
- else_branch: {
- if input.peek(Token![else]) {
-@@ -2033,29 +1988,14 @@ pub(crate) mod parsing {
- #[cfg(feature = "full")]
- impl Parse for ExprForLoop {
- fn parse(input: ParseStream) -> Result<Self> {
-+ let outer_attrs = input.call(Attribute::parse_outer)?;
- let label: Option<Label> = input.parse()?;
- let for_token: Token![for] = input.parse()?;
-
-- let leading_vert: Option<Token![|]> = input.parse()?;
-- let mut pat: Pat = input.parse()?;
-- if leading_vert.is_some() || input.peek(Token![|]) {
-- let mut cases = Punctuated::new();
-- cases.push_value(pat);
-- while input.peek(Token![|]) {
-- let punct = input.parse()?;
-- cases.push_punct(punct);
-- let pat: Pat = input.parse()?;
-- cases.push_value(pat);
-- }
-- pat = Pat::Or(PatOr {
-- attrs: Vec::new(),
-- leading_vert,
-- cases,
-- });
-- }
-+ let pat = pat::parsing::multi_pat_with_leading_vert(input)?;
-
- let in_token: Token![in] = input.parse()?;
-- let expr: Expr = input.call(expr_no_struct)?;
-+ let expr: Expr = input.call(Expr::parse_without_eager_brace)?;
-
- let content;
- let brace_token = braced!(content in input);
-@@ -2063,7 +2003,7 @@ pub(crate) mod parsing {
- let stmts = content.call(Block::parse_within)?;
-
- Ok(ExprForLoop {
-- attrs: inner_attrs,
-+ attrs: private::attrs(outer_attrs, inner_attrs),
- label,
- for_token,
- pat,
-@@ -2077,6 +2017,7 @@ pub(crate) mod parsing {
- #[cfg(feature = "full")]
- impl Parse for ExprLoop {
- fn parse(input: ParseStream) -> Result<Self> {
-+ let outer_attrs = input.call(Attribute::parse_outer)?;
- let label: Option<Label> = input.parse()?;
- let loop_token: Token![loop] = input.parse()?;
-
-@@ -2086,7 +2027,7 @@ pub(crate) mod parsing {
- let stmts = content.call(Block::parse_within)?;
-
- Ok(ExprLoop {
-- attrs: inner_attrs,
-+ attrs: private::attrs(outer_attrs, inner_attrs),
- label,
- loop_token,
- body: Block { brace_token, stmts },
-@@ -2097,8 +2038,9 @@ pub(crate) mod parsing {
- #[cfg(feature = "full")]
- impl Parse for ExprMatch {
- fn parse(input: ParseStream) -> Result<Self> {
-+ let outer_attrs = input.call(Attribute::parse_outer)?;
- let match_token: Token![match] = input.parse()?;
-- let expr = expr_no_struct(input)?;
-+ let expr = Expr::parse_without_eager_brace(input)?;
-
- let content;
- let brace_token = braced!(content in input);
-@@ -2110,7 +2052,7 @@ pub(crate) mod parsing {
- }
-
- Ok(ExprMatch {
-- attrs: inner_attrs,
-+ attrs: private::attrs(outer_attrs, inner_attrs),
- match_token,
- expr: Box::new(expr),
- brace_token,
-@@ -2305,9 +2247,10 @@ pub(crate) mod parsing {
- #[cfg(feature = "full")]
- impl Parse for ExprWhile {
- fn parse(input: ParseStream) -> Result<Self> {
-+ let outer_attrs = input.call(Attribute::parse_outer)?;
- let label: Option<Label> = input.parse()?;
- let while_token: Token![while] = input.parse()?;
-- let cond = expr_no_struct(input)?;
-+ let cond = Expr::parse_without_eager_brace(input)?;
-
- let content;
- let brace_token = braced!(content in input);
-@@ -2315,7 +2258,7 @@ pub(crate) mod parsing {
- let stmts = content.call(Block::parse_within)?;
-
- Ok(ExprWhile {
-- attrs: inner_attrs,
-+ attrs: private::attrs(outer_attrs, inner_attrs),
- label,
- while_token,
- cond: Box::new(cond),
-@@ -2399,6 +2342,7 @@ pub(crate) mod parsing {
- #[cfg(feature = "full")]
- impl Parse for FieldValue {
- fn parse(input: ParseStream) -> Result<Self> {
-+ let attrs = input.call(Attribute::parse_outer)?;
- let member: Member = input.parse()?;
- let (colon_token, value) = if input.peek(Token![:]) || !member.is_named() {
- let colon_token: Token![:] = input.parse()?;
-@@ -2416,7 +2360,7 @@ pub(crate) mod parsing {
- };
-
- Ok(FieldValue {
-- attrs: Vec::new(),
-+ attrs,
- member,
- colon_token,
- expr: value,
-@@ -2433,46 +2377,36 @@ pub(crate) mod parsing {
- let content;
- let brace_token = braced!(content in input);
- let inner_attrs = content.call(Attribute::parse_inner)?;
-+ let attrs = private::attrs(outer_attrs, inner_attrs);
-
- let mut fields = Punctuated::new();
-- loop {
-- let attrs = content.call(Attribute::parse_outer)?;
-- // TODO: optimize using advance_to
-- if content.fork().parse::<Member>().is_err() {
-- if attrs.is_empty() {
-- break;
-- } else {
-- return Err(content.error("expected struct field"));
-- }
-+ while !content.is_empty() {
-+ if content.peek(Token![..]) {
-+ return Ok(ExprStruct {
-+ attrs,
-+ brace_token,
-+ path,
-+ fields,
-+ dot2_token: Some(content.parse()?),
-+ rest: Some(Box::new(content.parse()?)),
-+ });
- }
-
-- fields.push(FieldValue {
-- attrs,
-- ..content.parse()?
-- });
--
-- if !content.peek(Token![,]) {
-+ fields.push(content.parse()?);
-+ if content.is_empty() {
- break;
- }
- let punct: Token![,] = content.parse()?;
- fields.push_punct(punct);
- }
-
-- let (dot2_token, rest) = if fields.empty_or_trailing() && content.peek(Token![..]) {
-- let dot2_token: Token![..] = content.parse()?;
-- let rest: Expr = content.parse()?;
-- (Some(dot2_token), Some(Box::new(rest)))
-- } else {
-- (None, None)
-- };
--
- Ok(ExprStruct {
-- attrs: private::attrs(outer_attrs, inner_attrs),
-+ attrs,
- brace_token,
- path,
- fields,
-- dot2_token,
-- rest,
-+ dot2_token: None,
-+ rest: None,
- })
- }
-
-@@ -2577,27 +2511,7 @@ pub(crate) mod parsing {
- let requires_comma;
- Ok(Arm {
- attrs: input.call(Attribute::parse_outer)?,
-- pat: {
-- let leading_vert: Option<Token![|]> = input.parse()?;
-- let pat: Pat = input.parse()?;
-- if leading_vert.is_some() || input.peek(Token![|]) {
-- let mut cases = Punctuated::new();
-- cases.push_value(pat);
-- while input.peek(Token![|]) {
-- let punct = input.parse()?;
-- cases.push_punct(punct);
-- let pat: Pat = input.parse()?;
-- cases.push_value(pat);
-- }
-- Pat::Or(PatOr {
-- attrs: Vec::new(),
-- leading_vert,
-- cases,
-- })
-- } else {
-- pat
-- }
-- },
-+ pat: pat::parsing::multi_pat_with_leading_vert(input)?,
- guard: {
- if input.peek(Token![if]) {
- let if_token: Token![if] = input.parse()?;
-@@ -2641,6 +2555,26 @@ pub(crate) mod parsing {
- }
- }
-
-+ fn multi_index(e: &mut Expr, dot_token: &mut Token![.], float: LitFloat) -> Result<bool> {
-+ let mut float_repr = float.to_string();
-+ let trailing_dot = float_repr.ends_with('.');
-+ if trailing_dot {
-+ float_repr.truncate(float_repr.len() - 1);
-+ }
-+ for part in float_repr.split('.') {
-+ let index = crate::parse_str(part).map_err(|err| Error::new(float.span(), err))?;
-+ let base = mem::replace(e, Expr::__Nonexhaustive);
-+ *e = Expr::Field(ExprField {
-+ attrs: Vec::new(),
-+ base: Box::new(base),
-+ dot_token: Token![.](dot_token.span),
-+ member: Member::Unnamed(index),
-+ });
-+ *dot_token = Token![.](float.span());
-+ }
-+ Ok(!trailing_dot)
-+ }
-+
- #[cfg(feature = "full")]
- impl Member {
- fn is_named(&self) -> bool {
-diff --git a/third_party/rust/syn/src/ext.rs b/third_party/rust/syn/src/ext.rs
-index d09577a27a..4f9bc145d9 100644
---- a/third_party/rust/syn/src/ext.rs
-+++ b/third_party/rust/syn/src/ext.rs
-@@ -1,6 +1,6 @@
- //! Extension traits to provide parsing methods on foreign types.
- //!
--//! *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.*
-
- use proc_macro2::Ident;
-
-@@ -16,7 +16,7 @@ use crate::token::CustomToken;
- /// This trait is sealed and cannot be implemented for types outside of Syn. It
- /// is implemented only for `proc_macro2::Ident`.
- ///
--/// *This trait is available if Syn is built with the `"parsing"` feature.*
-+/// *This trait is available only if Syn is built with the `"parsing"` feature.*
- pub trait IdentExt: Sized + private::Sealed {
- /// Parses any identifier including keywords.
- ///
-@@ -129,7 +129,13 @@ mod private {
-
- impl Sealed for Ident {}
-
-- #[derive(Copy, Clone)]
- pub struct PeekFn;
- pub struct IdentAny;
-+
-+ impl Copy for PeekFn {}
-+ impl Clone for PeekFn {
-+ fn clone(&self) -> Self {
-+ *self
-+ }
-+ }
- }
-diff --git a/third_party/rust/syn/src/file.rs b/third_party/rust/syn/src/file.rs
-index 88c02fe832..c8fab63cd9 100644
---- a/third_party/rust/syn/src/file.rs
-+++ b/third_party/rust/syn/src/file.rs
-@@ -3,7 +3,7 @@ use super::*;
- ast_struct! {
- /// A complete file of Rust source code.
- ///
-- /// *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.*
- ///
- /// # Example
- ///
-@@ -37,6 +37,8 @@ ast_struct! {
- /// file.read_to_string(&mut src).expect("Unable to read file");
- ///
- /// let syntax = syn::parse_file(&src).expect("Unable to parse file");
-+ ///
-+ /// // Debug impl is available if Syn is built with "extra-traits" feature.
- /// println!("{:#?}", syntax);
- /// }
- /// ```
-diff --git a/third_party/rust/syn/src/gen/clone.rs b/third_party/rust/syn/src/gen/clone.rs
-new file mode 100644
-index 0000000000..bea3887013
---- /dev/null
-+++ b/third_party/rust/syn/src/gen/clone.rs
-@@ -0,0 +1,2051 @@
-+// This file is @generated by syn-internal-codegen.
-+// It is not intended for manual editing.
-+
-+#![allow(clippy::clone_on_copy, clippy::expl_impl_clone_on_copy)]
-+use crate::*;
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Abi {
-+ fn clone(&self) -> Self {
-+ Abi {
-+ extern_token: self.extern_token.clone(),
-+ name: self.name.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for AngleBracketedGenericArguments {
-+ fn clone(&self) -> Self {
-+ AngleBracketedGenericArguments {
-+ colon2_token: self.colon2_token.clone(),
-+ lt_token: self.lt_token.clone(),
-+ args: self.args.clone(),
-+ gt_token: self.gt_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for Arm {
-+ fn clone(&self) -> Self {
-+ Arm {
-+ attrs: self.attrs.clone(),
-+ pat: self.pat.clone(),
-+ guard: self.guard.clone(),
-+ fat_arrow_token: self.fat_arrow_token.clone(),
-+ body: self.body.clone(),
-+ comma: self.comma.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Copy for AttrStyle {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for AttrStyle {
-+ fn clone(&self) -> Self {
-+ *self
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Attribute {
-+ fn clone(&self) -> Self {
-+ Attribute {
-+ pound_token: self.pound_token.clone(),
-+ style: self.style.clone(),
-+ bracket_token: self.bracket_token.clone(),
-+ path: self.path.clone(),
-+ tokens: self.tokens.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for BareFnArg {
-+ fn clone(&self) -> Self {
-+ BareFnArg {
-+ attrs: self.attrs.clone(),
-+ name: self.name.clone(),
-+ ty: self.ty.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Copy for BinOp {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for BinOp {
-+ fn clone(&self) -> Self {
-+ *self
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Binding {
-+ fn clone(&self) -> Self {
-+ Binding {
-+ ident: self.ident.clone(),
-+ eq_token: self.eq_token.clone(),
-+ ty: self.ty.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for Block {
-+ fn clone(&self) -> Self {
-+ Block {
-+ brace_token: self.brace_token.clone(),
-+ stmts: self.stmts.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for BoundLifetimes {
-+ fn clone(&self) -> Self {
-+ BoundLifetimes {
-+ for_token: self.for_token.clone(),
-+ lt_token: self.lt_token.clone(),
-+ lifetimes: self.lifetimes.clone(),
-+ gt_token: self.gt_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for ConstParam {
-+ fn clone(&self) -> Self {
-+ ConstParam {
-+ attrs: self.attrs.clone(),
-+ const_token: self.const_token.clone(),
-+ ident: self.ident.clone(),
-+ colon_token: self.colon_token.clone(),
-+ ty: self.ty.clone(),
-+ eq_token: self.eq_token.clone(),
-+ default: self.default.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Constraint {
-+ fn clone(&self) -> Self {
-+ Constraint {
-+ ident: self.ident.clone(),
-+ colon_token: self.colon_token.clone(),
-+ bounds: self.bounds.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "derive")]
-+impl Clone for Data {
-+ fn clone(&self) -> Self {
-+ match self {
-+ Data::Struct(v0) => Data::Struct(v0.clone()),
-+ Data::Enum(v0) => Data::Enum(v0.clone()),
-+ Data::Union(v0) => Data::Union(v0.clone()),
-+ }
-+ }
-+}
-+#[cfg(feature = "derive")]
-+impl Clone for DataEnum {
-+ fn clone(&self) -> Self {
-+ DataEnum {
-+ enum_token: self.enum_token.clone(),
-+ brace_token: self.brace_token.clone(),
-+ variants: self.variants.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "derive")]
-+impl Clone for DataStruct {
-+ fn clone(&self) -> Self {
-+ DataStruct {
-+ struct_token: self.struct_token.clone(),
-+ fields: self.fields.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "derive")]
-+impl Clone for DataUnion {
-+ fn clone(&self) -> Self {
-+ DataUnion {
-+ union_token: self.union_token.clone(),
-+ fields: self.fields.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "derive")]
-+impl Clone for DeriveInput {
-+ fn clone(&self) -> Self {
-+ DeriveInput {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ ident: self.ident.clone(),
-+ generics: self.generics.clone(),
-+ data: self.data.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Expr {
-+ fn clone(&self) -> Self {
-+ match self {
-+ #[cfg(feature = "full")]
-+ Expr::Array(v0) => Expr::Array(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Assign(v0) => Expr::Assign(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::AssignOp(v0) => Expr::AssignOp(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Async(v0) => Expr::Async(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Await(v0) => Expr::Await(v0.clone()),
-+ Expr::Binary(v0) => Expr::Binary(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Block(v0) => Expr::Block(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Box(v0) => Expr::Box(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Break(v0) => Expr::Break(v0.clone()),
-+ Expr::Call(v0) => Expr::Call(v0.clone()),
-+ Expr::Cast(v0) => Expr::Cast(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Closure(v0) => Expr::Closure(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Continue(v0) => Expr::Continue(v0.clone()),
-+ Expr::Field(v0) => Expr::Field(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::ForLoop(v0) => Expr::ForLoop(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Group(v0) => Expr::Group(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::If(v0) => Expr::If(v0.clone()),
-+ Expr::Index(v0) => Expr::Index(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Let(v0) => Expr::Let(v0.clone()),
-+ Expr::Lit(v0) => Expr::Lit(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Loop(v0) => Expr::Loop(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Macro(v0) => Expr::Macro(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Match(v0) => Expr::Match(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::MethodCall(v0) => Expr::MethodCall(v0.clone()),
-+ Expr::Paren(v0) => Expr::Paren(v0.clone()),
-+ Expr::Path(v0) => Expr::Path(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Range(v0) => Expr::Range(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Reference(v0) => Expr::Reference(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Repeat(v0) => Expr::Repeat(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Return(v0) => Expr::Return(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Struct(v0) => Expr::Struct(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Try(v0) => Expr::Try(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::TryBlock(v0) => Expr::TryBlock(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Tuple(v0) => Expr::Tuple(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Type(v0) => Expr::Type(v0.clone()),
-+ Expr::Unary(v0) => Expr::Unary(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Unsafe(v0) => Expr::Unsafe(v0.clone()),
-+ Expr::Verbatim(v0) => Expr::Verbatim(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::While(v0) => Expr::While(v0.clone()),
-+ #[cfg(feature = "full")]
-+ Expr::Yield(v0) => Expr::Yield(v0.clone()),
-+ _ => unreachable!(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprArray {
-+ fn clone(&self) -> Self {
-+ ExprArray {
-+ attrs: self.attrs.clone(),
-+ bracket_token: self.bracket_token.clone(),
-+ elems: self.elems.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprAssign {
-+ fn clone(&self) -> Self {
-+ ExprAssign {
-+ attrs: self.attrs.clone(),
-+ left: self.left.clone(),
-+ eq_token: self.eq_token.clone(),
-+ right: self.right.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprAssignOp {
-+ fn clone(&self) -> Self {
-+ ExprAssignOp {
-+ attrs: self.attrs.clone(),
-+ left: self.left.clone(),
-+ op: self.op.clone(),
-+ right: self.right.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprAsync {
-+ fn clone(&self) -> Self {
-+ ExprAsync {
-+ attrs: self.attrs.clone(),
-+ async_token: self.async_token.clone(),
-+ capture: self.capture.clone(),
-+ block: self.block.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprAwait {
-+ fn clone(&self) -> Self {
-+ ExprAwait {
-+ attrs: self.attrs.clone(),
-+ base: self.base.clone(),
-+ dot_token: self.dot_token.clone(),
-+ await_token: self.await_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for ExprBinary {
-+ fn clone(&self) -> Self {
-+ ExprBinary {
-+ attrs: self.attrs.clone(),
-+ left: self.left.clone(),
-+ op: self.op.clone(),
-+ right: self.right.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprBlock {
-+ fn clone(&self) -> Self {
-+ ExprBlock {
-+ attrs: self.attrs.clone(),
-+ label: self.label.clone(),
-+ block: self.block.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprBox {
-+ fn clone(&self) -> Self {
-+ ExprBox {
-+ attrs: self.attrs.clone(),
-+ box_token: self.box_token.clone(),
-+ expr: self.expr.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprBreak {
-+ fn clone(&self) -> Self {
-+ ExprBreak {
-+ attrs: self.attrs.clone(),
-+ break_token: self.break_token.clone(),
-+ label: self.label.clone(),
-+ expr: self.expr.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for ExprCall {
-+ fn clone(&self) -> Self {
-+ ExprCall {
-+ attrs: self.attrs.clone(),
-+ func: self.func.clone(),
-+ paren_token: self.paren_token.clone(),
-+ args: self.args.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for ExprCast {
-+ fn clone(&self) -> Self {
-+ ExprCast {
-+ attrs: self.attrs.clone(),
-+ expr: self.expr.clone(),
-+ as_token: self.as_token.clone(),
-+ ty: self.ty.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprClosure {
-+ fn clone(&self) -> Self {
-+ ExprClosure {
-+ attrs: self.attrs.clone(),
-+ asyncness: self.asyncness.clone(),
-+ movability: self.movability.clone(),
-+ capture: self.capture.clone(),
-+ or1_token: self.or1_token.clone(),
-+ inputs: self.inputs.clone(),
-+ or2_token: self.or2_token.clone(),
-+ output: self.output.clone(),
-+ body: self.body.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprContinue {
-+ fn clone(&self) -> Self {
-+ ExprContinue {
-+ attrs: self.attrs.clone(),
-+ continue_token: self.continue_token.clone(),
-+ label: self.label.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for ExprField {
-+ fn clone(&self) -> Self {
-+ ExprField {
-+ attrs: self.attrs.clone(),
-+ base: self.base.clone(),
-+ dot_token: self.dot_token.clone(),
-+ member: self.member.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprForLoop {
-+ fn clone(&self) -> Self {
-+ ExprForLoop {
-+ attrs: self.attrs.clone(),
-+ label: self.label.clone(),
-+ for_token: self.for_token.clone(),
-+ pat: self.pat.clone(),
-+ in_token: self.in_token.clone(),
-+ expr: self.expr.clone(),
-+ body: self.body.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprGroup {
-+ fn clone(&self) -> Self {
-+ ExprGroup {
-+ attrs: self.attrs.clone(),
-+ group_token: self.group_token.clone(),
-+ expr: self.expr.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprIf {
-+ fn clone(&self) -> Self {
-+ ExprIf {
-+ attrs: self.attrs.clone(),
-+ if_token: self.if_token.clone(),
-+ cond: self.cond.clone(),
-+ then_branch: self.then_branch.clone(),
-+ else_branch: self.else_branch.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for ExprIndex {
-+ fn clone(&self) -> Self {
-+ ExprIndex {
-+ attrs: self.attrs.clone(),
-+ expr: self.expr.clone(),
-+ bracket_token: self.bracket_token.clone(),
-+ index: self.index.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprLet {
-+ fn clone(&self) -> Self {
-+ ExprLet {
-+ attrs: self.attrs.clone(),
-+ let_token: self.let_token.clone(),
-+ pat: self.pat.clone(),
-+ eq_token: self.eq_token.clone(),
-+ expr: self.expr.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for ExprLit {
-+ fn clone(&self) -> Self {
-+ ExprLit {
-+ attrs: self.attrs.clone(),
-+ lit: self.lit.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprLoop {
-+ fn clone(&self) -> Self {
-+ ExprLoop {
-+ attrs: self.attrs.clone(),
-+ label: self.label.clone(),
-+ loop_token: self.loop_token.clone(),
-+ body: self.body.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprMacro {
-+ fn clone(&self) -> Self {
-+ ExprMacro {
-+ attrs: self.attrs.clone(),
-+ mac: self.mac.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprMatch {
-+ fn clone(&self) -> Self {
-+ ExprMatch {
-+ attrs: self.attrs.clone(),
-+ match_token: self.match_token.clone(),
-+ expr: self.expr.clone(),
-+ brace_token: self.brace_token.clone(),
-+ arms: self.arms.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprMethodCall {
-+ fn clone(&self) -> Self {
-+ ExprMethodCall {
-+ attrs: self.attrs.clone(),
-+ receiver: self.receiver.clone(),
-+ dot_token: self.dot_token.clone(),
-+ method: self.method.clone(),
-+ turbofish: self.turbofish.clone(),
-+ paren_token: self.paren_token.clone(),
-+ args: self.args.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for ExprParen {
-+ fn clone(&self) -> Self {
-+ ExprParen {
-+ attrs: self.attrs.clone(),
-+ paren_token: self.paren_token.clone(),
-+ expr: self.expr.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for ExprPath {
-+ fn clone(&self) -> Self {
-+ ExprPath {
-+ attrs: self.attrs.clone(),
-+ qself: self.qself.clone(),
-+ path: self.path.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprRange {
-+ fn clone(&self) -> Self {
-+ ExprRange {
-+ attrs: self.attrs.clone(),
-+ from: self.from.clone(),
-+ limits: self.limits.clone(),
-+ to: self.to.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprReference {
-+ fn clone(&self) -> Self {
-+ ExprReference {
-+ attrs: self.attrs.clone(),
-+ and_token: self.and_token.clone(),
-+ raw: self.raw.clone(),
-+ mutability: self.mutability.clone(),
-+ expr: self.expr.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprRepeat {
-+ fn clone(&self) -> Self {
-+ ExprRepeat {
-+ attrs: self.attrs.clone(),
-+ bracket_token: self.bracket_token.clone(),
-+ expr: self.expr.clone(),
-+ semi_token: self.semi_token.clone(),
-+ len: self.len.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprReturn {
-+ fn clone(&self) -> Self {
-+ ExprReturn {
-+ attrs: self.attrs.clone(),
-+ return_token: self.return_token.clone(),
-+ expr: self.expr.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprStruct {
-+ fn clone(&self) -> Self {
-+ ExprStruct {
-+ attrs: self.attrs.clone(),
-+ path: self.path.clone(),
-+ brace_token: self.brace_token.clone(),
-+ fields: self.fields.clone(),
-+ dot2_token: self.dot2_token.clone(),
-+ rest: self.rest.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprTry {
-+ fn clone(&self) -> Self {
-+ ExprTry {
-+ attrs: self.attrs.clone(),
-+ expr: self.expr.clone(),
-+ question_token: self.question_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprTryBlock {
-+ fn clone(&self) -> Self {
-+ ExprTryBlock {
-+ attrs: self.attrs.clone(),
-+ try_token: self.try_token.clone(),
-+ block: self.block.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprTuple {
-+ fn clone(&self) -> Self {
-+ ExprTuple {
-+ attrs: self.attrs.clone(),
-+ paren_token: self.paren_token.clone(),
-+ elems: self.elems.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprType {
-+ fn clone(&self) -> Self {
-+ ExprType {
-+ attrs: self.attrs.clone(),
-+ expr: self.expr.clone(),
-+ colon_token: self.colon_token.clone(),
-+ ty: self.ty.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for ExprUnary {
-+ fn clone(&self) -> Self {
-+ ExprUnary {
-+ attrs: self.attrs.clone(),
-+ op: self.op.clone(),
-+ expr: self.expr.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprUnsafe {
-+ fn clone(&self) -> Self {
-+ ExprUnsafe {
-+ attrs: self.attrs.clone(),
-+ unsafe_token: self.unsafe_token.clone(),
-+ block: self.block.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprWhile {
-+ fn clone(&self) -> Self {
-+ ExprWhile {
-+ attrs: self.attrs.clone(),
-+ label: self.label.clone(),
-+ while_token: self.while_token.clone(),
-+ cond: self.cond.clone(),
-+ body: self.body.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ExprYield {
-+ fn clone(&self) -> Self {
-+ ExprYield {
-+ attrs: self.attrs.clone(),
-+ yield_token: self.yield_token.clone(),
-+ expr: self.expr.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Field {
-+ fn clone(&self) -> Self {
-+ Field {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ ident: self.ident.clone(),
-+ colon_token: self.colon_token.clone(),
-+ ty: self.ty.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for FieldPat {
-+ fn clone(&self) -> Self {
-+ FieldPat {
-+ attrs: self.attrs.clone(),
-+ member: self.member.clone(),
-+ colon_token: self.colon_token.clone(),
-+ pat: self.pat.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for FieldValue {
-+ fn clone(&self) -> Self {
-+ FieldValue {
-+ attrs: self.attrs.clone(),
-+ member: self.member.clone(),
-+ colon_token: self.colon_token.clone(),
-+ expr: self.expr.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Fields {
-+ fn clone(&self) -> Self {
-+ match self {
-+ Fields::Named(v0) => Fields::Named(v0.clone()),
-+ Fields::Unnamed(v0) => Fields::Unnamed(v0.clone()),
-+ Fields::Unit => Fields::Unit,
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for FieldsNamed {
-+ fn clone(&self) -> Self {
-+ FieldsNamed {
-+ brace_token: self.brace_token.clone(),
-+ named: self.named.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for FieldsUnnamed {
-+ fn clone(&self) -> Self {
-+ FieldsUnnamed {
-+ paren_token: self.paren_token.clone(),
-+ unnamed: self.unnamed.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for File {
-+ fn clone(&self) -> Self {
-+ File {
-+ shebang: self.shebang.clone(),
-+ attrs: self.attrs.clone(),
-+ items: self.items.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for FnArg {
-+ fn clone(&self) -> Self {
-+ match self {
-+ FnArg::Receiver(v0) => FnArg::Receiver(v0.clone()),
-+ FnArg::Typed(v0) => FnArg::Typed(v0.clone()),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ForeignItem {
-+ fn clone(&self) -> Self {
-+ match self {
-+ ForeignItem::Fn(v0) => ForeignItem::Fn(v0.clone()),
-+ ForeignItem::Static(v0) => ForeignItem::Static(v0.clone()),
-+ ForeignItem::Type(v0) => ForeignItem::Type(v0.clone()),
-+ ForeignItem::Macro(v0) => ForeignItem::Macro(v0.clone()),
-+ ForeignItem::Verbatim(v0) => ForeignItem::Verbatim(v0.clone()),
-+ _ => unreachable!(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ForeignItemFn {
-+ fn clone(&self) -> Self {
-+ ForeignItemFn {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ sig: self.sig.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ForeignItemMacro {
-+ fn clone(&self) -> Self {
-+ ForeignItemMacro {
-+ attrs: self.attrs.clone(),
-+ mac: self.mac.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ForeignItemStatic {
-+ fn clone(&self) -> Self {
-+ ForeignItemStatic {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ static_token: self.static_token.clone(),
-+ mutability: self.mutability.clone(),
-+ ident: self.ident.clone(),
-+ colon_token: self.colon_token.clone(),
-+ ty: self.ty.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ForeignItemType {
-+ fn clone(&self) -> Self {
-+ ForeignItemType {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ type_token: self.type_token.clone(),
-+ ident: self.ident.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for GenericArgument {
-+ fn clone(&self) -> Self {
-+ match self {
-+ GenericArgument::Lifetime(v0) => GenericArgument::Lifetime(v0.clone()),
-+ GenericArgument::Type(v0) => GenericArgument::Type(v0.clone()),
-+ GenericArgument::Binding(v0) => GenericArgument::Binding(v0.clone()),
-+ GenericArgument::Constraint(v0) => GenericArgument::Constraint(v0.clone()),
-+ GenericArgument::Const(v0) => GenericArgument::Const(v0.clone()),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for GenericMethodArgument {
-+ fn clone(&self) -> Self {
-+ match self {
-+ GenericMethodArgument::Type(v0) => GenericMethodArgument::Type(v0.clone()),
-+ GenericMethodArgument::Const(v0) => GenericMethodArgument::Const(v0.clone()),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for GenericParam {
-+ fn clone(&self) -> Self {
-+ match self {
-+ GenericParam::Type(v0) => GenericParam::Type(v0.clone()),
-+ GenericParam::Lifetime(v0) => GenericParam::Lifetime(v0.clone()),
-+ GenericParam::Const(v0) => GenericParam::Const(v0.clone()),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Generics {
-+ fn clone(&self) -> Self {
-+ Generics {
-+ lt_token: self.lt_token.clone(),
-+ params: self.params.clone(),
-+ gt_token: self.gt_token.clone(),
-+ where_clause: self.where_clause.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ImplItem {
-+ fn clone(&self) -> Self {
-+ match self {
-+ ImplItem::Const(v0) => ImplItem::Const(v0.clone()),
-+ ImplItem::Method(v0) => ImplItem::Method(v0.clone()),
-+ ImplItem::Type(v0) => ImplItem::Type(v0.clone()),
-+ ImplItem::Macro(v0) => ImplItem::Macro(v0.clone()),
-+ ImplItem::Verbatim(v0) => ImplItem::Verbatim(v0.clone()),
-+ _ => unreachable!(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ImplItemConst {
-+ fn clone(&self) -> Self {
-+ ImplItemConst {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ defaultness: self.defaultness.clone(),
-+ const_token: self.const_token.clone(),
-+ ident: self.ident.clone(),
-+ colon_token: self.colon_token.clone(),
-+ ty: self.ty.clone(),
-+ eq_token: self.eq_token.clone(),
-+ expr: self.expr.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ImplItemMacro {
-+ fn clone(&self) -> Self {
-+ ImplItemMacro {
-+ attrs: self.attrs.clone(),
-+ mac: self.mac.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ImplItemMethod {
-+ fn clone(&self) -> Self {
-+ ImplItemMethod {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ defaultness: self.defaultness.clone(),
-+ sig: self.sig.clone(),
-+ block: self.block.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ImplItemType {
-+ fn clone(&self) -> Self {
-+ ImplItemType {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ defaultness: self.defaultness.clone(),
-+ type_token: self.type_token.clone(),
-+ ident: self.ident.clone(),
-+ generics: self.generics.clone(),
-+ eq_token: self.eq_token.clone(),
-+ ty: self.ty.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Index {
-+ fn clone(&self) -> Self {
-+ Index {
-+ index: self.index.clone(),
-+ span: self.span.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for Item {
-+ fn clone(&self) -> Self {
-+ match self {
-+ Item::Const(v0) => Item::Const(v0.clone()),
-+ Item::Enum(v0) => Item::Enum(v0.clone()),
-+ Item::ExternCrate(v0) => Item::ExternCrate(v0.clone()),
-+ Item::Fn(v0) => Item::Fn(v0.clone()),
-+ Item::ForeignMod(v0) => Item::ForeignMod(v0.clone()),
-+ Item::Impl(v0) => Item::Impl(v0.clone()),
-+ Item::Macro(v0) => Item::Macro(v0.clone()),
-+ Item::Macro2(v0) => Item::Macro2(v0.clone()),
-+ Item::Mod(v0) => Item::Mod(v0.clone()),
-+ Item::Static(v0) => Item::Static(v0.clone()),
-+ Item::Struct(v0) => Item::Struct(v0.clone()),
-+ Item::Trait(v0) => Item::Trait(v0.clone()),
-+ Item::TraitAlias(v0) => Item::TraitAlias(v0.clone()),
-+ Item::Type(v0) => Item::Type(v0.clone()),
-+ Item::Union(v0) => Item::Union(v0.clone()),
-+ Item::Use(v0) => Item::Use(v0.clone()),
-+ Item::Verbatim(v0) => Item::Verbatim(v0.clone()),
-+ _ => unreachable!(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ItemConst {
-+ fn clone(&self) -> Self {
-+ ItemConst {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ const_token: self.const_token.clone(),
-+ ident: self.ident.clone(),
-+ colon_token: self.colon_token.clone(),
-+ ty: self.ty.clone(),
-+ eq_token: self.eq_token.clone(),
-+ expr: self.expr.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ItemEnum {
-+ fn clone(&self) -> Self {
-+ ItemEnum {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ enum_token: self.enum_token.clone(),
-+ ident: self.ident.clone(),
-+ generics: self.generics.clone(),
-+ brace_token: self.brace_token.clone(),
-+ variants: self.variants.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ItemExternCrate {
-+ fn clone(&self) -> Self {
-+ ItemExternCrate {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ extern_token: self.extern_token.clone(),
-+ crate_token: self.crate_token.clone(),
-+ ident: self.ident.clone(),
-+ rename: self.rename.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ItemFn {
-+ fn clone(&self) -> Self {
-+ ItemFn {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ sig: self.sig.clone(),
-+ block: self.block.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ItemForeignMod {
-+ fn clone(&self) -> Self {
-+ ItemForeignMod {
-+ attrs: self.attrs.clone(),
-+ abi: self.abi.clone(),
-+ brace_token: self.brace_token.clone(),
-+ items: self.items.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ItemImpl {
-+ fn clone(&self) -> Self {
-+ ItemImpl {
-+ attrs: self.attrs.clone(),
-+ defaultness: self.defaultness.clone(),
-+ unsafety: self.unsafety.clone(),
-+ impl_token: self.impl_token.clone(),
-+ generics: self.generics.clone(),
-+ trait_: self.trait_.clone(),
-+ self_ty: self.self_ty.clone(),
-+ brace_token: self.brace_token.clone(),
-+ items: self.items.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ItemMacro {
-+ fn clone(&self) -> Self {
-+ ItemMacro {
-+ attrs: self.attrs.clone(),
-+ ident: self.ident.clone(),
-+ mac: self.mac.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ItemMacro2 {
-+ fn clone(&self) -> Self {
-+ ItemMacro2 {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ macro_token: self.macro_token.clone(),
-+ ident: self.ident.clone(),
-+ rules: self.rules.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ItemMod {
-+ fn clone(&self) -> Self {
-+ ItemMod {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ mod_token: self.mod_token.clone(),
-+ ident: self.ident.clone(),
-+ content: self.content.clone(),
-+ semi: self.semi.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ItemStatic {
-+ fn clone(&self) -> Self {
-+ ItemStatic {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ static_token: self.static_token.clone(),
-+ mutability: self.mutability.clone(),
-+ ident: self.ident.clone(),
-+ colon_token: self.colon_token.clone(),
-+ ty: self.ty.clone(),
-+ eq_token: self.eq_token.clone(),
-+ expr: self.expr.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ItemStruct {
-+ fn clone(&self) -> Self {
-+ ItemStruct {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ struct_token: self.struct_token.clone(),
-+ ident: self.ident.clone(),
-+ generics: self.generics.clone(),
-+ fields: self.fields.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ItemTrait {
-+ fn clone(&self) -> Self {
-+ ItemTrait {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ unsafety: self.unsafety.clone(),
-+ auto_token: self.auto_token.clone(),
-+ trait_token: self.trait_token.clone(),
-+ ident: self.ident.clone(),
-+ generics: self.generics.clone(),
-+ colon_token: self.colon_token.clone(),
-+ supertraits: self.supertraits.clone(),
-+ brace_token: self.brace_token.clone(),
-+ items: self.items.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ItemTraitAlias {
-+ fn clone(&self) -> Self {
-+ ItemTraitAlias {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ trait_token: self.trait_token.clone(),
-+ ident: self.ident.clone(),
-+ generics: self.generics.clone(),
-+ eq_token: self.eq_token.clone(),
-+ bounds: self.bounds.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ItemType {
-+ fn clone(&self) -> Self {
-+ ItemType {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ type_token: self.type_token.clone(),
-+ ident: self.ident.clone(),
-+ generics: self.generics.clone(),
-+ eq_token: self.eq_token.clone(),
-+ ty: self.ty.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ItemUnion {
-+ fn clone(&self) -> Self {
-+ ItemUnion {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ union_token: self.union_token.clone(),
-+ ident: self.ident.clone(),
-+ generics: self.generics.clone(),
-+ fields: self.fields.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for ItemUse {
-+ fn clone(&self) -> Self {
-+ ItemUse {
-+ attrs: self.attrs.clone(),
-+ vis: self.vis.clone(),
-+ use_token: self.use_token.clone(),
-+ leading_colon: self.leading_colon.clone(),
-+ tree: self.tree.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for Label {
-+ fn clone(&self) -> Self {
-+ Label {
-+ name: self.name.clone(),
-+ colon_token: self.colon_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for LifetimeDef {
-+ fn clone(&self) -> Self {
-+ LifetimeDef {
-+ attrs: self.attrs.clone(),
-+ lifetime: self.lifetime.clone(),
-+ colon_token: self.colon_token.clone(),
-+ bounds: self.bounds.clone(),
-+ }
-+ }
-+}
-+impl Clone for Lit {
-+ fn clone(&self) -> Self {
-+ match self {
-+ Lit::Str(v0) => Lit::Str(v0.clone()),
-+ Lit::ByteStr(v0) => Lit::ByteStr(v0.clone()),
-+ Lit::Byte(v0) => Lit::Byte(v0.clone()),
-+ Lit::Char(v0) => Lit::Char(v0.clone()),
-+ Lit::Int(v0) => Lit::Int(v0.clone()),
-+ Lit::Float(v0) => Lit::Float(v0.clone()),
-+ Lit::Bool(v0) => Lit::Bool(v0.clone()),
-+ Lit::Verbatim(v0) => Lit::Verbatim(v0.clone()),
-+ }
-+ }
-+}
-+impl Clone for LitBool {
-+ fn clone(&self) -> Self {
-+ LitBool {
-+ value: self.value.clone(),
-+ span: self.span.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for Local {
-+ fn clone(&self) -> Self {
-+ Local {
-+ attrs: self.attrs.clone(),
-+ let_token: self.let_token.clone(),
-+ pat: self.pat.clone(),
-+ init: self.init.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Macro {
-+ fn clone(&self) -> Self {
-+ Macro {
-+ path: self.path.clone(),
-+ bang_token: self.bang_token.clone(),
-+ delimiter: self.delimiter.clone(),
-+ tokens: self.tokens.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for MacroDelimiter {
-+ fn clone(&self) -> Self {
-+ match self {
-+ MacroDelimiter::Paren(v0) => MacroDelimiter::Paren(v0.clone()),
-+ MacroDelimiter::Brace(v0) => MacroDelimiter::Brace(v0.clone()),
-+ MacroDelimiter::Bracket(v0) => MacroDelimiter::Bracket(v0.clone()),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Member {
-+ fn clone(&self) -> Self {
-+ match self {
-+ Member::Named(v0) => Member::Named(v0.clone()),
-+ Member::Unnamed(v0) => Member::Unnamed(v0.clone()),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Meta {
-+ fn clone(&self) -> Self {
-+ match self {
-+ Meta::Path(v0) => Meta::Path(v0.clone()),
-+ Meta::List(v0) => Meta::List(v0.clone()),
-+ Meta::NameValue(v0) => Meta::NameValue(v0.clone()),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for MetaList {
-+ fn clone(&self) -> Self {
-+ MetaList {
-+ path: self.path.clone(),
-+ paren_token: self.paren_token.clone(),
-+ nested: self.nested.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for MetaNameValue {
-+ fn clone(&self) -> Self {
-+ MetaNameValue {
-+ path: self.path.clone(),
-+ eq_token: self.eq_token.clone(),
-+ lit: self.lit.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for MethodTurbofish {
-+ fn clone(&self) -> Self {
-+ MethodTurbofish {
-+ colon2_token: self.colon2_token.clone(),
-+ lt_token: self.lt_token.clone(),
-+ args: self.args.clone(),
-+ gt_token: self.gt_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for NestedMeta {
-+ fn clone(&self) -> Self {
-+ match self {
-+ NestedMeta::Meta(v0) => NestedMeta::Meta(v0.clone()),
-+ NestedMeta::Lit(v0) => NestedMeta::Lit(v0.clone()),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for ParenthesizedGenericArguments {
-+ fn clone(&self) -> Self {
-+ ParenthesizedGenericArguments {
-+ paren_token: self.paren_token.clone(),
-+ inputs: self.inputs.clone(),
-+ output: self.output.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for Pat {
-+ fn clone(&self) -> Self {
-+ match self {
-+ Pat::Box(v0) => Pat::Box(v0.clone()),
-+ Pat::Ident(v0) => Pat::Ident(v0.clone()),
-+ Pat::Lit(v0) => Pat::Lit(v0.clone()),
-+ Pat::Macro(v0) => Pat::Macro(v0.clone()),
-+ Pat::Or(v0) => Pat::Or(v0.clone()),
-+ Pat::Path(v0) => Pat::Path(v0.clone()),
-+ Pat::Range(v0) => Pat::Range(v0.clone()),
-+ Pat::Reference(v0) => Pat::Reference(v0.clone()),
-+ Pat::Rest(v0) => Pat::Rest(v0.clone()),
-+ Pat::Slice(v0) => Pat::Slice(v0.clone()),
-+ Pat::Struct(v0) => Pat::Struct(v0.clone()),
-+ Pat::Tuple(v0) => Pat::Tuple(v0.clone()),
-+ Pat::TupleStruct(v0) => Pat::TupleStruct(v0.clone()),
-+ Pat::Type(v0) => Pat::Type(v0.clone()),
-+ Pat::Verbatim(v0) => Pat::Verbatim(v0.clone()),
-+ Pat::Wild(v0) => Pat::Wild(v0.clone()),
-+ _ => unreachable!(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for PatBox {
-+ fn clone(&self) -> Self {
-+ PatBox {
-+ attrs: self.attrs.clone(),
-+ box_token: self.box_token.clone(),
-+ pat: self.pat.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for PatIdent {
-+ fn clone(&self) -> Self {
-+ PatIdent {
-+ attrs: self.attrs.clone(),
-+ by_ref: self.by_ref.clone(),
-+ mutability: self.mutability.clone(),
-+ ident: self.ident.clone(),
-+ subpat: self.subpat.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for PatLit {
-+ fn clone(&self) -> Self {
-+ PatLit {
-+ attrs: self.attrs.clone(),
-+ expr: self.expr.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for PatMacro {
-+ fn clone(&self) -> Self {
-+ PatMacro {
-+ attrs: self.attrs.clone(),
-+ mac: self.mac.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for PatOr {
-+ fn clone(&self) -> Self {
-+ PatOr {
-+ attrs: self.attrs.clone(),
-+ leading_vert: self.leading_vert.clone(),
-+ cases: self.cases.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for PatPath {
-+ fn clone(&self) -> Self {
-+ PatPath {
-+ attrs: self.attrs.clone(),
-+ qself: self.qself.clone(),
-+ path: self.path.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for PatRange {
-+ fn clone(&self) -> Self {
-+ PatRange {
-+ attrs: self.attrs.clone(),
-+ lo: self.lo.clone(),
-+ limits: self.limits.clone(),
-+ hi: self.hi.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for PatReference {
-+ fn clone(&self) -> Self {
-+ PatReference {
-+ attrs: self.attrs.clone(),
-+ and_token: self.and_token.clone(),
-+ mutability: self.mutability.clone(),
-+ pat: self.pat.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for PatRest {
-+ fn clone(&self) -> Self {
-+ PatRest {
-+ attrs: self.attrs.clone(),
-+ dot2_token: self.dot2_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for PatSlice {
-+ fn clone(&self) -> Self {
-+ PatSlice {
-+ attrs: self.attrs.clone(),
-+ bracket_token: self.bracket_token.clone(),
-+ elems: self.elems.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for PatStruct {
-+ fn clone(&self) -> Self {
-+ PatStruct {
-+ attrs: self.attrs.clone(),
-+ path: self.path.clone(),
-+ brace_token: self.brace_token.clone(),
-+ fields: self.fields.clone(),
-+ dot2_token: self.dot2_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for PatTuple {
-+ fn clone(&self) -> Self {
-+ PatTuple {
-+ attrs: self.attrs.clone(),
-+ paren_token: self.paren_token.clone(),
-+ elems: self.elems.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for PatTupleStruct {
-+ fn clone(&self) -> Self {
-+ PatTupleStruct {
-+ attrs: self.attrs.clone(),
-+ path: self.path.clone(),
-+ pat: self.pat.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for PatType {
-+ fn clone(&self) -> Self {
-+ PatType {
-+ attrs: self.attrs.clone(),
-+ pat: self.pat.clone(),
-+ colon_token: self.colon_token.clone(),
-+ ty: self.ty.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for PatWild {
-+ fn clone(&self) -> Self {
-+ PatWild {
-+ attrs: self.attrs.clone(),
-+ underscore_token: self.underscore_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Path {
-+ fn clone(&self) -> Self {
-+ Path {
-+ leading_colon: self.leading_colon.clone(),
-+ segments: self.segments.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for PathArguments {
-+ fn clone(&self) -> Self {
-+ match self {
-+ PathArguments::None => PathArguments::None,
-+ PathArguments::AngleBracketed(v0) => PathArguments::AngleBracketed(v0.clone()),
-+ PathArguments::Parenthesized(v0) => PathArguments::Parenthesized(v0.clone()),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for PathSegment {
-+ fn clone(&self) -> Self {
-+ PathSegment {
-+ ident: self.ident.clone(),
-+ arguments: self.arguments.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for PredicateEq {
-+ fn clone(&self) -> Self {
-+ PredicateEq {
-+ lhs_ty: self.lhs_ty.clone(),
-+ eq_token: self.eq_token.clone(),
-+ rhs_ty: self.rhs_ty.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for PredicateLifetime {
-+ fn clone(&self) -> Self {
-+ PredicateLifetime {
-+ lifetime: self.lifetime.clone(),
-+ colon_token: self.colon_token.clone(),
-+ bounds: self.bounds.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for PredicateType {
-+ fn clone(&self) -> Self {
-+ PredicateType {
-+ lifetimes: self.lifetimes.clone(),
-+ bounded_ty: self.bounded_ty.clone(),
-+ colon_token: self.colon_token.clone(),
-+ bounds: self.bounds.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for QSelf {
-+ fn clone(&self) -> Self {
-+ QSelf {
-+ lt_token: self.lt_token.clone(),
-+ ty: self.ty.clone(),
-+ position: self.position.clone(),
-+ as_token: self.as_token.clone(),
-+ gt_token: self.gt_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Copy for RangeLimits {}
-+#[cfg(feature = "full")]
-+impl Clone for RangeLimits {
-+ fn clone(&self) -> Self {
-+ *self
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for Receiver {
-+ fn clone(&self) -> Self {
-+ Receiver {
-+ attrs: self.attrs.clone(),
-+ reference: self.reference.clone(),
-+ mutability: self.mutability.clone(),
-+ self_token: self.self_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for ReturnType {
-+ fn clone(&self) -> Self {
-+ match self {
-+ ReturnType::Default => ReturnType::Default,
-+ ReturnType::Type(v0, v1) => ReturnType::Type(v0.clone(), v1.clone()),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for Signature {
-+ fn clone(&self) -> Self {
-+ Signature {
-+ constness: self.constness.clone(),
-+ asyncness: self.asyncness.clone(),
-+ unsafety: self.unsafety.clone(),
-+ abi: self.abi.clone(),
-+ fn_token: self.fn_token.clone(),
-+ ident: self.ident.clone(),
-+ generics: self.generics.clone(),
-+ paren_token: self.paren_token.clone(),
-+ inputs: self.inputs.clone(),
-+ variadic: self.variadic.clone(),
-+ output: self.output.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for Stmt {
-+ fn clone(&self) -> Self {
-+ match self {
-+ Stmt::Local(v0) => Stmt::Local(v0.clone()),
-+ Stmt::Item(v0) => Stmt::Item(v0.clone()),
-+ Stmt::Expr(v0) => Stmt::Expr(v0.clone()),
-+ Stmt::Semi(v0, v1) => Stmt::Semi(v0.clone(), v1.clone()),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TraitBound {
-+ fn clone(&self) -> Self {
-+ TraitBound {
-+ paren_token: self.paren_token.clone(),
-+ modifier: self.modifier.clone(),
-+ lifetimes: self.lifetimes.clone(),
-+ path: self.path.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Copy for TraitBoundModifier {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TraitBoundModifier {
-+ fn clone(&self) -> Self {
-+ *self
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for TraitItem {
-+ fn clone(&self) -> Self {
-+ match self {
-+ TraitItem::Const(v0) => TraitItem::Const(v0.clone()),
-+ TraitItem::Method(v0) => TraitItem::Method(v0.clone()),
-+ TraitItem::Type(v0) => TraitItem::Type(v0.clone()),
-+ TraitItem::Macro(v0) => TraitItem::Macro(v0.clone()),
-+ TraitItem::Verbatim(v0) => TraitItem::Verbatim(v0.clone()),
-+ _ => unreachable!(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for TraitItemConst {
-+ fn clone(&self) -> Self {
-+ TraitItemConst {
-+ attrs: self.attrs.clone(),
-+ const_token: self.const_token.clone(),
-+ ident: self.ident.clone(),
-+ colon_token: self.colon_token.clone(),
-+ ty: self.ty.clone(),
-+ default: self.default.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for TraitItemMacro {
-+ fn clone(&self) -> Self {
-+ TraitItemMacro {
-+ attrs: self.attrs.clone(),
-+ mac: self.mac.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for TraitItemMethod {
-+ fn clone(&self) -> Self {
-+ TraitItemMethod {
-+ attrs: self.attrs.clone(),
-+ sig: self.sig.clone(),
-+ default: self.default.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for TraitItemType {
-+ fn clone(&self) -> Self {
-+ TraitItemType {
-+ attrs: self.attrs.clone(),
-+ type_token: self.type_token.clone(),
-+ ident: self.ident.clone(),
-+ generics: self.generics.clone(),
-+ colon_token: self.colon_token.clone(),
-+ bounds: self.bounds.clone(),
-+ default: self.default.clone(),
-+ semi_token: self.semi_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Type {
-+ fn clone(&self) -> Self {
-+ match self {
-+ Type::Array(v0) => Type::Array(v0.clone()),
-+ Type::BareFn(v0) => Type::BareFn(v0.clone()),
-+ Type::Group(v0) => Type::Group(v0.clone()),
-+ Type::ImplTrait(v0) => Type::ImplTrait(v0.clone()),
-+ Type::Infer(v0) => Type::Infer(v0.clone()),
-+ Type::Macro(v0) => Type::Macro(v0.clone()),
-+ Type::Never(v0) => Type::Never(v0.clone()),
-+ Type::Paren(v0) => Type::Paren(v0.clone()),
-+ Type::Path(v0) => Type::Path(v0.clone()),
-+ Type::Ptr(v0) => Type::Ptr(v0.clone()),
-+ Type::Reference(v0) => Type::Reference(v0.clone()),
-+ Type::Slice(v0) => Type::Slice(v0.clone()),
-+ Type::TraitObject(v0) => Type::TraitObject(v0.clone()),
-+ Type::Tuple(v0) => Type::Tuple(v0.clone()),
-+ Type::Verbatim(v0) => Type::Verbatim(v0.clone()),
-+ _ => unreachable!(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TypeArray {
-+ fn clone(&self) -> Self {
-+ TypeArray {
-+ bracket_token: self.bracket_token.clone(),
-+ elem: self.elem.clone(),
-+ semi_token: self.semi_token.clone(),
-+ len: self.len.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TypeBareFn {
-+ fn clone(&self) -> Self {
-+ TypeBareFn {
-+ lifetimes: self.lifetimes.clone(),
-+ unsafety: self.unsafety.clone(),
-+ abi: self.abi.clone(),
-+ fn_token: self.fn_token.clone(),
-+ paren_token: self.paren_token.clone(),
-+ inputs: self.inputs.clone(),
-+ variadic: self.variadic.clone(),
-+ output: self.output.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TypeGroup {
-+ fn clone(&self) -> Self {
-+ TypeGroup {
-+ group_token: self.group_token.clone(),
-+ elem: self.elem.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TypeImplTrait {
-+ fn clone(&self) -> Self {
-+ TypeImplTrait {
-+ impl_token: self.impl_token.clone(),
-+ bounds: self.bounds.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TypeInfer {
-+ fn clone(&self) -> Self {
-+ TypeInfer {
-+ underscore_token: self.underscore_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TypeMacro {
-+ fn clone(&self) -> Self {
-+ TypeMacro {
-+ mac: self.mac.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TypeNever {
-+ fn clone(&self) -> Self {
-+ TypeNever {
-+ bang_token: self.bang_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TypeParam {
-+ fn clone(&self) -> Self {
-+ TypeParam {
-+ attrs: self.attrs.clone(),
-+ ident: self.ident.clone(),
-+ colon_token: self.colon_token.clone(),
-+ bounds: self.bounds.clone(),
-+ eq_token: self.eq_token.clone(),
-+ default: self.default.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TypeParamBound {
-+ fn clone(&self) -> Self {
-+ match self {
-+ TypeParamBound::Trait(v0) => TypeParamBound::Trait(v0.clone()),
-+ TypeParamBound::Lifetime(v0) => TypeParamBound::Lifetime(v0.clone()),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TypeParen {
-+ fn clone(&self) -> Self {
-+ TypeParen {
-+ paren_token: self.paren_token.clone(),
-+ elem: self.elem.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TypePath {
-+ fn clone(&self) -> Self {
-+ TypePath {
-+ qself: self.qself.clone(),
-+ path: self.path.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TypePtr {
-+ fn clone(&self) -> Self {
-+ TypePtr {
-+ star_token: self.star_token.clone(),
-+ const_token: self.const_token.clone(),
-+ mutability: self.mutability.clone(),
-+ elem: self.elem.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TypeReference {
-+ fn clone(&self) -> Self {
-+ TypeReference {
-+ and_token: self.and_token.clone(),
-+ lifetime: self.lifetime.clone(),
-+ mutability: self.mutability.clone(),
-+ elem: self.elem.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TypeSlice {
-+ fn clone(&self) -> Self {
-+ TypeSlice {
-+ bracket_token: self.bracket_token.clone(),
-+ elem: self.elem.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TypeTraitObject {
-+ fn clone(&self) -> Self {
-+ TypeTraitObject {
-+ dyn_token: self.dyn_token.clone(),
-+ bounds: self.bounds.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for TypeTuple {
-+ fn clone(&self) -> Self {
-+ TypeTuple {
-+ paren_token: self.paren_token.clone(),
-+ elems: self.elems.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Copy for UnOp {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for UnOp {
-+ fn clone(&self) -> Self {
-+ *self
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for UseGlob {
-+ fn clone(&self) -> Self {
-+ UseGlob {
-+ star_token: self.star_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for UseGroup {
-+ fn clone(&self) -> Self {
-+ UseGroup {
-+ brace_token: self.brace_token.clone(),
-+ items: self.items.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for UseName {
-+ fn clone(&self) -> Self {
-+ UseName {
-+ ident: self.ident.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for UsePath {
-+ fn clone(&self) -> Self {
-+ UsePath {
-+ ident: self.ident.clone(),
-+ colon2_token: self.colon2_token.clone(),
-+ tree: self.tree.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for UseRename {
-+ fn clone(&self) -> Self {
-+ UseRename {
-+ ident: self.ident.clone(),
-+ as_token: self.as_token.clone(),
-+ rename: self.rename.clone(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Clone for UseTree {
-+ fn clone(&self) -> Self {
-+ match self {
-+ UseTree::Path(v0) => UseTree::Path(v0.clone()),
-+ UseTree::Name(v0) => UseTree::Name(v0.clone()),
-+ UseTree::Rename(v0) => UseTree::Rename(v0.clone()),
-+ UseTree::Glob(v0) => UseTree::Glob(v0.clone()),
-+ UseTree::Group(v0) => UseTree::Group(v0.clone()),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Variadic {
-+ fn clone(&self) -> Self {
-+ Variadic {
-+ attrs: self.attrs.clone(),
-+ dots: self.dots.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Variant {
-+ fn clone(&self) -> Self {
-+ Variant {
-+ attrs: self.attrs.clone(),
-+ ident: self.ident.clone(),
-+ fields: self.fields.clone(),
-+ discriminant: self.discriminant.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for VisCrate {
-+ fn clone(&self) -> Self {
-+ VisCrate {
-+ crate_token: self.crate_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for VisPublic {
-+ fn clone(&self) -> Self {
-+ VisPublic {
-+ pub_token: self.pub_token.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for VisRestricted {
-+ fn clone(&self) -> Self {
-+ VisRestricted {
-+ pub_token: self.pub_token.clone(),
-+ paren_token: self.paren_token.clone(),
-+ in_token: self.in_token.clone(),
-+ path: self.path.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for Visibility {
-+ fn clone(&self) -> Self {
-+ match self {
-+ Visibility::Public(v0) => Visibility::Public(v0.clone()),
-+ Visibility::Crate(v0) => Visibility::Crate(v0.clone()),
-+ Visibility::Restricted(v0) => Visibility::Restricted(v0.clone()),
-+ Visibility::Inherited => Visibility::Inherited,
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for WhereClause {
-+ fn clone(&self) -> Self {
-+ WhereClause {
-+ where_token: self.where_token.clone(),
-+ predicates: self.predicates.clone(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Clone for WherePredicate {
-+ fn clone(&self) -> Self {
-+ match self {
-+ WherePredicate::Type(v0) => WherePredicate::Type(v0.clone()),
-+ WherePredicate::Lifetime(v0) => WherePredicate::Lifetime(v0.clone()),
-+ WherePredicate::Eq(v0) => WherePredicate::Eq(v0.clone()),
-+ }
-+ }
-+}
-diff --git a/third_party/rust/syn/src/gen/debug.rs b/third_party/rust/syn/src/gen/debug.rs
-new file mode 100644
-index 0000000000..72baab05f4
---- /dev/null
-+++ b/third_party/rust/syn/src/gen/debug.rs
-@@ -0,0 +1,2857 @@
-+// This file is @generated by syn-internal-codegen.
-+// It is not intended for manual editing.
-+
-+use crate::*;
-+use std::fmt::{self, Debug};
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Abi {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Abi");
-+ formatter.field("extern_token", &self.extern_token);
-+ formatter.field("name", &self.name);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for AngleBracketedGenericArguments {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("AngleBracketedGenericArguments");
-+ formatter.field("colon2_token", &self.colon2_token);
-+ formatter.field("lt_token", &self.lt_token);
-+ formatter.field("args", &self.args);
-+ formatter.field("gt_token", &self.gt_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for Arm {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Arm");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("pat", &self.pat);
-+ formatter.field("guard", &self.guard);
-+ formatter.field("fat_arrow_token", &self.fat_arrow_token);
-+ formatter.field("body", &self.body);
-+ formatter.field("comma", &self.comma);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for AttrStyle {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ AttrStyle::Outer => formatter.write_str("Outer"),
-+ AttrStyle::Inner(v0) => {
-+ let mut formatter = formatter.debug_tuple("Inner");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Attribute {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Attribute");
-+ formatter.field("pound_token", &self.pound_token);
-+ formatter.field("style", &self.style);
-+ formatter.field("bracket_token", &self.bracket_token);
-+ formatter.field("path", &self.path);
-+ formatter.field("tokens", &self.tokens);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for BareFnArg {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("BareFnArg");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("name", &self.name);
-+ formatter.field("ty", &self.ty);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for BinOp {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ BinOp::Add(v0) => {
-+ let mut formatter = formatter.debug_tuple("Add");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::Sub(v0) => {
-+ let mut formatter = formatter.debug_tuple("Sub");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::Mul(v0) => {
-+ let mut formatter = formatter.debug_tuple("Mul");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::Div(v0) => {
-+ let mut formatter = formatter.debug_tuple("Div");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::Rem(v0) => {
-+ let mut formatter = formatter.debug_tuple("Rem");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::And(v0) => {
-+ let mut formatter = formatter.debug_tuple("And");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::Or(v0) => {
-+ let mut formatter = formatter.debug_tuple("Or");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::BitXor(v0) => {
-+ let mut formatter = formatter.debug_tuple("BitXor");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::BitAnd(v0) => {
-+ let mut formatter = formatter.debug_tuple("BitAnd");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::BitOr(v0) => {
-+ let mut formatter = formatter.debug_tuple("BitOr");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::Shl(v0) => {
-+ let mut formatter = formatter.debug_tuple("Shl");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::Shr(v0) => {
-+ let mut formatter = formatter.debug_tuple("Shr");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::Eq(v0) => {
-+ let mut formatter = formatter.debug_tuple("Eq");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::Lt(v0) => {
-+ let mut formatter = formatter.debug_tuple("Lt");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::Le(v0) => {
-+ let mut formatter = formatter.debug_tuple("Le");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::Ne(v0) => {
-+ let mut formatter = formatter.debug_tuple("Ne");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::Ge(v0) => {
-+ let mut formatter = formatter.debug_tuple("Ge");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::Gt(v0) => {
-+ let mut formatter = formatter.debug_tuple("Gt");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::AddEq(v0) => {
-+ let mut formatter = formatter.debug_tuple("AddEq");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::SubEq(v0) => {
-+ let mut formatter = formatter.debug_tuple("SubEq");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::MulEq(v0) => {
-+ let mut formatter = formatter.debug_tuple("MulEq");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::DivEq(v0) => {
-+ let mut formatter = formatter.debug_tuple("DivEq");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::RemEq(v0) => {
-+ let mut formatter = formatter.debug_tuple("RemEq");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::BitXorEq(v0) => {
-+ let mut formatter = formatter.debug_tuple("BitXorEq");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::BitAndEq(v0) => {
-+ let mut formatter = formatter.debug_tuple("BitAndEq");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::BitOrEq(v0) => {
-+ let mut formatter = formatter.debug_tuple("BitOrEq");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::ShlEq(v0) => {
-+ let mut formatter = formatter.debug_tuple("ShlEq");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ BinOp::ShrEq(v0) => {
-+ let mut formatter = formatter.debug_tuple("ShrEq");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Binding {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Binding");
-+ formatter.field("ident", &self.ident);
-+ formatter.field("eq_token", &self.eq_token);
-+ formatter.field("ty", &self.ty);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for Block {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Block");
-+ formatter.field("brace_token", &self.brace_token);
-+ formatter.field("stmts", &self.stmts);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for BoundLifetimes {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("BoundLifetimes");
-+ formatter.field("for_token", &self.for_token);
-+ formatter.field("lt_token", &self.lt_token);
-+ formatter.field("lifetimes", &self.lifetimes);
-+ formatter.field("gt_token", &self.gt_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for ConstParam {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ConstParam");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("const_token", &self.const_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("ty", &self.ty);
-+ formatter.field("eq_token", &self.eq_token);
-+ formatter.field("default", &self.default);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Constraint {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Constraint");
-+ formatter.field("ident", &self.ident);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("bounds", &self.bounds);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "derive")]
-+impl Debug for Data {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ Data::Struct(v0) => {
-+ let mut formatter = formatter.debug_tuple("Struct");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Data::Enum(v0) => {
-+ let mut formatter = formatter.debug_tuple("Enum");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Data::Union(v0) => {
-+ let mut formatter = formatter.debug_tuple("Union");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(feature = "derive")]
-+impl Debug for DataEnum {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("DataEnum");
-+ formatter.field("enum_token", &self.enum_token);
-+ formatter.field("brace_token", &self.brace_token);
-+ formatter.field("variants", &self.variants);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "derive")]
-+impl Debug for DataStruct {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("DataStruct");
-+ formatter.field("struct_token", &self.struct_token);
-+ formatter.field("fields", &self.fields);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "derive")]
-+impl Debug for DataUnion {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("DataUnion");
-+ formatter.field("union_token", &self.union_token);
-+ formatter.field("fields", &self.fields);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "derive")]
-+impl Debug for DeriveInput {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("DeriveInput");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("generics", &self.generics);
-+ formatter.field("data", &self.data);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Expr {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ #[cfg(feature = "full")]
-+ Expr::Array(v0) => {
-+ let mut formatter = formatter.debug_tuple("Array");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Assign(v0) => {
-+ let mut formatter = formatter.debug_tuple("Assign");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::AssignOp(v0) => {
-+ let mut formatter = formatter.debug_tuple("AssignOp");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Async(v0) => {
-+ let mut formatter = formatter.debug_tuple("Async");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Await(v0) => {
-+ let mut formatter = formatter.debug_tuple("Await");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Expr::Binary(v0) => {
-+ let mut formatter = formatter.debug_tuple("Binary");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Block(v0) => {
-+ let mut formatter = formatter.debug_tuple("Block");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Box(v0) => {
-+ let mut formatter = formatter.debug_tuple("Box");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Break(v0) => {
-+ let mut formatter = formatter.debug_tuple("Break");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Expr::Call(v0) => {
-+ let mut formatter = formatter.debug_tuple("Call");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Expr::Cast(v0) => {
-+ let mut formatter = formatter.debug_tuple("Cast");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Closure(v0) => {
-+ let mut formatter = formatter.debug_tuple("Closure");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Continue(v0) => {
-+ let mut formatter = formatter.debug_tuple("Continue");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Expr::Field(v0) => {
-+ let mut formatter = formatter.debug_tuple("Field");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::ForLoop(v0) => {
-+ let mut formatter = formatter.debug_tuple("ForLoop");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Group(v0) => {
-+ let mut formatter = formatter.debug_tuple("Group");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::If(v0) => {
-+ let mut formatter = formatter.debug_tuple("If");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Expr::Index(v0) => {
-+ let mut formatter = formatter.debug_tuple("Index");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Let(v0) => {
-+ let mut formatter = formatter.debug_tuple("Let");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Expr::Lit(v0) => {
-+ let mut formatter = formatter.debug_tuple("Lit");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Loop(v0) => {
-+ let mut formatter = formatter.debug_tuple("Loop");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Macro(v0) => {
-+ let mut formatter = formatter.debug_tuple("Macro");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Match(v0) => {
-+ let mut formatter = formatter.debug_tuple("Match");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::MethodCall(v0) => {
-+ let mut formatter = formatter.debug_tuple("MethodCall");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Expr::Paren(v0) => {
-+ let mut formatter = formatter.debug_tuple("Paren");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Expr::Path(v0) => {
-+ let mut formatter = formatter.debug_tuple("Path");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Range(v0) => {
-+ let mut formatter = formatter.debug_tuple("Range");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Reference(v0) => {
-+ let mut formatter = formatter.debug_tuple("Reference");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Repeat(v0) => {
-+ let mut formatter = formatter.debug_tuple("Repeat");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Return(v0) => {
-+ let mut formatter = formatter.debug_tuple("Return");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Struct(v0) => {
-+ let mut formatter = formatter.debug_tuple("Struct");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Try(v0) => {
-+ let mut formatter = formatter.debug_tuple("Try");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::TryBlock(v0) => {
-+ let mut formatter = formatter.debug_tuple("TryBlock");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Tuple(v0) => {
-+ let mut formatter = formatter.debug_tuple("Tuple");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Type(v0) => {
-+ let mut formatter = formatter.debug_tuple("Type");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Expr::Unary(v0) => {
-+ let mut formatter = formatter.debug_tuple("Unary");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Unsafe(v0) => {
-+ let mut formatter = formatter.debug_tuple("Unsafe");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Expr::Verbatim(v0) => {
-+ let mut formatter = formatter.debug_tuple("Verbatim");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::While(v0) => {
-+ let mut formatter = formatter.debug_tuple("While");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ #[cfg(feature = "full")]
-+ Expr::Yield(v0) => {
-+ let mut formatter = formatter.debug_tuple("Yield");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ _ => unreachable!(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprArray {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprArray");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("bracket_token", &self.bracket_token);
-+ formatter.field("elems", &self.elems);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprAssign {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprAssign");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("left", &self.left);
-+ formatter.field("eq_token", &self.eq_token);
-+ formatter.field("right", &self.right);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprAssignOp {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprAssignOp");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("left", &self.left);
-+ formatter.field("op", &self.op);
-+ formatter.field("right", &self.right);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprAsync {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprAsync");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("async_token", &self.async_token);
-+ formatter.field("capture", &self.capture);
-+ formatter.field("block", &self.block);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprAwait {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprAwait");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("base", &self.base);
-+ formatter.field("dot_token", &self.dot_token);
-+ formatter.field("await_token", &self.await_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for ExprBinary {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprBinary");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("left", &self.left);
-+ formatter.field("op", &self.op);
-+ formatter.field("right", &self.right);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprBlock {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprBlock");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("label", &self.label);
-+ formatter.field("block", &self.block);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprBox {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprBox");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("box_token", &self.box_token);
-+ formatter.field("expr", &self.expr);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprBreak {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprBreak");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("break_token", &self.break_token);
-+ formatter.field("label", &self.label);
-+ formatter.field("expr", &self.expr);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for ExprCall {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprCall");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("func", &self.func);
-+ formatter.field("paren_token", &self.paren_token);
-+ formatter.field("args", &self.args);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for ExprCast {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprCast");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("expr", &self.expr);
-+ formatter.field("as_token", &self.as_token);
-+ formatter.field("ty", &self.ty);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprClosure {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprClosure");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("asyncness", &self.asyncness);
-+ formatter.field("movability", &self.movability);
-+ formatter.field("capture", &self.capture);
-+ formatter.field("or1_token", &self.or1_token);
-+ formatter.field("inputs", &self.inputs);
-+ formatter.field("or2_token", &self.or2_token);
-+ formatter.field("output", &self.output);
-+ formatter.field("body", &self.body);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprContinue {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprContinue");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("continue_token", &self.continue_token);
-+ formatter.field("label", &self.label);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for ExprField {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprField");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("base", &self.base);
-+ formatter.field("dot_token", &self.dot_token);
-+ formatter.field("member", &self.member);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprForLoop {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprForLoop");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("label", &self.label);
-+ formatter.field("for_token", &self.for_token);
-+ formatter.field("pat", &self.pat);
-+ formatter.field("in_token", &self.in_token);
-+ formatter.field("expr", &self.expr);
-+ formatter.field("body", &self.body);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprGroup {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprGroup");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("group_token", &self.group_token);
-+ formatter.field("expr", &self.expr);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprIf {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprIf");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("if_token", &self.if_token);
-+ formatter.field("cond", &self.cond);
-+ formatter.field("then_branch", &self.then_branch);
-+ formatter.field("else_branch", &self.else_branch);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for ExprIndex {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprIndex");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("expr", &self.expr);
-+ formatter.field("bracket_token", &self.bracket_token);
-+ formatter.field("index", &self.index);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprLet {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprLet");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("let_token", &self.let_token);
-+ formatter.field("pat", &self.pat);
-+ formatter.field("eq_token", &self.eq_token);
-+ formatter.field("expr", &self.expr);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for ExprLit {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprLit");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("lit", &self.lit);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprLoop {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprLoop");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("label", &self.label);
-+ formatter.field("loop_token", &self.loop_token);
-+ formatter.field("body", &self.body);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprMacro {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprMacro");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("mac", &self.mac);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprMatch {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprMatch");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("match_token", &self.match_token);
-+ formatter.field("expr", &self.expr);
-+ formatter.field("brace_token", &self.brace_token);
-+ formatter.field("arms", &self.arms);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprMethodCall {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprMethodCall");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("receiver", &self.receiver);
-+ formatter.field("dot_token", &self.dot_token);
-+ formatter.field("method", &self.method);
-+ formatter.field("turbofish", &self.turbofish);
-+ formatter.field("paren_token", &self.paren_token);
-+ formatter.field("args", &self.args);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for ExprParen {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprParen");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("paren_token", &self.paren_token);
-+ formatter.field("expr", &self.expr);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for ExprPath {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprPath");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("qself", &self.qself);
-+ formatter.field("path", &self.path);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprRange {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprRange");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("from", &self.from);
-+ formatter.field("limits", &self.limits);
-+ formatter.field("to", &self.to);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprReference {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprReference");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("and_token", &self.and_token);
-+ formatter.field("raw", &self.raw);
-+ formatter.field("mutability", &self.mutability);
-+ formatter.field("expr", &self.expr);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprRepeat {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprRepeat");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("bracket_token", &self.bracket_token);
-+ formatter.field("expr", &self.expr);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.field("len", &self.len);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprReturn {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprReturn");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("return_token", &self.return_token);
-+ formatter.field("expr", &self.expr);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprStruct {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprStruct");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("path", &self.path);
-+ formatter.field("brace_token", &self.brace_token);
-+ formatter.field("fields", &self.fields);
-+ formatter.field("dot2_token", &self.dot2_token);
-+ formatter.field("rest", &self.rest);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprTry {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprTry");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("expr", &self.expr);
-+ formatter.field("question_token", &self.question_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprTryBlock {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprTryBlock");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("try_token", &self.try_token);
-+ formatter.field("block", &self.block);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprTuple {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprTuple");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("paren_token", &self.paren_token);
-+ formatter.field("elems", &self.elems);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprType {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprType");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("expr", &self.expr);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("ty", &self.ty);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for ExprUnary {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprUnary");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("op", &self.op);
-+ formatter.field("expr", &self.expr);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprUnsafe {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprUnsafe");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("unsafe_token", &self.unsafe_token);
-+ formatter.field("block", &self.block);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprWhile {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprWhile");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("label", &self.label);
-+ formatter.field("while_token", &self.while_token);
-+ formatter.field("cond", &self.cond);
-+ formatter.field("body", &self.body);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ExprYield {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ExprYield");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("yield_token", &self.yield_token);
-+ formatter.field("expr", &self.expr);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Field {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Field");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("ty", &self.ty);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for FieldPat {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("FieldPat");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("member", &self.member);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("pat", &self.pat);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for FieldValue {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("FieldValue");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("member", &self.member);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("expr", &self.expr);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Fields {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ Fields::Named(v0) => {
-+ let mut formatter = formatter.debug_tuple("Named");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Fields::Unnamed(v0) => {
-+ let mut formatter = formatter.debug_tuple("Unnamed");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Fields::Unit => formatter.write_str("Unit"),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for FieldsNamed {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("FieldsNamed");
-+ formatter.field("brace_token", &self.brace_token);
-+ formatter.field("named", &self.named);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for FieldsUnnamed {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("FieldsUnnamed");
-+ formatter.field("paren_token", &self.paren_token);
-+ formatter.field("unnamed", &self.unnamed);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for File {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("File");
-+ formatter.field("shebang", &self.shebang);
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("items", &self.items);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for FnArg {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ FnArg::Receiver(v0) => {
-+ let mut formatter = formatter.debug_tuple("Receiver");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ FnArg::Typed(v0) => {
-+ let mut formatter = formatter.debug_tuple("Typed");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ForeignItem {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ ForeignItem::Fn(v0) => {
-+ let mut formatter = formatter.debug_tuple("Fn");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ ForeignItem::Static(v0) => {
-+ let mut formatter = formatter.debug_tuple("Static");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ ForeignItem::Type(v0) => {
-+ let mut formatter = formatter.debug_tuple("Type");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ ForeignItem::Macro(v0) => {
-+ let mut formatter = formatter.debug_tuple("Macro");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ ForeignItem::Verbatim(v0) => {
-+ let mut formatter = formatter.debug_tuple("Verbatim");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ _ => unreachable!(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ForeignItemFn {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ForeignItemFn");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("sig", &self.sig);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ForeignItemMacro {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ForeignItemMacro");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("mac", &self.mac);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ForeignItemStatic {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ForeignItemStatic");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("static_token", &self.static_token);
-+ formatter.field("mutability", &self.mutability);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("ty", &self.ty);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ForeignItemType {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ForeignItemType");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("type_token", &self.type_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for GenericArgument {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ GenericArgument::Lifetime(v0) => {
-+ let mut formatter = formatter.debug_tuple("Lifetime");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ GenericArgument::Type(v0) => {
-+ let mut formatter = formatter.debug_tuple("Type");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ GenericArgument::Binding(v0) => {
-+ let mut formatter = formatter.debug_tuple("Binding");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ GenericArgument::Constraint(v0) => {
-+ let mut formatter = formatter.debug_tuple("Constraint");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ GenericArgument::Const(v0) => {
-+ let mut formatter = formatter.debug_tuple("Const");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for GenericMethodArgument {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ GenericMethodArgument::Type(v0) => {
-+ let mut formatter = formatter.debug_tuple("Type");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ GenericMethodArgument::Const(v0) => {
-+ let mut formatter = formatter.debug_tuple("Const");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for GenericParam {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ GenericParam::Type(v0) => {
-+ let mut formatter = formatter.debug_tuple("Type");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ GenericParam::Lifetime(v0) => {
-+ let mut formatter = formatter.debug_tuple("Lifetime");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ GenericParam::Const(v0) => {
-+ let mut formatter = formatter.debug_tuple("Const");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Generics {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Generics");
-+ formatter.field("lt_token", &self.lt_token);
-+ formatter.field("params", &self.params);
-+ formatter.field("gt_token", &self.gt_token);
-+ formatter.field("where_clause", &self.where_clause);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ImplItem {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ ImplItem::Const(v0) => {
-+ let mut formatter = formatter.debug_tuple("Const");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ ImplItem::Method(v0) => {
-+ let mut formatter = formatter.debug_tuple("Method");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ ImplItem::Type(v0) => {
-+ let mut formatter = formatter.debug_tuple("Type");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ ImplItem::Macro(v0) => {
-+ let mut formatter = formatter.debug_tuple("Macro");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ ImplItem::Verbatim(v0) => {
-+ let mut formatter = formatter.debug_tuple("Verbatim");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ _ => unreachable!(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ImplItemConst {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ImplItemConst");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("defaultness", &self.defaultness);
-+ formatter.field("const_token", &self.const_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("ty", &self.ty);
-+ formatter.field("eq_token", &self.eq_token);
-+ formatter.field("expr", &self.expr);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ImplItemMacro {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ImplItemMacro");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("mac", &self.mac);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ImplItemMethod {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ImplItemMethod");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("defaultness", &self.defaultness);
-+ formatter.field("sig", &self.sig);
-+ formatter.field("block", &self.block);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ImplItemType {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ImplItemType");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("defaultness", &self.defaultness);
-+ formatter.field("type_token", &self.type_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("generics", &self.generics);
-+ formatter.field("eq_token", &self.eq_token);
-+ formatter.field("ty", &self.ty);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Index {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Index");
-+ formatter.field("index", &self.index);
-+ formatter.field("span", &self.span);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for Item {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ Item::Const(v0) => {
-+ let mut formatter = formatter.debug_tuple("Const");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Item::Enum(v0) => {
-+ let mut formatter = formatter.debug_tuple("Enum");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Item::ExternCrate(v0) => {
-+ let mut formatter = formatter.debug_tuple("ExternCrate");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Item::Fn(v0) => {
-+ let mut formatter = formatter.debug_tuple("Fn");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Item::ForeignMod(v0) => {
-+ let mut formatter = formatter.debug_tuple("ForeignMod");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Item::Impl(v0) => {
-+ let mut formatter = formatter.debug_tuple("Impl");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Item::Macro(v0) => {
-+ let mut formatter = formatter.debug_tuple("Macro");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Item::Macro2(v0) => {
-+ let mut formatter = formatter.debug_tuple("Macro2");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Item::Mod(v0) => {
-+ let mut formatter = formatter.debug_tuple("Mod");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Item::Static(v0) => {
-+ let mut formatter = formatter.debug_tuple("Static");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Item::Struct(v0) => {
-+ let mut formatter = formatter.debug_tuple("Struct");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Item::Trait(v0) => {
-+ let mut formatter = formatter.debug_tuple("Trait");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Item::TraitAlias(v0) => {
-+ let mut formatter = formatter.debug_tuple("TraitAlias");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Item::Type(v0) => {
-+ let mut formatter = formatter.debug_tuple("Type");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Item::Union(v0) => {
-+ let mut formatter = formatter.debug_tuple("Union");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Item::Use(v0) => {
-+ let mut formatter = formatter.debug_tuple("Use");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Item::Verbatim(v0) => {
-+ let mut formatter = formatter.debug_tuple("Verbatim");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ _ => unreachable!(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ItemConst {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ItemConst");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("const_token", &self.const_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("ty", &self.ty);
-+ formatter.field("eq_token", &self.eq_token);
-+ formatter.field("expr", &self.expr);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ItemEnum {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ItemEnum");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("enum_token", &self.enum_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("generics", &self.generics);
-+ formatter.field("brace_token", &self.brace_token);
-+ formatter.field("variants", &self.variants);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ItemExternCrate {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ItemExternCrate");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("extern_token", &self.extern_token);
-+ formatter.field("crate_token", &self.crate_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("rename", &self.rename);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ItemFn {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ItemFn");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("sig", &self.sig);
-+ formatter.field("block", &self.block);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ItemForeignMod {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ItemForeignMod");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("abi", &self.abi);
-+ formatter.field("brace_token", &self.brace_token);
-+ formatter.field("items", &self.items);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ItemImpl {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ItemImpl");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("defaultness", &self.defaultness);
-+ formatter.field("unsafety", &self.unsafety);
-+ formatter.field("impl_token", &self.impl_token);
-+ formatter.field("generics", &self.generics);
-+ formatter.field("trait_", &self.trait_);
-+ formatter.field("self_ty", &self.self_ty);
-+ formatter.field("brace_token", &self.brace_token);
-+ formatter.field("items", &self.items);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ItemMacro {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ItemMacro");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("mac", &self.mac);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ItemMacro2 {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ItemMacro2");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("macro_token", &self.macro_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("rules", &self.rules);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ItemMod {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ItemMod");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("mod_token", &self.mod_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("content", &self.content);
-+ formatter.field("semi", &self.semi);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ItemStatic {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ItemStatic");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("static_token", &self.static_token);
-+ formatter.field("mutability", &self.mutability);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("ty", &self.ty);
-+ formatter.field("eq_token", &self.eq_token);
-+ formatter.field("expr", &self.expr);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ItemStruct {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ItemStruct");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("struct_token", &self.struct_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("generics", &self.generics);
-+ formatter.field("fields", &self.fields);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ItemTrait {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ItemTrait");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("unsafety", &self.unsafety);
-+ formatter.field("auto_token", &self.auto_token);
-+ formatter.field("trait_token", &self.trait_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("generics", &self.generics);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("supertraits", &self.supertraits);
-+ formatter.field("brace_token", &self.brace_token);
-+ formatter.field("items", &self.items);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ItemTraitAlias {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ItemTraitAlias");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("trait_token", &self.trait_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("generics", &self.generics);
-+ formatter.field("eq_token", &self.eq_token);
-+ formatter.field("bounds", &self.bounds);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ItemType {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ItemType");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("type_token", &self.type_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("generics", &self.generics);
-+ formatter.field("eq_token", &self.eq_token);
-+ formatter.field("ty", &self.ty);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ItemUnion {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ItemUnion");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("union_token", &self.union_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("generics", &self.generics);
-+ formatter.field("fields", &self.fields);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for ItemUse {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ItemUse");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("vis", &self.vis);
-+ formatter.field("use_token", &self.use_token);
-+ formatter.field("leading_colon", &self.leading_colon);
-+ formatter.field("tree", &self.tree);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for Label {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Label");
-+ formatter.field("name", &self.name);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.finish()
-+ }
-+}
-+impl Debug for Lifetime {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Lifetime");
-+ formatter.field("apostrophe", &self.apostrophe);
-+ formatter.field("ident", &self.ident);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for LifetimeDef {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("LifetimeDef");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("lifetime", &self.lifetime);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("bounds", &self.bounds);
-+ formatter.finish()
-+ }
-+}
-+impl Debug for Lit {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ Lit::Str(v0) => {
-+ let mut formatter = formatter.debug_tuple("Str");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Lit::ByteStr(v0) => {
-+ let mut formatter = formatter.debug_tuple("ByteStr");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Lit::Byte(v0) => {
-+ let mut formatter = formatter.debug_tuple("Byte");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Lit::Char(v0) => {
-+ let mut formatter = formatter.debug_tuple("Char");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Lit::Int(v0) => {
-+ let mut formatter = formatter.debug_tuple("Int");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Lit::Float(v0) => {
-+ let mut formatter = formatter.debug_tuple("Float");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Lit::Bool(v0) => {
-+ let mut formatter = formatter.debug_tuple("Bool");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Lit::Verbatim(v0) => {
-+ let mut formatter = formatter.debug_tuple("Verbatim");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for Local {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Local");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("let_token", &self.let_token);
-+ formatter.field("pat", &self.pat);
-+ formatter.field("init", &self.init);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Macro {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Macro");
-+ formatter.field("path", &self.path);
-+ formatter.field("bang_token", &self.bang_token);
-+ formatter.field("delimiter", &self.delimiter);
-+ formatter.field("tokens", &self.tokens);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for MacroDelimiter {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ MacroDelimiter::Paren(v0) => {
-+ let mut formatter = formatter.debug_tuple("Paren");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ MacroDelimiter::Brace(v0) => {
-+ let mut formatter = formatter.debug_tuple("Brace");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ MacroDelimiter::Bracket(v0) => {
-+ let mut formatter = formatter.debug_tuple("Bracket");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Member {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ Member::Named(v0) => {
-+ let mut formatter = formatter.debug_tuple("Named");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Member::Unnamed(v0) => {
-+ let mut formatter = formatter.debug_tuple("Unnamed");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Meta {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ Meta::Path(v0) => {
-+ let mut formatter = formatter.debug_tuple("Path");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Meta::List(v0) => {
-+ let mut formatter = formatter.debug_tuple("List");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Meta::NameValue(v0) => {
-+ let mut formatter = formatter.debug_tuple("NameValue");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for MetaList {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("MetaList");
-+ formatter.field("path", &self.path);
-+ formatter.field("paren_token", &self.paren_token);
-+ formatter.field("nested", &self.nested);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for MetaNameValue {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("MetaNameValue");
-+ formatter.field("path", &self.path);
-+ formatter.field("eq_token", &self.eq_token);
-+ formatter.field("lit", &self.lit);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for MethodTurbofish {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("MethodTurbofish");
-+ formatter.field("colon2_token", &self.colon2_token);
-+ formatter.field("lt_token", &self.lt_token);
-+ formatter.field("args", &self.args);
-+ formatter.field("gt_token", &self.gt_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for NestedMeta {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ NestedMeta::Meta(v0) => {
-+ let mut formatter = formatter.debug_tuple("Meta");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ NestedMeta::Lit(v0) => {
-+ let mut formatter = formatter.debug_tuple("Lit");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for ParenthesizedGenericArguments {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("ParenthesizedGenericArguments");
-+ formatter.field("paren_token", &self.paren_token);
-+ formatter.field("inputs", &self.inputs);
-+ formatter.field("output", &self.output);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for Pat {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ Pat::Box(v0) => {
-+ let mut formatter = formatter.debug_tuple("Box");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Pat::Ident(v0) => {
-+ let mut formatter = formatter.debug_tuple("Ident");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Pat::Lit(v0) => {
-+ let mut formatter = formatter.debug_tuple("Lit");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Pat::Macro(v0) => {
-+ let mut formatter = formatter.debug_tuple("Macro");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Pat::Or(v0) => {
-+ let mut formatter = formatter.debug_tuple("Or");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Pat::Path(v0) => {
-+ let mut formatter = formatter.debug_tuple("Path");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Pat::Range(v0) => {
-+ let mut formatter = formatter.debug_tuple("Range");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Pat::Reference(v0) => {
-+ let mut formatter = formatter.debug_tuple("Reference");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Pat::Rest(v0) => {
-+ let mut formatter = formatter.debug_tuple("Rest");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Pat::Slice(v0) => {
-+ let mut formatter = formatter.debug_tuple("Slice");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Pat::Struct(v0) => {
-+ let mut formatter = formatter.debug_tuple("Struct");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Pat::Tuple(v0) => {
-+ let mut formatter = formatter.debug_tuple("Tuple");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Pat::TupleStruct(v0) => {
-+ let mut formatter = formatter.debug_tuple("TupleStruct");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Pat::Type(v0) => {
-+ let mut formatter = formatter.debug_tuple("Type");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Pat::Verbatim(v0) => {
-+ let mut formatter = formatter.debug_tuple("Verbatim");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Pat::Wild(v0) => {
-+ let mut formatter = formatter.debug_tuple("Wild");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ _ => unreachable!(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for PatBox {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PatBox");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("box_token", &self.box_token);
-+ formatter.field("pat", &self.pat);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for PatIdent {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PatIdent");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("by_ref", &self.by_ref);
-+ formatter.field("mutability", &self.mutability);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("subpat", &self.subpat);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for PatLit {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PatLit");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("expr", &self.expr);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for PatMacro {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PatMacro");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("mac", &self.mac);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for PatOr {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PatOr");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("leading_vert", &self.leading_vert);
-+ formatter.field("cases", &self.cases);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for PatPath {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PatPath");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("qself", &self.qself);
-+ formatter.field("path", &self.path);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for PatRange {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PatRange");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("lo", &self.lo);
-+ formatter.field("limits", &self.limits);
-+ formatter.field("hi", &self.hi);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for PatReference {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PatReference");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("and_token", &self.and_token);
-+ formatter.field("mutability", &self.mutability);
-+ formatter.field("pat", &self.pat);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for PatRest {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PatRest");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("dot2_token", &self.dot2_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for PatSlice {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PatSlice");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("bracket_token", &self.bracket_token);
-+ formatter.field("elems", &self.elems);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for PatStruct {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PatStruct");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("path", &self.path);
-+ formatter.field("brace_token", &self.brace_token);
-+ formatter.field("fields", &self.fields);
-+ formatter.field("dot2_token", &self.dot2_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for PatTuple {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PatTuple");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("paren_token", &self.paren_token);
-+ formatter.field("elems", &self.elems);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for PatTupleStruct {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PatTupleStruct");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("path", &self.path);
-+ formatter.field("pat", &self.pat);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for PatType {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PatType");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("pat", &self.pat);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("ty", &self.ty);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for PatWild {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PatWild");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("underscore_token", &self.underscore_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Path {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Path");
-+ formatter.field("leading_colon", &self.leading_colon);
-+ formatter.field("segments", &self.segments);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for PathArguments {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ PathArguments::None => formatter.write_str("None"),
-+ PathArguments::AngleBracketed(v0) => {
-+ let mut formatter = formatter.debug_tuple("AngleBracketed");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ PathArguments::Parenthesized(v0) => {
-+ let mut formatter = formatter.debug_tuple("Parenthesized");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for PathSegment {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PathSegment");
-+ formatter.field("ident", &self.ident);
-+ formatter.field("arguments", &self.arguments);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for PredicateEq {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PredicateEq");
-+ formatter.field("lhs_ty", &self.lhs_ty);
-+ formatter.field("eq_token", &self.eq_token);
-+ formatter.field("rhs_ty", &self.rhs_ty);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for PredicateLifetime {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PredicateLifetime");
-+ formatter.field("lifetime", &self.lifetime);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("bounds", &self.bounds);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for PredicateType {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("PredicateType");
-+ formatter.field("lifetimes", &self.lifetimes);
-+ formatter.field("bounded_ty", &self.bounded_ty);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("bounds", &self.bounds);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for QSelf {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("QSelf");
-+ formatter.field("lt_token", &self.lt_token);
-+ formatter.field("ty", &self.ty);
-+ formatter.field("position", &self.position);
-+ formatter.field("as_token", &self.as_token);
-+ formatter.field("gt_token", &self.gt_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for RangeLimits {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ RangeLimits::HalfOpen(v0) => {
-+ let mut formatter = formatter.debug_tuple("HalfOpen");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ RangeLimits::Closed(v0) => {
-+ let mut formatter = formatter.debug_tuple("Closed");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for Receiver {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Receiver");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("reference", &self.reference);
-+ formatter.field("mutability", &self.mutability);
-+ formatter.field("self_token", &self.self_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for ReturnType {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ ReturnType::Default => formatter.write_str("Default"),
-+ ReturnType::Type(v0, v1) => {
-+ let mut formatter = formatter.debug_tuple("Type");
-+ formatter.field(v0);
-+ formatter.field(v1);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for Signature {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Signature");
-+ formatter.field("constness", &self.constness);
-+ formatter.field("asyncness", &self.asyncness);
-+ formatter.field("unsafety", &self.unsafety);
-+ formatter.field("abi", &self.abi);
-+ formatter.field("fn_token", &self.fn_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("generics", &self.generics);
-+ formatter.field("paren_token", &self.paren_token);
-+ formatter.field("inputs", &self.inputs);
-+ formatter.field("variadic", &self.variadic);
-+ formatter.field("output", &self.output);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for Stmt {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ Stmt::Local(v0) => {
-+ let mut formatter = formatter.debug_tuple("Local");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Stmt::Item(v0) => {
-+ let mut formatter = formatter.debug_tuple("Item");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Stmt::Expr(v0) => {
-+ let mut formatter = formatter.debug_tuple("Expr");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Stmt::Semi(v0, v1) => {
-+ let mut formatter = formatter.debug_tuple("Semi");
-+ formatter.field(v0);
-+ formatter.field(v1);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TraitBound {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TraitBound");
-+ formatter.field("paren_token", &self.paren_token);
-+ formatter.field("modifier", &self.modifier);
-+ formatter.field("lifetimes", &self.lifetimes);
-+ formatter.field("path", &self.path);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TraitBoundModifier {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ TraitBoundModifier::None => formatter.write_str("None"),
-+ TraitBoundModifier::Maybe(v0) => {
-+ let mut formatter = formatter.debug_tuple("Maybe");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for TraitItem {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ TraitItem::Const(v0) => {
-+ let mut formatter = formatter.debug_tuple("Const");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ TraitItem::Method(v0) => {
-+ let mut formatter = formatter.debug_tuple("Method");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ TraitItem::Type(v0) => {
-+ let mut formatter = formatter.debug_tuple("Type");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ TraitItem::Macro(v0) => {
-+ let mut formatter = formatter.debug_tuple("Macro");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ TraitItem::Verbatim(v0) => {
-+ let mut formatter = formatter.debug_tuple("Verbatim");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ _ => unreachable!(),
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for TraitItemConst {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TraitItemConst");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("const_token", &self.const_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("ty", &self.ty);
-+ formatter.field("default", &self.default);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for TraitItemMacro {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TraitItemMacro");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("mac", &self.mac);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for TraitItemMethod {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TraitItemMethod");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("sig", &self.sig);
-+ formatter.field("default", &self.default);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for TraitItemType {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TraitItemType");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("type_token", &self.type_token);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("generics", &self.generics);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("bounds", &self.bounds);
-+ formatter.field("default", &self.default);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Type {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ Type::Array(v0) => {
-+ let mut formatter = formatter.debug_tuple("Array");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Type::BareFn(v0) => {
-+ let mut formatter = formatter.debug_tuple("BareFn");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Type::Group(v0) => {
-+ let mut formatter = formatter.debug_tuple("Group");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Type::ImplTrait(v0) => {
-+ let mut formatter = formatter.debug_tuple("ImplTrait");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Type::Infer(v0) => {
-+ let mut formatter = formatter.debug_tuple("Infer");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Type::Macro(v0) => {
-+ let mut formatter = formatter.debug_tuple("Macro");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Type::Never(v0) => {
-+ let mut formatter = formatter.debug_tuple("Never");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Type::Paren(v0) => {
-+ let mut formatter = formatter.debug_tuple("Paren");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Type::Path(v0) => {
-+ let mut formatter = formatter.debug_tuple("Path");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Type::Ptr(v0) => {
-+ let mut formatter = formatter.debug_tuple("Ptr");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Type::Reference(v0) => {
-+ let mut formatter = formatter.debug_tuple("Reference");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Type::Slice(v0) => {
-+ let mut formatter = formatter.debug_tuple("Slice");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Type::TraitObject(v0) => {
-+ let mut formatter = formatter.debug_tuple("TraitObject");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Type::Tuple(v0) => {
-+ let mut formatter = formatter.debug_tuple("Tuple");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Type::Verbatim(v0) => {
-+ let mut formatter = formatter.debug_tuple("Verbatim");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ _ => unreachable!(),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TypeArray {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TypeArray");
-+ formatter.field("bracket_token", &self.bracket_token);
-+ formatter.field("elem", &self.elem);
-+ formatter.field("semi_token", &self.semi_token);
-+ formatter.field("len", &self.len);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TypeBareFn {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TypeBareFn");
-+ formatter.field("lifetimes", &self.lifetimes);
-+ formatter.field("unsafety", &self.unsafety);
-+ formatter.field("abi", &self.abi);
-+ formatter.field("fn_token", &self.fn_token);
-+ formatter.field("paren_token", &self.paren_token);
-+ formatter.field("inputs", &self.inputs);
-+ formatter.field("variadic", &self.variadic);
-+ formatter.field("output", &self.output);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TypeGroup {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TypeGroup");
-+ formatter.field("group_token", &self.group_token);
-+ formatter.field("elem", &self.elem);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TypeImplTrait {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TypeImplTrait");
-+ formatter.field("impl_token", &self.impl_token);
-+ formatter.field("bounds", &self.bounds);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TypeInfer {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TypeInfer");
-+ formatter.field("underscore_token", &self.underscore_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TypeMacro {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TypeMacro");
-+ formatter.field("mac", &self.mac);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TypeNever {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TypeNever");
-+ formatter.field("bang_token", &self.bang_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TypeParam {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TypeParam");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("colon_token", &self.colon_token);
-+ formatter.field("bounds", &self.bounds);
-+ formatter.field("eq_token", &self.eq_token);
-+ formatter.field("default", &self.default);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TypeParamBound {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ TypeParamBound::Trait(v0) => {
-+ let mut formatter = formatter.debug_tuple("Trait");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ TypeParamBound::Lifetime(v0) => {
-+ let mut formatter = formatter.debug_tuple("Lifetime");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TypeParen {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TypeParen");
-+ formatter.field("paren_token", &self.paren_token);
-+ formatter.field("elem", &self.elem);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TypePath {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TypePath");
-+ formatter.field("qself", &self.qself);
-+ formatter.field("path", &self.path);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TypePtr {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TypePtr");
-+ formatter.field("star_token", &self.star_token);
-+ formatter.field("const_token", &self.const_token);
-+ formatter.field("mutability", &self.mutability);
-+ formatter.field("elem", &self.elem);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TypeReference {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TypeReference");
-+ formatter.field("and_token", &self.and_token);
-+ formatter.field("lifetime", &self.lifetime);
-+ formatter.field("mutability", &self.mutability);
-+ formatter.field("elem", &self.elem);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TypeSlice {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TypeSlice");
-+ formatter.field("bracket_token", &self.bracket_token);
-+ formatter.field("elem", &self.elem);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TypeTraitObject {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TypeTraitObject");
-+ formatter.field("dyn_token", &self.dyn_token);
-+ formatter.field("bounds", &self.bounds);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for TypeTuple {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("TypeTuple");
-+ formatter.field("paren_token", &self.paren_token);
-+ formatter.field("elems", &self.elems);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for UnOp {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ UnOp::Deref(v0) => {
-+ let mut formatter = formatter.debug_tuple("Deref");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ UnOp::Not(v0) => {
-+ let mut formatter = formatter.debug_tuple("Not");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ UnOp::Neg(v0) => {
-+ let mut formatter = formatter.debug_tuple("Neg");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for UseGlob {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("UseGlob");
-+ formatter.field("star_token", &self.star_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for UseGroup {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("UseGroup");
-+ formatter.field("brace_token", &self.brace_token);
-+ formatter.field("items", &self.items);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for UseName {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("UseName");
-+ formatter.field("ident", &self.ident);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for UsePath {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("UsePath");
-+ formatter.field("ident", &self.ident);
-+ formatter.field("colon2_token", &self.colon2_token);
-+ formatter.field("tree", &self.tree);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for UseRename {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("UseRename");
-+ formatter.field("ident", &self.ident);
-+ formatter.field("as_token", &self.as_token);
-+ formatter.field("rename", &self.rename);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Debug for UseTree {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ UseTree::Path(v0) => {
-+ let mut formatter = formatter.debug_tuple("Path");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ UseTree::Name(v0) => {
-+ let mut formatter = formatter.debug_tuple("Name");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ UseTree::Rename(v0) => {
-+ let mut formatter = formatter.debug_tuple("Rename");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ UseTree::Glob(v0) => {
-+ let mut formatter = formatter.debug_tuple("Glob");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ UseTree::Group(v0) => {
-+ let mut formatter = formatter.debug_tuple("Group");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Variadic {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Variadic");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("dots", &self.dots);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Variant {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("Variant");
-+ formatter.field("attrs", &self.attrs);
-+ formatter.field("ident", &self.ident);
-+ formatter.field("fields", &self.fields);
-+ formatter.field("discriminant", &self.discriminant);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for VisCrate {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("VisCrate");
-+ formatter.field("crate_token", &self.crate_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for VisPublic {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("VisPublic");
-+ formatter.field("pub_token", &self.pub_token);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for VisRestricted {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("VisRestricted");
-+ formatter.field("pub_token", &self.pub_token);
-+ formatter.field("paren_token", &self.paren_token);
-+ formatter.field("in_token", &self.in_token);
-+ formatter.field("path", &self.path);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for Visibility {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ Visibility::Public(v0) => {
-+ let mut formatter = formatter.debug_tuple("Public");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Visibility::Crate(v0) => {
-+ let mut formatter = formatter.debug_tuple("Crate");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Visibility::Restricted(v0) => {
-+ let mut formatter = formatter.debug_tuple("Restricted");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ Visibility::Inherited => formatter.write_str("Inherited"),
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for WhereClause {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut formatter = formatter.debug_struct("WhereClause");
-+ formatter.field("where_token", &self.where_token);
-+ formatter.field("predicates", &self.predicates);
-+ formatter.finish()
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Debug for WherePredicate {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match self {
-+ WherePredicate::Type(v0) => {
-+ let mut formatter = formatter.debug_tuple("Type");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ WherePredicate::Lifetime(v0) => {
-+ let mut formatter = formatter.debug_tuple("Lifetime");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ WherePredicate::Eq(v0) => {
-+ let mut formatter = formatter.debug_tuple("Eq");
-+ formatter.field(v0);
-+ formatter.finish()
-+ }
-+ }
-+ }
-+}
-diff --git a/third_party/rust/syn/src/gen/eq.rs b/third_party/rust/syn/src/gen/eq.rs
-new file mode 100644
-index 0000000000..15b2bcbbde
---- /dev/null
-+++ b/third_party/rust/syn/src/gen/eq.rs
-@@ -0,0 +1,1930 @@
-+// This file is @generated by syn-internal-codegen.
-+// It is not intended for manual editing.
-+
-+#[cfg(any(feature = "derive", feature = "full"))]
-+use crate::tt::TokenStreamHelper;
-+use crate::*;
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for Abi {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for Abi {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.name == other.name
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for AngleBracketedGenericArguments {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for AngleBracketedGenericArguments {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.colon2_token == other.colon2_token && self.args == other.args
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for Arm {}
-+#[cfg(feature = "full")]
-+impl PartialEq for Arm {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.pat == other.pat
-+ && self.guard == other.guard
-+ && self.body == other.body
-+ && self.comma == other.comma
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for AttrStyle {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for AttrStyle {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (AttrStyle::Outer, AttrStyle::Outer) => true,
-+ (AttrStyle::Inner(_), AttrStyle::Inner(_)) => true,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for Attribute {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for Attribute {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.style == other.style
-+ && self.path == other.path
-+ && TokenStreamHelper(&self.tokens) == TokenStreamHelper(&other.tokens)
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for BareFnArg {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for BareFnArg {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.name == other.name && self.ty == other.ty
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for BinOp {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for BinOp {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (BinOp::Add(_), BinOp::Add(_)) => true,
-+ (BinOp::Sub(_), BinOp::Sub(_)) => true,
-+ (BinOp::Mul(_), BinOp::Mul(_)) => true,
-+ (BinOp::Div(_), BinOp::Div(_)) => true,
-+ (BinOp::Rem(_), BinOp::Rem(_)) => true,
-+ (BinOp::And(_), BinOp::And(_)) => true,
-+ (BinOp::Or(_), BinOp::Or(_)) => true,
-+ (BinOp::BitXor(_), BinOp::BitXor(_)) => true,
-+ (BinOp::BitAnd(_), BinOp::BitAnd(_)) => true,
-+ (BinOp::BitOr(_), BinOp::BitOr(_)) => true,
-+ (BinOp::Shl(_), BinOp::Shl(_)) => true,
-+ (BinOp::Shr(_), BinOp::Shr(_)) => true,
-+ (BinOp::Eq(_), BinOp::Eq(_)) => true,
-+ (BinOp::Lt(_), BinOp::Lt(_)) => true,
-+ (BinOp::Le(_), BinOp::Le(_)) => true,
-+ (BinOp::Ne(_), BinOp::Ne(_)) => true,
-+ (BinOp::Ge(_), BinOp::Ge(_)) => true,
-+ (BinOp::Gt(_), BinOp::Gt(_)) => true,
-+ (BinOp::AddEq(_), BinOp::AddEq(_)) => true,
-+ (BinOp::SubEq(_), BinOp::SubEq(_)) => true,
-+ (BinOp::MulEq(_), BinOp::MulEq(_)) => true,
-+ (BinOp::DivEq(_), BinOp::DivEq(_)) => true,
-+ (BinOp::RemEq(_), BinOp::RemEq(_)) => true,
-+ (BinOp::BitXorEq(_), BinOp::BitXorEq(_)) => true,
-+ (BinOp::BitAndEq(_), BinOp::BitAndEq(_)) => true,
-+ (BinOp::BitOrEq(_), BinOp::BitOrEq(_)) => true,
-+ (BinOp::ShlEq(_), BinOp::ShlEq(_)) => true,
-+ (BinOp::ShrEq(_), BinOp::ShrEq(_)) => true,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for Binding {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for Binding {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.ident == other.ident && self.ty == other.ty
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for Block {}
-+#[cfg(feature = "full")]
-+impl PartialEq for Block {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.stmts == other.stmts
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for BoundLifetimes {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for BoundLifetimes {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.lifetimes == other.lifetimes
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for ConstParam {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for ConstParam {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.ident == other.ident
-+ && self.ty == other.ty
-+ && self.eq_token == other.eq_token
-+ && self.default == other.default
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for Constraint {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for Constraint {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.ident == other.ident && self.bounds == other.bounds
-+ }
-+}
-+#[cfg(feature = "derive")]
-+impl Eq for Data {}
-+#[cfg(feature = "derive")]
-+impl PartialEq for Data {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (Data::Struct(self0), Data::Struct(other0)) => self0 == other0,
-+ (Data::Enum(self0), Data::Enum(other0)) => self0 == other0,
-+ (Data::Union(self0), Data::Union(other0)) => self0 == other0,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(feature = "derive")]
-+impl Eq for DataEnum {}
-+#[cfg(feature = "derive")]
-+impl PartialEq for DataEnum {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.variants == other.variants
-+ }
-+}
-+#[cfg(feature = "derive")]
-+impl Eq for DataStruct {}
-+#[cfg(feature = "derive")]
-+impl PartialEq for DataStruct {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.fields == other.fields && self.semi_token == other.semi_token
-+ }
-+}
-+#[cfg(feature = "derive")]
-+impl Eq for DataUnion {}
-+#[cfg(feature = "derive")]
-+impl PartialEq for DataUnion {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.fields == other.fields
-+ }
-+}
-+#[cfg(feature = "derive")]
-+impl Eq for DeriveInput {}
-+#[cfg(feature = "derive")]
-+impl PartialEq for DeriveInput {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.ident == other.ident
-+ && self.generics == other.generics
-+ && self.data == other.data
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for Expr {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for Expr {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ #[cfg(feature = "full")]
-+ (Expr::Array(self0), Expr::Array(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Assign(self0), Expr::Assign(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::AssignOp(self0), Expr::AssignOp(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Async(self0), Expr::Async(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Await(self0), Expr::Await(other0)) => self0 == other0,
-+ (Expr::Binary(self0), Expr::Binary(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Block(self0), Expr::Block(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Box(self0), Expr::Box(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Break(self0), Expr::Break(other0)) => self0 == other0,
-+ (Expr::Call(self0), Expr::Call(other0)) => self0 == other0,
-+ (Expr::Cast(self0), Expr::Cast(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Closure(self0), Expr::Closure(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Continue(self0), Expr::Continue(other0)) => self0 == other0,
-+ (Expr::Field(self0), Expr::Field(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::ForLoop(self0), Expr::ForLoop(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Group(self0), Expr::Group(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::If(self0), Expr::If(other0)) => self0 == other0,
-+ (Expr::Index(self0), Expr::Index(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Let(self0), Expr::Let(other0)) => self0 == other0,
-+ (Expr::Lit(self0), Expr::Lit(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Loop(self0), Expr::Loop(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Macro(self0), Expr::Macro(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Match(self0), Expr::Match(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::MethodCall(self0), Expr::MethodCall(other0)) => self0 == other0,
-+ (Expr::Paren(self0), Expr::Paren(other0)) => self0 == other0,
-+ (Expr::Path(self0), Expr::Path(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Range(self0), Expr::Range(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Reference(self0), Expr::Reference(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Repeat(self0), Expr::Repeat(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Return(self0), Expr::Return(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Struct(self0), Expr::Struct(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Try(self0), Expr::Try(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::TryBlock(self0), Expr::TryBlock(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Tuple(self0), Expr::Tuple(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Type(self0), Expr::Type(other0)) => self0 == other0,
-+ (Expr::Unary(self0), Expr::Unary(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Unsafe(self0), Expr::Unsafe(other0)) => self0 == other0,
-+ (Expr::Verbatim(self0), Expr::Verbatim(other0)) => {
-+ TokenStreamHelper(self0) == TokenStreamHelper(other0)
-+ }
-+ #[cfg(feature = "full")]
-+ (Expr::While(self0), Expr::While(other0)) => self0 == other0,
-+ #[cfg(feature = "full")]
-+ (Expr::Yield(self0), Expr::Yield(other0)) => self0 == other0,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprArray {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprArray {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.elems == other.elems
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprAssign {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprAssign {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.left == other.left && self.right == other.right
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprAssignOp {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprAssignOp {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.left == other.left
-+ && self.op == other.op
-+ && self.right == other.right
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprAsync {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprAsync {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.capture == other.capture && self.block == other.block
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprAwait {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprAwait {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.base == other.base
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for ExprBinary {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for ExprBinary {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.left == other.left
-+ && self.op == other.op
-+ && self.right == other.right
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprBlock {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprBlock {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.label == other.label && self.block == other.block
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprBox {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprBox {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.expr == other.expr
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprBreak {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprBreak {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.label == other.label && self.expr == other.expr
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for ExprCall {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for ExprCall {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.func == other.func && self.args == other.args
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for ExprCast {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for ExprCast {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.expr == other.expr && self.ty == other.ty
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprClosure {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprClosure {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.asyncness == other.asyncness
-+ && self.movability == other.movability
-+ && self.capture == other.capture
-+ && self.inputs == other.inputs
-+ && self.output == other.output
-+ && self.body == other.body
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprContinue {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprContinue {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.label == other.label
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for ExprField {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for ExprField {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.base == other.base && self.member == other.member
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprForLoop {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprForLoop {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.label == other.label
-+ && self.pat == other.pat
-+ && self.expr == other.expr
-+ && self.body == other.body
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprGroup {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprGroup {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.expr == other.expr
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprIf {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprIf {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.cond == other.cond
-+ && self.then_branch == other.then_branch
-+ && self.else_branch == other.else_branch
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for ExprIndex {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for ExprIndex {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.expr == other.expr && self.index == other.index
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprLet {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprLet {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.pat == other.pat && self.expr == other.expr
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for ExprLit {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for ExprLit {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.lit == other.lit
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprLoop {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprLoop {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.label == other.label && self.body == other.body
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprMacro {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprMacro {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.mac == other.mac
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprMatch {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprMatch {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.expr == other.expr && self.arms == other.arms
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprMethodCall {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprMethodCall {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.receiver == other.receiver
-+ && self.method == other.method
-+ && self.turbofish == other.turbofish
-+ && self.args == other.args
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for ExprParen {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for ExprParen {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.expr == other.expr
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for ExprPath {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for ExprPath {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.qself == other.qself && self.path == other.path
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprRange {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprRange {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.from == other.from
-+ && self.limits == other.limits
-+ && self.to == other.to
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprReference {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprReference {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.mutability == other.mutability && self.expr == other.expr
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprRepeat {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprRepeat {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.expr == other.expr && self.len == other.len
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprReturn {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprReturn {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.expr == other.expr
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprStruct {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprStruct {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.path == other.path
-+ && self.fields == other.fields
-+ && self.dot2_token == other.dot2_token
-+ && self.rest == other.rest
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprTry {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprTry {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.expr == other.expr
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprTryBlock {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprTryBlock {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.block == other.block
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprTuple {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprTuple {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.elems == other.elems
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprType {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprType {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.expr == other.expr && self.ty == other.ty
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for ExprUnary {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for ExprUnary {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.op == other.op && self.expr == other.expr
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprUnsafe {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprUnsafe {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.block == other.block
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprWhile {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprWhile {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.label == other.label
-+ && self.cond == other.cond
-+ && self.body == other.body
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ExprYield {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ExprYield {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.expr == other.expr
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for Field {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for Field {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.ident == other.ident
-+ && self.colon_token == other.colon_token
-+ && self.ty == other.ty
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for FieldPat {}
-+#[cfg(feature = "full")]
-+impl PartialEq for FieldPat {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.member == other.member
-+ && self.colon_token == other.colon_token
-+ && self.pat == other.pat
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for FieldValue {}
-+#[cfg(feature = "full")]
-+impl PartialEq for FieldValue {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.member == other.member
-+ && self.colon_token == other.colon_token
-+ && self.expr == other.expr
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for Fields {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for Fields {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (Fields::Named(self0), Fields::Named(other0)) => self0 == other0,
-+ (Fields::Unnamed(self0), Fields::Unnamed(other0)) => self0 == other0,
-+ (Fields::Unit, Fields::Unit) => true,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for FieldsNamed {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for FieldsNamed {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.named == other.named
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for FieldsUnnamed {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for FieldsUnnamed {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.unnamed == other.unnamed
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for File {}
-+#[cfg(feature = "full")]
-+impl PartialEq for File {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.shebang == other.shebang && self.attrs == other.attrs && self.items == other.items
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for FnArg {}
-+#[cfg(feature = "full")]
-+impl PartialEq for FnArg {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (FnArg::Receiver(self0), FnArg::Receiver(other0)) => self0 == other0,
-+ (FnArg::Typed(self0), FnArg::Typed(other0)) => self0 == other0,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ForeignItem {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ForeignItem {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (ForeignItem::Fn(self0), ForeignItem::Fn(other0)) => self0 == other0,
-+ (ForeignItem::Static(self0), ForeignItem::Static(other0)) => self0 == other0,
-+ (ForeignItem::Type(self0), ForeignItem::Type(other0)) => self0 == other0,
-+ (ForeignItem::Macro(self0), ForeignItem::Macro(other0)) => self0 == other0,
-+ (ForeignItem::Verbatim(self0), ForeignItem::Verbatim(other0)) => {
-+ TokenStreamHelper(self0) == TokenStreamHelper(other0)
-+ }
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ForeignItemFn {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ForeignItemFn {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.vis == other.vis && self.sig == other.sig
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ForeignItemMacro {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ForeignItemMacro {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.mac == other.mac && self.semi_token == other.semi_token
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ForeignItemStatic {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ForeignItemStatic {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.mutability == other.mutability
-+ && self.ident == other.ident
-+ && self.ty == other.ty
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ForeignItemType {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ForeignItemType {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.vis == other.vis && self.ident == other.ident
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for GenericArgument {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for GenericArgument {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (GenericArgument::Lifetime(self0), GenericArgument::Lifetime(other0)) => {
-+ self0 == other0
-+ }
-+ (GenericArgument::Type(self0), GenericArgument::Type(other0)) => self0 == other0,
-+ (GenericArgument::Binding(self0), GenericArgument::Binding(other0)) => self0 == other0,
-+ (GenericArgument::Constraint(self0), GenericArgument::Constraint(other0)) => {
-+ self0 == other0
-+ }
-+ (GenericArgument::Const(self0), GenericArgument::Const(other0)) => self0 == other0,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for GenericMethodArgument {}
-+#[cfg(feature = "full")]
-+impl PartialEq for GenericMethodArgument {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (GenericMethodArgument::Type(self0), GenericMethodArgument::Type(other0)) => {
-+ self0 == other0
-+ }
-+ (GenericMethodArgument::Const(self0), GenericMethodArgument::Const(other0)) => {
-+ self0 == other0
-+ }
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for GenericParam {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for GenericParam {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (GenericParam::Type(self0), GenericParam::Type(other0)) => self0 == other0,
-+ (GenericParam::Lifetime(self0), GenericParam::Lifetime(other0)) => self0 == other0,
-+ (GenericParam::Const(self0), GenericParam::Const(other0)) => self0 == other0,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for Generics {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for Generics {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.lt_token == other.lt_token
-+ && self.params == other.params
-+ && self.gt_token == other.gt_token
-+ && self.where_clause == other.where_clause
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ImplItem {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ImplItem {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (ImplItem::Const(self0), ImplItem::Const(other0)) => self0 == other0,
-+ (ImplItem::Method(self0), ImplItem::Method(other0)) => self0 == other0,
-+ (ImplItem::Type(self0), ImplItem::Type(other0)) => self0 == other0,
-+ (ImplItem::Macro(self0), ImplItem::Macro(other0)) => self0 == other0,
-+ (ImplItem::Verbatim(self0), ImplItem::Verbatim(other0)) => {
-+ TokenStreamHelper(self0) == TokenStreamHelper(other0)
-+ }
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ImplItemConst {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ImplItemConst {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.defaultness == other.defaultness
-+ && self.ident == other.ident
-+ && self.ty == other.ty
-+ && self.expr == other.expr
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ImplItemMacro {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ImplItemMacro {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.mac == other.mac && self.semi_token == other.semi_token
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ImplItemMethod {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ImplItemMethod {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.defaultness == other.defaultness
-+ && self.sig == other.sig
-+ && self.block == other.block
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ImplItemType {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ImplItemType {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.defaultness == other.defaultness
-+ && self.ident == other.ident
-+ && self.generics == other.generics
-+ && self.ty == other.ty
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for Item {}
-+#[cfg(feature = "full")]
-+impl PartialEq for Item {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (Item::Const(self0), Item::Const(other0)) => self0 == other0,
-+ (Item::Enum(self0), Item::Enum(other0)) => self0 == other0,
-+ (Item::ExternCrate(self0), Item::ExternCrate(other0)) => self0 == other0,
-+ (Item::Fn(self0), Item::Fn(other0)) => self0 == other0,
-+ (Item::ForeignMod(self0), Item::ForeignMod(other0)) => self0 == other0,
-+ (Item::Impl(self0), Item::Impl(other0)) => self0 == other0,
-+ (Item::Macro(self0), Item::Macro(other0)) => self0 == other0,
-+ (Item::Macro2(self0), Item::Macro2(other0)) => self0 == other0,
-+ (Item::Mod(self0), Item::Mod(other0)) => self0 == other0,
-+ (Item::Static(self0), Item::Static(other0)) => self0 == other0,
-+ (Item::Struct(self0), Item::Struct(other0)) => self0 == other0,
-+ (Item::Trait(self0), Item::Trait(other0)) => self0 == other0,
-+ (Item::TraitAlias(self0), Item::TraitAlias(other0)) => self0 == other0,
-+ (Item::Type(self0), Item::Type(other0)) => self0 == other0,
-+ (Item::Union(self0), Item::Union(other0)) => self0 == other0,
-+ (Item::Use(self0), Item::Use(other0)) => self0 == other0,
-+ (Item::Verbatim(self0), Item::Verbatim(other0)) => {
-+ TokenStreamHelper(self0) == TokenStreamHelper(other0)
-+ }
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ItemConst {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ItemConst {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.ident == other.ident
-+ && self.ty == other.ty
-+ && self.expr == other.expr
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ItemEnum {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ItemEnum {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.ident == other.ident
-+ && self.generics == other.generics
-+ && self.variants == other.variants
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ItemExternCrate {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ItemExternCrate {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.ident == other.ident
-+ && self.rename == other.rename
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ItemFn {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ItemFn {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.sig == other.sig
-+ && self.block == other.block
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ItemForeignMod {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ItemForeignMod {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.abi == other.abi && self.items == other.items
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ItemImpl {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ItemImpl {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.defaultness == other.defaultness
-+ && self.unsafety == other.unsafety
-+ && self.generics == other.generics
-+ && self.trait_ == other.trait_
-+ && self.self_ty == other.self_ty
-+ && self.items == other.items
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ItemMacro {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ItemMacro {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.ident == other.ident
-+ && self.mac == other.mac
-+ && self.semi_token == other.semi_token
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ItemMacro2 {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ItemMacro2 {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.ident == other.ident
-+ && TokenStreamHelper(&self.rules) == TokenStreamHelper(&other.rules)
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ItemMod {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ItemMod {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.ident == other.ident
-+ && self.content == other.content
-+ && self.semi == other.semi
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ItemStatic {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ItemStatic {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.mutability == other.mutability
-+ && self.ident == other.ident
-+ && self.ty == other.ty
-+ && self.expr == other.expr
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ItemStruct {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ItemStruct {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.ident == other.ident
-+ && self.generics == other.generics
-+ && self.fields == other.fields
-+ && self.semi_token == other.semi_token
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ItemTrait {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ItemTrait {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.unsafety == other.unsafety
-+ && self.auto_token == other.auto_token
-+ && self.ident == other.ident
-+ && self.generics == other.generics
-+ && self.colon_token == other.colon_token
-+ && self.supertraits == other.supertraits
-+ && self.items == other.items
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ItemTraitAlias {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ItemTraitAlias {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.ident == other.ident
-+ && self.generics == other.generics
-+ && self.bounds == other.bounds
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ItemType {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ItemType {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.ident == other.ident
-+ && self.generics == other.generics
-+ && self.ty == other.ty
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ItemUnion {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ItemUnion {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.ident == other.ident
-+ && self.generics == other.generics
-+ && self.fields == other.fields
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for ItemUse {}
-+#[cfg(feature = "full")]
-+impl PartialEq for ItemUse {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.vis == other.vis
-+ && self.leading_colon == other.leading_colon
-+ && self.tree == other.tree
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for Label {}
-+#[cfg(feature = "full")]
-+impl PartialEq for Label {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.name == other.name
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for LifetimeDef {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for LifetimeDef {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.lifetime == other.lifetime
-+ && self.colon_token == other.colon_token
-+ && self.bounds == other.bounds
-+ }
-+}
-+impl Eq for Lit {}
-+impl PartialEq for Lit {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (Lit::Str(self0), Lit::Str(other0)) => self0 == other0,
-+ (Lit::ByteStr(self0), Lit::ByteStr(other0)) => self0 == other0,
-+ (Lit::Byte(self0), Lit::Byte(other0)) => self0 == other0,
-+ (Lit::Char(self0), Lit::Char(other0)) => self0 == other0,
-+ (Lit::Int(self0), Lit::Int(other0)) => self0 == other0,
-+ (Lit::Float(self0), Lit::Float(other0)) => self0 == other0,
-+ (Lit::Bool(self0), Lit::Bool(other0)) => self0 == other0,
-+ (Lit::Verbatim(self0), Lit::Verbatim(other0)) => {
-+ self0.to_string() == other0.to_string()
-+ }
-+ _ => false,
-+ }
-+ }
-+}
-+impl Eq for LitBool {}
-+impl PartialEq for LitBool {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.value == other.value
-+ }
-+}
-+impl Eq for LitByte {}
-+impl Eq for LitByteStr {}
-+impl Eq for LitChar {}
-+impl Eq for LitFloat {}
-+impl Eq for LitInt {}
-+impl Eq for LitStr {}
-+#[cfg(feature = "full")]
-+impl Eq for Local {}
-+#[cfg(feature = "full")]
-+impl PartialEq for Local {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.pat == other.pat && self.init == other.init
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for Macro {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for Macro {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.path == other.path
-+ && self.delimiter == other.delimiter
-+ && TokenStreamHelper(&self.tokens) == TokenStreamHelper(&other.tokens)
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for MacroDelimiter {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for MacroDelimiter {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (MacroDelimiter::Paren(_), MacroDelimiter::Paren(_)) => true,
-+ (MacroDelimiter::Brace(_), MacroDelimiter::Brace(_)) => true,
-+ (MacroDelimiter::Bracket(_), MacroDelimiter::Bracket(_)) => true,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for Meta {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for Meta {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (Meta::Path(self0), Meta::Path(other0)) => self0 == other0,
-+ (Meta::List(self0), Meta::List(other0)) => self0 == other0,
-+ (Meta::NameValue(self0), Meta::NameValue(other0)) => self0 == other0,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for MetaList {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for MetaList {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.path == other.path && self.nested == other.nested
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for MetaNameValue {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for MetaNameValue {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.path == other.path && self.lit == other.lit
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for MethodTurbofish {}
-+#[cfg(feature = "full")]
-+impl PartialEq for MethodTurbofish {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.args == other.args
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for NestedMeta {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for NestedMeta {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (NestedMeta::Meta(self0), NestedMeta::Meta(other0)) => self0 == other0,
-+ (NestedMeta::Lit(self0), NestedMeta::Lit(other0)) => self0 == other0,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for ParenthesizedGenericArguments {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for ParenthesizedGenericArguments {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.inputs == other.inputs && self.output == other.output
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for Pat {}
-+#[cfg(feature = "full")]
-+impl PartialEq for Pat {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (Pat::Box(self0), Pat::Box(other0)) => self0 == other0,
-+ (Pat::Ident(self0), Pat::Ident(other0)) => self0 == other0,
-+ (Pat::Lit(self0), Pat::Lit(other0)) => self0 == other0,
-+ (Pat::Macro(self0), Pat::Macro(other0)) => self0 == other0,
-+ (Pat::Or(self0), Pat::Or(other0)) => self0 == other0,
-+ (Pat::Path(self0), Pat::Path(other0)) => self0 == other0,
-+ (Pat::Range(self0), Pat::Range(other0)) => self0 == other0,
-+ (Pat::Reference(self0), Pat::Reference(other0)) => self0 == other0,
-+ (Pat::Rest(self0), Pat::Rest(other0)) => self0 == other0,
-+ (Pat::Slice(self0), Pat::Slice(other0)) => self0 == other0,
-+ (Pat::Struct(self0), Pat::Struct(other0)) => self0 == other0,
-+ (Pat::Tuple(self0), Pat::Tuple(other0)) => self0 == other0,
-+ (Pat::TupleStruct(self0), Pat::TupleStruct(other0)) => self0 == other0,
-+ (Pat::Type(self0), Pat::Type(other0)) => self0 == other0,
-+ (Pat::Verbatim(self0), Pat::Verbatim(other0)) => {
-+ TokenStreamHelper(self0) == TokenStreamHelper(other0)
-+ }
-+ (Pat::Wild(self0), Pat::Wild(other0)) => self0 == other0,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for PatBox {}
-+#[cfg(feature = "full")]
-+impl PartialEq for PatBox {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.pat == other.pat
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for PatIdent {}
-+#[cfg(feature = "full")]
-+impl PartialEq for PatIdent {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.by_ref == other.by_ref
-+ && self.mutability == other.mutability
-+ && self.ident == other.ident
-+ && self.subpat == other.subpat
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for PatLit {}
-+#[cfg(feature = "full")]
-+impl PartialEq for PatLit {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.expr == other.expr
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for PatMacro {}
-+#[cfg(feature = "full")]
-+impl PartialEq for PatMacro {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.mac == other.mac
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for PatOr {}
-+#[cfg(feature = "full")]
-+impl PartialEq for PatOr {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.leading_vert == other.leading_vert
-+ && self.cases == other.cases
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for PatPath {}
-+#[cfg(feature = "full")]
-+impl PartialEq for PatPath {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.qself == other.qself && self.path == other.path
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for PatRange {}
-+#[cfg(feature = "full")]
-+impl PartialEq for PatRange {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.lo == other.lo
-+ && self.limits == other.limits
-+ && self.hi == other.hi
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for PatReference {}
-+#[cfg(feature = "full")]
-+impl PartialEq for PatReference {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.mutability == other.mutability && self.pat == other.pat
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for PatRest {}
-+#[cfg(feature = "full")]
-+impl PartialEq for PatRest {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for PatSlice {}
-+#[cfg(feature = "full")]
-+impl PartialEq for PatSlice {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.elems == other.elems
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for PatStruct {}
-+#[cfg(feature = "full")]
-+impl PartialEq for PatStruct {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.path == other.path
-+ && self.fields == other.fields
-+ && self.dot2_token == other.dot2_token
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for PatTuple {}
-+#[cfg(feature = "full")]
-+impl PartialEq for PatTuple {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.elems == other.elems
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for PatTupleStruct {}
-+#[cfg(feature = "full")]
-+impl PartialEq for PatTupleStruct {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.path == other.path && self.pat == other.pat
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for PatType {}
-+#[cfg(feature = "full")]
-+impl PartialEq for PatType {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.pat == other.pat && self.ty == other.ty
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for PatWild {}
-+#[cfg(feature = "full")]
-+impl PartialEq for PatWild {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for Path {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for Path {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.leading_colon == other.leading_colon && self.segments == other.segments
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for PathArguments {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for PathArguments {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (PathArguments::None, PathArguments::None) => true,
-+ (PathArguments::AngleBracketed(self0), PathArguments::AngleBracketed(other0)) => {
-+ self0 == other0
-+ }
-+ (PathArguments::Parenthesized(self0), PathArguments::Parenthesized(other0)) => {
-+ self0 == other0
-+ }
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for PathSegment {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for PathSegment {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.ident == other.ident && self.arguments == other.arguments
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for PredicateEq {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for PredicateEq {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.lhs_ty == other.lhs_ty && self.rhs_ty == other.rhs_ty
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for PredicateLifetime {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for PredicateLifetime {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.lifetime == other.lifetime && self.bounds == other.bounds
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for PredicateType {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for PredicateType {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.lifetimes == other.lifetimes
-+ && self.bounded_ty == other.bounded_ty
-+ && self.bounds == other.bounds
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for QSelf {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for QSelf {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.ty == other.ty && self.position == other.position && self.as_token == other.as_token
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for RangeLimits {}
-+#[cfg(feature = "full")]
-+impl PartialEq for RangeLimits {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (RangeLimits::HalfOpen(_), RangeLimits::HalfOpen(_)) => true,
-+ (RangeLimits::Closed(_), RangeLimits::Closed(_)) => true,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for Receiver {}
-+#[cfg(feature = "full")]
-+impl PartialEq for Receiver {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.reference == other.reference
-+ && self.mutability == other.mutability
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for ReturnType {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for ReturnType {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (ReturnType::Default, ReturnType::Default) => true,
-+ (ReturnType::Type(_, self1), ReturnType::Type(_, other1)) => self1 == other1,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for Signature {}
-+#[cfg(feature = "full")]
-+impl PartialEq for Signature {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.constness == other.constness
-+ && self.asyncness == other.asyncness
-+ && self.unsafety == other.unsafety
-+ && self.abi == other.abi
-+ && self.ident == other.ident
-+ && self.generics == other.generics
-+ && self.inputs == other.inputs
-+ && self.variadic == other.variadic
-+ && self.output == other.output
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for Stmt {}
-+#[cfg(feature = "full")]
-+impl PartialEq for Stmt {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (Stmt::Local(self0), Stmt::Local(other0)) => self0 == other0,
-+ (Stmt::Item(self0), Stmt::Item(other0)) => self0 == other0,
-+ (Stmt::Expr(self0), Stmt::Expr(other0)) => self0 == other0,
-+ (Stmt::Semi(self0, _), Stmt::Semi(other0, _)) => self0 == other0,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TraitBound {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TraitBound {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.paren_token == other.paren_token
-+ && self.modifier == other.modifier
-+ && self.lifetimes == other.lifetimes
-+ && self.path == other.path
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TraitBoundModifier {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TraitBoundModifier {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (TraitBoundModifier::None, TraitBoundModifier::None) => true,
-+ (TraitBoundModifier::Maybe(_), TraitBoundModifier::Maybe(_)) => true,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for TraitItem {}
-+#[cfg(feature = "full")]
-+impl PartialEq for TraitItem {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (TraitItem::Const(self0), TraitItem::Const(other0)) => self0 == other0,
-+ (TraitItem::Method(self0), TraitItem::Method(other0)) => self0 == other0,
-+ (TraitItem::Type(self0), TraitItem::Type(other0)) => self0 == other0,
-+ (TraitItem::Macro(self0), TraitItem::Macro(other0)) => self0 == other0,
-+ (TraitItem::Verbatim(self0), TraitItem::Verbatim(other0)) => {
-+ TokenStreamHelper(self0) == TokenStreamHelper(other0)
-+ }
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for TraitItemConst {}
-+#[cfg(feature = "full")]
-+impl PartialEq for TraitItemConst {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.ident == other.ident
-+ && self.ty == other.ty
-+ && self.default == other.default
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for TraitItemMacro {}
-+#[cfg(feature = "full")]
-+impl PartialEq for TraitItemMacro {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs && self.mac == other.mac && self.semi_token == other.semi_token
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for TraitItemMethod {}
-+#[cfg(feature = "full")]
-+impl PartialEq for TraitItemMethod {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.sig == other.sig
-+ && self.default == other.default
-+ && self.semi_token == other.semi_token
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for TraitItemType {}
-+#[cfg(feature = "full")]
-+impl PartialEq for TraitItemType {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.ident == other.ident
-+ && self.generics == other.generics
-+ && self.colon_token == other.colon_token
-+ && self.bounds == other.bounds
-+ && self.default == other.default
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for Type {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for Type {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (Type::Array(self0), Type::Array(other0)) => self0 == other0,
-+ (Type::BareFn(self0), Type::BareFn(other0)) => self0 == other0,
-+ (Type::Group(self0), Type::Group(other0)) => self0 == other0,
-+ (Type::ImplTrait(self0), Type::ImplTrait(other0)) => self0 == other0,
-+ (Type::Infer(self0), Type::Infer(other0)) => self0 == other0,
-+ (Type::Macro(self0), Type::Macro(other0)) => self0 == other0,
-+ (Type::Never(self0), Type::Never(other0)) => self0 == other0,
-+ (Type::Paren(self0), Type::Paren(other0)) => self0 == other0,
-+ (Type::Path(self0), Type::Path(other0)) => self0 == other0,
-+ (Type::Ptr(self0), Type::Ptr(other0)) => self0 == other0,
-+ (Type::Reference(self0), Type::Reference(other0)) => self0 == other0,
-+ (Type::Slice(self0), Type::Slice(other0)) => self0 == other0,
-+ (Type::TraitObject(self0), Type::TraitObject(other0)) => self0 == other0,
-+ (Type::Tuple(self0), Type::Tuple(other0)) => self0 == other0,
-+ (Type::Verbatim(self0), Type::Verbatim(other0)) => {
-+ TokenStreamHelper(self0) == TokenStreamHelper(other0)
-+ }
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TypeArray {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TypeArray {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.elem == other.elem && self.len == other.len
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TypeBareFn {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TypeBareFn {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.lifetimes == other.lifetimes
-+ && self.unsafety == other.unsafety
-+ && self.abi == other.abi
-+ && self.inputs == other.inputs
-+ && self.variadic == other.variadic
-+ && self.output == other.output
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TypeGroup {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TypeGroup {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.elem == other.elem
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TypeImplTrait {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TypeImplTrait {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.bounds == other.bounds
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TypeInfer {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TypeInfer {
-+ fn eq(&self, _other: &Self) -> bool {
-+ true
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TypeMacro {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TypeMacro {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.mac == other.mac
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TypeNever {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TypeNever {
-+ fn eq(&self, _other: &Self) -> bool {
-+ true
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TypeParam {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TypeParam {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.ident == other.ident
-+ && self.colon_token == other.colon_token
-+ && self.bounds == other.bounds
-+ && self.eq_token == other.eq_token
-+ && self.default == other.default
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TypeParamBound {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TypeParamBound {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (TypeParamBound::Trait(self0), TypeParamBound::Trait(other0)) => self0 == other0,
-+ (TypeParamBound::Lifetime(self0), TypeParamBound::Lifetime(other0)) => self0 == other0,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TypeParen {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TypeParen {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.elem == other.elem
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TypePath {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TypePath {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.qself == other.qself && self.path == other.path
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TypePtr {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TypePtr {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.const_token == other.const_token
-+ && self.mutability == other.mutability
-+ && self.elem == other.elem
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TypeReference {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TypeReference {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.lifetime == other.lifetime
-+ && self.mutability == other.mutability
-+ && self.elem == other.elem
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TypeSlice {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TypeSlice {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.elem == other.elem
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TypeTraitObject {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TypeTraitObject {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.dyn_token == other.dyn_token && self.bounds == other.bounds
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for TypeTuple {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for TypeTuple {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.elems == other.elems
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for UnOp {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for UnOp {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (UnOp::Deref(_), UnOp::Deref(_)) => true,
-+ (UnOp::Not(_), UnOp::Not(_)) => true,
-+ (UnOp::Neg(_), UnOp::Neg(_)) => true,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for UseGlob {}
-+#[cfg(feature = "full")]
-+impl PartialEq for UseGlob {
-+ fn eq(&self, _other: &Self) -> bool {
-+ true
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for UseGroup {}
-+#[cfg(feature = "full")]
-+impl PartialEq for UseGroup {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.items == other.items
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for UseName {}
-+#[cfg(feature = "full")]
-+impl PartialEq for UseName {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.ident == other.ident
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for UsePath {}
-+#[cfg(feature = "full")]
-+impl PartialEq for UsePath {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.ident == other.ident && self.tree == other.tree
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for UseRename {}
-+#[cfg(feature = "full")]
-+impl PartialEq for UseRename {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.ident == other.ident && self.rename == other.rename
-+ }
-+}
-+#[cfg(feature = "full")]
-+impl Eq for UseTree {}
-+#[cfg(feature = "full")]
-+impl PartialEq for UseTree {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (UseTree::Path(self0), UseTree::Path(other0)) => self0 == other0,
-+ (UseTree::Name(self0), UseTree::Name(other0)) => self0 == other0,
-+ (UseTree::Rename(self0), UseTree::Rename(other0)) => self0 == other0,
-+ (UseTree::Glob(self0), UseTree::Glob(other0)) => self0 == other0,
-+ (UseTree::Group(self0), UseTree::Group(other0)) => self0 == other0,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for Variadic {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for Variadic {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for Variant {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for Variant {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.attrs == other.attrs
-+ && self.ident == other.ident
-+ && self.fields == other.fields
-+ && self.discriminant == other.discriminant
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for VisCrate {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for VisCrate {
-+ fn eq(&self, _other: &Self) -> bool {
-+ true
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for VisPublic {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for VisPublic {
-+ fn eq(&self, _other: &Self) -> bool {
-+ true
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for VisRestricted {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for VisRestricted {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.in_token == other.in_token && self.path == other.path
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for Visibility {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for Visibility {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (Visibility::Public(self0), Visibility::Public(other0)) => self0 == other0,
-+ (Visibility::Crate(self0), Visibility::Crate(other0)) => self0 == other0,
-+ (Visibility::Restricted(self0), Visibility::Restricted(other0)) => self0 == other0,
-+ (Visibility::Inherited, Visibility::Inherited) => true,
-+ _ => false,
-+ }
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for WhereClause {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for WhereClause {
-+ fn eq(&self, other: &Self) -> bool {
-+ self.predicates == other.predicates
-+ }
-+}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl Eq for WherePredicate {}
-+#[cfg(any(feature = "derive", feature = "full"))]
-+impl PartialEq for WherePredicate {
-+ fn eq(&self, other: &Self) -> bool {
-+ match (self, other) {
-+ (WherePredicate::Type(self0), WherePredicate::Type(other0)) => self0 == other0,
-+ (WherePredicate::Lifetime(self0), WherePredicate::Lifetime(other0)) => self0 == other0,
-+ (WherePredicate::Eq(self0), WherePredicate::Eq(other0)) => self0 == other0,
-+ _ => false,
-+ }
-+ }
-+}
-diff --git a/third_party/rust/syn/src/gen/fold.rs b/third_party/rust/syn/src/gen/fold.rs
-index f51218b78c..d9dd32a420 100644
---- a/third_party/rust/syn/src/gen/fold.rs
-+++ b/third_party/rust/syn/src/gen/fold.rs
-@@ -2,6 +2,7 @@
- // It is not intended for manual editing.
-
- #![allow(unreachable_code, unused_variables)]
-+#![allow(clippy::match_wildcard_for_single_variants)]
- #[cfg(any(feature = "full", feature = "derive"))]
- use crate::gen::helper::fold::*;
- #[cfg(any(feature = "full", feature = "derive"))]
-@@ -26,7 +27,7 @@ macro_rules! full {
- ///
- /// [module documentation]: self
- ///
--/// *This trait is available if Syn is built with the `"fold"` feature.*
-+/// *This trait is available only if Syn is built with the `"fold"` feature.*
- pub trait Fold {
- #[cfg(any(feature = "derive", feature = "full"))]
- fn fold_abi(&mut self, i: Abi) -> Abi {
-@@ -433,35 +434,27 @@ pub trait Fold {
- fn fold_lifetime_def(&mut self, i: LifetimeDef) -> LifetimeDef {
- fold_lifetime_def(self, i)
- }
-- #[cfg(any(feature = "derive", feature = "full"))]
- fn fold_lit(&mut self, i: Lit) -> Lit {
- fold_lit(self, i)
- }
-- #[cfg(any(feature = "derive", feature = "full"))]
- fn fold_lit_bool(&mut self, i: LitBool) -> LitBool {
- fold_lit_bool(self, i)
- }
-- #[cfg(any(feature = "derive", feature = "full"))]
- fn fold_lit_byte(&mut self, i: LitByte) -> LitByte {
- fold_lit_byte(self, i)
- }
-- #[cfg(any(feature = "derive", feature = "full"))]
- fn fold_lit_byte_str(&mut self, i: LitByteStr) -> LitByteStr {
- fold_lit_byte_str(self, i)
- }
-- #[cfg(any(feature = "derive", feature = "full"))]
- fn fold_lit_char(&mut self, i: LitChar) -> LitChar {
- fold_lit_char(self, i)
- }
-- #[cfg(any(feature = "derive", feature = "full"))]
- fn fold_lit_float(&mut self, i: LitFloat) -> LitFloat {
- fold_lit_float(self, i)
- }
-- #[cfg(any(feature = "derive", feature = "full"))]
- fn fold_lit_int(&mut self, i: LitInt) -> LitInt {
- fold_lit_int(self, i)
- }
-- #[cfg(any(feature = "derive", feature = "full"))]
- fn fold_lit_str(&mut self, i: LitStr) -> LitStr {
- fold_lit_str(self, i)
- }
-@@ -799,10 +792,10 @@ where
- F: Fold + ?Sized,
- {
- AngleBracketedGenericArguments {
-- colon2_token: (node.colon2_token).map(|it| Token ! [ :: ](tokens_helper(f, &it.spans))),
-- lt_token: Token ! [ < ](tokens_helper(f, &node.lt_token.spans)),
-+ colon2_token: (node.colon2_token).map(|it| Token ! [::](tokens_helper(f, &it.spans))),
-+ lt_token: Token ! [<](tokens_helper(f, &node.lt_token.spans)),
- args: FoldHelper::lift(node.args, |it| f.fold_generic_argument(it)),
-- gt_token: Token ! [ > ](tokens_helper(f, &node.gt_token.spans)),
-+ gt_token: Token ! [>](tokens_helper(f, &node.gt_token.spans)),
- }
- }
- #[cfg(feature = "full")]
-@@ -819,9 +812,9 @@ where
- Box::new(f.fold_expr(*(it).1)),
- )
- }),
-- fat_arrow_token: Token ! [ => ](tokens_helper(f, &node.fat_arrow_token.spans)),
-+ fat_arrow_token: Token ! [=>](tokens_helper(f, &node.fat_arrow_token.spans)),
- body: Box::new(f.fold_expr(*node.body)),
-- comma: (node.comma).map(|it| Token ! [ , ](tokens_helper(f, &it.spans))),
-+ comma: (node.comma).map(|it| Token ! [,](tokens_helper(f, &it.spans))),
- }
- }
- #[cfg(any(feature = "derive", feature = "full"))]
-@@ -842,7 +835,7 @@ where
- F: Fold + ?Sized,
- {
- Attribute {
-- pound_token: Token ! [ # ](tokens_helper(f, &node.pound_token.spans)),
-+ pound_token: Token ! [#](tokens_helper(f, &node.pound_token.spans)),
- style: f.fold_attr_style(node.style),
- bracket_token: Bracket(tokens_helper(f, &node.bracket_token.span)),
- path: f.fold_path(node.path),
-@@ -859,7 +852,7 @@ where
- name: (node.name).map(|it| {
- (
- f.fold_ident((it).0),
-- Token ! [ : ](tokens_helper(f, &(it).1.spans)),
-+ Token ! [:](tokens_helper(f, &(it).1.spans)),
- )
- }),
- ty: f.fold_type(node.ty),
-@@ -871,59 +864,47 @@ where
- F: Fold + ?Sized,
- {
- match node {
-- BinOp::Add(_binding_0) => BinOp::Add(Token ! [ + ](tokens_helper(f, &_binding_0.spans))),
-- BinOp::Sub(_binding_0) => BinOp::Sub(Token ! [ - ](tokens_helper(f, &_binding_0.spans))),
-- BinOp::Mul(_binding_0) => BinOp::Mul(Token ! [ * ](tokens_helper(f, &_binding_0.spans))),
-- BinOp::Div(_binding_0) => BinOp::Div(Token ! [ / ](tokens_helper(f, &_binding_0.spans))),
-- BinOp::Rem(_binding_0) => BinOp::Rem(Token ! [ % ](tokens_helper(f, &_binding_0.spans))),
-- BinOp::And(_binding_0) => BinOp::And(Token ! [ && ](tokens_helper(f, &_binding_0.spans))),
-- BinOp::Or(_binding_0) => BinOp::Or(Token ! [ || ](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::Add(_binding_0) => BinOp::Add(Token ! [+](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::Sub(_binding_0) => BinOp::Sub(Token ! [-](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::Mul(_binding_0) => BinOp::Mul(Token ! [*](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::Div(_binding_0) => BinOp::Div(Token ! [/](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::Rem(_binding_0) => BinOp::Rem(Token ! [%](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::And(_binding_0) => BinOp::And(Token ! [&&](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::Or(_binding_0) => BinOp::Or(Token ! [||](tokens_helper(f, &_binding_0.spans))),
- BinOp::BitXor(_binding_0) => {
-- BinOp::BitXor(Token ! [ ^ ](tokens_helper(f, &_binding_0.spans)))
-+ BinOp::BitXor(Token ! [^](tokens_helper(f, &_binding_0.spans)))
- }
- BinOp::BitAnd(_binding_0) => {
-- BinOp::BitAnd(Token ! [ & ](tokens_helper(f, &_binding_0.spans)))
-- }
-- BinOp::BitOr(_binding_0) => {
-- BinOp::BitOr(Token ! [ | ](tokens_helper(f, &_binding_0.spans)))
-- }
-- BinOp::Shl(_binding_0) => BinOp::Shl(Token ! [ << ](tokens_helper(f, &_binding_0.spans))),
-- BinOp::Shr(_binding_0) => BinOp::Shr(Token ! [ >> ](tokens_helper(f, &_binding_0.spans))),
-- BinOp::Eq(_binding_0) => BinOp::Eq(Token ! [ == ](tokens_helper(f, &_binding_0.spans))),
-- BinOp::Lt(_binding_0) => BinOp::Lt(Token ! [ < ](tokens_helper(f, &_binding_0.spans))),
-- BinOp::Le(_binding_0) => BinOp::Le(Token ! [ <= ](tokens_helper(f, &_binding_0.spans))),
-- BinOp::Ne(_binding_0) => BinOp::Ne(Token ! [ != ](tokens_helper(f, &_binding_0.spans))),
-- BinOp::Ge(_binding_0) => BinOp::Ge(Token ! [ >= ](tokens_helper(f, &_binding_0.spans))),
-- BinOp::Gt(_binding_0) => BinOp::Gt(Token ! [ > ](tokens_helper(f, &_binding_0.spans))),
-- BinOp::AddEq(_binding_0) => {
-- BinOp::AddEq(Token ! [ += ](tokens_helper(f, &_binding_0.spans)))
-- }
-- BinOp::SubEq(_binding_0) => {
-- BinOp::SubEq(Token ! [ -= ](tokens_helper(f, &_binding_0.spans)))
-- }
-- BinOp::MulEq(_binding_0) => {
-- BinOp::MulEq(Token ! [ *= ](tokens_helper(f, &_binding_0.spans)))
-- }
-- BinOp::DivEq(_binding_0) => {
-- BinOp::DivEq(Token ! [ /= ](tokens_helper(f, &_binding_0.spans)))
-- }
-- BinOp::RemEq(_binding_0) => {
-- BinOp::RemEq(Token ! [ %= ](tokens_helper(f, &_binding_0.spans)))
-+ BinOp::BitAnd(Token ! [&](tokens_helper(f, &_binding_0.spans)))
- }
-+ BinOp::BitOr(_binding_0) => BinOp::BitOr(Token ! [|](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::Shl(_binding_0) => BinOp::Shl(Token ! [<<](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::Shr(_binding_0) => BinOp::Shr(Token ! [>>](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::Eq(_binding_0) => BinOp::Eq(Token ! [==](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::Lt(_binding_0) => BinOp::Lt(Token ! [<](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::Le(_binding_0) => BinOp::Le(Token ! [<=](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::Ne(_binding_0) => BinOp::Ne(Token ! [!=](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::Ge(_binding_0) => BinOp::Ge(Token ! [>=](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::Gt(_binding_0) => BinOp::Gt(Token ! [>](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::AddEq(_binding_0) => BinOp::AddEq(Token ! [+=](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::SubEq(_binding_0) => BinOp::SubEq(Token ! [-=](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::MulEq(_binding_0) => BinOp::MulEq(Token ! [*=](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::DivEq(_binding_0) => BinOp::DivEq(Token ! [/=](tokens_helper(f, &_binding_0.spans))),
-+ BinOp::RemEq(_binding_0) => BinOp::RemEq(Token ! [%=](tokens_helper(f, &_binding_0.spans))),
- BinOp::BitXorEq(_binding_0) => {
-- BinOp::BitXorEq(Token ! [ ^= ](tokens_helper(f, &_binding_0.spans)))
-+ BinOp::BitXorEq(Token ! [^=](tokens_helper(f, &_binding_0.spans)))
- }
- BinOp::BitAndEq(_binding_0) => {
-- BinOp::BitAndEq(Token ! [ &= ](tokens_helper(f, &_binding_0.spans)))
-+ BinOp::BitAndEq(Token ! [&=](tokens_helper(f, &_binding_0.spans)))
- }
- BinOp::BitOrEq(_binding_0) => {
-- BinOp::BitOrEq(Token ! [ |= ](tokens_helper(f, &_binding_0.spans)))
-+ BinOp::BitOrEq(Token ! [|=](tokens_helper(f, &_binding_0.spans)))
- }
- BinOp::ShlEq(_binding_0) => {
-- BinOp::ShlEq(Token ! [ <<= ](tokens_helper(f, &_binding_0.spans)))
-+ BinOp::ShlEq(Token ! [<<=](tokens_helper(f, &_binding_0.spans)))
- }
- BinOp::ShrEq(_binding_0) => {
-- BinOp::ShrEq(Token ! [ >>= ](tokens_helper(f, &_binding_0.spans)))
-+ BinOp::ShrEq(Token ! [>>=](tokens_helper(f, &_binding_0.spans)))
- }
- }
- }
-@@ -934,7 +915,7 @@ where
- {
- Binding {
- ident: f.fold_ident(node.ident),
-- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)),
-+ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)),
- ty: f.fold_type(node.ty),
- }
- }
-@@ -955,9 +936,9 @@ where
- {
- BoundLifetimes {
- for_token: Token![for](tokens_helper(f, &node.for_token.span)),
-- lt_token: Token ! [ < ](tokens_helper(f, &node.lt_token.spans)),
-+ lt_token: Token ! [<](tokens_helper(f, &node.lt_token.spans)),
- lifetimes: FoldHelper::lift(node.lifetimes, |it| f.fold_lifetime_def(it)),
-- gt_token: Token ! [ > ](tokens_helper(f, &node.gt_token.spans)),
-+ gt_token: Token ! [>](tokens_helper(f, &node.gt_token.spans)),
- }
- }
- #[cfg(any(feature = "derive", feature = "full"))]
-@@ -969,9 +950,9 @@ where
- attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
- const_token: Token![const](tokens_helper(f, &node.const_token.span)),
- ident: f.fold_ident(node.ident),
-- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)),
-+ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)),
- ty: f.fold_type(node.ty),
-- eq_token: (node.eq_token).map(|it| Token ! [ = ](tokens_helper(f,