From 272467a60bb9c300bdb0ba546ff821498ec27904 Mon Sep 17 00:00:00 2001 From: Patrick J Volkerding Date: Mon, 16 Nov 2020 21:23:09 +0000 Subject: 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. l/lz4-1.9.3-x86_64-1.txz: Upgraded. l/mozjs78-78.5.0esr-x86_64-1.txz: Upgraded. n/ModemManager-1.14.8-x86_64-1.txz: Upgraded. n/mutt-2.0.1-x86_64-1.txz: Upgraded. xap/mozilla-firefox-78.5.0esr-x86_64-1.txz: Upgraded. This is a bugfix release. For more information, see: https://www.mozilla.org/en-US/firefox/78.5.0/releasenotes/ --- ChangeLog.rss | 24 +- ChangeLog.txt | 12 + FILELIST.TXT | 129 +- recompress.sh | 1 - source/a/util-linux/util-linux.SlackBuild | 2 +- source/l/imagemagick/policy.xml.diff | 10 +- source/l/mozjs78/mozjs78.SlackBuild | 2 +- .../xap/mozilla-firefox/mozilla-firefox.SlackBuild | 3 - source/xap/mozilla-firefox/rust_1.47.0.patch | 30905 ------------------- 9 files changed, 105 insertions(+), 30983 deletions(-) delete mode 100644 source/xap/mozilla-firefox/rust_1.47.0.patch diff --git a/ChangeLog.rss b/ChangeLog.rss index 553ff59b9..ed41754b7 100644 --- a/ChangeLog.rss +++ b/ChangeLog.rss @@ -11,9 +11,29 @@ Tracking Slackware development in git. en-us urn:uuid:c964f45e-6732-11e8-bbe5-107b4450212f - Sun, 15 Nov 2020 00:02:28 GMT - Sun, 15 Nov 2020 07:59:45 GMT + Mon, 16 Nov 2020 21:23:09 GMT + Tue, 17 Nov 2020 07:59:47 GMT maintain_current_git.sh v 1.12 + + Mon, 16 Nov 2020 21:23:09 GMT + Mon, 16 Nov 2020 21:23:09 GMT + https://git.slackware.nl/current/tag/?h=20201116212309 + 20201116212309 + + +a/util-linux-2.36.1-x86_64-1.txz: Upgraded. +l/imagemagick-7.0.10_38-x86_64-1.txz: Upgraded. +l/lz4-1.9.3-x86_64-1.txz: Upgraded. +l/mozjs78-78.5.0esr-x86_64-1.txz: Upgraded. +n/ModemManager-1.14.8-x86_64-1.txz: Upgraded. +n/mutt-2.0.1-x86_64-1.txz: Upgraded. +xap/mozilla-firefox-78.5.0esr-x86_64-1.txz: Upgraded. + This is a bugfix release. + For more information, see: + https://www.mozilla.org/en-US/firefox/78.5.0/releasenotes/ + ]]> + + Sun, 15 Nov 2020 00:02:28 GMT Sun, 15 Nov 2020 00:02:28 GMT diff --git a/ChangeLog.txt b/ChangeLog.txt index f49448bc0..c2687d076 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,3 +1,15 @@ +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. +l/lz4-1.9.3-x86_64-1.txz: Upgraded. +l/mozjs78-78.5.0esr-x86_64-1.txz: Upgraded. +n/ModemManager-1.14.8-x86_64-1.txz: Upgraded. +n/mutt-2.0.1-x86_64-1.txz: Upgraded. +xap/mozilla-firefox-78.5.0esr-x86_64-1.txz: Upgraded. + This is a bugfix release. + For more information, see: + https://www.mozilla.org/en-US/firefox/78.5.0/releasenotes/ ++--------------------------+ Sun Nov 15 00:02:28 UTC 2020 a/inotify-tools-3.20.11.0-x86_64-1.txz: Upgraded. d/bison-3.7.4-x86_64-1.txz: Upgraded. diff --git a/FILELIST.TXT b/FILELIST.TXT index 92b1861e2..26748ef1b 100644 --- a/FILELIST.TXT +++ b/FILELIST.TXT @@ -1,20 +1,20 @@ -Sun Nov 15 00:08:12 UTC 2020 +Mon Nov 16 21:26:27 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-15 00:02 . +drwxr-xr-x 12 root root 4096 2020-11-16 21:23 . -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 1352707 2020-11-14 02:49 ./CHECKSUMS.md5 --rw-r--r-- 1 root root 163 2020-11-14 02:49 ./CHECKSUMS.md5.asc +-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 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 1051035 2020-11-15 00:02 ./ChangeLog.txt +-rw-r--r-- 1 root root 1051529 2020-11-16 21:23 ./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 -rw-r--r-- 1 root root 1417216 2019-07-05 18:54 ./EFI/BOOT/bootx64.efi @@ -25,9 +25,9 @@ drwxr-xr-x 2 root root 4096 2020-11-11 23:01 ./EFI/BOOT -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 1734591 2020-11-14 02:48 ./FILELIST.TXT +-rw-r--r-- 1 root root 1734210 2020-11-15 00:08 ./FILELIST.TXT -rw-r--r-- 1 root root 1572 2012-08-29 18:27 ./GPG-KEY --rw-r--r-- 1 root root 769330 2020-11-15 00:07 ./PACKAGES.TXT +-rw-r--r-- 1 root root 769332 2020-11-16 21:26 ./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 34412 2017-12-01 17:44 ./README_CRYPT.TXT @@ -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-15 00:07 ./slackware64 --rw-r--r-- 1 root root 302867 2020-11-15 00:07 ./slackware64/CHECKSUMS.md5 --rw-r--r-- 1 root root 163 2020-11-15 00:07 ./slackware64/CHECKSUMS.md5.asc --rw-r--r-- 1 root root 376870 2020-11-15 00:06 ./slackware64/FILE_LIST --rw-r--r-- 1 root root 3886226 2020-11-15 00:06 ./slackware64/MANIFEST.bz2 +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 lrwxrwxrwx 1 root root 15 2009-08-23 23:34 ./slackware64/PACKAGES.TXT -> ../PACKAGES.TXT -drwxr-xr-x 2 root root 20480 2020-11-15 00:06 ./slackware64/a +drwxr-xr-x 2 root root 20480 2020-11-16 21:25 ./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 @@ -1151,9 +1151,9 @@ drwxr-xr-x 2 root root 20480 2020-11-15 00:06 ./slackware64/a -rw-r--r-- 1 root root 400 2020-05-16 19:11 ./slackware64/a/utempter-1.2.0-x86_64-1.txt -rw-r--r-- 1 root root 16080 2020-05-16 19:11 ./slackware64/a/utempter-1.2.0-x86_64-1.txz -rw-r--r-- 1 root root 163 2020-05-16 19:11 ./slackware64/a/utempter-1.2.0-x86_64-1.txz.asc --rw-r--r-- 1 root root 354 2020-10-24 22:43 ./slackware64/a/util-linux-2.36-x86_64-2.txt --rw-r--r-- 1 root root 2725296 2020-10-24 22:43 ./slackware64/a/util-linux-2.36-x86_64-2.txz --rw-r--r-- 1 root root 163 2020-10-24 22:43 ./slackware64/a/util-linux-2.36-x86_64-2.txz.asc +-rw-r--r-- 1 root root 354 2020-11-16 20:10 ./slackware64/a/util-linux-2.36.1-x86_64-1.txt +-rw-r--r-- 1 root root 2710608 2020-11-16 20:10 ./slackware64/a/util-linux-2.36.1-x86_64-1.txz +-rw-r--r-- 1 root root 163 2020-11-16 20:10 ./slackware64/a/util-linux-2.36.1-x86_64-1.txz.asc -rw-r--r-- 1 root root 412 2020-10-28 19:06 ./slackware64/a/volume_key-0.3.12-x86_64-1.txt -rw-r--r-- 1 root root 163312 2020-10-28 19:06 ./slackware64/a/volume_key-0.3.12-x86_64-1.txz -rw-r--r-- 1 root root 163 2020-10-28 19:06 ./slackware64/a/volume_key-0.3.12-x86_64-1.txz.asc @@ -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-15 00:06 ./slackware64/l +drwxr-xr-x 2 root root 73728 2020-11-16 21:25 ./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-15 00:06 ./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-09 19:23 ./slackware64/l/imagemagick-7.0.10_37-x86_64-1.txt --rw-r--r-- 1 root root 7888632 2020-11-09 19:23 ./slackware64/l/imagemagick-7.0.10_37-x86_64-1.txz --rw-r--r-- 1 root root 163 2020-11-09 19:23 ./slackware64/l/imagemagick-7.0.10_37-x86_64-1.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 -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 @@ -3224,9 +3224,9 @@ drwxr-xr-x 2 root root 73728 2020-11-15 00:06 ./slackware64/l -rw-r--r-- 1 root root 442 2020-10-20 18:38 ./slackware64/l/loudmouth-1.5.3-x86_64-5.txt -rw-r--r-- 1 root root 79968 2020-10-20 18:38 ./slackware64/l/loudmouth-1.5.3-x86_64-5.txz -rw-r--r-- 1 root root 163 2020-10-20 18:38 ./slackware64/l/loudmouth-1.5.3-x86_64-5.txz.asc --rw-r--r-- 1 root root 390 2020-06-23 21:23 ./slackware64/l/lz4-1.9.2-x86_64-1.txt --rw-r--r-- 1 root root 156236 2020-06-23 21:23 ./slackware64/l/lz4-1.9.2-x86_64-1.txz --rw-r--r-- 1 root root 163 2020-06-23 21:23 ./slackware64/l/lz4-1.9.2-x86_64-1.txz.asc +-rw-r--r-- 1 root root 390 2020-11-16 19:49 ./slackware64/l/lz4-1.9.3-x86_64-1.txt +-rw-r--r-- 1 root root 160812 2020-11-16 19:49 ./slackware64/l/lz4-1.9.3-x86_64-1.txz +-rw-r--r-- 1 root root 163 2020-11-16 19:49 ./slackware64/l/lz4-1.9.3-x86_64-1.txz.asc -rw-r--r-- 1 root root 272 2018-04-13 15:08 ./slackware64/l/lzo-2.10-x86_64-2.txt -rw-r--r-- 1 root root 85468 2018-04-13 15:08 ./slackware64/l/lzo-2.10-x86_64-2.txz -rw-r--r-- 1 root root 163 2018-04-13 15:08 ./slackware64/l/lzo-2.10-x86_64-2.txz.asc @@ -3244,9 +3244,9 @@ drwxr-xr-x 2 root root 73728 2020-11-15 00:06 ./slackware64/l -rw-r--r-- 1 root root 564 2020-11-14 21:18 ./slackware64/l/mozilla-nss-3.59-x86_64-1.txt -rw-r--r-- 1 root root 1813072 2020-11-14 21:18 ./slackware64/l/mozilla-nss-3.59-x86_64-1.txz -rw-r--r-- 1 root root 163 2020-11-14 21:18 ./slackware64/l/mozilla-nss-3.59-x86_64-1.txz.asc --rw-r--r-- 1 root root 397 2020-11-10 19:03 ./slackware64/l/mozjs78-78.4.1esr-x86_64-1.txt --rw-r--r-- 1 root root 9313020 2020-11-10 19:03 ./slackware64/l/mozjs78-78.4.1esr-x86_64-1.txz --rw-r--r-- 1 root root 163 2020-11-10 19:03 ./slackware64/l/mozjs78-78.4.1esr-x86_64-1.txz.asc +-rw-r--r-- 1 root root 397 2020-11-16 20:17 ./slackware64/l/mozjs78-78.5.0esr-x86_64-1.txt +-rw-r--r-- 1 root root 9307324 2020-11-16 20:17 ./slackware64/l/mozjs78-78.5.0esr-x86_64-1.txz +-rw-r--r-- 1 root root 163 2020-11-16 20:17 ./slackware64/l/mozjs78-78.5.0esr-x86_64-1.txz.asc -rw-r--r-- 1 root root 586 2020-07-10 18:00 ./slackware64/l/mpfr-4.1.0-x86_64-1.txt -rw-r--r-- 1 root root 1494320 2020-07-10 18:00 ./slackware64/l/mpfr-4.1.0-x86_64-1.txz -rw-r--r-- 1 root root 163 2020-07-10 18:00 ./slackware64/l/mpfr-4.1.0-x86_64-1.txz.asc @@ -3560,10 +3560,10 @@ drwxr-xr-x 2 root root 73728 2020-11-15 00:06 ./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-14 02:46 ./slackware64/n --rw-r--r-- 1 root root 357 2020-10-15 20:14 ./slackware64/n/ModemManager-1.14.6-x86_64-1.txt --rw-r--r-- 1 root root 1865696 2020-10-15 20:14 ./slackware64/n/ModemManager-1.14.6-x86_64-1.txz --rw-r--r-- 1 root root 163 2020-10-15 20:14 ./slackware64/n/ModemManager-1.14.6-x86_64-1.txz.asc +drwxr-xr-x 2 root root 32768 2020-11-16 21:25 ./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 -rw-r--r-- 1 root root 602 2020-10-14 18:15 ./slackware64/n/NetworkManager-1.26.4-x86_64-1.txt -rw-r--r-- 1 root root 3921864 2020-10-14 18:15 ./slackware64/n/NetworkManager-1.26.4-x86_64-1.txz -rw-r--r-- 1 root root 163 2020-10-14 18:15 ./slackware64/n/NetworkManager-1.26.4-x86_64-1.txz.asc @@ -3781,9 +3781,9 @@ drwxr-xr-x 2 root root 32768 2020-11-14 02:46 ./slackware64/n -rw-r--r-- 1 root root 314 2020-09-26 19:15 ./slackware64/n/mtr-0.94-x86_64-1.txt -rw-r--r-- 1 root root 69648 2020-09-26 19:15 ./slackware64/n/mtr-0.94-x86_64-1.txz -rw-r--r-- 1 root root 163 2020-09-26 19:15 ./slackware64/n/mtr-0.94-x86_64-1.txz.asc --rw-r--r-- 1 root root 448 2020-11-08 21:27 ./slackware64/n/mutt-2.0.0-x86_64-1.txt --rw-r--r-- 1 root root 1353036 2020-11-08 21:27 ./slackware64/n/mutt-2.0.0-x86_64-1.txz --rw-r--r-- 1 root root 163 2020-11-08 21:27 ./slackware64/n/mutt-2.0.0-x86_64-1.txz.asc +-rw-r--r-- 1 root root 448 2020-11-16 19:57 ./slackware64/n/mutt-2.0.1-x86_64-1.txt +-rw-r--r-- 1 root root 1351452 2020-11-16 19:57 ./slackware64/n/mutt-2.0.1-x86_64-1.txz +-rw-r--r-- 1 root root 163 2020-11-16 19:57 ./slackware64/n/mutt-2.0.1-x86_64-1.txz.asc -rw-r--r-- 1 root root 627 2018-04-13 15:41 ./slackware64/n/nc-1.10-x86_64-2.txt -rw-r--r-- 1 root root 53492 2018-04-13 15:41 ./slackware64/n/nc-1.10-x86_64-2.txz -rw-r--r-- 1 root root 163 2018-04-13 15:41 ./slackware64/n/nc-1.10-x86_64-2.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-15 00:06 ./slackware64/xap +drwxr-xr-x 2 root root 12288 2020-11-16 21:25 ./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 @@ -5008,9 +5008,9 @@ drwxr-xr-x 2 root root 12288 2020-11-15 00:06 ./slackware64/xap -rw-r--r-- 1 root root 163 2020-03-07 19:41 ./slackware64/xap/libnma-1.8.28-x86_64-1.txz.asc -rw-r--r-- 1 root root 4370 2020-08-15 19:16 ./slackware64/xap/maketag -rw-r--r-- 1 root root 4370 2020-08-15 19:16 ./slackware64/xap/maketag.ez --rw-r--r-- 1 root root 570 2020-11-09 19:28 ./slackware64/xap/mozilla-firefox-78.4.1esr-x86_64-1.txt --rw-r--r-- 1 root root 55405312 2020-11-09 19:28 ./slackware64/xap/mozilla-firefox-78.4.1esr-x86_64-1.txz --rw-r--r-- 1 root root 163 2020-11-09 19:28 ./slackware64/xap/mozilla-firefox-78.4.1esr-x86_64-1.txz.asc +-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 @@ -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-15 00:07 ./source --rw-r--r-- 1 root root 504668 2020-11-15 00:07 ./source/CHECKSUMS.md5 --rw-r--r-- 1 root root 163 2020-11-15 00:07 ./source/CHECKSUMS.md5.asc --rw-r--r-- 1 root root 710522 2020-11-15 00:07 ./source/FILE_LIST --rw-r--r-- 1 root root 21908871 2020-11-15 00:07 ./source/MANIFEST.bz2 +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 -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 @@ -6190,7 +6190,7 @@ drwxr-xr-x 2 root root 4096 2020-05-16 19:10 ./source/a/utempter -rw-r--r-- 1 root root 856 2020-05-16 19:11 ./source/a/utempter/slack-desc -rwxr-xr-x 1 root root 4158 2020-05-16 19:07 ./source/a/utempter/utempter.SlackBuild -rw-r--r-- 1 root root 87 2020-05-16 19:10 ./source/a/utempter/utempter.url -drwxr-xr-x 4 root root 4096 2020-10-24 18:47 ./source/a/util-linux +drwxr-xr-x 4 root root 4096 2020-11-16 20:09 ./source/a/util-linux -rw-r--r-- 1 root root 53236 2011-07-12 20:47 ./source/a/util-linux/adjtimex_1.29-2.2.diff.gz -rw-r--r-- 1 root root 85551 2010-04-17 03:32 ./source/a/util-linux/adjtimex_1.29.orig.tar.gz -rw-r--r-- 1 root root 434 2014-10-30 15:31 ./source/a/util-linux/bsdstrings-util-linux_overflow.diff.gz @@ -6214,9 +6214,9 @@ drwxr-xr-x 2 root root 4096 2020-05-08 19:39 ./source/a/util-linux/pam.d- -rw-r--r-- 1 root root 376 2010-03-30 04:06 ./source/a/util-linux/setserial-undef_TIOCGHAYESESP.diff.gz -rw-r--r-- 1 root root 806 2020-01-21 18:04 ./source/a/util-linux/slack-desc -rw-r--r-- 1 root root 170 2020-02-13 19:17 ./source/a/util-linux/su.default --rw-r--r-- 1 root root 833 2020-07-23 09:59 ./source/a/util-linux/util-linux-2.36.tar.sign --rw-r--r-- 1 root root 5242420 2020-07-23 09:59 ./source/a/util-linux/util-linux-2.36.tar.xz --rwxr-xr-x 1 root root 12061 2020-10-24 18:47 ./source/a/util-linux/util-linux.SlackBuild +-rw-r--r-- 1 root root 833 2020-11-16 13:36 ./source/a/util-linux/util-linux-2.36.1.tar.sign +-rw-r--r-- 1 root root 5231880 2020-11-16 13:36 ./source/a/util-linux/util-linux-2.36.1.tar.xz +-rwxr-xr-x 1 root root 12061 2020-11-16 20:09 ./source/a/util-linux/util-linux.SlackBuild -rw-r--r-- 1 root root 275 2019-01-02 21:53 ./source/a/util-linux/util-linux.do.not.list.ram.devices.diff.gz -rw-r--r-- 1 root root 335 2014-07-03 08:34 ./source/a/util-linux/util-linux.fdisk-no-solaris.diff.gz -rw-r--r-- 1 root root 10292 2009-05-30 01:25 ./source/a/util-linux/ziptool-1.4.0.tar.xz @@ -9167,12 +9167,12 @@ 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-09 19:07 ./source/l/imagemagick --rw-r--r-- 1 root root 9666422 2020-11-07 19:01 ./source/l/imagemagick/ImageMagick-7.0.10-37.tar.lz +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 -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 --rw-r--r-- 1 root root 558 2020-11-01 18:51 ./source/l/imagemagick/policy.xml.diff.gz +-rw-r--r-- 1 root root 559 2020-11-16 19:45 ./source/l/imagemagick/policy.xml.diff.gz -rw-r--r-- 1 root root 996 2018-02-27 06:12 ./source/l/imagemagick/slack-desc drwxr-xr-x 2 root root 4096 2020-11-13 05:32 ./source/l/isl -rw-r--r-- 1 root root 1729656 2020-11-11 15:25 ./source/l/isl/isl-0.23.tar.xz @@ -9746,8 +9746,8 @@ drwxr-xr-x 2 root root 4096 2020-10-20 18:31 ./source/l/loudmouth -rw-r--r-- 1 root root 327488 2016-02-14 17:25 ./source/l/loudmouth/loudmouth-1.5.3.tar.xz -rwxr-xr-x 1 root root 4523 2020-10-20 18:31 ./source/l/loudmouth/loudmouth.SlackBuild -rw-r--r-- 1 root root 899 2018-02-27 06:12 ./source/l/loudmouth/slack-desc -drwxr-xr-x 2 root root 4096 2020-06-23 21:17 ./source/l/lz4 --rw-r--r-- 1 root root 207140 2019-08-15 11:59 ./source/l/lz4/lz4-1.9.2.tar.lz +drwxr-xr-x 2 root root 4096 2020-11-16 19:49 ./source/l/lz4 +-rw-r--r-- 1 root root 217831 2020-11-16 04:59 ./source/l/lz4/lz4-1.9.3.tar.lz -rwxr-xr-x 1 root root 3504 2020-06-23 21:23 ./source/l/lz4/lz4.SlackBuild -rw-r--r-- 1 root root 26 2020-06-23 19:12 ./source/l/lz4/lz4.url -rw-r--r-- 1 root root 874 2020-06-23 19:16 ./source/l/lz4/slack-desc @@ -9778,14 +9778,14 @@ drwxr-xr-x 2 root root 4096 2020-11-14 21:17 ./source/l/mozilla-nss -rw-r--r-- 1 root root 50131240 2020-11-13 19:38 ./source/l/mozilla-nss/nss-3.59.tar.lz -rw-r--r-- 1 root root 2488 2012-04-29 21:05 ./source/l/mozilla-nss/nss-config.in -rw-r--r-- 1 root root 1023 2018-02-27 06:12 ./source/l/mozilla-nss/slack-desc -drwxr-xr-x 4 root root 4096 2020-11-10 19:00 ./source/l/mozjs78 +drwxr-xr-x 4 root root 4096 2020-11-16 20:02 ./source/l/mozjs78 drwxr-xr-x 2 root root 4096 2016-07-03 18:05 ./source/l/mozjs78/autoconf -rw-r--r-- 1 root root 5869 2016-07-03 18:04 ./source/l/mozjs78/autoconf/autoconf-2.13-consolidated_fixes-1.patch.gz -rw-r--r-- 1 root root 300116 1999-01-15 21:03 ./source/l/mozjs78/autoconf/autoconf-2.13.tar.xz -rwxr-xr-x 1 root root 2629 2018-07-08 15:48 ./source/l/mozjs78/autoconf/autoconf.build --rw-r--r-- 1 root root 334673424 2020-11-09 13:28 ./source/l/mozjs78/firefox-78.4.1esr.source.tar.xz --rw-r--r-- 1 root root 833 2020-11-09 13:28 ./source/l/mozjs78/firefox-78.4.1esr.source.tar.xz.asc --rwxr-xr-x 1 root root 5888 2020-11-10 19:00 ./source/l/mozjs78/mozjs78.SlackBuild +-rw-r--r-- 1 root root 333995288 2020-11-16 06:42 ./source/l/mozjs78/firefox-78.5.0esr.source.tar.xz +-rw-r--r-- 1 root root 833 2020-11-16 06:42 ./source/l/mozjs78/firefox-78.5.0esr.source.tar.xz.asc +-rwxr-xr-x 1 root root 5967 2020-11-16 20:05 ./source/l/mozjs78/mozjs78.SlackBuild drwxr-xr-x 2 root root 4096 2020-09-15 18:12 ./source/l/mozjs78/patches -rw-r--r-- 1 root root 306 2020-08-24 18:46 ./source/l/mozjs78/patches/armv7_disable_WASM_EMULATE_ARM_UNALIGNED_FP_ACCESS.patch.gz -rw-r--r-- 1 root root 793 2020-08-24 18:46 ./source/l/mozjs78/patches/copy-headers.patch.gz @@ -10474,8 +10474,8 @@ drwxr-xr-x 2 root root 4096 2020-05-22 17:58 ./source/l/zstd -rwxr-xr-x 1 root root 14025 2018-11-20 03:08 ./source/make_world.sh drwxr-xr-x 151 root root 4096 2020-10-20 18:30 ./source/n -rw-r--r-- 1 root root 1086 2020-01-14 04:36 ./source/n/FTBFSlog -drwxr-xr-x 2 root root 4096 2020-10-15 20:13 ./source/n/ModemManager --rw-r--r-- 1 root root 2374056 2020-10-14 13:06 ./source/n/ModemManager/ModemManager-1.14.6.tar.xz +drwxr-xr-x 2 root root 4096 2020-11-16 19:50 ./source/n/ModemManager +-rw-r--r-- 1 root root 2255964 2020-11-16 09:35 ./source/n/ModemManager/ModemManager-1.14.8.tar.xz -rwxr-xr-x 1 root root 3600 2019-09-29 23:48 ./source/n/ModemManager/ModemManager.SlackBuild -rw-r--r-- 1 root root 444 2013-09-22 21:10 ./source/n/ModemManager/WeDoNotHaveSystemD.patch.gz -rw-r--r-- 1 root root 817 2018-09-24 19:21 ./source/n/ModemManager/slack-desc @@ -10955,9 +10955,9 @@ drwxr-xr-x 2 root root 4096 2020-09-26 19:15 ./source/n/mtr -rwxr-xr-x 1 root root 3743 2019-09-29 23:48 ./source/n/mtr/mtr.SlackBuild -rw-r--r-- 1 root root 28 2019-08-05 19:01 ./source/n/mtr/mtr.url -rw-r--r-- 1 root root 765 2019-08-05 19:01 ./source/n/mtr/slack-desc -drwxr-xr-x 2 root root 4096 2020-11-08 21:27 ./source/n/mutt +drwxr-xr-x 2 root root 4096 2020-11-16 19:51 ./source/n/mutt -rw-r--r-- 1 root root 264 2002-06-01 05:12 ./source/n/mutt/doinst.sh.gz --rw-r--r-- 1 root root 2368741 2020-11-07 20:35 ./source/n/mutt/mutt-2.0.0.tar.lz +-rw-r--r-- 1 root root 2368895 2020-11-14 21:49 ./source/n/mutt/mutt-2.0.1.tar.lz -rwxr-xr-x 1 root root 4414 2018-12-03 03:39 ./source/n/mutt/mutt.SlackBuild -rw-r--r-- 1 root root 29 2018-11-26 18:07 ./source/n/mutt/mutt.url -rw-r--r-- 1 root root 900 2018-08-27 17:37 ./source/n/mutt/slack-desc @@ -13199,7 +13199,7 @@ drwxr-xr-x 2 root root 4096 2020-03-07 19:29 ./source/xap/libnma -rw-r--r-- 1 root root 1366584 2020-03-06 19:49 ./source/xap/libnma/libnma-1.8.28.tar.xz -rwxr-xr-x 1 root root 3570 2020-03-07 19:31 ./source/xap/libnma/libnma.SlackBuild -rw-r--r-- 1 root root 792 2020-03-07 19:38 ./source/xap/libnma/slack-desc -drwxr-xr-x 3 root root 4096 2020-11-14 22:29 ./source/xap/mozilla-firefox +drwxr-xr-x 3 root root 4096 2020-11-16 19:42 ./source/xap/mozilla-firefox drwxr-xr-x 5 root root 4096 2019-08-27 19:34 ./source/xap/mozilla-firefox/build-deps -rwxr-xr-x 1 root root 1919 2019-07-09 19:35 ./source/xap/mozilla-firefox/build-deps.sh drwxr-xr-x 2 root root 4096 2016-07-03 18:05 ./source/xap/mozilla-firefox/build-deps/autoconf @@ -13215,14 +13215,13 @@ drwxr-xr-x 2 root root 4096 2020-07-03 19:10 ./source/xap/mozilla-firefox/ -rw-r--r-- 1 root root 86 2020-07-03 19:10 ./source/xap/mozilla-firefox/build-deps/nodejs/nodejs.url -rwxr-xr-x 1 root root 840 2018-03-13 12:55 ./source/xap/mozilla-firefox/fetch-and-repack.sh -rw-r--r-- 1 root root 330 2019-07-08 18:41 ./source/xap/mozilla-firefox/ff.ui.scrollToClick.diff.gz --rw-r--r-- 1 root root 334673424 2020-11-09 13:28 ./source/xap/mozilla-firefox/firefox-78.4.1esr.source.tar.xz --rw-r--r-- 1 root root 833 2020-11-09 13:28 ./source/xap/mozilla-firefox/firefox-78.4.1esr.source.tar.xz.asc +-rw-r--r-- 1 root root 333995288 2020-11-16 06:42 ./source/xap/mozilla-firefox/firefox-78.5.0esr.source.tar.xz +-rw-r--r-- 1 root root 833 2020-11-16 06:42 ./source/xap/mozilla-firefox/firefox-78.5.0esr.source.tar.xz.asc -rw-r--r-- 1 root root 327 2008-06-17 17:19 ./source/xap/mozilla-firefox/firefox.moz_plugin_path.diff.gz -rw-r--r-- 1 root root 462 2009-07-01 06:05 ./source/xap/mozilla-firefox/mimeTypes.rdf.gz -rw-r--r-- 1 root root 680 2009-07-01 13:28 ./source/xap/mozilla-firefox/mozilla-firefox-mimeTypes-fix.diff.gz --rwxr-xr-x 1 root root 15386 2020-11-14 22:02 ./source/xap/mozilla-firefox/mozilla-firefox.SlackBuild +-rwxr-xr-x 1 root root 15289 2020-11-16 19:41 ./source/xap/mozilla-firefox/mozilla-firefox.SlackBuild -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 173003 2020-10-20 13:21 ./source/xap/mozilla-firefox/rust_1.47.0.patch.gz -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 @@ -17093,7 +17092,7 @@ drwxr-xr-x 2 root root 4096 2020-10-31 19:30 ./testing/source/vtown/kde/sr -rw-r--r-- 1 root root 488 2020-11-03 00:55 ./testing/source/vtown/kde/src/applications/kdeedu-data-20.08.3.tar.xz.sig -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 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 diff --git a/recompress.sh b/recompress.sh index 28b8eaae9..45e84b6b8 100755 --- a/recompress.sh +++ b/recompress.sh @@ -1213,7 +1213,6 @@ gzip ./source/xap/mozilla-firefox/build-deps/autoconf/autoconf-2.13-consolidated gzip ./source/xap/mozilla-firefox/mimeTypes.rdf gzip ./source/xap/mozilla-firefox/mozilla-firefox-mimeTypes-fix.diff gzip ./source/xap/mozilla-firefox/unbreakdocs.diff -gzip ./source/xap/mozilla-firefox/rust_1.47.0.patch gzip ./source/xap/electricsheep/electricsheep.mplayer.diff gzip ./source/installer/sources/initrd/etc/keymaps.tar gzip ./source/x/liberation-fonts-ttf/doinst.sh diff --git a/source/a/util-linux/util-linux.SlackBuild b/source/a/util-linux/util-linux.SlackBuild index 3c33fe586..1467bc42e 100755 --- a/source/a/util-linux/util-linux.SlackBuild +++ b/source/a/util-linux/util-linux.SlackBuild @@ -26,7 +26,7 @@ cd $(dirname $0) ; CWD=$(pwd) PKGNAM=util-linux VERSION=${VERSION:-$(echo util-linux*.tar.xz | cut -d - -f 3 | rev | cut -f 3- -d . | rev)} -BUILD=${BUILD:-2} +BUILD=${BUILD:-1} ADJTIMEXVERS=1.29 SETSERIALVERS=2.17 diff --git a/source/l/imagemagick/policy.xml.diff b/source/l/imagemagick/policy.xml.diff index 4937fa65f..95a02f279 100644 --- a/source/l/imagemagick/policy.xml.diff +++ b/source/l/imagemagick/policy.xml.diff @@ -1,5 +1,5 @@ ---- ./config/policy.xml.orig 2020-11-01 12:48:38.817043527 -0600 -+++ ./config/policy.xml 2020-11-01 12:51:00.357046694 -0600 +--- ./config/policy.xml.orig 2020-11-14 07:53:19.000000000 -0600 ++++ ./config/policy.xml 2020-11-16 13:45:10.032089547 -0600 @@ -52,6 +52,21 @@ --> @@ -22,11 +22,11 @@ -@@ -71,7 +86,6 @@ +@@ -70,7 +85,6 @@ + - - + - diff --git a/source/l/mozjs78/mozjs78.SlackBuild b/source/l/mozjs78/mozjs78.SlackBuild index 98dacfc4c..26d0a5fc1 100755 --- a/source/l/mozjs78/mozjs78.SlackBuild +++ b/source/l/mozjs78/mozjs78.SlackBuild @@ -27,7 +27,7 @@ cd $(dirname $0) ; CWD=$(pwd) PKGNAM=mozjs78 SRCNAME=firefox -VERSION=78.4.1esr +VERSION=$(basename $(ls $SRCNAME-*.tar.?z | cut -d - -f 2 | rev | cut -f 3- -d . | rev) .source) BUILD=${BUILD:-1} # Automatically determine the architecture we're building on: diff --git a/source/xap/mozilla-firefox/mozilla-firefox.SlackBuild b/source/xap/mozilla-firefox/mozilla-firefox.SlackBuild index 0e9a94b53..2851a3ce5 100755 --- a/source/xap/mozilla-firefox/mozilla-firefox.SlackBuild +++ b/source/xap/mozilla-firefox/mozilla-firefox.SlackBuild @@ -201,9 +201,6 @@ zcat $CWD/ff.ui.scrollToClick.diff.gz | patch -p1 --verbose || exit 1 # Fix building with latest Rust: zcat $CWD/unbreakdocs.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 # https://bugzilla.mozilla.org/show_bug.cgi?id=1256955 if [ ! -z $MOZLOCALIZE ]; then diff --git a/source/xap/mozilla-firefox/rust_1.47.0.patch b/source/xap/mozilla-firefox/rust_1.47.0.patch deleted file mode 100644 index 9471b7bd4..000000000 --- a/source/xap/mozilla-firefox/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) -+[github](https://github.com/dtolnay/syn) -+[crates.io](https://crates.io/crates/syn) -+[docs.rs](https://docs.rs/syn) -+[build status](https://github.com/dtolnay/syn/actions?query=branch%3Amaster) - - Syn is a parsing library for parsing a stream of Rust tokens into a syntax tree - of Rust source code. -@@ -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