diff --git a/ChangeLog.rss b/ChangeLog.rss
index ed41754b7..08490bd27 100644
--- a/ChangeLog.rss
+++ b/ChangeLog.rss
@@ -11,9 +11,46 @@
Tracking Slackware development in git.
en-us
urn:uuid:c964f45e-6732-11e8-bbe5-107b4450212f
- Mon, 16 Nov 2020 21:23:09 GMT
- Tue, 17 Nov 2020 07:59:47 GMT
+ Wed, 18 Nov 2020 21:40:31 GMT
+ Thu, 19 Nov 2020 07:59:44 GMT
maintain_current_git.sh v 1.12
+ -
+
Wed, 18 Nov 2020 21:40:31 GMT
+ Wed, 18 Nov 2020 21:40:31 GMT
+ https://git.slackware.nl/current/tag/?h=20201118214031
+ 20201118214031
+
+
+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, 16 Nov 2020 21:23:09 GMT
Mon, 16 Nov 2020 21:23:09 GMT
diff --git a/ChangeLog.txt b/ChangeLog.txt
index c2687d076..fffe27b53 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 26748ef1b..81fac764e 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 794797829..c200a976d 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 26ef48a13..082e85602 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 7fc37c180..efa865c12 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 45e84b6b8..b31aa51a5 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 636c3e3f9..c720a93f2 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 636c3e3f9..c720a93f2 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 1405e284d..60e7570a0 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 1405e284d..60e7570a0 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
similarity index 99%
rename from source/k/kernel-configs/config-generic-5.4.77
rename to source/k/kernel-configs/config-generic-5.4.78
index 34ce24cab..561a9da7a 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
similarity index 99%
rename from source/k/kernel-configs/config-generic-5.4.77.x64
rename to source/k/kernel-configs/config-generic-5.4.78.x64
index 05eed81f9..424310889 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
similarity index 99%
rename from source/k/kernel-configs/config-generic-smp-5.4.77-smp
rename to source/k/kernel-configs/config-generic-smp-5.4.78-smp
index 2d28470ec..f70358b4d 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
similarity index 99%
rename from source/k/kernel-configs/config-huge-5.4.77
rename to source/k/kernel-configs/config-huge-5.4.78
index e4cf34ad2..0764cf07a 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
similarity index 99%
rename from source/k/kernel-configs/config-huge-5.4.77.x64
rename to source/k/kernel-configs/config-huge-5.4.78.x64
index 2e70184db..ed3ec676d 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
similarity index 99%
rename from source/k/kernel-configs/config-huge-smp-5.4.77-smp
rename to source/k/kernel-configs/config-huge-smp-5.4.78-smp
index 118c0e036..6af7493c8 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 ee2442ff0..4a529a483 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 9471b7bd4..000000000
--- 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
-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
----
- 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 "]
--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 ", "David Tolnay "]
-+description = "A substitute implementation of the compiler's `proc_macro` API to decouple\ntoken-based libraries from the procedural macro use case.\n"
- documentation = "https://docs.rs/proc-macro2"
- readme = "README.md"
- keywords = ["macros"]
-+categories = ["development-tools::procedural-macro-helpers"]
- license = "MIT OR Apache-2.0"
- repository = "https://github.com/alexcrichton/proc-macro2"
- [package.metadata.docs.rs]
- rustc-args = ["--cfg", "procmacro2_semver_exempt"]
- rustdoc-args = ["--cfg", "procmacro2_semver_exempt"]
-+targets = ["x86_64-unknown-linux-gnu"]
-
--[lib]
--name = "proc_macro2"
-+[package.metadata.playground]
-+features = ["span-locations"]
- [dependencies.unicode-xid]
- version = "0.2"
- [dev-dependencies.quote]
-@@ -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 = 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,
-+pub(crate) struct TokenStream {
-+ pub(crate) inner: Vec,
- }
-
- #[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 {
-+ 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 for proc_macro::TokenStream {
-
- impl From for TokenStream {
- fn from(tree: TokenTree) -> TokenStream {
-- TokenStream { inner: vec![tree] }
-+ let mut stream = TokenStream::new();
-+ stream.push_token(tree);
-+ stream
- }
- }
-
--impl iter::FromIterator for TokenStream {
-- fn from_iter>(streams: I) -> Self {
-- let mut v = Vec::new();
--
-- for token in streams.into_iter() {
-- v.push(token);
-- }
--
-- TokenStream { inner: v }
-+impl FromIterator for TokenStream {
-+ fn from_iter>(tokens: I) -> Self {
-+ let mut stream = TokenStream::new();
-+ stream.extend(tokens);
-+ stream
- }
- }
-
--impl iter::FromIterator for TokenStream {
-+impl FromIterator for TokenStream {
- fn from_iter>(streams: I) -> Self {
- let mut v = Vec::new();
-
-- for stream in streams.into_iter() {
-- v.extend(stream.inner);
-+ for mut stream in streams {
-+ v.extend(stream.take_inner());
- }
-
- TokenStream { inner: v }
-@@ -168,31 +233,30 @@ impl iter::FromIterator for TokenStream {
- }
-
- impl Extend for TokenStream {
-- fn extend>(&mut self, streams: I) {
-- self.inner.extend(streams);
-+ fn extend>(&mut self, tokens: I) {
-+ tokens.into_iter().for_each(|token| self.push_token(token));
- }
- }
-
- impl Extend for TokenStream {
- fn extend>(&mut self, streams: I) {
-- self.inner
-- .extend(streams.into_iter().flat_map(|stream| stream));
-+ self.inner.extend(streams.into_iter().flatten());
- }
- }
-
--pub type TokenTreeIter = vec::IntoIter;
-+pub(crate) type TokenTreeIter = vec::IntoIter;
-
- impl IntoIterator for TokenStream {
- type Item = TokenTree;
- type IntoIter = TokenTreeIter;
-
-- fn into_iter(self) -> TokenTreeIter {
-- self.inner.into_iter()
-+ fn into_iter(mut self) -> TokenTreeIter {
-+ self.take_inner().into_iter()
- }
- }
-
- #[derive(Clone, PartialEq, Eq)]
--pub struct SourceFile {
-+pub(crate) struct SourceFile {
- path: PathBuf,
- }
-
-@@ -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 = RefCell::new(SourceMap {
- // NOTE: We start with a single dummy file which all call_site() and
- // def_site() spans reference.
-- files: vec![{
-+ files: vec![FileInfo {
- #[cfg(procmacro2_semver_exempt)]
-- {
-- FileInfo {
-- name: "".to_owned(),
-- span: Span { lo: 0, hi: 0 },
-- lines: vec![0],
-- }
-- }
--
-- #[cfg(not(procmacro2_semver_exempt))]
-- {
-- FileInfo {
-- span: Span { lo: 0, hi: 0 },
-- lines: vec![0],
-- }
-- }
-+ name: "".to_owned(),
-+ span: Span { lo: 0, hi: 0 },
-+ lines: vec![0],
- }],
- });
- }
-@@ -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 {
-+fn lines_offsets(s: &str) -> (usize, Vec) {
- let mut lines = vec![0];
-- let mut prev = 0;
-- while let Some(len) = s[prev..].find('\n') {
-- prev += len + 1;
-- lines.push(prev);
-+ let mut total = 0;
-+
-+ for ch in s.chars() {
-+ total += 1;
-+ if ch == '\n' {
-+ lines.push(total);
-+ }
- }
-- lines
-+
-+ (total, lines)
- }
-
- #[cfg(span_locations)]
-@@ -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 {
-- let mut trees = Vec::new();
-- loop {
-- let input_no_ws = skip_whitespace(input);
-- if input_no_ws.rest.len() == 0 {
-- break;
-- }
-- if let Ok((a, tokens)) = doc_comment(input_no_ws) {
-- input = a;
-- trees.extend(tokens);
-- continue;
-- }
--
-- let (a, tt) = match token_tree(input_no_ws) {
-- Ok(p) => p,
-- Err(_) => break,
-- };
-- trees.push(tt);
-- input = a;
-- }
-- Ok((input, TokenStream { inner: trees }))
--}
--
--#[cfg(not(span_locations))]
--fn spanned<'a, T>(
-- input: Cursor<'a>,
-- f: fn(Cursor<'a>) -> PResult<'a, T>,
--) -> PResult<'a, (T, crate::Span)> {
-- let (a, b) = f(skip_whitespace(input))?;
-- Ok((a, ((b, crate::Span::_new_stable(Span::call_site())))))
--}
--
--#[cfg(span_locations)]
--fn spanned<'a, T>(
-- input: Cursor<'a>,
-- f: fn(Cursor<'a>) -> PResult<'a, T>,
--) -> PResult<'a, (T, crate::Span)> {
-- let input = skip_whitespace(input);
-- let lo = input.off;
-- let (a, b) = f(input)?;
-- let hi = a.off;
-- let span = crate::Span::_new_stable(Span { lo, hi });
-- Ok((a, (b, span)))
--}
--
--fn token_tree(input: Cursor) -> PResult {
-- let (rest, (mut tt, span)) = spanned(input, token_kind)?;
-- tt.set_span(span);
-- Ok((rest, tt))
--}
--
--named!(token_kind -> TokenTree, alt!(
-- map!(group, |g| TokenTree::Group(crate::Group::_new_stable(g)))
-- |
-- map!(literal, |l| TokenTree::Literal(crate::Literal::_new_stable(l))) // must be before symbol
-- |
-- map!(op, TokenTree::Punct)
-- |
-- symbol_leading_ws
--));
--
--named!(group -> Group, alt!(
-- delimited!(
-- punct!("("),
-- token_stream,
-- punct!(")")
-- ) => { |ts| Group::new(Delimiter::Parenthesis, ts) }
-- |
-- delimited!(
-- punct!("["),
-- token_stream,
-- punct!("]")
-- ) => { |ts| Group::new(Delimiter::Bracket, ts) }
-- |
-- delimited!(
-- punct!("{"),
-- token_stream,
-- punct!("}")
-- ) => { |ts| Group::new(Delimiter::Brace, ts) }
--));
--
--fn symbol_leading_ws(input: Cursor) -> PResult {
-- symbol(skip_whitespace(input))
--}
--
--fn symbol(input: Cursor) -> PResult {
-- let raw = input.starts_with("r#");
-- let rest = input.advance((raw as usize) << 1);
--
-- let (rest, sym) = symbol_not_raw(rest)?;
--
-- if !raw {
-- let ident = crate::Ident::new(sym, crate::Span::call_site());
-- return Ok((rest, ident.into()));
-- }
--
-- if sym == "_" {
-- return Err(LexError);
-- }
--
-- let ident = crate::Ident::_new_raw(sym, crate::Span::call_site());
-- Ok((rest, ident.into()))
--}
--
--fn symbol_not_raw(input: Cursor) -> PResult<&str> {
-- let mut chars = input.char_indices();
--
-- match chars.next() {
-- Some((_, ch)) if is_ident_start(ch) => {}
-- _ => return Err(LexError),
-- }
--
-- let mut end = input.len();
-- for (i, ch) in chars {
-- if !is_ident_continue(ch) {
-- end = i;
-- break;
-- }
-- }
--
-- Ok((input.advance(end), &input.rest[..end]))
--}
--
--fn literal(input: Cursor) -> PResult {
-- let input_no_ws = skip_whitespace(input);
--
-- match literal_nocapture(input_no_ws) {
-- Ok((a, ())) => {
-- let start = input.len() - input_no_ws.len();
-- let len = input_no_ws.len() - a.len();
-- let end = start + len;
-- Ok((a, Literal::_new(input.rest[start..end].to_string())))
-- }
-- Err(LexError) => Err(LexError),
-- }
--}
--
--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(chars: &mut I) -> bool
--where
-- I: Iterator- ,
--{
-- next_ch!(chars @ '0'..='7');
-- next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F');
-- true
--}
--
--fn backslash_x_byte
(chars: &mut I) -> bool
--where
-- I: Iterator- ,
--{
-- next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F');
-- next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F');
-- true
--}
--
--fn backslash_u
(chars: &mut I) -> bool
--where
-- I: Iterator- ,
--{
-- next_ch!(chars @ '{');
-- next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F');
-- loop {
-- let c = next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F' | '_' | '}');
-- if c == '}' {
-- return true;
-- }
-- }
--}
--
--fn float(input: Cursor) -> PResult<()> {
-- let (mut rest, ()) = float_digits(input)?;
-- if let Some(ch) = rest.chars().next() {
-- if is_ident_start(ch) {
-- rest = symbol_not_raw(rest)?.0;
-- }
-- }
-- word_break(rest)
--}
--
--fn float_digits(input: Cursor) -> PResult<()> {
-- let mut chars = input.chars().peekable();
-- match chars.next() {
-- Some(ch) if ch >= '0' && ch <= '9' => {}
-- _ => return Err(LexError),
-- }
--
-- let mut len = 1;
-- let mut has_dot = false;
-- let mut has_exp = false;
-- while let Some(&ch) = chars.peek() {
-- match ch {
-- '0'..='9' | '_' => {
-- chars.next();
-- len += 1;
-- }
-- '.' => {
-- if has_dot {
-- break;
-- }
-- chars.next();
-- if chars
-- .peek()
-- .map(|&ch| ch == '.' || is_ident_start(ch))
-- .unwrap_or(false)
-- {
-- return Err(LexError);
-- }
-- len += 1;
-- has_dot = true;
-- }
-- 'e' | 'E' => {
-- chars.next();
-- len += 1;
-- has_exp = true;
-- break;
-- }
-- _ => break,
-- }
-- }
--
-- let rest = input.advance(len);
-- if !(has_dot || has_exp || rest.starts_with("f32") || rest.starts_with("f64")) {
-- return Err(LexError);
-- }
--
-- if has_exp {
-- let mut has_exp_value = false;
-- while let Some(&ch) = chars.peek() {
-- match ch {
-- '+' | '-' => {
-- if has_exp_value {
-- break;
-- }
-- chars.next();
-- len += 1;
-- }
-- '0'..='9' => {
-- chars.next();
-- len += 1;
-- has_exp_value = true;
-- }
-- '_' => {
-- chars.next();
-- len += 1;
-- }
-- _ => break,
-- }
-- }
-- if !has_exp_value {
-- return Err(LexError);
-- }
-- }
--
-- Ok((input.advance(len), ()))
--}
--
--fn int(input: Cursor) -> PResult<()> {
-- let (mut rest, ()) = digits(input)?;
-- if let Some(ch) = rest.chars().next() {
-- if is_ident_start(ch) {
-- rest = symbol_not_raw(rest)?.0;
-- }
-- }
-- word_break(rest)
--}
--
--fn digits(mut input: Cursor) -> PResult<()> {
-- let base = if input.starts_with("0x") {
-- input = input.advance(2);
-- 16
-- } else if input.starts_with("0o") {
-- input = input.advance(2);
-- 8
-- } else if input.starts_with("0b") {
-- input = input.advance(2);
-- 2
-- } else {
-- 10
-- };
--
-- let mut len = 0;
-- let mut empty = true;
-- for b in input.bytes() {
-- let digit = match b {
-- b'0'..=b'9' => (b - b'0') as u64,
-- b'a'..=b'f' => 10 + (b - b'a') as u64,
-- b'A'..=b'F' => 10 + (b - b'A') as u64,
-- b'_' => {
-- if empty && base == 10 {
-- return Err(LexError);
-- }
-- len += 1;
-- continue;
-- }
-- _ => break,
-- };
-- if digit >= base {
-- return Err(LexError);
-- }
-- len += 1;
-- empty = false;
-- }
-- if empty {
-- Err(LexError)
-- } else {
-- Ok((input.advance(len), ()))
-- }
--}
--
--fn op(input: Cursor) -> PResult
{
-- let input = skip_whitespace(input);
-- match op_char(input) {
-- Ok((rest, '\'')) => {
-- symbol(rest)?;
-- Ok((rest, Punct::new('\'', Spacing::Joint)))
-- }
-- Ok((rest, ch)) => {
-- let kind = match op_char(rest) {
-- Ok(_) => Spacing::Joint,
-- Err(LexError) => Spacing::Alone,
-- };
-- Ok((rest, Punct::new(ch, kind)))
-- }
-- Err(LexError) => Err(LexError),
-- }
--}
--
--fn op_char(input: Cursor) -> PResult {
-- if input.starts_with("//") || input.starts_with("/*") {
-- // Do not accept `/` of a comment as an op.
-- return Err(LexError);
-- }
--
-- let mut chars = input.chars();
-- let first = match chars.next() {
-- Some(ch) => ch,
-- None => {
-- return Err(LexError);
-- }
-- };
-- let recognized = "~!@#$%^&*-=+|;:,<.>/?'";
-- if recognized.contains(first) {
-- Ok((input.advance(first.len_utf8()), first))
-- } else {
-- Err(LexError)
-- }
--}
--
--fn doc_comment(input: Cursor) -> PResult> {
-- let mut trees = Vec::new();
-- let (rest, ((comment, inner), span)) = spanned(input, doc_comment_contents)?;
-- trees.push(TokenTree::Punct(Punct::new('#', Spacing::Alone)));
-- if inner {
-- trees.push(Punct::new('!', Spacing::Alone).into());
-- }
-- let mut stream = vec![
-- TokenTree::Ident(crate::Ident::new("doc", span)),
-- TokenTree::Punct(Punct::new('=', Spacing::Alone)),
-- TokenTree::Literal(crate::Literal::string(comment)),
-- ];
-- for tt in stream.iter_mut() {
-- tt.set_span(span);
-- }
-- let group = Group::new(Delimiter::Bracket, stream.into_iter().collect());
-- trees.push(crate::Group::_new_stable(group).into());
-- for tt in trees.iter_mut() {
-- tt.set_span(span);
-- }
-- Ok((rest, trees))
--}
--
--named!(doc_comment_contents -> (&str, bool), alt!(
-- do_parse!(
-- punct!("//!") >>
-- s: take_until_newline_or_eof!() >>
-- ((s, true))
-- )
-- |
-- do_parse!(
-- option!(whitespace) >>
-- peek!(tag!("/*!")) >>
-- s: block_comment >>
-- ((s, true))
-- )
-- |
-- do_parse!(
-- punct!("///") >>
-- not!(tag!("/")) >>
-- s: take_until_newline_or_eof!() >>
-- ((s, false))
-- )
-- |
-- do_parse!(
-- option!(whitespace) >>
-- peek!(tuple!(tag!("/**"), not!(tag!("*")))) >>
-- s: block_comment >>
-- ((s, false))
-- )
--));
-diff --git a/third_party/rust/proc-macro2/src/lib.rs b/third_party/rust/proc-macro2/src/lib.rs
-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>,
-+ _marker: Marker,
- }
-
- /// Error returned from `TokenStream::from_str`.
- pub struct LexError {
- inner: imp::LexError,
-- _marker: marker::PhantomData>,
-+ _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 {
- 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 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>,
-+ _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 {
-+ 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>,
-+ _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 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>,
-+ _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>,
-+ _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>,
-+ _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;
-+
-+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, LexError> {
-+ if self.starts_with(tag) {
-+ Ok(self.advance(tag.len()))
-+ } else {
-+ Err(LexError)
-+ }
-+ }
-+}
-+
-+type PResult<'a, O> = Result<(Cursor<'a>, O), LexError>;
-+
-+fn skip_whitespace(input: Cursor) -> Cursor {
-+ let mut s = input;
-+
-+ while !s.is_empty() {
-+ let byte = s.as_bytes()[0];
-+ if byte == b'/' {
-+ if s.starts_with("//")
-+ && (!s.starts_with("///") || s.starts_with("////"))
-+ && !s.starts_with("//!")
-+ {
-+ let (cursor, _) = take_until_newline_or_eof(s);
-+ s = cursor;
-+ continue;
-+ } else if s.starts_with("/**/") {
-+ s = s.advance(4);
-+ continue;
-+ } else if s.starts_with("/*")
-+ && (!s.starts_with("/**") || s.starts_with("/***"))
-+ && !s.starts_with("/*!")
-+ {
-+ match block_comment(s) {
-+ Ok((rest, _)) => {
-+ s = rest;
-+ continue;
-+ }
-+ Err(LexError) => return s,
-+ }
-+ }
-+ }
-+ match byte {
-+ b' ' | 0x09..=0x0d => {
-+ s = s.advance(1);
-+ continue;
-+ }
-+ b if b <= 0x7f => {}
-+ _ => {
-+ let ch = s.chars().next().unwrap();
-+ if is_whitespace(ch) {
-+ s = s.advance(ch.len_utf8());
-+ continue;
-+ }
-+ }
-+ }
-+ return s;
-+ }
-+ s
-+}
-+
-+fn block_comment(input: Cursor) -> PResult<&str> {
-+ if !input.starts_with("/*") {
-+ return Err(LexError);
-+ }
-+
-+ let mut depth = 0;
-+ let bytes = input.as_bytes();
-+ let mut i = 0;
-+ let upper = bytes.len() - 1;
-+
-+ while i < upper {
-+ if bytes[i] == b'/' && bytes[i + 1] == b'*' {
-+ depth += 1;
-+ i += 1; // eat '*'
-+ } else if bytes[i] == b'*' && bytes[i + 1] == b'/' {
-+ depth -= 1;
-+ if depth == 0 {
-+ return Ok((input.advance(i + 2), &input.rest[..i + 2]));
-+ }
-+ i += 1; // eat '/'
-+ }
-+ i += 1;
-+ }
-+
-+ Err(LexError)
-+}
-+
-+fn is_whitespace(ch: char) -> bool {
-+ // Rust treats left-to-right mark and right-to-left mark as whitespace
-+ ch.is_whitespace() || ch == '\u{200e}' || ch == '\u{200f}'
-+}
-+
-+fn word_break(input: Cursor) -> Result {
-+ match input.chars().next() {
-+ Some(ch) if is_ident_continue(ch) => Err(LexError),
-+ Some(_) | None => Ok(input),
-+ }
-+}
-+
-+pub(crate) fn token_stream(mut input: Cursor) -> PResult {
-+ let mut trees = Vec::new();
-+ let mut stack = Vec::new();
-+
-+ loop {
-+ input = skip_whitespace(input);
-+
-+ if let Ok((rest, tt)) = doc_comment(input) {
-+ trees.extend(tt);
-+ input = rest;
-+ continue;
-+ }
-+
-+ #[cfg(span_locations)]
-+ let lo = input.off;
-+
-+ let first = match input.bytes().next() {
-+ Some(first) => first,
-+ None => break,
-+ };
-+
-+ if let Some(open_delimiter) = match first {
-+ b'(' => Some(Delimiter::Parenthesis),
-+ b'[' => Some(Delimiter::Bracket),
-+ b'{' => Some(Delimiter::Brace),
-+ _ => None,
-+ } {
-+ input = input.advance(1);
-+ let frame = (open_delimiter, trees);
-+ #[cfg(span_locations)]
-+ let frame = (lo, frame);
-+ stack.push(frame);
-+ trees = Vec::new();
-+ } else if let Some(close_delimiter) = match first {
-+ b')' => Some(Delimiter::Parenthesis),
-+ b']' => Some(Delimiter::Bracket),
-+ b'}' => Some(Delimiter::Brace),
-+ _ => None,
-+ } {
-+ input = input.advance(1);
-+ let frame = stack.pop().ok_or(LexError)?;
-+ #[cfg(span_locations)]
-+ let (lo, frame) = frame;
-+ let (open_delimiter, outer) = frame;
-+ if open_delimiter != close_delimiter {
-+ return Err(LexError);
-+ }
-+ let mut g = Group::new(open_delimiter, TokenStream { inner: trees });
-+ g.set_span(Span {
-+ #[cfg(span_locations)]
-+ lo,
-+ #[cfg(span_locations)]
-+ hi: input.off,
-+ });
-+ trees = outer;
-+ trees.push(TokenTree::Group(crate::Group::_new_stable(g)));
-+ } else {
-+ let (rest, mut tt) = leaf_token(input)?;
-+ tt.set_span(crate::Span::_new_stable(Span {
-+ #[cfg(span_locations)]
-+ lo,
-+ #[cfg(span_locations)]
-+ hi: rest.off,
-+ }));
-+ trees.push(tt);
-+ input = rest;
-+ }
-+ }
-+
-+ if stack.is_empty() {
-+ Ok((input, TokenStream { inner: trees }))
-+ } else {
-+ Err(LexError)
-+ }
-+}
-+
-+fn leaf_token(input: Cursor) -> PResult {
-+ if let Ok((input, l)) = literal(input) {
-+ // must be parsed before ident
-+ Ok((input, TokenTree::Literal(crate::Literal::_new_stable(l))))
-+ } else if let Ok((input, p)) = 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 {
-+ 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 {
-+ let raw = input.starts_with("r#");
-+ let rest = input.advance((raw as usize) << 1);
-+
-+ let (rest, sym) = ident_not_raw(rest)?;
-+
-+ if !raw {
-+ let ident = crate::Ident::new(sym, crate::Span::call_site());
-+ return Ok((rest, ident));
-+ }
-+
-+ if sym == "_" {
-+ return Err(LexError);
-+ }
-+
-+ let ident = crate::Ident::_new_raw(sym, crate::Span::call_site());
-+ Ok((rest, ident))
-+}
-+
-+fn ident_not_raw(input: Cursor) -> PResult<&str> {
-+ let mut chars = input.char_indices();
-+
-+ match chars.next() {
-+ Some((_, ch)) if is_ident_start(ch) => {}
-+ _ => return Err(LexError),
-+ }
-+
-+ let mut end = input.len();
-+ for (i, ch) in chars {
-+ if !is_ident_continue(ch) {
-+ end = i;
-+ break;
-+ }
-+ }
-+
-+ Ok((input.advance(end), &input.rest[..end]))
-+}
-+
-+fn literal(input: Cursor) -> PResult {
-+ match literal_nocapture(input) {
-+ Ok(a) => {
-+ let end = input.len() - a.len();
-+ Ok((a, Literal::_new(input.rest[..end].to_string())))
-+ }
-+ Err(LexError) => Err(LexError),
-+ }
-+}
-+
-+fn literal_nocapture(input: Cursor) -> Result {
-+ if let Ok(ok) = string(input) {
-+ Ok(ok)
-+ } else if let Ok(ok) = byte_string(input) {
-+ Ok(ok)
-+ } else if let Ok(ok) = byte(input) {
-+ Ok(ok)
-+ } else if let Ok(ok) = character(input) {
-+ Ok(ok)
-+ } else if let Ok(ok) = float(input) {
-+ Ok(ok)
-+ } else if let Ok(ok) = int(input) {
-+ Ok(ok)
-+ } else {
-+ Err(LexError)
-+ }
-+}
-+
-+fn literal_suffix(input: Cursor) -> Cursor {
-+ match ident_not_raw(input) {
-+ Ok((input, _)) => input,
-+ Err(LexError) => input,
-+ }
-+}
-+
-+fn string(input: Cursor) -> Result {
-+ if let Ok(input) = input.parse("\"") {
-+ cooked_string(input)
-+ } else if let Ok(input) = input.parse("r") {
-+ raw_string(input)
-+ } else {
-+ Err(LexError)
-+ }
-+}
-+
-+fn cooked_string(input: Cursor) -> Result {
-+ let mut chars = input.char_indices().peekable();
-+
-+ while let Some((i, ch)) = chars.next() {
-+ match ch {
-+ '"' => {
-+ let input = input.advance(i + 1);
-+ return Ok(literal_suffix(input));
-+ }
-+ '\r' => 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 {
-+ if let Ok(input) = input.parse("b\"") {
-+ cooked_byte_string(input)
-+ } else if let Ok(input) = input.parse("br") {
-+ raw_string(input)
-+ } else {
-+ Err(LexError)
-+ }
-+}
-+
-+fn cooked_byte_string(mut input: Cursor) -> Result {
-+ let mut bytes = input.bytes().enumerate();
-+ 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 {
-+ 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 {
-+ let input = input.parse("b'")?;
-+ let mut bytes = input.bytes().enumerate();
-+ let ok = match bytes.next().map(|(_, b)| b) {
-+ Some(b'\\') => match bytes.next().map(|(_, b)| b) {
-+ Some(b'x') => backslash_x_byte(&mut bytes),
-+ Some(b'n') | Some(b'r') | Some(b't') | Some(b'\\') | Some(b'0') | Some(b'\'')
-+ | Some(b'"') => true,
-+ _ => false,
-+ },
-+ b => b.is_some(),
-+ };
-+ if !ok {
-+ return Err(LexError);
-+ }
-+ let (offset, _) = bytes.next().ok_or(LexError)?;
-+ if !input.chars().as_str().is_char_boundary(offset) {
-+ return Err(LexError);
-+ }
-+ let input = input.advance(offset).parse("'")?;
-+ Ok(literal_suffix(input))
-+}
-+
-+fn character(input: Cursor) -> Result {
-+ let input = input.parse("'")?;
-+ let mut chars = input.char_indices();
-+ let ok = match chars.next().map(|(_, ch)| ch) {
-+ Some('\\') => match chars.next().map(|(_, ch)| ch) {
-+ Some('x') => backslash_x_char(&mut chars),
-+ Some('u') => backslash_u(&mut chars),
-+ Some('n') | Some('r') | Some('t') | Some('\\') | Some('0') | Some('\'') | Some('"') => {
-+ true
-+ }
-+ _ => false,
-+ },
-+ ch => ch.is_some(),
-+ };
-+ if !ok {
-+ return Err(LexError);
-+ }
-+ let (idx, _) = chars.next().ok_or(LexError)?;
-+ let input = input.advance(idx).parse("'")?;
-+ Ok(literal_suffix(input))
-+}
-+
-+macro_rules! next_ch {
-+ ($chars:ident @ $pat:pat $(| $rest:pat)*) => {
-+ match $chars.next() {
-+ Some((_, ch)) => match ch {
-+ $pat $(| $rest)* => ch,
-+ _ => return false,
-+ },
-+ None => return false,
-+ }
-+ };
-+}
-+
-+fn backslash_x_char(chars: &mut I) -> bool
-+where
-+ I: Iterator- ,
-+{
-+ next_ch!(chars @ '0'..='7');
-+ next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F');
-+ true
-+}
-+
-+fn backslash_x_byte
(chars: &mut I) -> bool
-+where
-+ I: Iterator- ,
-+{
-+ next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F');
-+ next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F');
-+ true
-+}
-+
-+fn backslash_u
(chars: &mut I) -> bool
-+where
-+ I: Iterator- ,
-+{
-+ next_ch!(chars @ '{');
-+ 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
{
-+ let mut rest = float_digits(input)?;
-+ if let Some(ch) = rest.chars().next() {
-+ if is_ident_start(ch) {
-+ rest = ident_not_raw(rest)?.0;
-+ }
-+ }
-+ word_break(rest)
-+}
-+
-+fn float_digits(input: Cursor) -> Result {
-+ let mut chars = input.chars().peekable();
-+ match chars.next() {
-+ Some(ch) if ch >= '0' && ch <= '9' => {}
-+ _ => return Err(LexError),
-+ }
-+
-+ let mut len = 1;
-+ let mut has_dot = false;
-+ let mut has_exp = false;
-+ while let Some(&ch) = chars.peek() {
-+ match ch {
-+ '0'..='9' | '_' => {
-+ chars.next();
-+ len += 1;
-+ }
-+ '.' => {
-+ if has_dot {
-+ break;
-+ }
-+ chars.next();
-+ if chars
-+ .peek()
-+ .map(|&ch| ch == '.' || is_ident_start(ch))
-+ .unwrap_or(false)
-+ {
-+ return Err(LexError);
-+ }
-+ len += 1;
-+ has_dot = true;
-+ }
-+ 'e' | 'E' => {
-+ chars.next();
-+ len += 1;
-+ has_exp = true;
-+ break;
-+ }
-+ _ => break,
-+ }
-+ }
-+
-+ 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 {
-+ let mut rest = digits(input)?;
-+ if let Some(ch) = rest.chars().next() {
-+ if is_ident_start(ch) {
-+ rest = ident_not_raw(rest)?.0;
-+ }
-+ }
-+ word_break(rest)
-+}
-+
-+fn digits(mut input: Cursor) -> Result {
-+ let base = if input.starts_with("0x") {
-+ input = input.advance(2);
-+ 16
-+ } else if input.starts_with("0o") {
-+ input = input.advance(2);
-+ 8
-+ } else if input.starts_with("0b") {
-+ input = input.advance(2);
-+ 2
-+ } else {
-+ 10
-+ };
-+
-+ let mut len = 0;
-+ let mut empty = true;
-+ for b in input.bytes() {
-+ 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 {
-+ 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 {
-+ 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> {
-+ #[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 {
-- 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,
- }
-
--pub enum LexError {
-+pub(crate) enum LexError {
- Compiler(proc_macro::LexError),
- Fallback(fallback::LexError),
- }
-
--fn nightly_works() -> bool {
-- use std::sync::atomic::*;
-- use std::sync::Once;
--
-- static WORKS: AtomicUsize = AtomicUsize::new(0);
-- static INIT: Once = Once::new();
--
-- match WORKS.load(Ordering::SeqCst) {
-- 1 => return false,
-- 2 => return true,
-- _ => {}
-- }
--
-- // Swap in a null panic hook to avoid printing "thread panicked" to stderr,
-- // then use catch_unwind to determine whether the compiler's proc_macro is
-- // working. When proc-macro2 is used from outside of a procedural macro all
-- // of the proc_macro crate's APIs currently panic.
-- //
-- // The Once is to prevent the possibility of this ordering:
-- //
-- // thread 1 calls take_hook, gets the user's original hook
-- // thread 1 calls set_hook with the null hook
-- // thread 2 calls take_hook, thinks null hook is the original hook
-- // thread 2 calls set_hook with the null hook
-- // thread 1 calls set_hook with the actual original hook
-- // thread 2 calls set_hook with what it thinks is the original hook
-- //
-- // in which the user's hook has been lost.
-- //
-- // There is still a race condition where a panic in a different thread can
-- // happen during the interval that the user's original panic hook is
-- // unregistered such that their hook is incorrectly not called. This is
-- // sufficiently unlikely and less bad than printing panic messages to stderr
-- // on correct use of this crate. Maybe there is a libstd feature request
-- // here. For now, if a user needs to guarantee that this failure mode does
-- // not occur, they need to call e.g. `proc_macro2::Span::call_site()` from
-- // the main thread before launching any other threads.
-- INIT.call_once(|| {
-- type PanicHook = dyn Fn(&PanicInfo) + Sync + Send + 'static;
--
-- let null_hook: Box = Box::new(|_panic_info| { /* ignore */ });
-- let sanity_check = &*null_hook as *const PanicHook;
-- let original_hook = panic::take_hook();
-- panic::set_hook(null_hook);
--
-- let works = panic::catch_unwind(|| proc_macro::Span::call_site()).is_ok();
-- WORKS.store(works as usize + 1, Ordering::SeqCst);
--
-- let hopefully_null_hook = panic::take_hook();
-- panic::set_hook(original_hook);
-- if sanity_check != &*hopefully_null_hook {
-- panic!("observed race condition in proc_macro2::nightly_works");
-- }
-- });
-- nightly_works()
--}
--
- fn mismatch() -> ! {
- panic!("stable/nightly mismatch")
- }
-@@ -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 {
-- 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 {
-+ 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 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 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 for TokenStream {
- }
- }
-
--impl iter::FromIterator for TokenStream {
-+impl FromIterator for TokenStream {
- fn from_iter>(trees: I) -> Self {
-- if nightly_works() {
-+ if inside_proc_macro() {
- TokenStream::Compiler(DeferredTokenStream::new(
- trees.into_iter().map(into_compiler_token).collect(),
- ))
-@@ -227,7 +181,7 @@ impl iter::FromIterator for TokenStream {
- }
- }
-
--impl iter::FromIterator for TokenStream {
-+impl FromIterator for TokenStream {
- fn from_iter>(streams: I) -> Self {
- let mut streams = streams.into_iter();
- match streams.next() {
-@@ -252,14 +206,15 @@ impl iter::FromIterator for TokenStream {
- }
-
- impl Extend for TokenStream {
-- fn extend>(&mut self, streams: I) {
-+ fn extend>(&mut self, stream: I) {
- match self {
- TokenStream::Compiler(tts) => {
- // Here is the reason for DeferredTokenStream.
-- tts.extra
-- .extend(streams.into_iter().map(into_compiler_token));
-+ for token in stream {
-+ tts.extra.push(into_compiler_token(token));
-+ }
- }
-- TokenStream::Fallback(tts) => tts.extend(streams),
-+ TokenStream::Fallback(tts) => tts.extend(stream),
- }
- }
- }
-@@ -270,20 +225,20 @@ impl Extend 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 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 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 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 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::().unwrap();
-+ let tokens = stream.into_iter().collect::>();
-+ assert!(tokens.is_empty(), "not empty -- {:?}", tokens);
-+}
-+
-+#[test]
-+fn incomplete() {
-+ assert!("/*/".parse::().is_err());
-+}
-+
-+#[test]
-+fn lit() {
-+ let stream = "/// doc".parse::().unwrap();
-+ let lit = lit_of_outer_doc_comment(stream);
-+ assert_eq!(lit.to_string(), "\" doc\"");
-+
-+ let stream = "//! doc".parse::().unwrap();
-+ let lit = lit_of_inner_doc_comment(stream);
-+ assert_eq!(lit.to_string(), "\" doc\"");
-+
-+ let stream = "/** doc */".parse::().unwrap();
-+ let lit = lit_of_outer_doc_comment(stream);
-+ assert_eq!(lit.to_string(), "\" doc \"");
-+
-+ let stream = "/*! doc */".parse::().unwrap();
-+ let lit = lit_of_inner_doc_comment(stream);
-+ assert_eq!(lit.to_string(), "\" doc \"");
-+}
-+
-+#[test]
-+fn carriage_return() {
-+ let stream = "///\r\n".parse::().unwrap();
-+ let lit = lit_of_outer_doc_comment(stream);
-+ assert_eq!(lit.to_string(), "\"\"");
-+
-+ let stream = "/**\r\n*/".parse::().unwrap();
-+ let lit = lit_of_outer_doc_comment(stream);
-+ assert_eq!(lit.to_string(), "\"\\r\\n\"");
-+
-+ "///\r".parse::().unwrap_err();
-+ "///\r \n".parse::().unwrap_err();
-+ "/**\r \n*/".parse::().unwrap_err();
-+}
-diff --git a/third_party/rust/proc-macro2/tests/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::().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::().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::().is_err());
-+ assert!(s.parse::().is_err());
- }
-
- #[test]
--fn tricky_doc_comment() {
-- let stream = "/**/".parse::().unwrap();
-- let tokens = stream.into_iter().collect::>();
-- assert!(tokens.is_empty(), "not empty -- {:?}", tokens);
--
-- let stream = "/// doc".parse::().unwrap();
-- let tokens = stream.into_iter().collect::>();
-- assert!(tokens.len() == 2, "not length 2 -- {:?}", tokens);
-- match tokens[0] {
-- proc_macro2::TokenTree::Punct(ref tt) => assert_eq!(tt.as_char(), '#'),
-- _ => panic!("wrong token {:?}", tokens[0]),
-- }
-- let mut tokens = match tokens[1] {
-- proc_macro2::TokenTree::Group(ref tt) => {
-- assert_eq!(tt.delimiter(), proc_macro2::Delimiter::Bracket);
-- tt.stream().into_iter()
-- }
-- _ => panic!("wrong token {:?}", tokens[0]),
-- };
--
-- match tokens.next().unwrap() {
-- proc_macro2::TokenTree::Ident(ref tt) => assert_eq!(tt.to_string(), "doc"),
-- t => panic!("wrong token {:?}", t),
-- }
-- match tokens.next().unwrap() {
-- proc_macro2::TokenTree::Punct(ref tt) => assert_eq!(tt.as_char(), '='),
-- t => panic!("wrong token {:?}", t),
-- }
-- match tokens.next().unwrap() {
-- proc_macro2::TokenTree::Literal(ref tt) => {
-- assert_eq!(tt.to_string(), "\" doc\"");
-- }
-- t => panic!("wrong token {:?}", t),
-- }
-- assert!(tokens.next().is_none());
--
-- let stream = "//! doc".parse::().unwrap();
-- let tokens = stream.into_iter().collect::>();
-- assert!(tokens.len() == 3, "not length 3 -- {:?}", tokens);
--}
--
--#[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::().unwrap().into_iter();
-+ assert_eq!("tuple", tokens.next().unwrap().to_string());
-+ assert_eq!(".", tokens.next().unwrap().to_string());
-+ assert_eq!("0.0", tokens.next().unwrap().to_string());
-+ assert!(tokens.next().is_none());
-+}
-+
-+#[cfg(span_locations)]
-+#[test]
-+fn non_ascii_tokens() {
-+ check_spans("// abc", &[]);
-+ check_spans("// ábc", &[]);
-+ check_spans("// abc x", &[]);
-+ check_spans("// ábc x", &[]);
-+ check_spans("/* abc */ x", &[(1, 10, 1, 11)]);
-+ check_spans("/* ábc */ x", &[(1, 10, 1, 11)]);
-+ check_spans("/* ab\nc */ x", &[(2, 5, 2, 6)]);
-+ check_spans("/* áb\nc */ x", &[(2, 5, 2, 6)]);
-+ check_spans("/*** abc */ x", &[(1, 12, 1, 13)]);
-+ check_spans("/*** ábc */ x", &[(1, 12, 1, 13)]);
-+ check_spans(r#""abc""#, &[(1, 0, 1, 5)]);
-+ check_spans(r#""ábc""#, &[(1, 0, 1, 5)]);
-+ check_spans(r###"r#"abc"#"###, &[(1, 0, 1, 8)]);
-+ check_spans(r###"r#"ábc"#"###, &[(1, 0, 1, 8)]);
-+ check_spans("r#\"a\nc\"#", &[(1, 0, 2, 3)]);
-+ check_spans("r#\"á\nc\"#", &[(1, 0, 2, 3)]);
-+ check_spans("'a'", &[(1, 0, 1, 3)]);
-+ check_spans("'á'", &[(1, 0, 1, 3)]);
-+ check_spans("//! abc", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]);
-+ check_spans("//! ábc", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]);
-+ check_spans("//! abc\n", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]);
-+ check_spans("//! ábc\n", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]);
-+ check_spans("/*! abc */", &[(1, 0, 1, 10), (1, 0, 1, 10), (1, 0, 1, 10)]);
-+ check_spans("/*! ábc */", &[(1, 0, 1, 10), (1, 0, 1, 10), (1, 0, 1, 10)]);
-+ check_spans("/*! a\nc */", &[(1, 0, 2, 4), (1, 0, 2, 4), (1, 0, 2, 4)]);
-+ check_spans("/*! á\nc */", &[(1, 0, 2, 4), (1, 0, 2, 4), (1, 0, 2, 4)]);
-+ check_spans("abc", &[(1, 0, 1, 3)]);
-+ check_spans("ábc", &[(1, 0, 1, 3)]);
-+ check_spans("ábć", &[(1, 0, 1, 3)]);
-+ check_spans("abc// foo", &[(1, 0, 1, 3)]);
-+ check_spans("ábc// foo", &[(1, 0, 1, 3)]);
-+ check_spans("ábć// foo", &[(1, 0, 1, 3)]);
-+ check_spans("b\"a\\\n c\"", &[(1, 0, 2, 3)]);
-+ check_spans("b\"a\\\n\u{00a0}c\"", &[(1, 0, 2, 3)]);
-+}
-+
-+#[cfg(span_locations)]
-+fn check_spans(p: &str, mut lines: &[(usize, usize, usize, usize)]) {
-+ let ts = p.parse::().unwrap();
-+ check_spans_internal(ts, &mut lines);
-+ assert!(lines.is_empty(), "leftover ranges: {:?}", lines);
-+}
-+
-+#[cfg(span_locations)]
-+fn check_spans_internal(ts: TokenStream, lines: &mut &[(usize, usize, usize, usize)]) {
-+ for i in ts {
-+ if let Some((&(sline, scol, eline, ecol), rest)) = lines.split_first() {
-+ *lines = rest;
-+
-+ let start = i.span().start();
-+ assert_eq!(start.line, sline, "sline did not match for {}", i);
-+ assert_eq!(start.column, scol, "scol did not match for {}", i);
-+
-+ let end = i.span().end();
-+ assert_eq!(end.line, eline, "eline did not match for {}", i);
-+ assert_eq!(end.column, ecol, "ecol did not match for {}", i);
-+
-+ if let TokenTree::Group(g) = i {
-+ check_spans_internal(g.stream().clone(), lines);
-+ }
-+ }
-+ }
-+}
-diff --git a/third_party/rust/proc-macro2/tests/test_fmt.rs b/third_party/rust/proc-macro2/tests/test_fmt.rs
-new file mode 100644
-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 "]
- 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)
-+[ ](https://github.com/dtolnay/syn)
-+[ ](https://crates.io/crates/syn)
-+[ ](https://docs.rs/syn)
-+[ ](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/
-
-
-
-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> {
-+ 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 {
-- 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.*
- ///
- ///
-@@ -111,7 +107,46 @@ ast_struct! {
- ///
- /// [`parse_meta()`]: Attribute::parse_meta
- /// [`parse_args()`]: Attribute::parse_args
-- pub struct Attribute #manual_extra_traits {
-+ ///
-+ ///
-+ ///
-+ /// # Doc comments
-+ ///
-+ /// The compiler transforms doc comments, such as `/// comment` and `/*!
-+ /// comment */`, into attributes before macros are expanded. Each comment is
-+ /// expanded into an attribute of the form `#[doc = r"comment"]`.
-+ ///
-+ /// As an example, the following `mod` items are expanded identically:
-+ ///
-+ /// ```
-+ /// # use syn::{ItemMod, parse_quote};
-+ /// let doc: ItemMod = parse_quote! {
-+ /// /// Single line doc comments
-+ /// /// We write so many!
-+ /// /**
-+ /// * Multi-line comments...
-+ /// * May span many lines
-+ /// */
-+ /// mod example {
-+ /// //! Of course, they can be inner too
-+ /// /*! And fit in a single line */
-+ /// }
-+ /// };
-+ /// let attr: ItemMod = parse_quote! {
-+ /// #[doc = r" Single line doc comments"]
-+ /// #[doc = r" We write so many!"]
-+ /// #[doc = r"
-+ /// * Multi-line comments...
-+ /// * May span many lines
-+ /// "]
-+ /// mod example {
-+ /// #![doc = r" Of course, they can be inner too"]
-+ /// #![doc = r" And fit in a single line "]
-+ /// }
-+ /// };
-+ /// assert_eq!(doc, attr);
-+ /// ```
-+ pub struct Attribute {
- pub pound_token: Token![#],
- pub style: AttrStyle,
- pub bracket_token: token::Bracket,
-@@ -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(&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 {
-@@ -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(&self) -> Result {
-@@ -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(&self, parser: F) -> Result {
-@@ -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> {
-@@ -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> {
-@@ -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> {
- 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> {
-+ 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>(
-+ #[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 {
-+ 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 {
-+ // 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::()?;
-
- 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,
-@@ -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::>(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 = std::result::Result;
- /// 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 = std::result::Result;
- /// # }
- /// # }
- /// ```
--#[derive(Clone)]
- pub struct Error {
- messages: Vec,
- }
-@@ -250,6 +248,17 @@ pub fn new_at(scope: Span, cursor: Cursor, message: T) -> Error {
- }
- }
-
-+#[cfg(all(feature = "parsing", any(feature = "full", feature = "derive")))]
-+pub fn new2(start: Span, end: Span, message: T) -> Error {
-+ Error {
-+ messages: vec![ErrorMessage {
-+ start_span: ThreadBound::new(start),
-+ end_span: ThreadBound::new(end),
-+ message: message.to_string(),
-+ }],
-+ }
-+}
-+
- impl Debug for Error {
- fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
- if self.messages.len() == 1 {
-@@ -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 for Error {
-+ fn extend>(&mut self, iter: T) {
-+ for err in iter {
-+ self.combine(err);
-+ }
-+ }
-+}
-diff --git a/third_party/rust/syn/src/expr.rs b/third_party/rust/syn/src/expr.rs
-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,
- 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,
- pub left: Box,
-@@ -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,
- pub left: Box,
-@@ -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,
- 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,
- pub base: Box,
-@@ -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,
-@@ -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,
- pub label: Option,
-@@ -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,
- 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,
- 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,
-@@ -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,
-@@ -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,
- pub asyncness: Option,
-@@ -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,
- 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,
- pub base: Box,
-@@ -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,
- pub label: Option,
-@@ -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,
- 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,
- 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,
-@@ -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,
- 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,
-@@ -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,
- pub label: Option,
-@@ -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,
- 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,
- pub match_token: Token![match],
-@@ -521,7 +524,7 @@ ast_struct! {
- ast_struct! {
- /// A method call expression: `x.foo::(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,
- pub receiver: Box,
-@@ -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,
- 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,
-@@ -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,
- pub from: Option>,
-@@ -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,
- 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,
- 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,
- 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,
- 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,
- pub expr: Box,
-@@ -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,
- 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,
- 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,
- pub expr: Box,
-@@ -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,
-@@ -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,
- 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,
- pub label: Option,
-@@ -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,
- 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(&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) -> Vec {
-@@ -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(&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 {
-+ 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 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(&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 {
-+ Some(self.span)
- }
- }
-
-@@ -1057,7 +872,7 @@ ast_struct! {
- /// The `::<>` explicit type parameters passed to a method call:
- /// `parse::()`.
- ///
-- /// *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,
-@@ -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,
- 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 {
-- 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 {
-+ 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 {
-+ 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> {
-+ 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)
-+ }
-+
- //
- // &
- // &mut
- // box
- #[cfg(feature = "full")]
- fn unary_expr(input: ParseStream, allow_struct: AllowStruct) -> Result {
-- // 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 =
-+ if input.peek(raw) && (input.peek2(Token![mut]) || input.peek2(Token![const])) {
-+ Some(input.parse()?)
-+ } else {
-+ None
-+ };
-+ let mutability: Option = input.parse()?;
-+ if raw.is_some() && mutability.is_none() {
-+ input.parse::()?;
-+ }
-+ 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 {
-- // 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 {
- // [ ] ...
- // ? ...
- #[cfg(feature = "full")]
-- fn trailer_expr(input: ParseStream, allow_struct: AllowStruct) -> Result {
-- 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,
-+ input: ParseStream,
-+ allow_struct: AllowStruct,
-+ ) -> Result {
- 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 = 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 = 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 = 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 {
-- 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 {
-- 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 {
-- // 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 = 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 {
-+ 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 {
-+ let outer_attrs = input.call(Attribute::parse_outer)?;
- let label: Option