diff options
-rw-r--r-- | ChangeLog.rss | 24 | ||||
-rw-r--r-- | ChangeLog.txt | 12 | ||||
-rw-r--r-- | FILELIST.TXT | 129 | ||||
-rwxr-xr-x | recompress.sh | 1 | ||||
-rwxr-xr-x | source/a/util-linux/util-linux.SlackBuild | 2 | ||||
-rw-r--r-- | source/l/imagemagick/policy.xml.diff | 10 | ||||
-rwxr-xr-x | source/l/mozjs78/mozjs78.SlackBuild | 2 | ||||
-rwxr-xr-x | source/xap/mozilla-firefox/mozilla-firefox.SlackBuild | 3 | ||||
-rw-r--r-- | source/xap/mozilla-firefox/rust_1.47.0.patch | 30905 |
9 files changed, 105 insertions, 30983 deletions
diff --git a/ChangeLog.rss b/ChangeLog.rss index 553ff59b..ed41754b 100644 --- a/ChangeLog.rss +++ b/ChangeLog.rss @@ -11,10 +11,30 @@ <description>Tracking Slackware development in git.</description> <language>en-us</language> <id xmlns="http://www.w3.org/2005/Atom">urn:uuid:c964f45e-6732-11e8-bbe5-107b4450212f</id> - <pubDate>Sun, 15 Nov 2020 00:02:28 GMT</pubDate> - <lastBuildDate>Sun, 15 Nov 2020 07:59:45 GMT</lastBuildDate> + <pubDate>Mon, 16 Nov 2020 21:23:09 GMT</pubDate> + <lastBuildDate>Tue, 17 Nov 2020 07:59:47 GMT</lastBuildDate> <generator>maintain_current_git.sh v 1.12</generator> <item> + <title>Mon, 16 Nov 2020 21:23:09 GMT</title> + <pubDate>Mon, 16 Nov 2020 21:23:09 GMT</pubDate> + <link>https://git.slackware.nl/current/tag/?h=20201116212309</link> + <guid isPermaLink="false">20201116212309</guid> + <description> + <![CDATA[<pre> +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/ + </pre>]]> + </description> + </item> + <item> <title>Sun, 15 Nov 2020 00:02:28 GMT</title> <pubDate>Sun, 15 Nov 2020 00:02:28 GMT</pubDate> <link>https://git.slackware.nl/current/tag/?h=20201115000228</link> diff --git a/ChangeLog.txt b/ChangeLog.txt index f49448bc..c2687d07 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 92b1861e..26748ef1 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 28b8eaae..45e84b6b 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 3c33fe58..1467bc42 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 4937fa65..95a02f27 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 @@ <policy domain="coder" rights="read|write" pattern="{GIF,JPEG,PNG,WEBP}" /> --> @@ -22,11 +22,11 @@ <!-- <policy domain="resource" name="temporary-path" value="/tmp"/> --> <!-- <policy domain="resource" name="memory" value="2GiB"/> --> <!-- <policy domain="resource" name="map" value="4GiB"/> --> -@@ -71,7 +86,6 @@ +@@ -70,7 +85,6 @@ + <!-- <policy domain="path" rights="none" pattern="@*" /> --> <!-- <policy domain="cache" name="memory-map" value="anonymous"/> --> - <!-- <policy domain="cache" name="max-memory-request" value="256MiB"/> --> <!-- <policy domain="cache" name="synchronize" value="True"/> --> - <!-- <policy domain="cache" name="shared-secret" value="passphrase" stealth="true"/> --> + <!-- <policy domain="system" name="max-memory-request" value="256MiB"/> --> <!-- <policy domain="system" name="shred" value="2"/> --> <!-- <policy domain="system" name="precision" value="6"/> --> - </policymap> diff --git a/source/l/mozjs78/mozjs78.SlackBuild b/source/l/mozjs78/mozjs78.SlackBuild index 98dacfc4..26d0a5fc 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 0e9a94b5..2851a3ce 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 9471b7bd..00000000 --- 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 <whissi@gentoo.org> -Date: Sat, 10 Oct 2020 16:10:20 +0200 -Subject: [PATCH 38/38] bmo#1663715: Update syn and proc-macro2 so that Firefox - can build on Rust nightly again - -Link: https://bugzilla.mozilla.org/show_bug.cgi?id=1663715#c7 -Signed-off-by: Thomas Deutschmann <whissi@gentoo.org> ---- - Cargo.lock | 8 +- - .../rust/lucet-wasi/.cargo-checksum.json | 2 +- - .../rust/packed_simd/.cargo-checksum.json | 2 +- - .../rust/proc-macro2/.cargo-checksum.json | 2 +- - third_party/rust/proc-macro2/Cargo.toml | 15 +- - third_party/rust/proc-macro2/README.md | 2 +- - third_party/rust/proc-macro2/build.rs | 20 + - third_party/rust/proc-macro2/src/detection.rs | 67 + - third_party/rust/proc-macro2/src/fallback.rs | 1010 ++---- - third_party/rust/proc-macro2/src/lib.rs | 225 +- - third_party/rust/proc-macro2/src/marker.rs | 18 + - third_party/rust/proc-macro2/src/parse.rs | 849 +++++ - third_party/rust/proc-macro2/src/strnom.rs | 391 --- - third_party/rust/proc-macro2/src/wrapper.rs | 258 +- - .../rust/proc-macro2/tests/comments.rs | 103 + - third_party/rust/proc-macro2/tests/marker.rs | 33 + - third_party/rust/proc-macro2/tests/test.rs | 240 +- - .../rust/proc-macro2/tests/test_fmt.rs | 26 + - .../spirv-cross-internal/.cargo-checksum.json | 2 +- - third_party/rust/syn/.cargo-checksum.json | 2 +- - third_party/rust/syn/Cargo.toml | 35 +- - third_party/rust/syn/README.md | 16 +- - third_party/rust/syn/benches/file.rs | 7 + - third_party/rust/syn/benches/rust.rs | 45 +- - third_party/rust/syn/build.rs | 38 +- - third_party/rust/syn/src/attr.rs | 126 +- - third_party/rust/syn/src/buffer.rs | 56 +- - third_party/rust/syn/src/custom_keyword.rs | 12 +- - .../rust/syn/src/custom_punctuation.rs | 50 +- - third_party/rust/syn/src/data.rs | 96 +- - third_party/rust/syn/src/derive.rs | 10 +- - third_party/rust/syn/src/discouraged.rs | 27 +- - third_party/rust/syn/src/error.rs | 33 +- - third_party/rust/syn/src/expr.rs | 826 +++-- - third_party/rust/syn/src/ext.rs | 12 +- - third_party/rust/syn/src/file.rs | 4 +- - third_party/rust/syn/src/gen/clone.rs | 2051 ++++++++++++ - third_party/rust/syn/src/gen/debug.rs | 2857 +++++++++++++++++ - third_party/rust/syn/src/gen/eq.rs | 1930 +++++++++++ - third_party/rust/syn/src/gen/fold.rs | 287 +- - third_party/rust/syn/src/gen/hash.rs | 2691 ++++++++++++++++ - third_party/rust/syn/src/gen/visit.rs | 19 +- - third_party/rust/syn/src/gen/visit_mut.rs | 19 +- - third_party/rust/syn/src/generics.rs | 255 +- - third_party/rust/syn/src/item.rs | 1515 +++++---- - third_party/rust/syn/src/keyword.rs | 0 - third_party/rust/syn/src/lib.rs | 109 +- - third_party/rust/syn/src/lifetime.rs | 13 +- - third_party/rust/syn/src/lit.rs | 581 ++-- - third_party/rust/syn/src/mac.rs | 55 +- - third_party/rust/syn/src/macros.rs | 61 +- - third_party/rust/syn/src/op.rs | 6 +- - third_party/rust/syn/src/parse.rs | 211 +- - third_party/rust/syn/src/parse_macro_input.rs | 32 +- - third_party/rust/syn/src/parse_quote.rs | 15 +- - third_party/rust/syn/src/pat.rs | 313 +- - third_party/rust/syn/src/path.rs | 33 +- - third_party/rust/syn/src/punctuated.rs | 123 +- - third_party/rust/syn/src/reserved.rs | 42 + - third_party/rust/syn/src/spanned.rs | 4 +- - third_party/rust/syn/src/stmt.rs | 141 +- - third_party/rust/syn/src/token.rs | 99 +- - third_party/rust/syn/src/tt.rs | 6 +- - third_party/rust/syn/src/ty.rs | 364 ++- - third_party/rust/syn/src/verbatim.rs | 15 + - third_party/rust/syn/src/whitespace.rs | 65 + - third_party/rust/syn/tests/clone.sh | 16 - - third_party/rust/syn/tests/common/eq.rs | 247 +- - third_party/rust/syn/tests/common/mod.rs | 13 + - third_party/rust/syn/tests/common/parse.rs | 24 +- - third_party/rust/syn/tests/debug/gen.rs | 50 +- - third_party/rust/syn/tests/debug/mod.rs | 17 +- - third_party/rust/syn/tests/features/error.rs | 1 - - third_party/rust/syn/tests/features/mod.rs | 22 - - third_party/rust/syn/tests/macros/mod.rs | 8 +- - third_party/rust/syn/tests/repo/mod.rs | 137 +- - third_party/rust/syn/tests/repo/progress.rs | 37 + - third_party/rust/syn/tests/test_asyncness.rs | 38 +- - third_party/rust/syn/tests/test_attribute.rs | 452 +-- - .../rust/syn/tests/test_derive_input.rs | 1321 ++++---- - third_party/rust/syn/tests/test_expr.rs | 314 +- - third_party/rust/syn/tests/test_generics.rs | 371 ++- - third_party/rust/syn/tests/test_grouping.rs | 53 +- - third_party/rust/syn/tests/test_ident.rs | 5 - - third_party/rust/syn/tests/test_item.rs | 45 + - third_party/rust/syn/tests/test_iterators.rs | 7 +- - third_party/rust/syn/tests/test_lit.rs | 75 +- - third_party/rust/syn/tests/test_meta.rs | 498 ++- - .../rust/syn/tests/test_parse_buffer.rs | 41 +- - .../rust/syn/tests/test_parse_stream.rs | 12 + - third_party/rust/syn/tests/test_pat.rs | 27 +- - third_party/rust/syn/tests/test_path.rs | 52 + - third_party/rust/syn/tests/test_precedence.rs | 196 +- - third_party/rust/syn/tests/test_receiver.rs | 127 + - third_party/rust/syn/tests/test_round_trip.rs | 41 +- - third_party/rust/syn/tests/test_shebang.rs | 59 + - .../rust/syn/tests/test_should_parse.rs | 4 - - third_party/rust/syn/tests/test_size.rs | 2 - - third_party/rust/syn/tests/test_stmt.rs | 44 + - .../rust/syn/tests/test_token_trees.rs | 12 +- - third_party/rust/syn/tests/test_ty.rs | 53 + - third_party/rust/syn/tests/test_visibility.rs | 145 + - third_party/rust/syn/tests/zzz_stable.rs | 4 +- - 103 files changed, 17319 insertions(+), 5831 deletions(-) - create mode 100644 third_party/rust/proc-macro2/src/detection.rs - create mode 100644 third_party/rust/proc-macro2/src/marker.rs - create mode 100644 third_party/rust/proc-macro2/src/parse.rs - delete mode 100644 third_party/rust/proc-macro2/src/strnom.rs - create mode 100644 third_party/rust/proc-macro2/tests/comments.rs - create mode 100644 third_party/rust/proc-macro2/tests/test_fmt.rs - create mode 100644 third_party/rust/syn/src/gen/clone.rs - create mode 100644 third_party/rust/syn/src/gen/debug.rs - create mode 100644 third_party/rust/syn/src/gen/eq.rs - create mode 100644 third_party/rust/syn/src/gen/hash.rs - delete mode 100644 third_party/rust/syn/src/keyword.rs - create mode 100644 third_party/rust/syn/src/reserved.rs - create mode 100644 third_party/rust/syn/src/verbatim.rs - create mode 100644 third_party/rust/syn/src/whitespace.rs - delete mode 100755 third_party/rust/syn/tests/clone.sh - delete mode 100644 third_party/rust/syn/tests/features/error.rs - delete mode 100644 third_party/rust/syn/tests/features/mod.rs - create mode 100644 third_party/rust/syn/tests/repo/progress.rs - create mode 100644 third_party/rust/syn/tests/test_item.rs - create mode 100644 third_party/rust/syn/tests/test_parse_stream.rs - create mode 100644 third_party/rust/syn/tests/test_path.rs - create mode 100644 third_party/rust/syn/tests/test_receiver.rs - create mode 100644 third_party/rust/syn/tests/test_shebang.rs - create mode 100644 third_party/rust/syn/tests/test_stmt.rs - create mode 100644 third_party/rust/syn/tests/test_ty.rs - create mode 100644 third_party/rust/syn/tests/test_visibility.rs - -diff --git a/Cargo.lock b/Cargo.lock -index 19117e8368..d5fe0f6457 100644 ---- a/Cargo.lock -+++ b/Cargo.lock -@@ -3717,9 +3717,9 @@ dependencies = [ - - [[package]] - name = "proc-macro2" --version = "1.0.5" -+version = "1.0.24" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "90cf5f418035b98e655e9cdb225047638296b862b42411c4e45bb88d700f7fc0" -+checksum = "1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71" - dependencies = [ - "unicode-xid", - ] -@@ -4647,9 +4647,9 @@ dependencies = [ - - [[package]] - name = "syn" --version = "1.0.5" -+version = "1.0.40" - source = "registry+https://github.com/rust-lang/crates.io-index" --checksum = "66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf" -+checksum = "963f7d3cc59b59b9325165add223142bbf1df27655d07789f109896d353d8350" - dependencies = [ - "proc-macro2", - "quote", -diff --git a/third_party/rust/lucet-wasi/.cargo-checksum.json b/third_party/rust/lucet-wasi/.cargo-checksum.json -index 229fc9978c..2c8c0a3c22 100644 ---- a/third_party/rust/lucet-wasi/.cargo-checksum.json -+++ b/third_party/rust/lucet-wasi/.cargo-checksum.json -@@ -1 +1 @@ --{"files":{"Cargo.toml":"fea1408a1c1b1e84b06044a0b12cb26c8fd3253ca124debb6cd3e4faab48fcbd","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","LICENSE.cloudabi-utils":"86a34251f0aab76b7dc3daf8d252afbdf481ea94aa5b46d020205178b7e2eac1","LICENSE.wasmtime":"a6c48161a09acc75a0e25503bab66a731eb5fba5392ed4bb4743e4ba5085327a","bindings.json":"fad8362f845e6f7a2af1d7547cee5730894e7b96804f338181fc070ffdcfae1e","build.rs":"593173ad03963afcbef43f1843be6f04cde1df3eae0298ca20bf881019dd350a","examples/.gitignore":"44575cf5b28512d75644bf54a517dcef304ff809fd511747621b4d64f19aac66","examples/Makefile":"d2d2ceeb1bc4435189ea9a2710b6f5f5331ce6aa73ae8a4f4edcca215058a9b4","examples/README.md":"f2a5be6cc88d511c9f4d3bfefdd42dcb2ace813bc23f6a4430b6b543f7373341","examples/hello.c":"9cbc0d3173e02309e15372835fa849d196b2a202d81806fea60378e1878d0c53","examples/pseudoquine.c":"8fd696f8e1b8fb86188564a05f4776875ead31d785a12e3aa4af9d9c1b46d5b5","include/lucet_wasi.h":"497f712c64f753ebdf73ab05b0b340d50094f9c59bb8637ccbf99d895cd20966","src/bindings.rs":"edbeb51d1a93fd31039ee1f1dc7c1b6c0bded2cf5dad10039e8b7da81a4d4a12","src/c_api.rs":"a9c73070a88a461882a28e3e2adfd773f569b964c7ffabde39a3cef907782f71","src/ctx.rs":"578f87c35cce12eaebec95d03e31954c3e6cd0afa214a0fec068f03814eb0cc7","src/fdentry.rs":"94a8480fa587e5586327dfd6b66d8a6a3ef1f8091ba8deb335bf45642f4f98e6","src/host.rs":"6f05f8fea2afed827abfc3c008a5854a8023d91d066580ecfb49e5c8036ef3a3","src/hostcalls/fs.rs":"4726e6f695f7d1d4e371ec52c57f4e36b0ba0d2302fc008b21a301f5fd7a5c97","src/hostcalls/fs_helpers.rs":"474bce0a1f15fa23b0b0b8aa83143d993dd2cbd7cdfc38c118d452d04e80caea","src/hostcalls/misc.rs":"83d087891d92af08cfa2d2e0c5f41cc47cb8219460f6dbcc8666b418dfef206e","src/hostcalls/mod.rs":"4c5d3f65c69503e11e647770879026c37c0e5e01a99b7116c8fb9411b4797187","src/hostcalls/timers.rs":"e65d6a491256b5d6051b6816f6c5049ba3cdc6142651bac81f34d659c1c2a104","src/lib.rs":"5554e1a3f0cd3756173ece6435a0d01b2f520b3401cd5fc33180a04fb9f69bbe","src/memory.rs":"0a09026b15d27f99d74e560cd94795f645cba414a8491bc961987fab9d9da69b","src/wasi_host.rs":"cacbdac28304a837b11e5ad400ae9de3ee79c0284be335e64606ecdfe426ad6e","src/wasm32.rs":"13a5dc6e59784662f1e55eccb457cbbae241a96f70cfa72c41d55858ca05b980","tests/guests/cant_dotdot.c":"609b8cece9443e375a0b38a7e43651b179f66ee9c686edba6696fe1bcd45b111","tests/guests/clock_getres.c":"f5e41c0a2b05a8d7cdb5b4da6c8b6778b858004c1e9d115503c45a1d976be33b","tests/guests/duplicate_import.wat":"4bd8d7a5c1d1597dbe7648300e94e3fab84d7ab068d56cfb656aa1a208026cee","tests/guests/exitcode.c":"b7c5cec3ead0ed82326c568287a1f3398e71ae7e447ce49a3c4c7114c82495af","tests/guests/follow_symlink.c":"de3143ad2bbbfe834c0c32b54c9fcf144ca4eba5cdcf7588929e5f47225ab616","tests/guests/fs.c":"0dca5232ff5da1b7745e3b44bca39333c01a20ba4eae1a6a0a1c492c71ca1efa","tests/guests/getentropy.c":"5d80bcc68dcf3ba91576969055099d61635ae713c057b3cb36afb122a5f26347","tests/guests/getrusage.c":"8114c103b85eb564d9ab43684958bc1939de3794d314b7c121762f3a2f0434a6","tests/guests/gettimeofday.c":"4a57f376b06f4228017b82695448a0bd213fb91455f5301d689cd87fcff01f06","tests/guests/notdir.c":"bd8f8b24360b7cf8d5dced9d9ba4c15843fcbbae89fecc13e3a457c33a275e28","tests/guests/poll.c":"aefaa9b58ce9906dc379e0bd25fa68dfbf8cdffb48cd5ecde1d67708b83b366d","tests/guests/preopen_populates.c":"f186e4eb4aab6a1d9ec7bc5c49eaea6d9d162e0159dfe8f953bb48ade9b58d43","tests/guests/read_file.c":"1aab9393f005f05b69592826d7c4d384a115d5bca42c66f10a901811b4b1dcac","tests/guests/read_file_twice.c":"04a3dad7a43b93e36efd4e2c822c11b3f129429ec799af304d82b358686c578a","tests/guests/stat.c":"02756933ea7d4337b4fa04344b32968851b02f9d0bd5ea1cb0e2f022e8c65ab0","tests/guests/stdin.c":"66efc4b54f68d1138046f1afefae15f7d4555b2904b4a988818e61e67fe8fefb","tests/guests/symlink_escape.c":"686e047b5c986e29c854bcd93996d027dcdc8721219fa9fa532efc98d2798f5c","tests/guests/symlink_loop.c":"2bbddf3a5edfc6e5f3c0fa82cee4ac92b18804810509e263abd17f5240cd37e5","tests/guests/write_file.c":"9e9b14552c2445cfa6d0aa26b334081a59e6e3428dbb17ceca005a9ba59d3220","tests/test_helpers/mod.rs":"bc18194317611fe1be5c439a7a9e0de75399555c3b6de4275af149fb180456c8","tests/tests.rs":"173a7e0f086f6ed46474686cc3413ee68bbd2ff67004f7790e963a1392c7c46e"},"package":null} -\ No newline at end of file -+{"files":{"Cargo.toml":"fea1408a1c1b1e84b06044a0b12cb26c8fd3253ca124debb6cd3e4faab48fcbd","LICENSE":"268872b9816f90fd8e85db5a28d33f8150ebb8dd016653fb39ef1f94f2686bc5","LICENSE.cloudabi-utils":"86a34251f0aab76b7dc3daf8d252afbdf481ea94aa5b46d020205178b7e2eac1","LICENSE.wasmtime":"a6c48161a09acc75a0e25503bab66a731eb5fba5392ed4bb4743e4ba5085327a","bindings.json":"fad8362f845e6f7a2af1d7547cee5730894e7b96804f338181fc070ffdcfae1e","build.rs":"593173ad03963afcbef43f1843be6f04cde1df3eae0298ca20bf881019dd350a","examples/Makefile":"d2d2ceeb1bc4435189ea9a2710b6f5f5331ce6aa73ae8a4f4edcca215058a9b4","examples/README.md":"f2a5be6cc88d511c9f4d3bfefdd42dcb2ace813bc23f6a4430b6b543f7373341","examples/hello.c":"9cbc0d3173e02309e15372835fa849d196b2a202d81806fea60378e1878d0c53","examples/pseudoquine.c":"8fd696f8e1b8fb86188564a05f4776875ead31d785a12e3aa4af9d9c1b46d5b5","include/lucet_wasi.h":"497f712c64f753ebdf73ab05b0b340d50094f9c59bb8637ccbf99d895cd20966","src/bindings.rs":"edbeb51d1a93fd31039ee1f1dc7c1b6c0bded2cf5dad10039e8b7da81a4d4a12","src/c_api.rs":"a9c73070a88a461882a28e3e2adfd773f569b964c7ffabde39a3cef907782f71","src/ctx.rs":"578f87c35cce12eaebec95d03e31954c3e6cd0afa214a0fec068f03814eb0cc7","src/fdentry.rs":"94a8480fa587e5586327dfd6b66d8a6a3ef1f8091ba8deb335bf45642f4f98e6","src/host.rs":"6f05f8fea2afed827abfc3c008a5854a8023d91d066580ecfb49e5c8036ef3a3","src/hostcalls/fs.rs":"4726e6f695f7d1d4e371ec52c57f4e36b0ba0d2302fc008b21a301f5fd7a5c97","src/hostcalls/fs_helpers.rs":"474bce0a1f15fa23b0b0b8aa83143d993dd2cbd7cdfc38c118d452d04e80caea","src/hostcalls/misc.rs":"83d087891d92af08cfa2d2e0c5f41cc47cb8219460f6dbcc8666b418dfef206e","src/hostcalls/mod.rs":"4c5d3f65c69503e11e647770879026c37c0e5e01a99b7116c8fb9411b4797187","src/hostcalls/timers.rs":"e65d6a491256b5d6051b6816f6c5049ba3cdc6142651bac81f34d659c1c2a104","src/lib.rs":"5554e1a3f0cd3756173ece6435a0d01b2f520b3401cd5fc33180a04fb9f69bbe","src/memory.rs":"0a09026b15d27f99d74e560cd94795f645cba414a8491bc961987fab9d9da69b","src/wasi_host.rs":"cacbdac28304a837b11e5ad400ae9de3ee79c0284be335e64606ecdfe426ad6e","src/wasm32.rs":"13a5dc6e59784662f1e55eccb457cbbae241a96f70cfa72c41d55858ca05b980","tests/guests/cant_dotdot.c":"609b8cece9443e375a0b38a7e43651b179f66ee9c686edba6696fe1bcd45b111","tests/guests/clock_getres.c":"f5e41c0a2b05a8d7cdb5b4da6c8b6778b858004c1e9d115503c45a1d976be33b","tests/guests/duplicate_import.wat":"4bd8d7a5c1d1597dbe7648300e94e3fab84d7ab068d56cfb656aa1a208026cee","tests/guests/exitcode.c":"b7c5cec3ead0ed82326c568287a1f3398e71ae7e447ce49a3c4c7114c82495af","tests/guests/follow_symlink.c":"de3143ad2bbbfe834c0c32b54c9fcf144ca4eba5cdcf7588929e5f47225ab616","tests/guests/fs.c":"0dca5232ff5da1b7745e3b44bca39333c01a20ba4eae1a6a0a1c492c71ca1efa","tests/guests/getentropy.c":"5d80bcc68dcf3ba91576969055099d61635ae713c057b3cb36afb122a5f26347","tests/guests/getrusage.c":"8114c103b85eb564d9ab43684958bc1939de3794d314b7c121762f3a2f0434a6","tests/guests/gettimeofday.c":"4a57f376b06f4228017b82695448a0bd213fb91455f5301d689cd87fcff01f06","tests/guests/notdir.c":"bd8f8b24360b7cf8d5dced9d9ba4c15843fcbbae89fecc13e3a457c33a275e28","tests/guests/poll.c":"aefaa9b58ce9906dc379e0bd25fa68dfbf8cdffb48cd5ecde1d67708b83b366d","tests/guests/preopen_populates.c":"f186e4eb4aab6a1d9ec7bc5c49eaea6d9d162e0159dfe8f953bb48ade9b58d43","tests/guests/read_file.c":"1aab9393f005f05b69592826d7c4d384a115d5bca42c66f10a901811b4b1dcac","tests/guests/read_file_twice.c":"04a3dad7a43b93e36efd4e2c822c11b3f129429ec799af304d82b358686c578a","tests/guests/stat.c":"02756933ea7d4337b4fa04344b32968851b02f9d0bd5ea1cb0e2f022e8c65ab0","tests/guests/stdin.c":"66efc4b54f68d1138046f1afefae15f7d4555b2904b4a988818e61e67fe8fefb","tests/guests/symlink_escape.c":"686e047b5c986e29c854bcd93996d027dcdc8721219fa9fa532efc98d2798f5c","tests/guests/symlink_loop.c":"2bbddf3a5edfc6e5f3c0fa82cee4ac92b18804810509e263abd17f5240cd37e5","tests/guests/write_file.c":"9e9b14552c2445cfa6d0aa26b334081a59e6e3428dbb17ceca005a9ba59d3220","tests/test_helpers/mod.rs":"bc18194317611fe1be5c439a7a9e0de75399555c3b6de4275af149fb180456c8","tests/tests.rs":"173a7e0f086f6ed46474686cc3413ee68bbd2ff67004f7790e963a1392c7c46e"},"package":null} -\ No newline at end of file -diff --git a/third_party/rust/packed_simd/.cargo-checksum.json b/third_party/rust/packed_simd/.cargo-checksum.json -index 01afcc1efd..c727a10006 100644 ---- a/third_party/rust/packed_simd/.cargo-checksum.json -+++ b/third_party/rust/packed_simd/.cargo-checksum.json -@@ -1 +1 @@ --{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"e9258d9a54fdaf4cbc12405fe5993ac4497eb2b29021691dbc91b19cb9b52227","Cargo.toml":"089941ba3c89ea111cbea3cc3abdcdcf2b9d0ae0db268d7269ee38226db950e5","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"f3baefc5e5bb9b250e762a1466371b922fd7ee4243c217b2d014307603c2f57a","ci/all.sh":"a23d14e10cb26a0eb719e389c30eb955fa53cddcd436890646df09af640bd2eb","ci/android-install-ndk.sh":"0f1746108cc30bf9b9ba45bcde7b19fc1a8bdf5b0258035b4eb8dc69b75efac4","ci/android-install-sdk.sh":"3490432022c5c8f5a115c084f7a9aca1626f96c0c87ffb62019228c4346b47e4","ci/android-sysimage.sh":"ebf4e5daa1f0fe1b2092b79f0f3f161c4c4275cb744e52352c4d81ab451e4c5a","ci/benchmark.sh":"b61d19ef6b90deba8fb79dee74c8b062d94844676293da346da87bb78a9a49a4","ci/deploy_and_run_on_ios_simulator.rs":"ec8ecf82d92072676aa47f0d1a3d021b60a7ae3531153ef12d2ff4541fc294dc","ci/docker/aarch64-linux-android/Dockerfile":"ace2e7d33c87bc0f6d3962a4a3408c04557646f7f51ab99cfbf574906796b016","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"1ecdac757101d951794fb2ab0deaa278199cf25f2e08a15c7d40ff31a8556184","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"e25d88f6c0c94aada3d2e3f08243f755feb7e869dc5dc505b3799719cb1af591","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"f126f4c7bae8c11ab8b16df06ad997863f0838825a9c08c9899a3eedb6d570bd","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"b647545c158ee480a4c581dbdc1f57833aef056c8d498acc04b573e842bf803c","ci/docker/i586-unknown-linux-gnu/Dockerfile":"0d492759017307ccf74dc2aa4a8cf6623daf3dc728c708dc2b18fa7940800cba","ci/docker/i686-unknown-linux-gnu/Dockerfile":"0d492759017307ccf74dc2aa4a8cf6623daf3dc728c708dc2b18fa7940800cba","ci/docker/mips-unknown-linux-gnu/Dockerfile":"323776469bb7b160385f3621d66e3ee14c75242f8180f916e65af048a29d4ea0","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"c647f6948a9a43b0be695cbed4eac752120d0faf28e5e69c718cb10406921dab","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"77bfd00cc8639509be381b394f077e39b45a00158ad61b4e1656714c714665d1","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"ec5bea6c98a3b626731fdb95f9ff2d1182639c76e8fb16d3271d0fc884901524","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"4f2b662de66e83d1354f650b7077692309637f786c2ea5516c31b5c2ee10af2d","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"a9595402b772bc365982e22a0096a8988825d90b09b5faa97ab192e76072f71d","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"df3c381c157439695ae8cd10ab71664702c061e3b4ab22906a5ad6c2680acfed","ci/docker/s390x-unknown-linux-gnu/Dockerfile":"93fb44df3d7fd31ead158570667c97b5076a05c3d968af4a84bc13819a8f2db8","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"da1c39a3ff1fe22e41395fa7c8934e90b4c1788e551b9aec6e38bfd94effc437","ci/docker/thumbv7neon-linux-androideabi/Dockerfile":"c2decd5591bd7a09378901bef629cd944acf052eb55e4f35b79eb9cb4d62246a","ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile":"75c0c56161c7382b439de74c00de1c0e3dc9d59560cd6720976a751034b78714","ci/docker/wasm32-unknown-unknown/Dockerfile":"3e5f294bc1e004aa599086c2af49d6f3e7459fa250f5fbdd60cf67d53db78758","ci/docker/x86_64-linux-android/Dockerfile":"685040273cf350d5509e580ac451555efa19790c8723ca2af066adadc6880ad2","ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile":"44b6203d9290bfdc53d81219f0937e1110847a23dd982ec8c4de388354f01536","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"d253c86803b22da428fa9cc671a05f18d3318eca7733b8dccb4f7be1ddf524c5","ci/dox.sh":"5b61711be47a4e3dde0ddd15ba73d256ea95fd75af3897732c24db1dc7e66366","ci/linux-s390x.sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/lld-shim.rs":"3d7f71ec23a49e2b67f694a0168786f9a954dda15f5a138815d966643fd3fcc3","ci/max_line_width.sh":"0a1518bba4c9ecaa55694cb2e9930d0e19c265baabf73143f17f9cf285aaa5bb","ci/run-docker.sh":"92e036390ad9b0d16f109579df1b5ced2e72e9afea40c7d011400ebd3a2a90de","ci/run.sh":"63259e22a96ba539f53c06b1b39f53e3a78a71171652e7afc170836110ccd913","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"73fb981a8fdb1dcd54409d3c0fbbfb8f77a3ceabf8626a6b9bf9d21d6bc8ce72","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2cc8c9c560ae17867e69b06d09b758dbf7bc39eb774ada50a743724b10acc0a2","perf-guide/.gitignore":"fe82c7da551079d832cf74200b0b359b4df9828cb4a0416fa7384f07a2ae6a13","perf-guide/book.toml":"115a98284126c6b180178b44713314cc494f08a71662ee2ce15cf67f17a51064","perf-guide/src/SUMMARY.md":"3e03bffc991fdc2050f3d51842d72d9d21ea6abab56a3baf3b2d5973a78b89e1","perf-guide/src/ascii.css":"29afb08833b2fe2250f0412e1fa1161a2432a0820a14953c87124407417c741a","perf-guide/src/bound_checks.md":"5e4991ff58a183ef0cd9fdc1feb4cd12d083b44bdf87393bbb0927808ef3ce7d","perf-guide/src/float-math/approx.md":"8c09032fa2d795a0c5db1775826c850d28eb2627846d0965c60ee72de63735ad","perf-guide/src/float-math/fma.md":"311076ba4b741d604a82e74b83a8d7e8c318fcbd7f64c4392d1cf5af95c60243","perf-guide/src/float-math/fp.md":"04153e775ab6e4f0d7837bcc515230d327b04edfa34c84ce9c9e10ebaeef2be8","perf-guide/src/float-math/svml.md":"0798873b8eedaeda5fed62dc91645b57c20775a02d3cd74d8bd06958f1516506","perf-guide/src/introduction.md":"9f5a19e9e6751f25d2daad39891a0cc600974527ec4c8305843f9618910671bd","perf-guide/src/prof/linux.md":"447731eb5de7d69166728fdbc5ecb0c0c9db678ea493b45a592d67dd002184c0","perf-guide/src/prof/mca.md":"f56d54f3d20e7aa4d32052186e8237b03d65971eb5d112802b442570ff11d344","perf-guide/src/prof/profiling.md":"8a650c0fd6ede0964789bb6577557eeef1d8226a896788602ce61528e260e43c","perf-guide/src/target-feature/attribute.md":"615f88dca0a707b6c416fa605435dd6e1fb5361cc639429cbf68cd87624bd78b","perf-guide/src/target-feature/features.md":"17077760ff24c006b606dd21889c53d87228f4311f3ba3a574f9afdeacd86165","perf-guide/src/target-feature/inlining.md":"7ed1d7068d8173a00d84c16cfe5871cd68b9f04f8d0cca2d01ebc84957ebf2f6","perf-guide/src/target-feature/practice.md":"c4b371842e0086df178488fec97f20def8f0c62ee588bcd25fd948b9b1fa227e","perf-guide/src/target-feature/runtime.md":"835425f5ee597fb3e51d36e725a81ebee29f4561231d19563cd4da81dbb1cfcb","perf-guide/src/target-feature/rustflags.md":"ab49712e9293a65d74d540ba4784fcb57ff1119ec05a575d895c071f1a620f64","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","readme.md":"585a8f0e16877fb9abb00cd17a175fcb9d7857840c6c61209f1827ffab095070","rustfmt.toml":"de6101d0670bad65fb3b337d56957d2a024e017e5ab146ec784d77312daaf8ff","src/api.rs":"331a3a4abb19cee2df5f2df4ad7c3e88b45e62cf23fdacfc9bbaa633dc5cf788","src/api/bit_manip.rs":"e68290ee679cc5abc9c73afbe635c1035f8cbfe849e5c751a1680e459244c39e","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"63e28c6a3edf1a7a635f51b8d3c6adbb1d46f884d92a196b3d4a6e743d809416","src/api/cast/v16.rs":"2a584eeb57fd47baad6f3533764301b04aaaac23702b7a8db12598ac02899262","src/api/cast/v256.rs":"b91c15ed8d1536ecd97b4eb79ff9d5aba0552cd9b6f0ea6435b05f2273e23b3a","src/api/cast/v32.rs":"62ec89fcce7fa7f28497ee5770adc8f81d2d3a6b2925b02f7dc06504c40e8f38","src/api/cast/v512.rs":"d855cb943ae7106e9599ef38e30a3afb1c6bd5433178baca54cb128fd9a7d143","src/api/cast/v64.rs":"fe0f7dfaf4fc0c0c1a78c96fcfcdfdc2a1e2845843b11aa797a0c6fb52a8f774","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"3ed23d2a930b0f9750c3a5309da766b03dc4f9c4d375b42ad3c50fe732693d15","src/api/cmp/partial_ord.rs":"e16b11805c94048acd058c93994b5bc74bb187f8d7e3b86a87df60e1601467f9","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"b61f92fc0e33a2633b3375eb405beba480da071cde03df4d437d8a6058afcd97","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"35cb5c266197d6224d598fb3d286e5fe48ef0c01ed356c2ff6fe9ba946f96a92","src/api/fmt/debug.rs":"aa18eea443bf353fea3db8b1a025132bbcaf91e747ecfa43b8d9fce9af395a0c","src/api/fmt/lower_hex.rs":"69d5be366631af309f214e8031c8c20267fcc27a695eac6f45c6bc1df72a67e6","src/api/fmt/octal.rs":"9eb11ba3d990213f3c7f1ec25edba7ce997cb1320e16d308c83498ba6b9bfbd9","src/api/fmt/upper_hex.rs":"a4637d085b7bb20e759ce58e08435b510a563ba3dd468af2b03560fdc5511562","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"4151593c7bba7455821fffa5b59867005a77c95d32f1f0cc3fd87294000157d9","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"562cfa3f1d8eb9a733c035a3665a599c2f1e341ee820d8fbdd102a4398a441bc","src/api/into_bits.rs":"82297f0697d67b5a015e904e7e6e7b2a7066ba825bc54b94b4ff3e22d7a1eefb","src/api/into_bits/arch_specific.rs":"1f925390b0ce7132587d95f2419c6e2ad3e1a9d17eb1d9c120a1c1c4bdf4277e","src/api/into_bits/macros.rs":"d762406de25aedff88d460dec7a80dc8e825a2a419d53218ce007efa6a1d3e04","src/api/into_bits/v128.rs":"ecdc5893664c71d7ab1ff3697c3fbe490d20d8748b9b76881d05e7625e40d74c","src/api/into_bits/v16.rs":"5459ec7dad1ad7bd30dc7e48374580b993abf23701d9c3cb22203fa0a9aabb6d","src/api/into_bits/v256.rs":"90ea351da0380ead1bf0f63b620afd40d01d638d09f7e7be31840bd2c1d9c663","src/api/into_bits/v32.rs":"ee1dc5a430050e16f51154b5fe85b1536f5feddf2ea23dd1d3859b67c4afc6fc","src/api/into_bits/v512.rs":"f72098ed1c9a23944f3d01abaf5e0f2d0e81d35a06fdadd2183e896d41b59867","src/api/into_bits/v64.rs":"6394462facdfe7827349c742b7801f1291e75a720dfb8c0b52100df46f371c98","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"78acba000d3fa527111300b6327c1932de9c4c1e02d4174e1a5615c01463d38c","src/api/math/float/cos.rs":"4c2dd7173728ef189314f1576c9486e03be21b7da98843b2f9011282a7979e31","src/api/math/float/exp.rs":"7c6d5f1e304f498a01cfa23b92380c815d7da0ad94eae3483783bc377d287eef","src/api/math/float/ln.rs":"54c7583f3df793b39ff57534fade27b41bb992439e5dc178252f5ca3190a3e54","src/api/math/float/mul_add.rs":"62cac77660d20159276d4c9ef066eb90c81cbddb808e8e157182c607625ad2eb","src/api/math/float/mul_adde.rs":"bae056ee9f3a70df39ec3c3b2f6437c65303888a7b843ef1a5bcf1f5aca0e602","src/api/math/float/powf.rs":"9ddb938984b36d39d82a82f862f80df8f7fb013f1d222d45698d41d88472f568","src/api/math/float/recpre.rs":"589225794ff1dbf31158dff660e6d4509ecc8befbb57c633900dea5ac0b840d6","src/api/math/float/rsqrte.rs":"a32abdcc318d7ccc8448231f54d75b884b7cbeb03a7d595713ab6243036f4dbf","src/api/math/float/sin.rs":"cbd3622b7df74f19691743001c8cf747a201f8977ad90542fee915f37dcd1e49","src/api/math/float/sqrt.rs":"0c66d5d63fb08e4d99c6b82a8828e41173aff1ac9fa1a2764a11fac217ccf2ac","src/api/math/float/sqrte.rs":"731e1c9f321b662accdd27dacb3aac2e8043b7aecb2f2161dde733bd9f025362","src/api/minimal.rs":"1f22bcc528555444e76de569ec0ae2029b9ae9d04805efeafa93369c8098036b","src/api/minimal/iuf.rs":"c501a6696950cf5e521765f178de548af64fdfb6e10d026616d09fab93ca2d17","src/api/minimal/mask.rs":"42e415f536c5193d0218f5a754b34b87fd7c971bff068009f958712166ff056d","src/api/minimal/ptr.rs":"a9ee482d1dd1c956fb8f3f179e6e620b1de4e9d713961461d4c6923a4ef2e67c","src/api/ops.rs":"3e273b277a0f3019d42c3c59ca94a5afd4885d5ae6d2182e5089bbeec9de42ee","src/api/ops/scalar_arithmetic.rs":"d2d5ad897a59dd0787544f927e0e7ca4072c3e58b0f4a2324083312b0d5a21d7","src/api/ops/scalar_bitwise.rs":"482204e459ca6be79568e1c9f70adbe2d2151412ddf122fb2161be8ebb51c40c","src/api/ops/scalar_mask_bitwise.rs":"c250f52042e37b22d57256c80d4604104cfd2fbe2a2e127c676267270ca5d350","src/api/ops/scalar_shifts.rs":"987f8fdebeedc16e3d77c1b732e7826ef70633c541d16dfa290845d5c6289150","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"f5155dce75219f4ba11275b1f295d2fdcddd49d174a6f1fb2ace7ea42813ce41","src/api/ops/vector_int_min_max.rs":"a378789c6ff9b32a51fbd0a97ffd36ed102cd1fe6a067d2b02017c1df342def6","src/api/ops/vector_mask_bitwise.rs":"5052d18517d765415d40327e6e8e55a312daaca0a5e2aec959bfa54b1675f9c8","src/api/ops/vector_neg.rs":"5c62f6b0221983cdbd23cd0a3af3672e6ba1255f0dfe8b19aae6fbd6503e231b","src/api/ops/vector_rotates.rs":"03cbe8a400fd7c688e4ee771a990a6754f2031b1a59b19ae81158b21471167e5","src/api/ops/vector_shifts.rs":"9bf69d0087268f61009e39aea52e03a90f378910206b6a28e8393178b6a5d0e0","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"9ddd960365e050674b25b2fd3116e24d94669b4375d74e71c03e3f1469576066","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"e58c8c87806a95df2b2b5b48ac5991036df024096d9d7c171a480fe9282896a4","src/api/reductions/integer_arithmetic.rs":"47471da1c5f859489680bb5d34ced3d3aa20081c16053a3af121a4496fcb57bf","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"f27be3aa28e1c1f46de7890198db6e12f00c207085e89ef2de7e57ee443cdb98","src/api/select.rs":"a98e2ccf9fc6bdeed32d337c8675bc96c2fbe2cc34fbf149ad6047fb8e749774","src/api/shuffle.rs":"da58200790868c09659819322a489929a5b6e56c596ed07e6a44293ea02e7d09","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"4d4fe8a329c885fcb4fbcbedf99efb15a95296fe6b3f595056cc37037450d5ac","src/api/slice/write_to_slice.rs":"f5b23b2c4b91cfb26b713a9013a6c0da7f45eaefb79ba06dcbc27f3f23bda679","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codegen.rs":"c6eebc3d3665420aa6a2f317977e3c41a4f43e0550ac630cdbe8e4bbed5e2031","src/codegen/bit_manip.rs":"5559e095105a80003e0de35af1d19b0c65c9ab04eb743c7e01c5442d882eb34e","src/codegen/llvm.rs":"d1299c189abb17a6133f047574cffc7a6db4c1be37cb7d4785491cb5e8f8cf54","src/codegen/math.rs":"35f96e37a78fcf0cdb02146b7f27a45108fe06a37fc2a54d8851ce131a326178","src/codegen/math/float.rs":"dd86c0449e576c83b719700962ac017c332987fac08d91f2b7a2b1b883598170","src/codegen/math/float/abs.rs":"f56e2b4b8055ea861c1f5cbc6b6e1d8e7e5af163b62c13574ddee4e09513bfbc","src/codegen/math/float/cos.rs":"ef3b511a24d23045b310315e80348a9b7fedb576fc2de52d74290616a0abeb2a","src/codegen/math/float/cos_pi.rs":"4e7631a5d73dac21531e09ef1802d1180f8997509c2c8fa9f67f322194263a97","src/codegen/math/float/exp.rs":"61b691598c41b5622f24e4320c1bdd08701e612a516438bdddcc728fc3405c8c","src/codegen/math/float/ln.rs":"46b718b1ba8c9d99e1ad40f53d20dfde08a3063ca7bd2a9fdd6698e060da687e","src/codegen/math/float/macros.rs":"dd42135fff13f9aca4fd3a1a4e14c7e6c31aadc6d817d63b0d2fb9e62e062744","src/codegen/math/float/mul_add.rs":"a37bf764345d4b1714f97e83897b7cf0855fc2811704bcbc0012db91825339e1","src/codegen/math/float/mul_adde.rs":"c75702bfcb361de45964a93caf959a695ef2376bd069227600b8c6872665c755","src/codegen/math/float/powf.rs":"642346e982bc4c39203de0864d2149c4179cd7b21cf67a2951687932b4675872","src/codegen/math/float/sin.rs":"9d68164c90cdca6a85155040cdac42e27342ebe0b925273ef1593df721af4258","src/codegen/math/float/sin_cos_pi.rs":"9be02ad48585a1e8d99129382fbffbaed47852f15459256a708850b6b7a75405","src/codegen/math/float/sin_pi.rs":"9890347905b4d4a3c7341c3eb06406e46e60582bcf6960688bd727e5dadc6c57","src/codegen/math/float/sqrt.rs":"e3c60dcfb0c6d2fc62adabcc931b2d4040b83cab294dea36443fb4b89eb79e34","src/codegen/math/float/sqrte.rs":"f0f4ef9eb475ae41bcc7ec6a95ad744ba6b36925faa8b2c2814004396d196b63","src/codegen/pointer_sized_int.rs":"a70697169c28218b56fd2e8d5353f2e00671d1150d0c8cef77d613bdfacd84cb","src/codegen/reductions.rs":"645e2514746d01387ddd07f0aa4ffd8430cc9ab428d4fb13773ea319fa25dd95","src/codegen/reductions/mask.rs":"8f1afe6aabf096a3278e1fc3a30f736e04aa8b9ce96373cee22162d18cfe2702","src/codegen/reductions/mask/aarch64.rs":"cba6e17603d39795dcfe8339b6b7d8714c3e162a1f0a635979f037aa24fe4206","src/codegen/reductions/mask/arm.rs":"9447904818aa2c7c25d0963eead452a639a11ca7dbd6d21eedbfcaade07a0f33","src/codegen/reductions/mask/fallback.rs":"7a0ef9f7fd03ae318b495b95e121350cd61caffc5cc6ee17fabf130d5d933453","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"14bd2c482071f2355beebcf7b7ecf950ff2dfcdb08c3ca50993092434a9de717","src/codegen/reductions/mask/x86/avx.rs":"b4913d87844c522903641cbbf10db4551addb1ce5e9e78278e21612fa65c733b","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"226610b4ff88c676d5187114dd57b4a8800de6ce40884675e9198445b1ed0306","src/codegen/reductions/mask/x86/sse2.rs":"bc38e6c31cb4b3d62147eba6cac264e519e2a48e0f7ce9010cfa9ef0cf0ec9fd","src/codegen/shuffle.rs":"0abca97e92cdce49a58a39cc447eb09dc7d7715ef256c8dbd2181a186e61bb64","src/codegen/shuffle1_dyn.rs":"04523e9338133bdedb012dd076c2c564b79ce5593b0fc56d0fb6910e04190a81","src/codegen/swap_bytes.rs":"1d6cdc716eadddc92b4fd506b2445a821caa8dc00860447de09d7ebd69c2087f","src/codegen/v128.rs":"94226b31ec403d18d9d2fe06713f147c9c79e9b5f9105089088266313f843185","src/codegen/v16.rs":"ddec4ffb66b6f7aaffb9a1780c5ddba82557abd74f45073d335047e04cf74924","src/codegen/v256.rs":"6b63917f0444118d6b1595bff2045e59b97c4d24012bd575f69f1f0efc5a0241","src/codegen/v32.rs":"3477b3c5540aed86e61e2f5807dd31db947413cec9181c587d93ed6ec74f0eba","src/codegen/v512.rs":"5854f99d3aabc4cd42b28a20d9ce447756dc2ba024a409a69b6a8ae1f1842fc5","src/codegen/v64.rs":"e9e89caebfe63d10c0cbca61e4dfdba3b7e02ee0989170f80beed23237ddd950","src/codegen/vPtr.rs":"96d609a9eece4dcbbcc01ba0b8744d7f5958be12774176a2945bc676f4e6b5cb","src/codegen/vSize.rs":"eeee9858749aa82142b27bc120d1989bb74a6b82e1e4efbbeaccc9634dc9acfc","src/lib.rs":"1b5d419ff05ee0370d671810423ccc254708cc8d415c1dbac2a7a36be4bf63a8","src/masks.rs":"870f429967b2d7d5133f4d28d6c753fc5cef0570b27b29d4e966a066d22d2d0e","src/sealed.rs":"ff7f0324276408ae8249941cfa32c90b8835a54d750896b683efea857af19db2","src/testing.rs":"1d3a7862ef625e235a5734ad7204e68d350f902c0695182b1f08a0552432416e","src/testing/macros.rs":"6378856d7a40ba5ec5c7c0dad6327d79f0c77266921c24296d10aed6c68e9b98","src/testing/utils.rs":"d6fd5a5017f1f85d9d99585754f8f6ad06fc3d683b34083543e67a7cc6c1772c","src/v128.rs":"18fe263c4aa28cd06461c7070b0269f69f4a2e75749b8f142a83dfdfe4d22bf5","src/v16.rs":"e5c663c9fb3547eaeac78a5f7db9969f4d8b5ec96112bf2954602fff11f0aebd","src/v256.rs":"68732cd688ad12a56d8b4f8ddf279f77bdfe1be2943c7dc0c1b4f1a76798aa0f","src/v32.rs":"785b22a1ccb4a41bb53dfeb0670f624c0ce42e6cdf62d1747e3283777a1c70bd","src/v512.rs":"d1337bfe07f06a8f37f8e8fa7d4315b9307476ee435ad80dd5269eaed564fbfa","src/v64.rs":"3077468d65125b8f085e9454c8b2463a4d5225697464ba6a1300f8799528fd4b","src/vPtr.rs":"c9a53f41f466e17b6648a4ce390fd8f4d3a848d440eb8a9a803a11608d76eb05","src/vSize.rs":"5c46d3e8c3ee5863d9b6e37e681f871386e0efc254d6d84ba711edb529ce7b3c","tests/endianness.rs":"541a144be017e3dd7da7c8ea49d907dc02538245e8c5f3deb5bd43da92c929e1"},"package":null} -\ No newline at end of file -+{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"e9258d9a54fdaf4cbc12405fe5993ac4497eb2b29021691dbc91b19cb9b52227","Cargo.toml":"089941ba3c89ea111cbea3cc3abdcdcf2b9d0ae0db268d7269ee38226db950e5","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"f3baefc5e5bb9b250e762a1466371b922fd7ee4243c217b2d014307603c2f57a","ci/all.sh":"a23d14e10cb26a0eb719e389c30eb955fa53cddcd436890646df09af640bd2eb","ci/android-install-ndk.sh":"0f1746108cc30bf9b9ba45bcde7b19fc1a8bdf5b0258035b4eb8dc69b75efac4","ci/android-install-sdk.sh":"3490432022c5c8f5a115c084f7a9aca1626f96c0c87ffb62019228c4346b47e4","ci/android-sysimage.sh":"ebf4e5daa1f0fe1b2092b79f0f3f161c4c4275cb744e52352c4d81ab451e4c5a","ci/benchmark.sh":"b61d19ef6b90deba8fb79dee74c8b062d94844676293da346da87bb78a9a49a4","ci/deploy_and_run_on_ios_simulator.rs":"ec8ecf82d92072676aa47f0d1a3d021b60a7ae3531153ef12d2ff4541fc294dc","ci/docker/aarch64-linux-android/Dockerfile":"ace2e7d33c87bc0f6d3962a4a3408c04557646f7f51ab99cfbf574906796b016","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"1ecdac757101d951794fb2ab0deaa278199cf25f2e08a15c7d40ff31a8556184","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"e25d88f6c0c94aada3d2e3f08243f755feb7e869dc5dc505b3799719cb1af591","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"f126f4c7bae8c11ab8b16df06ad997863f0838825a9c08c9899a3eedb6d570bd","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"b647545c158ee480a4c581dbdc1f57833aef056c8d498acc04b573e842bf803c","ci/docker/i586-unknown-linux-gnu/Dockerfile":"0d492759017307ccf74dc2aa4a8cf6623daf3dc728c708dc2b18fa7940800cba","ci/docker/i686-unknown-linux-gnu/Dockerfile":"0d492759017307ccf74dc2aa4a8cf6623daf3dc728c708dc2b18fa7940800cba","ci/docker/mips-unknown-linux-gnu/Dockerfile":"323776469bb7b160385f3621d66e3ee14c75242f8180f916e65af048a29d4ea0","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"c647f6948a9a43b0be695cbed4eac752120d0faf28e5e69c718cb10406921dab","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"77bfd00cc8639509be381b394f077e39b45a00158ad61b4e1656714c714665d1","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"ec5bea6c98a3b626731fdb95f9ff2d1182639c76e8fb16d3271d0fc884901524","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"4f2b662de66e83d1354f650b7077692309637f786c2ea5516c31b5c2ee10af2d","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"a9595402b772bc365982e22a0096a8988825d90b09b5faa97ab192e76072f71d","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"df3c381c157439695ae8cd10ab71664702c061e3b4ab22906a5ad6c2680acfed","ci/docker/s390x-unknown-linux-gnu/Dockerfile":"93fb44df3d7fd31ead158570667c97b5076a05c3d968af4a84bc13819a8f2db8","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"da1c39a3ff1fe22e41395fa7c8934e90b4c1788e551b9aec6e38bfd94effc437","ci/docker/thumbv7neon-linux-androideabi/Dockerfile":"c2decd5591bd7a09378901bef629cd944acf052eb55e4f35b79eb9cb4d62246a","ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile":"75c0c56161c7382b439de74c00de1c0e3dc9d59560cd6720976a751034b78714","ci/docker/wasm32-unknown-unknown/Dockerfile":"3e5f294bc1e004aa599086c2af49d6f3e7459fa250f5fbdd60cf67d53db78758","ci/docker/x86_64-linux-android/Dockerfile":"685040273cf350d5509e580ac451555efa19790c8723ca2af066adadc6880ad2","ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile":"44b6203d9290bfdc53d81219f0937e1110847a23dd982ec8c4de388354f01536","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"d253c86803b22da428fa9cc671a05f18d3318eca7733b8dccb4f7be1ddf524c5","ci/dox.sh":"5b61711be47a4e3dde0ddd15ba73d256ea95fd75af3897732c24db1dc7e66366","ci/linux-s390x.sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/lld-shim.rs":"3d7f71ec23a49e2b67f694a0168786f9a954dda15f5a138815d966643fd3fcc3","ci/max_line_width.sh":"0a1518bba4c9ecaa55694cb2e9930d0e19c265baabf73143f17f9cf285aaa5bb","ci/run-docker.sh":"92e036390ad9b0d16f109579df1b5ced2e72e9afea40c7d011400ebd3a2a90de","ci/run.sh":"63259e22a96ba539f53c06b1b39f53e3a78a71171652e7afc170836110ccd913","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"73fb981a8fdb1dcd54409d3c0fbbfb8f77a3ceabf8626a6b9bf9d21d6bc8ce72","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2cc8c9c560ae17867e69b06d09b758dbf7bc39eb774ada50a743724b10acc0a2","perf-guide/book.toml":"115a98284126c6b180178b44713314cc494f08a71662ee2ce15cf67f17a51064","perf-guide/src/SUMMARY.md":"3e03bffc991fdc2050f3d51842d72d9d21ea6abab56a3baf3b2d5973a78b89e1","perf-guide/src/ascii.css":"29afb08833b2fe2250f0412e1fa1161a2432a0820a14953c87124407417c741a","perf-guide/src/bound_checks.md":"5e4991ff58a183ef0cd9fdc1feb4cd12d083b44bdf87393bbb0927808ef3ce7d","perf-guide/src/float-math/approx.md":"8c09032fa2d795a0c5db1775826c850d28eb2627846d0965c60ee72de63735ad","perf-guide/src/float-math/fma.md":"311076ba4b741d604a82e74b83a8d7e8c318fcbd7f64c4392d1cf5af95c60243","perf-guide/src/float-math/fp.md":"04153e775ab6e4f0d7837bcc515230d327b04edfa34c84ce9c9e10ebaeef2be8","perf-guide/src/float-math/svml.md":"0798873b8eedaeda5fed62dc91645b57c20775a02d3cd74d8bd06958f1516506","perf-guide/src/introduction.md":"9f5a19e9e6751f25d2daad39891a0cc600974527ec4c8305843f9618910671bd","perf-guide/src/prof/linux.md":"447731eb5de7d69166728fdbc5ecb0c0c9db678ea493b45a592d67dd002184c0","perf-guide/src/prof/mca.md":"f56d54f3d20e7aa4d32052186e8237b03d65971eb5d112802b442570ff11d344","perf-guide/src/prof/profiling.md":"8a650c0fd6ede0964789bb6577557eeef1d8226a896788602ce61528e260e43c","perf-guide/src/target-feature/attribute.md":"615f88dca0a707b6c416fa605435dd6e1fb5361cc639429cbf68cd87624bd78b","perf-guide/src/target-feature/features.md":"17077760ff24c006b606dd21889c53d87228f4311f3ba3a574f9afdeacd86165","perf-guide/src/target-feature/inlining.md":"7ed1d7068d8173a00d84c16cfe5871cd68b9f04f8d0cca2d01ebc84957ebf2f6","perf-guide/src/target-feature/practice.md":"c4b371842e0086df178488fec97f20def8f0c62ee588bcd25fd948b9b1fa227e","perf-guide/src/target-feature/runtime.md":"835425f5ee597fb3e51d36e725a81ebee29f4561231d19563cd4da81dbb1cfcb","perf-guide/src/target-feature/rustflags.md":"ab49712e9293a65d74d540ba4784fcb57ff1119ec05a575d895c071f1a620f64","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","readme.md":"585a8f0e16877fb9abb00cd17a175fcb9d7857840c6c61209f1827ffab095070","rustfmt.toml":"de6101d0670bad65fb3b337d56957d2a024e017e5ab146ec784d77312daaf8ff","src/api.rs":"331a3a4abb19cee2df5f2df4ad7c3e88b45e62cf23fdacfc9bbaa633dc5cf788","src/api/bit_manip.rs":"e68290ee679cc5abc9c73afbe635c1035f8cbfe849e5c751a1680e459244c39e","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"63e28c6a3edf1a7a635f51b8d3c6adbb1d46f884d92a196b3d4a6e743d809416","src/api/cast/v16.rs":"2a584eeb57fd47baad6f3533764301b04aaaac23702b7a8db12598ac02899262","src/api/cast/v256.rs":"b91c15ed8d1536ecd97b4eb79ff9d5aba0552cd9b6f0ea6435b05f2273e23b3a","src/api/cast/v32.rs":"62ec89fcce7fa7f28497ee5770adc8f81d2d3a6b2925b02f7dc06504c40e8f38","src/api/cast/v512.rs":"d855cb943ae7106e9599ef38e30a3afb1c6bd5433178baca54cb128fd9a7d143","src/api/cast/v64.rs":"fe0f7dfaf4fc0c0c1a78c96fcfcdfdc2a1e2845843b11aa797a0c6fb52a8f774","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"3ed23d2a930b0f9750c3a5309da766b03dc4f9c4d375b42ad3c50fe732693d15","src/api/cmp/partial_ord.rs":"e16b11805c94048acd058c93994b5bc74bb187f8d7e3b86a87df60e1601467f9","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"b61f92fc0e33a2633b3375eb405beba480da071cde03df4d437d8a6058afcd97","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"35cb5c266197d6224d598fb3d286e5fe48ef0c01ed356c2ff6fe9ba946f96a92","src/api/fmt/debug.rs":"aa18eea443bf353fea3db8b1a025132bbcaf91e747ecfa43b8d9fce9af395a0c","src/api/fmt/lower_hex.rs":"69d5be366631af309f214e8031c8c20267fcc27a695eac6f45c6bc1df72a67e6","src/api/fmt/octal.rs":"9eb11ba3d990213f3c7f1ec25edba7ce997cb1320e16d308c83498ba6b9bfbd9","src/api/fmt/upper_hex.rs":"a4637d085b7bb20e759ce58e08435b510a563ba3dd468af2b03560fdc5511562","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"4151593c7bba7455821fffa5b59867005a77c95d32f1f0cc3fd87294000157d9","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"562cfa3f1d8eb9a733c035a3665a599c2f1e341ee820d8fbdd102a4398a441bc","src/api/into_bits.rs":"82297f0697d67b5a015e904e7e6e7b2a7066ba825bc54b94b4ff3e22d7a1eefb","src/api/into_bits/arch_specific.rs":"1f925390b0ce7132587d95f2419c6e2ad3e1a9d17eb1d9c120a1c1c4bdf4277e","src/api/into_bits/macros.rs":"d762406de25aedff88d460dec7a80dc8e825a2a419d53218ce007efa6a1d3e04","src/api/into_bits/v128.rs":"ecdc5893664c71d7ab1ff3697c3fbe490d20d8748b9b76881d05e7625e40d74c","src/api/into_bits/v16.rs":"5459ec7dad1ad7bd30dc7e48374580b993abf23701d9c3cb22203fa0a9aabb6d","src/api/into_bits/v256.rs":"90ea351da0380ead1bf0f63b620afd40d01d638d09f7e7be31840bd2c1d9c663","src/api/into_bits/v32.rs":"ee1dc5a430050e16f51154b5fe85b1536f5feddf2ea23dd1d3859b67c4afc6fc","src/api/into_bits/v512.rs":"f72098ed1c9a23944f3d01abaf5e0f2d0e81d35a06fdadd2183e896d41b59867","src/api/into_bits/v64.rs":"6394462facdfe7827349c742b7801f1291e75a720dfb8c0b52100df46f371c98","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"78acba000d3fa527111300b6327c1932de9c4c1e02d4174e1a5615c01463d38c","src/api/math/float/cos.rs":"4c2dd7173728ef189314f1576c9486e03be21b7da98843b2f9011282a7979e31","src/api/math/float/exp.rs":"7c6d5f1e304f498a01cfa23b92380c815d7da0ad94eae3483783bc377d287eef","src/api/math/float/ln.rs":"54c7583f3df793b39ff57534fade27b41bb992439e5dc178252f5ca3190a3e54","src/api/math/float/mul_add.rs":"62cac77660d20159276d4c9ef066eb90c81cbddb808e8e157182c607625ad2eb","src/api/math/float/mul_adde.rs":"bae056ee9f3a70df39ec3c3b2f6437c65303888a7b843ef1a5bcf1f5aca0e602","src/api/math/float/powf.rs":"9ddb938984b36d39d82a82f862f80df8f7fb013f1d222d45698d41d88472f568","src/api/math/float/recpre.rs":"589225794ff1dbf31158dff660e6d4509ecc8befbb57c633900dea5ac0b840d6","src/api/math/float/rsqrte.rs":"a32abdcc318d7ccc8448231f54d75b884b7cbeb03a7d595713ab6243036f4dbf","src/api/math/float/sin.rs":"cbd3622b7df74f19691743001c8cf747a201f8977ad90542fee915f37dcd1e49","src/api/math/float/sqrt.rs":"0c66d5d63fb08e4d99c6b82a8828e41173aff1ac9fa1a2764a11fac217ccf2ac","src/api/math/float/sqrte.rs":"731e1c9f321b662accdd27dacb3aac2e8043b7aecb2f2161dde733bd9f025362","src/api/minimal.rs":"1f22bcc528555444e76de569ec0ae2029b9ae9d04805efeafa93369c8098036b","src/api/minimal/iuf.rs":"c501a6696950cf5e521765f178de548af64fdfb6e10d026616d09fab93ca2d17","src/api/minimal/mask.rs":"42e415f536c5193d0218f5a754b34b87fd7c971bff068009f958712166ff056d","src/api/minimal/ptr.rs":"a9ee482d1dd1c956fb8f3f179e6e620b1de4e9d713961461d4c6923a4ef2e67c","src/api/ops.rs":"3e273b277a0f3019d42c3c59ca94a5afd4885d5ae6d2182e5089bbeec9de42ee","src/api/ops/scalar_arithmetic.rs":"d2d5ad897a59dd0787544f927e0e7ca4072c3e58b0f4a2324083312b0d5a21d7","src/api/ops/scalar_bitwise.rs":"482204e459ca6be79568e1c9f70adbe2d2151412ddf122fb2161be8ebb51c40c","src/api/ops/scalar_mask_bitwise.rs":"c250f52042e37b22d57256c80d4604104cfd2fbe2a2e127c676267270ca5d350","src/api/ops/scalar_shifts.rs":"987f8fdebeedc16e3d77c1b732e7826ef70633c541d16dfa290845d5c6289150","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"f5155dce75219f4ba11275b1f295d2fdcddd49d174a6f1fb2ace7ea42813ce41","src/api/ops/vector_int_min_max.rs":"a378789c6ff9b32a51fbd0a97ffd36ed102cd1fe6a067d2b02017c1df342def6","src/api/ops/vector_mask_bitwise.rs":"5052d18517d765415d40327e6e8e55a312daaca0a5e2aec959bfa54b1675f9c8","src/api/ops/vector_neg.rs":"5c62f6b0221983cdbd23cd0a3af3672e6ba1255f0dfe8b19aae6fbd6503e231b","src/api/ops/vector_rotates.rs":"03cbe8a400fd7c688e4ee771a990a6754f2031b1a59b19ae81158b21471167e5","src/api/ops/vector_shifts.rs":"9bf69d0087268f61009e39aea52e03a90f378910206b6a28e8393178b6a5d0e0","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"9ddd960365e050674b25b2fd3116e24d94669b4375d74e71c03e3f1469576066","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"e58c8c87806a95df2b2b5b48ac5991036df024096d9d7c171a480fe9282896a4","src/api/reductions/integer_arithmetic.rs":"47471da1c5f859489680bb5d34ced3d3aa20081c16053a3af121a4496fcb57bf","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"f27be3aa28e1c1f46de7890198db6e12f00c207085e89ef2de7e57ee443cdb98","src/api/select.rs":"a98e2ccf9fc6bdeed32d337c8675bc96c2fbe2cc34fbf149ad6047fb8e749774","src/api/shuffle.rs":"da58200790868c09659819322a489929a5b6e56c596ed07e6a44293ea02e7d09","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"4d4fe8a329c885fcb4fbcbedf99efb15a95296fe6b3f595056cc37037450d5ac","src/api/slice/write_to_slice.rs":"f5b23b2c4b91cfb26b713a9013a6c0da7f45eaefb79ba06dcbc27f3f23bda679","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codegen.rs":"c6eebc3d3665420aa6a2f317977e3c41a4f43e0550ac630cdbe8e4bbed5e2031","src/codegen/bit_manip.rs":"5559e095105a80003e0de35af1d19b0c65c9ab04eb743c7e01c5442d882eb34e","src/codegen/llvm.rs":"d1299c189abb17a6133f047574cffc7a6db4c1be37cb7d4785491cb5e8f8cf54","src/codegen/math.rs":"35f96e37a78fcf0cdb02146b7f27a45108fe06a37fc2a54d8851ce131a326178","src/codegen/math/float.rs":"dd86c0449e576c83b719700962ac017c332987fac08d91f2b7a2b1b883598170","src/codegen/math/float/abs.rs":"f56e2b4b8055ea861c1f5cbc6b6e1d8e7e5af163b62c13574ddee4e09513bfbc","src/codegen/math/float/cos.rs":"ef3b511a24d23045b310315e80348a9b7fedb576fc2de52d74290616a0abeb2a","src/codegen/math/float/cos_pi.rs":"4e7631a5d73dac21531e09ef1802d1180f8997509c2c8fa9f67f322194263a97","src/codegen/math/float/exp.rs":"61b691598c41b5622f24e4320c1bdd08701e612a516438bdddcc728fc3405c8c","src/codegen/math/float/ln.rs":"46b718b1ba8c9d99e1ad40f53d20dfde08a3063ca7bd2a9fdd6698e060da687e","src/codegen/math/float/macros.rs":"dd42135fff13f9aca4fd3a1a4e14c7e6c31aadc6d817d63b0d2fb9e62e062744","src/codegen/math/float/mul_add.rs":"a37bf764345d4b1714f97e83897b7cf0855fc2811704bcbc0012db91825339e1","src/codegen/math/float/mul_adde.rs":"c75702bfcb361de45964a93caf959a695ef2376bd069227600b8c6872665c755","src/codegen/math/float/powf.rs":"642346e982bc4c39203de0864d2149c4179cd7b21cf67a2951687932b4675872","src/codegen/math/float/sin.rs":"9d68164c90cdca6a85155040cdac42e27342ebe0b925273ef1593df721af4258","src/codegen/math/float/sin_cos_pi.rs":"9be02ad48585a1e8d99129382fbffbaed47852f15459256a708850b6b7a75405","src/codegen/math/float/sin_pi.rs":"9890347905b4d4a3c7341c3eb06406e46e60582bcf6960688bd727e5dadc6c57","src/codegen/math/float/sqrt.rs":"e3c60dcfb0c6d2fc62adabcc931b2d4040b83cab294dea36443fb4b89eb79e34","src/codegen/math/float/sqrte.rs":"f0f4ef9eb475ae41bcc7ec6a95ad744ba6b36925faa8b2c2814004396d196b63","src/codegen/pointer_sized_int.rs":"a70697169c28218b56fd2e8d5353f2e00671d1150d0c8cef77d613bdfacd84cb","src/codegen/reductions.rs":"645e2514746d01387ddd07f0aa4ffd8430cc9ab428d4fb13773ea319fa25dd95","src/codegen/reductions/mask.rs":"8f1afe6aabf096a3278e1fc3a30f736e04aa8b9ce96373cee22162d18cfe2702","src/codegen/reductions/mask/aarch64.rs":"cba6e17603d39795dcfe8339b6b7d8714c3e162a1f0a635979f037aa24fe4206","src/codegen/reductions/mask/arm.rs":"9447904818aa2c7c25d0963eead452a639a11ca7dbd6d21eedbfcaade07a0f33","src/codegen/reductions/mask/fallback.rs":"7a0ef9f7fd03ae318b495b95e121350cd61caffc5cc6ee17fabf130d5d933453","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"14bd2c482071f2355beebcf7b7ecf950ff2dfcdb08c3ca50993092434a9de717","src/codegen/reductions/mask/x86/avx.rs":"b4913d87844c522903641cbbf10db4551addb1ce5e9e78278e21612fa65c733b","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"226610b4ff88c676d5187114dd57b4a8800de6ce40884675e9198445b1ed0306","src/codegen/reductions/mask/x86/sse2.rs":"bc38e6c31cb4b3d62147eba6cac264e519e2a48e0f7ce9010cfa9ef0cf0ec9fd","src/codegen/shuffle.rs":"0abca97e92cdce49a58a39cc447eb09dc7d7715ef256c8dbd2181a186e61bb64","src/codegen/shuffle1_dyn.rs":"04523e9338133bdedb012dd076c2c564b79ce5593b0fc56d0fb6910e04190a81","src/codegen/swap_bytes.rs":"1d6cdc716eadddc92b4fd506b2445a821caa8dc00860447de09d7ebd69c2087f","src/codegen/v128.rs":"94226b31ec403d18d9d2fe06713f147c9c79e9b5f9105089088266313f843185","src/codegen/v16.rs":"ddec4ffb66b6f7aaffb9a1780c5ddba82557abd74f45073d335047e04cf74924","src/codegen/v256.rs":"6b63917f0444118d6b1595bff2045e59b97c4d24012bd575f69f1f0efc5a0241","src/codegen/v32.rs":"3477b3c5540aed86e61e2f5807dd31db947413cec9181c587d93ed6ec74f0eba","src/codegen/v512.rs":"5854f99d3aabc4cd42b28a20d9ce447756dc2ba024a409a69b6a8ae1f1842fc5","src/codegen/v64.rs":"e9e89caebfe63d10c0cbca61e4dfdba3b7e02ee0989170f80beed23237ddd950","src/codegen/vPtr.rs":"96d609a9eece4dcbbcc01ba0b8744d7f5958be12774176a2945bc676f4e6b5cb","src/codegen/vSize.rs":"eeee9858749aa82142b27bc120d1989bb74a6b82e1e4efbbeaccc9634dc9acfc","src/lib.rs":"1b5d419ff05ee0370d671810423ccc254708cc8d415c1dbac2a7a36be4bf63a8","src/masks.rs":"870f429967b2d7d5133f4d28d6c753fc5cef0570b27b29d4e966a066d22d2d0e","src/sealed.rs":"ff7f0324276408ae8249941cfa32c90b8835a54d750896b683efea857af19db2","src/testing.rs":"1d3a7862ef625e235a5734ad7204e68d350f902c0695182b1f08a0552432416e","src/testing/macros.rs":"6378856d7a40ba5ec5c7c0dad6327d79f0c77266921c24296d10aed6c68e9b98","src/testing/utils.rs":"d6fd5a5017f1f85d9d99585754f8f6ad06fc3d683b34083543e67a7cc6c1772c","src/v128.rs":"18fe263c4aa28cd06461c7070b0269f69f4a2e75749b8f142a83dfdfe4d22bf5","src/v16.rs":"e5c663c9fb3547eaeac78a5f7db9969f4d8b5ec96112bf2954602fff11f0aebd","src/v256.rs":"68732cd688ad12a56d8b4f8ddf279f77bdfe1be2943c7dc0c1b4f1a76798aa0f","src/v32.rs":"785b22a1ccb4a41bb53dfeb0670f624c0ce42e6cdf62d1747e3283777a1c70bd","src/v512.rs":"d1337bfe07f06a8f37f8e8fa7d4315b9307476ee435ad80dd5269eaed564fbfa","src/v64.rs":"3077468d65125b8f085e9454c8b2463a4d5225697464ba6a1300f8799528fd4b","src/vPtr.rs":"c9a53f41f466e17b6648a4ce390fd8f4d3a848d440eb8a9a803a11608d76eb05","src/vSize.rs":"5c46d3e8c3ee5863d9b6e37e681f871386e0efc254d6d84ba711edb529ce7b3c","tests/endianness.rs":"541a144be017e3dd7da7c8ea49d907dc02538245e8c5f3deb5bd43da92c929e1"},"package":null} -\ No newline at end of file -diff --git a/third_party/rust/proc-macro2/.cargo-checksum.json b/third_party/rust/proc-macro2/.cargo-checksum.json -index eeef4120af..e7849f2896 100644 ---- a/third_party/rust/proc-macro2/.cargo-checksum.json -+++ b/third_party/rust/proc-macro2/.cargo-checksum.json -@@ -1 +1 @@ --{"files":{"Cargo.toml":"e2c1fc6ed317eeef8462fcd192f6b6389e1d84f0d7afeac78f12c23903deddf8","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"362a2156f7645528061b6e8487a2eb0f32f1693012ed82ee57afa05c039bba0d","build.rs":"0cc6e2cb919ddbff59cf1d810283939f97a59f0037540c0f2ee3453237635ff8","src/fallback.rs":"5c6379a90735e27abcc40253b223158c6b1e5784f3850bc423335363e87ef038","src/lib.rs":"ae5251296ad3fcd8b600919a993fec0afd8b56da3e11fef6bc7265b273129936","src/strnom.rs":"37f7791f73f123817ad5403af1d4e2a0714be27401729a2d451bc80b1f26bac9","src/wrapper.rs":"81372e910604217a625aa71c47d43e65f4e008456eae93ac39325c9abf10701a","tests/features.rs":"a86deb8644992a4eb64d9fd493eff16f9cf9c5cb6ade3a634ce0c990cf87d559","tests/marker.rs":"c2652e3ae1dfcb94d2e6313b29712c5dcbd0fe62026913e67bb7cebd7560aade","tests/test.rs":"8c427be9cba1fa8d4a16647e53e3545e5863e29e2c0b311c93c9dd1399abf6a1"},"package":"90cf5f418035b98e655e9cdb225047638296b862b42411c4e45bb88d700f7fc0"} -\ No newline at end of file -+{"files":{"Cargo.toml":"302d447d62c8d091d6241cf62bdad607c0d4ed8ff9f43d9b254c9d99c253ee8e","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"378f5840b258e2779c39418f3f2d7b2ba96f1c7917dd6be0713f88305dbda397","README.md":"e1f9d4fc22cff2c049f166a403b41458632a94357890d31cf0e3ad83807fb430","build.rs":"a71283fbc495095eebbbf46753df3fe2c19505c745b508dea157f65796b64dd7","src/detection.rs":"9d25d896889e65330858f2d6f6223c1b98cd1dad189813ad4161ff189fbda2b8","src/fallback.rs":"b114e013695260f6066395c8712cea112ec2a386010397a80f15a60f8b986444","src/lib.rs":"7f528764a958587f007f0c2a330a6a414bae2c8e73d5ed9fb64ff1b42b1805b1","src/marker.rs":"87fce2d0357f5b7998b6d9dfb064f4a0cbc9dabb19e33d4b514a446243ebe2e8","src/parse.rs":"1d2253eacbd40eb3a2a933be2adcee356af922bdb48cc89ff266252a41fd98a1","src/wrapper.rs":"f52646ce1705c1f6265516f30d4c43297b5f529dd31fb91f4c806be89d5a4122","tests/comments.rs":"ea6cbe6f4c8852e6a0612893c7d4f2c144a2e6a134a6c3db641a320cbfc3c800","tests/features.rs":"a86deb8644992a4eb64d9fd493eff16f9cf9c5cb6ade3a634ce0c990cf87d559","tests/marker.rs":"652db9f25c69ffc65baa60cdca8f195aa2e254d4de0a9ddc85de4dc2470544b6","tests/test.rs":"5f30a704eeb2b9198b57f416d622da72d25cb9bf8d8b12e6d0e90aa2cb0e43fc","tests/test_fmt.rs":"745dfdc41d09c5308c221395eb43f2041f0a1413d2927a813bc2ad4554438fe2"},"package":"1e0704ee1a7e00d7bb417d0770ea303c1bccbabf0ef1667dae92b5967f5f8a71"} -\ No newline at end of file -diff --git a/third_party/rust/proc-macro2/Cargo.toml b/third_party/rust/proc-macro2/Cargo.toml -index 95d653633d..22150c516a 100644 ---- a/third_party/rust/proc-macro2/Cargo.toml -+++ b/third_party/rust/proc-macro2/Cargo.toml -@@ -13,21 +13,22 @@ - [package] - edition = "2018" - name = "proc-macro2" --version = "1.0.5" --authors = ["Alex Crichton <alex@alexcrichton.com>"] --description = "A stable implementation of the upcoming new `proc_macro` API. Comes with an\noption, off by default, to also reimplement itself in terms of the upstream\nunstable API.\n" --homepage = "https://github.com/alexcrichton/proc-macro2" -+version = "1.0.24" -+authors = ["Alex Crichton <alex@alexcrichton.com>", "David Tolnay <dtolnay@gmail.com>"] -+description = "A substitute implementation of the compiler's `proc_macro` API to decouple\ntoken-based libraries from the procedural macro use case.\n" - documentation = "https://docs.rs/proc-macro2" - readme = "README.md" - keywords = ["macros"] -+categories = ["development-tools::procedural-macro-helpers"] - license = "MIT OR Apache-2.0" - repository = "https://github.com/alexcrichton/proc-macro2" - [package.metadata.docs.rs] - rustc-args = ["--cfg", "procmacro2_semver_exempt"] - rustdoc-args = ["--cfg", "procmacro2_semver_exempt"] -+targets = ["x86_64-unknown-linux-gnu"] - --[lib] --name = "proc_macro2" -+[package.metadata.playground] -+features = ["span-locations"] - [dependencies.unicode-xid] - version = "0.2" - [dev-dependencies.quote] -@@ -39,5 +40,3 @@ default = ["proc-macro"] - nightly = [] - proc-macro = [] - span-locations = [] --[badges.travis-ci] --repository = "alexcrichton/proc-macro2" -diff --git a/third_party/rust/proc-macro2/README.md b/third_party/rust/proc-macro2/README.md -index 19b0c3b5f8..3d05e871a7 100644 ---- a/third_party/rust/proc-macro2/README.md -+++ b/third_party/rust/proc-macro2/README.md -@@ -1,6 +1,6 @@ - # proc-macro2 - --[](https://travis-ci.com/alexcrichton/proc-macro2) -+[](https://github.com/alexcrichton/proc-macro2/actions) - [](https://crates.io/crates/proc-macro2) - [](https://docs.rs/proc-macro2) - -diff --git a/third_party/rust/proc-macro2/build.rs b/third_party/rust/proc-macro2/build.rs -index deb9b92719..b247d874f6 100644 ---- a/third_party/rust/proc-macro2/build.rs -+++ b/third_party/rust/proc-macro2/build.rs -@@ -14,6 +14,10 @@ - // procmacro2_semver_exempt surface area is implemented by using the - // nightly-only proc_macro API. - // -+// "hygiene" -+// Enable Span::mixed_site() and non-dummy behavior of Span::resolved_at -+// and Span::located_at. Enabled on Rust 1.45+. -+// - // "proc_macro_span" - // Enable non-dummy behavior of Span::start and Span::end methods which - // requires an unstable compiler feature. Enabled when building with -@@ -57,6 +61,22 @@ fn main() { - println!("cargo:rustc-cfg=span_locations"); - } - -+ if version.minor < 32 { -+ println!("cargo:rustc-cfg=no_libprocmacro_unwind_safe"); -+ } -+ -+ if version.minor < 39 { -+ println!("cargo:rustc-cfg=no_bind_by_move_pattern_guard"); -+ } -+ -+ if version.minor >= 44 { -+ println!("cargo:rustc-cfg=lexerror_display"); -+ } -+ -+ if version.minor >= 45 { -+ println!("cargo:rustc-cfg=hygiene"); -+ } -+ - let target = env::var("TARGET").unwrap(); - if !enable_use_proc_macro(&target) { - return; -diff --git a/third_party/rust/proc-macro2/src/detection.rs b/third_party/rust/proc-macro2/src/detection.rs -new file mode 100644 -index 0000000000..c597bc99c6 ---- /dev/null -+++ b/third_party/rust/proc-macro2/src/detection.rs -@@ -0,0 +1,67 @@ -+use std::panic::{self, PanicInfo}; -+use std::sync::atomic::*; -+use std::sync::Once; -+ -+static WORKS: AtomicUsize = AtomicUsize::new(0); -+static INIT: Once = Once::new(); -+ -+pub(crate) fn inside_proc_macro() -> bool { -+ match WORKS.load(Ordering::SeqCst) { -+ 1 => return false, -+ 2 => return true, -+ _ => {} -+ } -+ -+ INIT.call_once(initialize); -+ inside_proc_macro() -+} -+ -+pub(crate) fn force_fallback() { -+ WORKS.store(1, Ordering::SeqCst); -+} -+ -+pub(crate) fn unforce_fallback() { -+ initialize(); -+} -+ -+// Swap in a null panic hook to avoid printing "thread panicked" to stderr, -+// then use catch_unwind to determine whether the compiler's proc_macro is -+// working. When proc-macro2 is used from outside of a procedural macro all -+// of the proc_macro crate's APIs currently panic. -+// -+// The Once is to prevent the possibility of this ordering: -+// -+// thread 1 calls take_hook, gets the user's original hook -+// thread 1 calls set_hook with the null hook -+// thread 2 calls take_hook, thinks null hook is the original hook -+// thread 2 calls set_hook with the null hook -+// thread 1 calls set_hook with the actual original hook -+// thread 2 calls set_hook with what it thinks is the original hook -+// -+// in which the user's hook has been lost. -+// -+// There is still a race condition where a panic in a different thread can -+// happen during the interval that the user's original panic hook is -+// unregistered such that their hook is incorrectly not called. This is -+// sufficiently unlikely and less bad than printing panic messages to stderr -+// on correct use of this crate. Maybe there is a libstd feature request -+// here. For now, if a user needs to guarantee that this failure mode does -+// not occur, they need to call e.g. `proc_macro2::Span::call_site()` from -+// the main thread before launching any other threads. -+fn initialize() { -+ type PanicHook = dyn Fn(&PanicInfo) + Sync + Send + 'static; -+ -+ let null_hook: Box<PanicHook> = Box::new(|_panic_info| { /* ignore */ }); -+ let sanity_check = &*null_hook as *const PanicHook; -+ let original_hook = panic::take_hook(); -+ panic::set_hook(null_hook); -+ -+ let works = panic::catch_unwind(proc_macro::Span::call_site).is_ok(); -+ WORKS.store(works as usize + 1, Ordering::SeqCst); -+ -+ let hopefully_null_hook = panic::take_hook(); -+ panic::set_hook(original_hook); -+ if sanity_check != &*hopefully_null_hook { -+ panic!("observed race condition in proc_macro2::inside_proc_macro"); -+ } -+} -diff --git a/third_party/rust/proc-macro2/src/fallback.rs b/third_party/rust/proc-macro2/src/fallback.rs -index fe582b3b5f..8900c5ff0f 100644 ---- a/third_party/rust/proc-macro2/src/fallback.rs -+++ b/third_party/rust/proc-macro2/src/fallback.rs -@@ -1,27 +1,41 @@ -+use crate::parse::{token_stream, Cursor}; -+use crate::{Delimiter, Spacing, TokenTree}; - #[cfg(span_locations)] - use std::cell::RefCell; - #[cfg(span_locations)] - use std::cmp; --use std::fmt; --use std::iter; -+use std::fmt::{self, Debug, Display}; -+use std::iter::FromIterator; -+use std::mem; - use std::ops::RangeBounds; - #[cfg(procmacro2_semver_exempt)] - use std::path::Path; - use std::path::PathBuf; - use std::str::FromStr; - use std::vec; -- --use crate::strnom::{block_comment, skip_whitespace, whitespace, word_break, Cursor, PResult}; --use crate::{Delimiter, Punct, Spacing, TokenTree}; - use unicode_xid::UnicodeXID; - -+/// Force use of proc-macro2's fallback implementation of the API for now, even -+/// if the compiler's implementation is available. -+pub fn force() { -+ #[cfg(wrap_proc_macro)] -+ crate::detection::force_fallback(); -+} -+ -+/// Resume using the compiler's implementation of the proc macro API if it is -+/// available. -+pub fn unforce() { -+ #[cfg(wrap_proc_macro)] -+ crate::detection::unforce_fallback(); -+} -+ - #[derive(Clone)] --pub struct TokenStream { -- inner: Vec<TokenTree>, -+pub(crate) struct TokenStream { -+ pub(crate) inner: Vec<TokenTree>, - } - - #[derive(Debug)] --pub struct LexError; -+pub(crate) struct LexError; - - impl TokenStream { - pub fn new() -> TokenStream { -@@ -31,6 +45,72 @@ impl TokenStream { - pub fn is_empty(&self) -> bool { - self.inner.len() == 0 - } -+ -+ fn take_inner(&mut self) -> Vec<TokenTree> { -+ mem::replace(&mut self.inner, Vec::new()) -+ } -+ -+ fn push_token(&mut self, token: TokenTree) { -+ // https://github.com/alexcrichton/proc-macro2/issues/235 -+ match token { -+ #[cfg(not(no_bind_by_move_pattern_guard))] -+ TokenTree::Literal(crate::Literal { -+ #[cfg(wrap_proc_macro)] -+ inner: crate::imp::Literal::Fallback(literal), -+ #[cfg(not(wrap_proc_macro))] -+ inner: literal, -+ .. -+ }) if literal.text.starts_with('-') => { -+ push_negative_literal(self, literal); -+ } -+ #[cfg(no_bind_by_move_pattern_guard)] -+ TokenTree::Literal(crate::Literal { -+ #[cfg(wrap_proc_macro)] -+ inner: crate::imp::Literal::Fallback(literal), -+ #[cfg(not(wrap_proc_macro))] -+ inner: literal, -+ .. -+ }) => { -+ if literal.text.starts_with('-') { -+ push_negative_literal(self, literal); -+ } else { -+ self.inner -+ .push(TokenTree::Literal(crate::Literal::_new_stable(literal))); -+ } -+ } -+ _ => self.inner.push(token), -+ } -+ -+ #[cold] -+ fn push_negative_literal(stream: &mut TokenStream, mut literal: Literal) { -+ literal.text.remove(0); -+ let mut punct = crate::Punct::new('-', Spacing::Alone); -+ punct.set_span(crate::Span::_new_stable(literal.span)); -+ stream.inner.push(TokenTree::Punct(punct)); -+ stream -+ .inner -+ .push(TokenTree::Literal(crate::Literal::_new_stable(literal))); -+ } -+ } -+} -+ -+// Nonrecursive to prevent stack overflow. -+impl Drop for TokenStream { -+ fn drop(&mut self) { -+ while let Some(token) = self.inner.pop() { -+ let group = match token { -+ TokenTree::Group(group) => group.inner, -+ _ => continue, -+ }; -+ #[cfg(wrap_proc_macro)] -+ let group = match group { -+ crate::imp::Group::Fallback(group) => group, -+ _ => continue, -+ }; -+ let mut group = group; -+ self.inner.extend(group.stream.take_inner()); -+ } -+ } - } - - #[cfg(span_locations)] -@@ -59,20 +139,22 @@ impl FromStr for TokenStream { - // Create a dummy file & add it to the source map - let cursor = get_cursor(src); - -- match token_stream(cursor) { -- Ok((input, output)) => { -- if skip_whitespace(input).len() != 0 { -- Err(LexError) -- } else { -- Ok(output) -- } -- } -- Err(LexError) => Err(LexError), -+ let (rest, tokens) = token_stream(cursor)?; -+ if rest.is_empty() { -+ Ok(tokens) -+ } else { -+ Err(LexError) - } - } - } - --impl fmt::Display for TokenStream { -+impl Display for LexError { -+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -+ f.write_str("cannot parse string into token stream") -+ } -+} -+ -+impl Display for TokenStream { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - let mut joint = false; - for (i, tt) in self.inner.iter().enumerate() { -@@ -80,37 +162,22 @@ impl fmt::Display for TokenStream { - write!(f, " ")?; - } - joint = false; -- match *tt { -- TokenTree::Group(ref tt) => { -- let (start, end) = match tt.delimiter() { -- Delimiter::Parenthesis => ("(", ")"), -- Delimiter::Brace => ("{", "}"), -- Delimiter::Bracket => ("[", "]"), -- Delimiter::None => ("", ""), -- }; -- if tt.stream().into_iter().next().is_none() { -- write!(f, "{} {}", start, end)? -- } else { -- write!(f, "{} {} {}", start, tt.stream(), end)? -- } -- } -- TokenTree::Ident(ref tt) => write!(f, "{}", tt)?, -- TokenTree::Punct(ref tt) => { -- write!(f, "{}", tt.as_char())?; -- match tt.spacing() { -- Spacing::Alone => {} -- Spacing::Joint => joint = true, -- } -+ match tt { -+ TokenTree::Group(tt) => Display::fmt(tt, f), -+ TokenTree::Ident(tt) => Display::fmt(tt, f), -+ TokenTree::Punct(tt) => { -+ joint = tt.spacing() == Spacing::Joint; -+ Display::fmt(tt, f) - } -- TokenTree::Literal(ref tt) => write!(f, "{}", tt)?, -- } -+ TokenTree::Literal(tt) => Display::fmt(tt, f), -+ }? - } - - Ok(()) - } - } - --impl fmt::Debug for TokenStream { -+impl Debug for TokenStream { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.write_str("TokenStream ")?; - f.debug_list().entries(self.clone()).finish() -@@ -139,28 +206,26 @@ impl From<TokenStream> for proc_macro::TokenStream { - - impl From<TokenTree> for TokenStream { - fn from(tree: TokenTree) -> TokenStream { -- TokenStream { inner: vec![tree] } -+ let mut stream = TokenStream::new(); -+ stream.push_token(tree); -+ stream - } - } - --impl iter::FromIterator<TokenTree> for TokenStream { -- fn from_iter<I: IntoIterator<Item = TokenTree>>(streams: I) -> Self { -- let mut v = Vec::new(); -- -- for token in streams.into_iter() { -- v.push(token); -- } -- -- TokenStream { inner: v } -+impl FromIterator<TokenTree> for TokenStream { -+ fn from_iter<I: IntoIterator<Item = TokenTree>>(tokens: I) -> Self { -+ let mut stream = TokenStream::new(); -+ stream.extend(tokens); -+ stream - } - } - --impl iter::FromIterator<TokenStream> for TokenStream { -+impl FromIterator<TokenStream> for TokenStream { - fn from_iter<I: IntoIterator<Item = TokenStream>>(streams: I) -> Self { - let mut v = Vec::new(); - -- for stream in streams.into_iter() { -- v.extend(stream.inner); -+ for mut stream in streams { -+ v.extend(stream.take_inner()); - } - - TokenStream { inner: v } -@@ -168,31 +233,30 @@ impl iter::FromIterator<TokenStream> for TokenStream { - } - - impl Extend<TokenTree> for TokenStream { -- fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, streams: I) { -- self.inner.extend(streams); -+ fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, tokens: I) { -+ tokens.into_iter().for_each(|token| self.push_token(token)); - } - } - - impl Extend<TokenStream> for TokenStream { - fn extend<I: IntoIterator<Item = TokenStream>>(&mut self, streams: I) { -- self.inner -- .extend(streams.into_iter().flat_map(|stream| stream)); -+ self.inner.extend(streams.into_iter().flatten()); - } - } - --pub type TokenTreeIter = vec::IntoIter<TokenTree>; -+pub(crate) type TokenTreeIter = vec::IntoIter<TokenTree>; - - impl IntoIterator for TokenStream { - type Item = TokenTree; - type IntoIter = TokenTreeIter; - -- fn into_iter(self) -> TokenTreeIter { -- self.inner.into_iter() -+ fn into_iter(mut self) -> TokenTreeIter { -+ self.take_inner().into_iter() - } - } - - #[derive(Clone, PartialEq, Eq)] --pub struct SourceFile { -+pub(crate) struct SourceFile { - path: PathBuf, - } - -@@ -208,7 +272,7 @@ impl SourceFile { - } - } - --impl fmt::Debug for SourceFile { -+impl Debug for SourceFile { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.debug_struct("SourceFile") - .field("path", &self.path()) -@@ -218,7 +282,7 @@ impl fmt::Debug for SourceFile { - } - - #[derive(Clone, Copy, Debug, PartialEq, Eq)] --pub struct LineColumn { -+pub(crate) struct LineColumn { - pub line: usize, - pub column: usize, - } -@@ -228,23 +292,11 @@ thread_local! { - static SOURCE_MAP: RefCell<SourceMap> = RefCell::new(SourceMap { - // NOTE: We start with a single dummy file which all call_site() and - // def_site() spans reference. -- files: vec![{ -+ files: vec![FileInfo { - #[cfg(procmacro2_semver_exempt)] -- { -- FileInfo { -- name: "<unspecified>".to_owned(), -- span: Span { lo: 0, hi: 0 }, -- lines: vec![0], -- } -- } -- -- #[cfg(not(procmacro2_semver_exempt))] -- { -- FileInfo { -- span: Span { lo: 0, hi: 0 }, -- lines: vec![0], -- } -- } -+ name: "<unspecified>".to_owned(), -+ span: Span { lo: 0, hi: 0 }, -+ lines: vec![0], - }], - }); - } -@@ -282,16 +334,21 @@ impl FileInfo { - } - } - --/// Computesthe offsets of each line in the given source string. -+/// Computes the offsets of each line in the given source string -+/// and the total number of characters - #[cfg(span_locations)] --fn lines_offsets(s: &str) -> Vec<usize> { -+fn lines_offsets(s: &str) -> (usize, Vec<usize>) { - let mut lines = vec![0]; -- let mut prev = 0; -- while let Some(len) = s[prev..].find('\n') { -- prev += len + 1; -- lines.push(prev); -+ let mut total = 0; -+ -+ for ch in s.chars() { -+ total += 1; -+ if ch == '\n' { -+ lines.push(total); -+ } - } -- lines -+ -+ (total, lines) - } - - #[cfg(span_locations)] -@@ -310,23 +367,22 @@ impl SourceMap { - } - - fn add_file(&mut self, name: &str, src: &str) -> Span { -- let lines = lines_offsets(src); -+ let (len, lines) = lines_offsets(src); - let lo = self.next_start_pos(); - // XXX(nika): Shouild we bother doing a checked cast or checked add here? - let span = Span { - lo, -- hi: lo + (src.len() as u32), -+ hi: lo + (len as u32), - }; - -- #[cfg(procmacro2_semver_exempt)] - self.files.push(FileInfo { -+ #[cfg(procmacro2_semver_exempt)] - name: name.to_owned(), - span, - lines, - }); - - #[cfg(not(procmacro2_semver_exempt))] -- self.files.push(FileInfo { span, lines }); - let _ = name; - - span -@@ -343,11 +399,11 @@ impl SourceMap { - } - - #[derive(Clone, Copy, PartialEq, Eq)] --pub struct Span { -+pub(crate) struct Span { - #[cfg(span_locations)] -- lo: u32, -+ pub(crate) lo: u32, - #[cfg(span_locations)] -- hi: u32, -+ pub(crate) hi: u32, - } - - impl Span { -@@ -361,12 +417,16 @@ impl Span { - Span { lo: 0, hi: 0 } - } - -+ #[cfg(hygiene)] -+ pub fn mixed_site() -> Span { -+ Span::call_site() -+ } -+ - #[cfg(procmacro2_semver_exempt)] - pub fn def_site() -> Span { - Span::call_site() - } - -- #[cfg(procmacro2_semver_exempt)] - pub fn resolved_at(&self, _other: Span) -> Span { - // Stable spans consist only of line/column information, so - // `resolved_at` and `located_at` only select which span the -@@ -374,7 +434,6 @@ impl Span { - *self - } - -- #[cfg(procmacro2_semver_exempt)] - pub fn located_at(&self, other: Span) -> Span { - other - } -@@ -427,26 +486,59 @@ impl Span { - }) - }) - } -+ -+ #[cfg(not(span_locations))] -+ fn first_byte(self) -> Self { -+ self -+ } -+ -+ #[cfg(span_locations)] -+ fn first_byte(self) -> Self { -+ Span { -+ lo: self.lo, -+ hi: cmp::min(self.lo.saturating_add(1), self.hi), -+ } -+ } -+ -+ #[cfg(not(span_locations))] -+ fn last_byte(self) -> Self { -+ self -+ } -+ -+ #[cfg(span_locations)] -+ fn last_byte(self) -> Self { -+ Span { -+ lo: cmp::max(self.hi.saturating_sub(1), self.lo), -+ hi: self.hi, -+ } -+ } - } - --impl fmt::Debug for Span { -+impl Debug for Span { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- #[cfg(procmacro2_semver_exempt)] -+ #[cfg(span_locations)] - return write!(f, "bytes({}..{})", self.lo, self.hi); - -- #[cfg(not(procmacro2_semver_exempt))] -+ #[cfg(not(span_locations))] - write!(f, "Span") - } - } - --pub fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) { -- if cfg!(procmacro2_semver_exempt) { -+pub(crate) fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) { -+ #[cfg(span_locations)] -+ { -+ if span.lo == 0 && span.hi == 0 { -+ return; -+ } -+ } -+ -+ if cfg!(span_locations) { - debug.field("span", &span); - } - } - - #[derive(Clone)] --pub struct Group { -+pub(crate) struct Group { - delimiter: Delimiter, - stream: TokenStream, - span: Span, -@@ -474,11 +566,11 @@ impl Group { - } - - pub fn span_open(&self) -> Span { -- self.span -+ self.span.first_byte() - } - - pub fn span_close(&self) -> Span { -- self.span -+ self.span.last_byte() - } - - pub fn set_span(&mut self, span: Span) { -@@ -486,36 +578,45 @@ impl Group { - } - } - --impl fmt::Display for Group { -+impl Display for Group { -+ // We attempt to match libproc_macro's formatting. -+ // Empty parens: () -+ // Nonempty parens: (...) -+ // Empty brackets: [] -+ // Nonempty brackets: [...] -+ // Empty braces: { } -+ // Nonempty braces: { ... } - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- let (left, right) = match self.delimiter { -+ let (open, close) = match self.delimiter { - Delimiter::Parenthesis => ("(", ")"), -- Delimiter::Brace => ("{", "}"), -+ Delimiter::Brace => ("{ ", "}"), - Delimiter::Bracket => ("[", "]"), - Delimiter::None => ("", ""), - }; - -- f.write_str(left)?; -- self.stream.fmt(f)?; -- f.write_str(right)?; -+ f.write_str(open)?; -+ Display::fmt(&self.stream, f)?; -+ if self.delimiter == Delimiter::Brace && !self.stream.inner.is_empty() { -+ f.write_str(" ")?; -+ } -+ f.write_str(close)?; - - Ok(()) - } - } - --impl fmt::Debug for Group { -+impl Debug for Group { - fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { - let mut debug = fmt.debug_struct("Group"); - debug.field("delimiter", &self.delimiter); - debug.field("stream", &self.stream); -- #[cfg(procmacro2_semver_exempt)] -- debug.field("span", &self.span); -+ debug_span_field_if_nontrivial(&mut debug, self.span); - debug.finish() - } - } - - #[derive(Clone)] --pub struct Ident { -+pub(crate) struct Ident { - sym: String, - span: Span, - raw: bool, -@@ -549,16 +650,14 @@ impl Ident { - } - } - --#[inline] --fn is_ident_start(c: char) -> bool { -+pub(crate) fn is_ident_start(c: char) -> bool { - ('a' <= c && c <= 'z') - || ('A' <= c && c <= 'Z') - || c == '_' - || (c > '\x7f' && UnicodeXID::is_xid_start(c)) - } - --#[inline] --fn is_ident_continue(c: char) -> bool { -+pub(crate) fn is_ident_continue(c: char) -> bool { - ('a' <= c && c <= 'z') - || ('A' <= c && c <= 'Z') - || c == '_' -@@ -615,18 +714,18 @@ where - } - } - --impl fmt::Display for Ident { -+impl Display for Ident { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - if self.raw { -- "r#".fmt(f)?; -+ f.write_str("r#")?; - } -- self.sym.fmt(f) -+ Display::fmt(&self.sym, f) - } - } - --impl fmt::Debug for Ident { -+impl Debug for Ident { - // Ident(proc_macro), Ident(r#union) -- #[cfg(not(procmacro2_semver_exempt))] -+ #[cfg(not(span_locations))] - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - let mut debug = f.debug_tuple("Ident"); - debug.field(&format_args!("{}", self)); -@@ -637,17 +736,17 @@ impl fmt::Debug for Ident { - // sym: proc_macro, - // span: bytes(128..138) - // } -- #[cfg(procmacro2_semver_exempt)] -+ #[cfg(span_locations)] - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - let mut debug = f.debug_struct("Ident"); - debug.field("sym", &format_args!("{}", self)); -- debug.field("span", &self.span); -+ debug_span_field_if_nontrivial(&mut debug, self.span); - debug.finish() - } - } - - #[derive(Clone)] --pub struct Literal { -+pub(crate) struct Literal { - text: String, - span: Span, - } -@@ -669,7 +768,7 @@ macro_rules! unsuffixed_numbers { - } - - impl Literal { -- fn _new(text: String) -> Literal { -+ pub(crate) fn _new(text: String) -> Literal { - Literal { - text, - span: Span::call_site(), -@@ -711,7 +810,7 @@ impl Literal { - - pub fn f32_unsuffixed(f: f32) -> Literal { - let mut s = f.to_string(); -- if !s.contains(".") { -+ if !s.contains('.') { - s.push_str(".0"); - } - Literal::_new(s) -@@ -719,7 +818,7 @@ impl Literal { - - pub fn f64_unsuffixed(f: f64) -> Literal { - let mut s = f.to_string(); -- if !s.contains(".") { -+ if !s.contains('.') { - s.push_str(".0"); - } - Literal::_new(s) -@@ -730,10 +829,10 @@ impl Literal { - text.push('"'); - for c in t.chars() { - if c == '\'' { -- // escape_default turns this into "\'" which is unnecessary. -+ // escape_debug turns this into "\'" which is unnecessary. - text.push(c); - } else { -- text.extend(c.escape_default()); -+ text.extend(c.escape_debug()); - } - } - text.push('"'); -@@ -744,10 +843,10 @@ impl Literal { - let mut text = String::new(); - text.push('\''); - if t == '"' { -- // escape_default turns this into '\"' which is unnecessary. -+ // escape_debug turns this into '\"' which is unnecessary. - text.push(t); - } else { -- text.extend(t.escape_default()); -+ text.extend(t.escape_debug()); - } - text.push('\''); - Literal::_new(text) -@@ -756,6 +855,7 @@ impl Literal { - pub fn byte_string(bytes: &[u8]) -> Literal { - let mut escaped = "b\"".to_string(); - for b in bytes { -+ #[allow(clippy::match_overlapping_arm)] - match *b { - b'\0' => escaped.push_str(r"\0"), - b'\t' => escaped.push_str(r"\t"), -@@ -784,651 +884,17 @@ impl Literal { - } - } - --impl fmt::Display for Literal { -+impl Display for Literal { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.text.fmt(f) -+ Display::fmt(&self.text, f) - } - } - --impl fmt::Debug for Literal { -+impl Debug for Literal { - fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { - let mut debug = fmt.debug_struct("Literal"); - debug.field("lit", &format_args!("{}", self.text)); -- #[cfg(procmacro2_semver_exempt)] -- debug.field("span", &self.span); -+ debug_span_field_if_nontrivial(&mut debug, self.span); - debug.finish() - } - } -- --fn token_stream(mut input: Cursor) -> PResult<TokenStream> { -- let mut trees = Vec::new(); -- loop { -- let input_no_ws = skip_whitespace(input); -- if input_no_ws.rest.len() == 0 { -- break; -- } -- if let Ok((a, tokens)) = doc_comment(input_no_ws) { -- input = a; -- trees.extend(tokens); -- continue; -- } -- -- let (a, tt) = match token_tree(input_no_ws) { -- Ok(p) => p, -- Err(_) => break, -- }; -- trees.push(tt); -- input = a; -- } -- Ok((input, TokenStream { inner: trees })) --} -- --#[cfg(not(span_locations))] --fn spanned<'a, T>( -- input: Cursor<'a>, -- f: fn(Cursor<'a>) -> PResult<'a, T>, --) -> PResult<'a, (T, crate::Span)> { -- let (a, b) = f(skip_whitespace(input))?; -- Ok((a, ((b, crate::Span::_new_stable(Span::call_site()))))) --} -- --#[cfg(span_locations)] --fn spanned<'a, T>( -- input: Cursor<'a>, -- f: fn(Cursor<'a>) -> PResult<'a, T>, --) -> PResult<'a, (T, crate::Span)> { -- let input = skip_whitespace(input); -- let lo = input.off; -- let (a, b) = f(input)?; -- let hi = a.off; -- let span = crate::Span::_new_stable(Span { lo, hi }); -- Ok((a, (b, span))) --} -- --fn token_tree(input: Cursor) -> PResult<TokenTree> { -- let (rest, (mut tt, span)) = spanned(input, token_kind)?; -- tt.set_span(span); -- Ok((rest, tt)) --} -- --named!(token_kind -> TokenTree, alt!( -- map!(group, |g| TokenTree::Group(crate::Group::_new_stable(g))) -- | -- map!(literal, |l| TokenTree::Literal(crate::Literal::_new_stable(l))) // must be before symbol -- | -- map!(op, TokenTree::Punct) -- | -- symbol_leading_ws --)); -- --named!(group -> Group, alt!( -- delimited!( -- punct!("("), -- token_stream, -- punct!(")") -- ) => { |ts| Group::new(Delimiter::Parenthesis, ts) } -- | -- delimited!( -- punct!("["), -- token_stream, -- punct!("]") -- ) => { |ts| Group::new(Delimiter::Bracket, ts) } -- | -- delimited!( -- punct!("{"), -- token_stream, -- punct!("}") -- ) => { |ts| Group::new(Delimiter::Brace, ts) } --)); -- --fn symbol_leading_ws(input: Cursor) -> PResult<TokenTree> { -- symbol(skip_whitespace(input)) --} -- --fn symbol(input: Cursor) -> PResult<TokenTree> { -- let raw = input.starts_with("r#"); -- let rest = input.advance((raw as usize) << 1); -- -- let (rest, sym) = symbol_not_raw(rest)?; -- -- if !raw { -- let ident = crate::Ident::new(sym, crate::Span::call_site()); -- return Ok((rest, ident.into())); -- } -- -- if sym == "_" { -- return Err(LexError); -- } -- -- let ident = crate::Ident::_new_raw(sym, crate::Span::call_site()); -- Ok((rest, ident.into())) --} -- --fn symbol_not_raw(input: Cursor) -> PResult<&str> { -- let mut chars = input.char_indices(); -- -- match chars.next() { -- Some((_, ch)) if is_ident_start(ch) => {} -- _ => return Err(LexError), -- } -- -- let mut end = input.len(); -- for (i, ch) in chars { -- if !is_ident_continue(ch) { -- end = i; -- break; -- } -- } -- -- Ok((input.advance(end), &input.rest[..end])) --} -- --fn literal(input: Cursor) -> PResult<Literal> { -- let input_no_ws = skip_whitespace(input); -- -- match literal_nocapture(input_no_ws) { -- Ok((a, ())) => { -- let start = input.len() - input_no_ws.len(); -- let len = input_no_ws.len() - a.len(); -- let end = start + len; -- Ok((a, Literal::_new(input.rest[start..end].to_string()))) -- } -- Err(LexError) => Err(LexError), -- } --} -- --named!(literal_nocapture -> (), alt!( -- string -- | -- byte_string -- | -- byte -- | -- character -- | -- float -- | -- int --)); -- --named!(string -> (), alt!( -- quoted_string -- | -- preceded!( -- punct!("r"), -- raw_string -- ) => { |_| () } --)); -- --named!(quoted_string -> (), do_parse!( -- punct!("\"") >> -- cooked_string >> -- tag!("\"") >> -- option!(symbol_not_raw) >> -- (()) --)); -- --fn cooked_string(input: Cursor) -> PResult<()> { -- let mut chars = input.char_indices().peekable(); -- while let Some((byte_offset, ch)) = chars.next() { -- match ch { -- '"' => { -- return Ok((input.advance(byte_offset), ())); -- } -- '\r' => { -- if let Some((_, '\n')) = chars.next() { -- // ... -- } else { -- break; -- } -- } -- '\\' => match chars.next() { -- Some((_, 'x')) => { -- if !backslash_x_char(&mut chars) { -- break; -- } -- } -- Some((_, 'n')) | Some((_, 'r')) | Some((_, 't')) | Some((_, '\\')) -- | Some((_, '\'')) | Some((_, '"')) | Some((_, '0')) => {} -- Some((_, 'u')) => { -- if !backslash_u(&mut chars) { -- break; -- } -- } -- Some((_, '\n')) | Some((_, '\r')) => { -- while let Some(&(_, ch)) = chars.peek() { -- if ch.is_whitespace() { -- chars.next(); -- } else { -- break; -- } -- } -- } -- _ => break, -- }, -- _ch => {} -- } -- } -- Err(LexError) --} -- --named!(byte_string -> (), alt!( -- delimited!( -- punct!("b\""), -- cooked_byte_string, -- tag!("\"") -- ) => { |_| () } -- | -- preceded!( -- punct!("br"), -- raw_string -- ) => { |_| () } --)); -- --fn cooked_byte_string(mut input: Cursor) -> PResult<()> { -- let mut bytes = input.bytes().enumerate(); -- 'outer: while let Some((offset, b)) = bytes.next() { -- match b { -- b'"' => { -- return Ok((input.advance(offset), ())); -- } -- b'\r' => { -- if let Some((_, b'\n')) = bytes.next() { -- // ... -- } else { -- break; -- } -- } -- b'\\' => match bytes.next() { -- Some((_, b'x')) => { -- if !backslash_x_byte(&mut bytes) { -- break; -- } -- } -- Some((_, b'n')) | Some((_, b'r')) | Some((_, b't')) | Some((_, b'\\')) -- | Some((_, b'0')) | Some((_, b'\'')) | Some((_, b'"')) => {} -- Some((newline, b'\n')) | Some((newline, b'\r')) => { -- let rest = input.advance(newline + 1); -- for (offset, ch) in rest.char_indices() { -- if !ch.is_whitespace() { -- input = rest.advance(offset); -- bytes = input.bytes().enumerate(); -- continue 'outer; -- } -- } -- break; -- } -- _ => break, -- }, -- b if b < 0x80 => {} -- _ => break, -- } -- } -- Err(LexError) --} -- --fn raw_string(input: Cursor) -> PResult<()> { -- let mut chars = input.char_indices(); -- let mut n = 0; -- while let Some((byte_offset, ch)) = chars.next() { -- match ch { -- '"' => { -- n = byte_offset; -- break; -- } -- '#' => {} -- _ => return Err(LexError), -- } -- } -- for (byte_offset, ch) in chars { -- match ch { -- '"' if input.advance(byte_offset + 1).starts_with(&input.rest[..n]) => { -- let rest = input.advance(byte_offset + 1 + n); -- return Ok((rest, ())); -- } -- '\r' => {} -- _ => {} -- } -- } -- Err(LexError) --} -- --named!(byte -> (), do_parse!( -- punct!("b") >> -- tag!("'") >> -- cooked_byte >> -- tag!("'") >> -- (()) --)); -- --fn cooked_byte(input: Cursor) -> PResult<()> { -- let mut bytes = input.bytes().enumerate(); -- let ok = match bytes.next().map(|(_, b)| b) { -- Some(b'\\') => match bytes.next().map(|(_, b)| b) { -- Some(b'x') => backslash_x_byte(&mut bytes), -- Some(b'n') | Some(b'r') | Some(b't') | Some(b'\\') | Some(b'0') | Some(b'\'') -- | Some(b'"') => true, -- _ => false, -- }, -- b => b.is_some(), -- }; -- if ok { -- match bytes.next() { -- Some((offset, _)) => { -- if input.chars().as_str().is_char_boundary(offset) { -- Ok((input.advance(offset), ())) -- } else { -- Err(LexError) -- } -- } -- None => Ok((input.advance(input.len()), ())), -- } -- } else { -- Err(LexError) -- } --} -- --named!(character -> (), do_parse!( -- punct!("'") >> -- cooked_char >> -- tag!("'") >> -- (()) --)); -- --fn cooked_char(input: Cursor) -> PResult<()> { -- let mut chars = input.char_indices(); -- let ok = match chars.next().map(|(_, ch)| ch) { -- Some('\\') => match chars.next().map(|(_, ch)| ch) { -- Some('x') => backslash_x_char(&mut chars), -- Some('u') => backslash_u(&mut chars), -- Some('n') | Some('r') | Some('t') | Some('\\') | Some('0') | Some('\'') | Some('"') => { -- true -- } -- _ => false, -- }, -- ch => ch.is_some(), -- }; -- if ok { -- match chars.next() { -- Some((idx, _)) => Ok((input.advance(idx), ())), -- None => Ok((input.advance(input.len()), ())), -- } -- } else { -- Err(LexError) -- } --} -- --macro_rules! next_ch { -- ($chars:ident @ $pat:pat $(| $rest:pat)*) => { -- match $chars.next() { -- Some((_, ch)) => match ch { -- $pat $(| $rest)* => ch, -- _ => return false, -- }, -- None => return false -- } -- }; --} -- --fn backslash_x_char<I>(chars: &mut I) -> bool --where -- I: Iterator<Item = (usize, char)>, --{ -- next_ch!(chars @ '0'..='7'); -- next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F'); -- true --} -- --fn backslash_x_byte<I>(chars: &mut I) -> bool --where -- I: Iterator<Item = (usize, u8)>, --{ -- next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F'); -- next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F'); -- true --} -- --fn backslash_u<I>(chars: &mut I) -> bool --where -- I: Iterator<Item = (usize, char)>, --{ -- next_ch!(chars @ '{'); -- next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F'); -- loop { -- let c = next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F' | '_' | '}'); -- if c == '}' { -- return true; -- } -- } --} -- --fn float(input: Cursor) -> PResult<()> { -- let (mut rest, ()) = float_digits(input)?; -- if let Some(ch) = rest.chars().next() { -- if is_ident_start(ch) { -- rest = symbol_not_raw(rest)?.0; -- } -- } -- word_break(rest) --} -- --fn float_digits(input: Cursor) -> PResult<()> { -- let mut chars = input.chars().peekable(); -- match chars.next() { -- Some(ch) if ch >= '0' && ch <= '9' => {} -- _ => return Err(LexError), -- } -- -- let mut len = 1; -- let mut has_dot = false; -- let mut has_exp = false; -- while let Some(&ch) = chars.peek() { -- match ch { -- '0'..='9' | '_' => { -- chars.next(); -- len += 1; -- } -- '.' => { -- if has_dot { -- break; -- } -- chars.next(); -- if chars -- .peek() -- .map(|&ch| ch == '.' || is_ident_start(ch)) -- .unwrap_or(false) -- { -- return Err(LexError); -- } -- len += 1; -- has_dot = true; -- } -- 'e' | 'E' => { -- chars.next(); -- len += 1; -- has_exp = true; -- break; -- } -- _ => break, -- } -- } -- -- let rest = input.advance(len); -- if !(has_dot || has_exp || rest.starts_with("f32") || rest.starts_with("f64")) { -- return Err(LexError); -- } -- -- if has_exp { -- let mut has_exp_value = false; -- while let Some(&ch) = chars.peek() { -- match ch { -- '+' | '-' => { -- if has_exp_value { -- break; -- } -- chars.next(); -- len += 1; -- } -- '0'..='9' => { -- chars.next(); -- len += 1; -- has_exp_value = true; -- } -- '_' => { -- chars.next(); -- len += 1; -- } -- _ => break, -- } -- } -- if !has_exp_value { -- return Err(LexError); -- } -- } -- -- Ok((input.advance(len), ())) --} -- --fn int(input: Cursor) -> PResult<()> { -- let (mut rest, ()) = digits(input)?; -- if let Some(ch) = rest.chars().next() { -- if is_ident_start(ch) { -- rest = symbol_not_raw(rest)?.0; -- } -- } -- word_break(rest) --} -- --fn digits(mut input: Cursor) -> PResult<()> { -- let base = if input.starts_with("0x") { -- input = input.advance(2); -- 16 -- } else if input.starts_with("0o") { -- input = input.advance(2); -- 8 -- } else if input.starts_with("0b") { -- input = input.advance(2); -- 2 -- } else { -- 10 -- }; -- -- let mut len = 0; -- let mut empty = true; -- for b in input.bytes() { -- let digit = match b { -- b'0'..=b'9' => (b - b'0') as u64, -- b'a'..=b'f' => 10 + (b - b'a') as u64, -- b'A'..=b'F' => 10 + (b - b'A') as u64, -- b'_' => { -- if empty && base == 10 { -- return Err(LexError); -- } -- len += 1; -- continue; -- } -- _ => break, -- }; -- if digit >= base { -- return Err(LexError); -- } -- len += 1; -- empty = false; -- } -- if empty { -- Err(LexError) -- } else { -- Ok((input.advance(len), ())) -- } --} -- --fn op(input: Cursor) -> PResult<Punct> { -- let input = skip_whitespace(input); -- match op_char(input) { -- Ok((rest, '\'')) => { -- symbol(rest)?; -- Ok((rest, Punct::new('\'', Spacing::Joint))) -- } -- Ok((rest, ch)) => { -- let kind = match op_char(rest) { -- Ok(_) => Spacing::Joint, -- Err(LexError) => Spacing::Alone, -- }; -- Ok((rest, Punct::new(ch, kind))) -- } -- Err(LexError) => Err(LexError), -- } --} -- --fn op_char(input: Cursor) -> PResult<char> { -- if input.starts_with("//") || input.starts_with("/*") { -- // Do not accept `/` of a comment as an op. -- return Err(LexError); -- } -- -- let mut chars = input.chars(); -- let first = match chars.next() { -- Some(ch) => ch, -- None => { -- return Err(LexError); -- } -- }; -- let recognized = "~!@#$%^&*-=+|;:,<.>/?'"; -- if recognized.contains(first) { -- Ok((input.advance(first.len_utf8()), first)) -- } else { -- Err(LexError) -- } --} -- --fn doc_comment(input: Cursor) -> PResult<Vec<TokenTree>> { -- let mut trees = Vec::new(); -- let (rest, ((comment, inner), span)) = spanned(input, doc_comment_contents)?; -- trees.push(TokenTree::Punct(Punct::new('#', Spacing::Alone))); -- if inner { -- trees.push(Punct::new('!', Spacing::Alone).into()); -- } -- let mut stream = vec![ -- TokenTree::Ident(crate::Ident::new("doc", span)), -- TokenTree::Punct(Punct::new('=', Spacing::Alone)), -- TokenTree::Literal(crate::Literal::string(comment)), -- ]; -- for tt in stream.iter_mut() { -- tt.set_span(span); -- } -- let group = Group::new(Delimiter::Bracket, stream.into_iter().collect()); -- trees.push(crate::Group::_new_stable(group).into()); -- for tt in trees.iter_mut() { -- tt.set_span(span); -- } -- Ok((rest, trees)) --} -- --named!(doc_comment_contents -> (&str, bool), alt!( -- do_parse!( -- punct!("//!") >> -- s: take_until_newline_or_eof!() >> -- ((s, true)) -- ) -- | -- do_parse!( -- option!(whitespace) >> -- peek!(tag!("/*!")) >> -- s: block_comment >> -- ((s, true)) -- ) -- | -- do_parse!( -- punct!("///") >> -- not!(tag!("/")) >> -- s: take_until_newline_or_eof!() >> -- ((s, false)) -- ) -- | -- do_parse!( -- option!(whitespace) >> -- peek!(tuple!(tag!("/**"), not!(tag!("*")))) >> -- s: block_comment >> -- ((s, false)) -- ) --)); -diff --git a/third_party/rust/proc-macro2/src/lib.rs b/third_party/rust/proc-macro2/src/lib.rs -index a08be3e815..c20fb50d4a 100644 ---- a/third_party/rust/proc-macro2/src/lib.rs -+++ b/third_party/rust/proc-macro2/src/lib.rs -@@ -78,27 +78,24 @@ - //! a different thread. - - // Proc-macro2 types in rustdoc of other crates get linked to here. --#![doc(html_root_url = "https://docs.rs/proc-macro2/1.0.5")] -+#![doc(html_root_url = "https://docs.rs/proc-macro2/1.0.24")] - #![cfg_attr(any(proc_macro_span, super_unstable), feature(proc_macro_span))] - #![cfg_attr(super_unstable, feature(proc_macro_raw_ident, proc_macro_def_site))] -+#![allow(clippy::needless_doctest_main)] - - #[cfg(use_proc_macro)] - extern crate proc_macro; - --use std::cmp::Ordering; --use std::fmt; --use std::hash::{Hash, Hasher}; --use std::iter::FromIterator; --use std::marker; --use std::ops::RangeBounds; --#[cfg(procmacro2_semver_exempt)] --use std::path::PathBuf; --use std::rc::Rc; --use std::str::FromStr; -+mod marker; -+mod parse; -+ -+#[cfg(wrap_proc_macro)] -+mod detection; - --#[macro_use] --mod strnom; --mod fallback; -+// Public for proc_macro2::fallback::force() and unforce(), but those are quite -+// a niche use case so we omit it from rustdoc. -+#[doc(hidden)] -+pub mod fallback; - - #[cfg(not(wrap_proc_macro))] - use crate::fallback as imp; -@@ -106,6 +103,17 @@ use crate::fallback as imp; - #[cfg(wrap_proc_macro)] - mod imp; - -+use crate::marker::Marker; -+use std::cmp::Ordering; -+use std::error::Error; -+use std::fmt::{self, Debug, Display}; -+use std::hash::{Hash, Hasher}; -+use std::iter::FromIterator; -+use std::ops::RangeBounds; -+#[cfg(procmacro2_semver_exempt)] -+use std::path::PathBuf; -+use std::str::FromStr; -+ - /// An abstract stream of tokens, or more concretely a sequence of token trees. - /// - /// This type provides interfaces for iterating over token trees and for -@@ -116,27 +124,27 @@ mod imp; - #[derive(Clone)] - pub struct TokenStream { - inner: imp::TokenStream, -- _marker: marker::PhantomData<Rc<()>>, -+ _marker: Marker, - } - - /// Error returned from `TokenStream::from_str`. - pub struct LexError { - inner: imp::LexError, -- _marker: marker::PhantomData<Rc<()>>, -+ _marker: Marker, - } - - impl TokenStream { - fn _new(inner: imp::TokenStream) -> TokenStream { - TokenStream { - inner, -- _marker: marker::PhantomData, -+ _marker: Marker, - } - } - - fn _new_stable(inner: fallback::TokenStream) -> TokenStream { - TokenStream { - inner: inner.into(), -- _marker: marker::PhantomData, -+ _marker: Marker, - } - } - -@@ -173,7 +181,7 @@ impl FromStr for TokenStream { - fn from_str(src: &str) -> Result<TokenStream, LexError> { - let e = src.parse().map_err(|e| LexError { - inner: e, -- _marker: marker::PhantomData, -+ _marker: Marker, - })?; - Ok(TokenStream::_new(e)) - } -@@ -228,25 +236,33 @@ impl FromIterator<TokenStream> for TokenStream { - /// convertible back into the same token stream (modulo spans), except for - /// possibly `TokenTree::Group`s with `Delimiter::None` delimiters and negative - /// numeric literals. --impl fmt::Display for TokenStream { -+impl Display for TokenStream { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Display::fmt(&self.inner, f) - } - } - - /// Prints token in a form convenient for debugging. --impl fmt::Debug for TokenStream { -+impl Debug for TokenStream { -+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -+ Debug::fmt(&self.inner, f) -+ } -+} -+ -+impl Debug for LexError { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Debug::fmt(&self.inner, f) - } - } - --impl fmt::Debug for LexError { -+impl Display for LexError { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Display::fmt(&self.inner, f) - } - } - -+impl Error for LexError {} -+ - /// The source file of a given `Span`. - /// - /// This type is semver exempt and not exposed by default. -@@ -254,7 +270,7 @@ impl fmt::Debug for LexError { - #[derive(Clone, PartialEq, Eq)] - pub struct SourceFile { - inner: imp::SourceFile, -- _marker: marker::PhantomData<Rc<()>>, -+ _marker: Marker, - } - - #[cfg(procmacro2_semver_exempt)] -@@ -262,7 +278,7 @@ impl SourceFile { - fn _new(inner: imp::SourceFile) -> Self { - SourceFile { - inner, -- _marker: marker::PhantomData, -+ _marker: Marker, - } - } - -@@ -291,9 +307,9 @@ impl SourceFile { - } - - #[cfg(procmacro2_semver_exempt)] --impl fmt::Debug for SourceFile { -+impl Debug for SourceFile { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Debug::fmt(&self.inner, f) - } - } - -@@ -311,25 +327,41 @@ pub struct LineColumn { - pub column: usize, - } - -+#[cfg(span_locations)] -+impl Ord for LineColumn { -+ fn cmp(&self, other: &Self) -> Ordering { -+ self.line -+ .cmp(&other.line) -+ .then(self.column.cmp(&other.column)) -+ } -+} -+ -+#[cfg(span_locations)] -+impl PartialOrd for LineColumn { -+ fn partial_cmp(&self, other: &Self) -> Option<Ordering> { -+ Some(self.cmp(other)) -+ } -+} -+ - /// A region of source code, along with macro expansion information. - #[derive(Copy, Clone)] - pub struct Span { - inner: imp::Span, -- _marker: marker::PhantomData<Rc<()>>, -+ _marker: Marker, - } - - impl Span { - fn _new(inner: imp::Span) -> Span { - Span { - inner, -- _marker: marker::PhantomData, -+ _marker: Marker, - } - } - - fn _new_stable(inner: fallback::Span) -> Span { - Span { - inner: inner.into(), -- _marker: marker::PhantomData, -+ _marker: Marker, - } - } - -@@ -342,6 +374,16 @@ impl Span { - Span::_new(imp::Span::call_site()) - } - -+ /// The span located at the invocation of the procedural macro, but with -+ /// local variables, labels, and `$crate` resolved at the definition site -+ /// of the macro. This is the same hygiene behavior as `macro_rules`. -+ /// -+ /// This function requires Rust 1.45 or later. -+ #[cfg(hygiene)] -+ pub fn mixed_site() -> Span { -+ Span::_new(imp::Span::mixed_site()) -+ } -+ - /// A span that resolves at the macro definition site. - /// - /// This method is semver exempt and not exposed by default. -@@ -352,18 +394,12 @@ impl Span { - - /// Creates a new span with the same line/column information as `self` but - /// that resolves symbols as though it were at `other`. -- /// -- /// This method is semver exempt and not exposed by default. -- #[cfg(procmacro2_semver_exempt)] - pub fn resolved_at(&self, other: Span) -> Span { - Span::_new(self.inner.resolved_at(other.inner)) - } - - /// Creates a new span with the same name resolution behavior as `self` but - /// with the line/column information of `other`. -- /// -- /// This method is semver exempt and not exposed by default. -- #[cfg(procmacro2_semver_exempt)] - pub fn located_at(&self, other: Span) -> Span { - Span::_new(self.inner.located_at(other.inner)) - } -@@ -439,9 +475,9 @@ impl Span { - } - - /// Prints a span in a form convenient for debugging. --impl fmt::Debug for Span { -+impl Debug for Span { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Debug::fmt(&self.inner, f) - } - } - -@@ -462,11 +498,11 @@ impl TokenTree { - /// Returns the span of this tree, delegating to the `span` method of - /// the contained token or a delimited stream. - pub fn span(&self) -> Span { -- match *self { -- TokenTree::Group(ref t) => t.span(), -- TokenTree::Ident(ref t) => t.span(), -- TokenTree::Punct(ref t) => t.span(), -- TokenTree::Literal(ref t) => t.span(), -+ match self { -+ TokenTree::Group(t) => t.span(), -+ TokenTree::Ident(t) => t.span(), -+ TokenTree::Punct(t) => t.span(), -+ TokenTree::Literal(t) => t.span(), - } - } - -@@ -476,11 +512,11 @@ impl TokenTree { - /// the span of each of the internal tokens, this will simply delegate to - /// the `set_span` method of each variant. - pub fn set_span(&mut self, span: Span) { -- match *self { -- TokenTree::Group(ref mut t) => t.set_span(span), -- TokenTree::Ident(ref mut t) => t.set_span(span), -- TokenTree::Punct(ref mut t) => t.set_span(span), -- TokenTree::Literal(ref mut t) => t.set_span(span), -+ match self { -+ TokenTree::Group(t) => t.set_span(span), -+ TokenTree::Ident(t) => t.set_span(span), -+ TokenTree::Punct(t) => t.set_span(span), -+ TokenTree::Literal(t) => t.set_span(span), - } - } - } -@@ -513,32 +549,32 @@ impl From<Literal> for TokenTree { - /// convertible back into the same token tree (modulo spans), except for - /// possibly `TokenTree::Group`s with `Delimiter::None` delimiters and negative - /// numeric literals. --impl fmt::Display for TokenTree { -+impl Display for TokenTree { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- match *self { -- TokenTree::Group(ref t) => t.fmt(f), -- TokenTree::Ident(ref t) => t.fmt(f), -- TokenTree::Punct(ref t) => t.fmt(f), -- TokenTree::Literal(ref t) => t.fmt(f), -+ match self { -+ TokenTree::Group(t) => Display::fmt(t, f), -+ TokenTree::Ident(t) => Display::fmt(t, f), -+ TokenTree::Punct(t) => Display::fmt(t, f), -+ TokenTree::Literal(t) => Display::fmt(t, f), - } - } - } - - /// Prints token tree in a form convenient for debugging. --impl fmt::Debug for TokenTree { -+impl Debug for TokenTree { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - // Each of these has the name in the struct type in the derived debug, - // so don't bother with an extra layer of indirection -- match *self { -- TokenTree::Group(ref t) => t.fmt(f), -- TokenTree::Ident(ref t) => { -+ match self { -+ TokenTree::Group(t) => Debug::fmt(t, f), -+ TokenTree::Ident(t) => { - let mut debug = f.debug_struct("Ident"); - debug.field("sym", &format_args!("{}", t)); - imp::debug_span_field_if_nontrivial(&mut debug, t.span().inner); - debug.finish() - } -- TokenTree::Punct(ref t) => t.fmt(f), -- TokenTree::Literal(ref t) => t.fmt(f), -+ TokenTree::Punct(t) => Debug::fmt(t, f), -+ TokenTree::Literal(t) => Debug::fmt(t, f), - } - } - } -@@ -651,15 +687,15 @@ impl Group { - /// Prints the group as a string that should be losslessly convertible back - /// into the same group (modulo spans), except for possibly `TokenTree::Group`s - /// with `Delimiter::None` delimiters. --impl fmt::Display for Group { -+impl Display for Group { - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -- fmt::Display::fmt(&self.inner, formatter) -+ Display::fmt(&self.inner, formatter) - } - } - --impl fmt::Debug for Group { -+impl Debug for Group { - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -- fmt::Debug::fmt(&self.inner, formatter) -+ Debug::fmt(&self.inner, formatter) - } - } - -@@ -669,7 +705,7 @@ impl fmt::Debug for Group { - /// `Punct` with different forms of `Spacing` returned. - #[derive(Clone)] - pub struct Punct { -- op: char, -+ ch: char, - spacing: Spacing, - span: Span, - } -@@ -695,9 +731,9 @@ impl Punct { - /// - /// The returned `Punct` will have the default span of `Span::call_site()` - /// which can be further configured with the `set_span` method below. -- pub fn new(op: char, spacing: Spacing) -> Punct { -+ pub fn new(ch: char, spacing: Spacing) -> Punct { - Punct { -- op, -+ ch, - spacing, - span: Span::call_site(), - } -@@ -705,7 +741,7 @@ impl Punct { - - /// Returns the value of this punctuation character as `char`. - pub fn as_char(&self) -> char { -- self.op -+ self.ch - } - - /// Returns the spacing of this punctuation character, indicating whether -@@ -730,16 +766,16 @@ impl Punct { - - /// Prints the punctuation character as a string that should be losslessly - /// convertible back into the same character. --impl fmt::Display for Punct { -+impl Display for Punct { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.op.fmt(f) -+ Display::fmt(&self.ch, f) - } - } - --impl fmt::Debug for Punct { -+impl Debug for Punct { - fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { - let mut debug = fmt.debug_struct("Punct"); -- debug.field("op", &self.op); -+ debug.field("char", &self.ch); - debug.field("spacing", &self.spacing); - imp::debug_span_field_if_nontrivial(&mut debug, self.span.inner); - debug.finish() -@@ -813,14 +849,14 @@ impl fmt::Debug for Punct { - #[derive(Clone)] - pub struct Ident { - inner: imp::Ident, -- _marker: marker::PhantomData<Rc<()>>, -+ _marker: Marker, - } - - impl Ident { - fn _new(inner: imp::Ident) -> Ident { - Ident { - inner, -- _marker: marker::PhantomData, -+ _marker: Marker, - } - } - -@@ -920,15 +956,15 @@ impl Hash for Ident { - - /// Prints the identifier as a string that should be losslessly convertible back - /// into the same identifier. --impl fmt::Display for Ident { -+impl Display for Ident { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Display::fmt(&self.inner, f) - } - } - --impl fmt::Debug for Ident { -+impl Debug for Ident { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Debug::fmt(&self.inner, f) - } - } - -@@ -941,7 +977,7 @@ impl fmt::Debug for Ident { - #[derive(Clone)] - pub struct Literal { - inner: imp::Literal, -- _marker: marker::PhantomData<Rc<()>>, -+ _marker: Marker, - } - - macro_rules! suffixed_int_literals { -@@ -988,14 +1024,14 @@ impl Literal { - fn _new(inner: imp::Literal) -> Literal { - Literal { - inner, -- _marker: marker::PhantomData, -+ _marker: Marker, - } - } - - fn _new_stable(inner: fallback::Literal) -> Literal { - Literal { - inner: inner.into(), -- _marker: marker::PhantomData, -+ _marker: Marker, - } - } - -@@ -1140,26 +1176,25 @@ impl Literal { - } - } - --impl fmt::Debug for Literal { -+impl Debug for Literal { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Debug::fmt(&self.inner, f) - } - } - --impl fmt::Display for Literal { -+impl Display for Literal { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Display::fmt(&self.inner, f) - } - } - - /// Public implementation details for the `TokenStream` type, such as iterators. - pub mod token_stream { -- use std::fmt; -- use std::marker; -- use std::rc::Rc; -+ use crate::marker::Marker; -+ use crate::{imp, TokenTree}; -+ use std::fmt::{self, Debug}; - - pub use crate::TokenStream; -- use crate::{imp, TokenTree}; - - /// An iterator over `TokenStream`'s `TokenTree`s. - /// -@@ -1168,7 +1203,7 @@ pub mod token_stream { - #[derive(Clone)] - pub struct IntoIter { - inner: imp::TokenTreeIter, -- _marker: marker::PhantomData<Rc<()>>, -+ _marker: Marker, - } - - impl Iterator for IntoIter { -@@ -1179,9 +1214,9 @@ pub mod token_stream { - } - } - -- impl fmt::Debug for IntoIter { -+ impl Debug for IntoIter { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -- self.inner.fmt(f) -+ Debug::fmt(&self.inner, f) - } - } - -@@ -1192,7 +1227,7 @@ pub mod token_stream { - fn into_iter(self) -> IntoIter { - IntoIter { - inner: self.inner.into_iter(), -- _marker: marker::PhantomData, -+ _marker: Marker, - } - } - } -diff --git a/third_party/rust/proc-macro2/src/marker.rs b/third_party/rust/proc-macro2/src/marker.rs -new file mode 100644 -index 0000000000..58729baf4a ---- /dev/null -+++ b/third_party/rust/proc-macro2/src/marker.rs -@@ -0,0 +1,18 @@ -+use std::marker::PhantomData; -+use std::panic::{RefUnwindSafe, UnwindSafe}; -+use std::rc::Rc; -+ -+// Zero sized marker with the correct set of autotrait impls we want all proc -+// macro types to have. -+pub(crate) type Marker = PhantomData<ProcMacroAutoTraits>; -+ -+pub(crate) use self::value::*; -+ -+mod value { -+ pub(crate) use std::marker::PhantomData as Marker; -+} -+ -+pub(crate) struct ProcMacroAutoTraits(Rc<()>); -+ -+impl UnwindSafe for ProcMacroAutoTraits {} -+impl RefUnwindSafe for ProcMacroAutoTraits {} -diff --git a/third_party/rust/proc-macro2/src/parse.rs b/third_party/rust/proc-macro2/src/parse.rs -new file mode 100644 -index 0000000000..365fe0484d ---- /dev/null -+++ b/third_party/rust/proc-macro2/src/parse.rs -@@ -0,0 +1,849 @@ -+use crate::fallback::{ -+ is_ident_continue, is_ident_start, Group, LexError, Literal, Span, TokenStream, -+}; -+use crate::{Delimiter, Punct, Spacing, TokenTree}; -+use std::char; -+use std::str::{Bytes, CharIndices, Chars}; -+ -+#[derive(Copy, Clone, Eq, PartialEq)] -+pub(crate) struct Cursor<'a> { -+ pub rest: &'a str, -+ #[cfg(span_locations)] -+ pub off: u32, -+} -+ -+impl<'a> Cursor<'a> { -+ fn advance(&self, bytes: usize) -> Cursor<'a> { -+ let (_front, rest) = self.rest.split_at(bytes); -+ Cursor { -+ rest, -+ #[cfg(span_locations)] -+ off: self.off + _front.chars().count() as u32, -+ } -+ } -+ -+ fn starts_with(&self, s: &str) -> bool { -+ self.rest.starts_with(s) -+ } -+ -+ pub(crate) fn is_empty(&self) -> bool { -+ self.rest.is_empty() -+ } -+ -+ fn len(&self) -> usize { -+ self.rest.len() -+ } -+ -+ fn as_bytes(&self) -> &'a [u8] { -+ self.rest.as_bytes() -+ } -+ -+ fn bytes(&self) -> Bytes<'a> { -+ self.rest.bytes() -+ } -+ -+ fn chars(&self) -> Chars<'a> { -+ self.rest.chars() -+ } -+ -+ fn char_indices(&self) -> CharIndices<'a> { -+ self.rest.char_indices() -+ } -+ -+ fn parse(&self, tag: &str) -> Result<Cursor<'a>, LexError> { -+ if self.starts_with(tag) { -+ Ok(self.advance(tag.len())) -+ } else { -+ Err(LexError) -+ } -+ } -+} -+ -+type PResult<'a, O> = Result<(Cursor<'a>, O), LexError>; -+ -+fn skip_whitespace(input: Cursor) -> Cursor { -+ let mut s = input; -+ -+ while !s.is_empty() { -+ let byte = s.as_bytes()[0]; -+ if byte == b'/' { -+ if s.starts_with("//") -+ && (!s.starts_with("///") || s.starts_with("////")) -+ && !s.starts_with("//!") -+ { -+ let (cursor, _) = take_until_newline_or_eof(s); -+ s = cursor; -+ continue; -+ } else if s.starts_with("/**/") { -+ s = s.advance(4); -+ continue; -+ } else if s.starts_with("/*") -+ && (!s.starts_with("/**") || s.starts_with("/***")) -+ && !s.starts_with("/*!") -+ { -+ match block_comment(s) { -+ Ok((rest, _)) => { -+ s = rest; -+ continue; -+ } -+ Err(LexError) => return s, -+ } -+ } -+ } -+ match byte { -+ b' ' | 0x09..=0x0d => { -+ s = s.advance(1); -+ continue; -+ } -+ b if b <= 0x7f => {} -+ _ => { -+ let ch = s.chars().next().unwrap(); -+ if is_whitespace(ch) { -+ s = s.advance(ch.len_utf8()); -+ continue; -+ } -+ } -+ } -+ return s; -+ } -+ s -+} -+ -+fn block_comment(input: Cursor) -> PResult<&str> { -+ if !input.starts_with("/*") { -+ return Err(LexError); -+ } -+ -+ let mut depth = 0; -+ let bytes = input.as_bytes(); -+ let mut i = 0; -+ let upper = bytes.len() - 1; -+ -+ while i < upper { -+ if bytes[i] == b'/' && bytes[i + 1] == b'*' { -+ depth += 1; -+ i += 1; // eat '*' -+ } else if bytes[i] == b'*' && bytes[i + 1] == b'/' { -+ depth -= 1; -+ if depth == 0 { -+ return Ok((input.advance(i + 2), &input.rest[..i + 2])); -+ } -+ i += 1; // eat '/' -+ } -+ i += 1; -+ } -+ -+ Err(LexError) -+} -+ -+fn is_whitespace(ch: char) -> bool { -+ // Rust treats left-to-right mark and right-to-left mark as whitespace -+ ch.is_whitespace() || ch == '\u{200e}' || ch == '\u{200f}' -+} -+ -+fn word_break(input: Cursor) -> Result<Cursor, LexError> { -+ match input.chars().next() { -+ Some(ch) if is_ident_continue(ch) => Err(LexError), -+ Some(_) | None => Ok(input), -+ } -+} -+ -+pub(crate) fn token_stream(mut input: Cursor) -> PResult<TokenStream> { -+ let mut trees = Vec::new(); -+ let mut stack = Vec::new(); -+ -+ loop { -+ input = skip_whitespace(input); -+ -+ if let Ok((rest, tt)) = doc_comment(input) { -+ trees.extend(tt); -+ input = rest; -+ continue; -+ } -+ -+ #[cfg(span_locations)] -+ let lo = input.off; -+ -+ let first = match input.bytes().next() { -+ Some(first) => first, -+ None => break, -+ }; -+ -+ if let Some(open_delimiter) = match first { -+ b'(' => Some(Delimiter::Parenthesis), -+ b'[' => Some(Delimiter::Bracket), -+ b'{' => Some(Delimiter::Brace), -+ _ => None, -+ } { -+ input = input.advance(1); -+ let frame = (open_delimiter, trees); -+ #[cfg(span_locations)] -+ let frame = (lo, frame); -+ stack.push(frame); -+ trees = Vec::new(); -+ } else if let Some(close_delimiter) = match first { -+ b')' => Some(Delimiter::Parenthesis), -+ b']' => Some(Delimiter::Bracket), -+ b'}' => Some(Delimiter::Brace), -+ _ => None, -+ } { -+ input = input.advance(1); -+ let frame = stack.pop().ok_or(LexError)?; -+ #[cfg(span_locations)] -+ let (lo, frame) = frame; -+ let (open_delimiter, outer) = frame; -+ if open_delimiter != close_delimiter { -+ return Err(LexError); -+ } -+ let mut g = Group::new(open_delimiter, TokenStream { inner: trees }); -+ g.set_span(Span { -+ #[cfg(span_locations)] -+ lo, -+ #[cfg(span_locations)] -+ hi: input.off, -+ }); -+ trees = outer; -+ trees.push(TokenTree::Group(crate::Group::_new_stable(g))); -+ } else { -+ let (rest, mut tt) = leaf_token(input)?; -+ tt.set_span(crate::Span::_new_stable(Span { -+ #[cfg(span_locations)] -+ lo, -+ #[cfg(span_locations)] -+ hi: rest.off, -+ })); -+ trees.push(tt); -+ input = rest; -+ } -+ } -+ -+ if stack.is_empty() { -+ Ok((input, TokenStream { inner: trees })) -+ } else { -+ Err(LexError) -+ } -+} -+ -+fn leaf_token(input: Cursor) -> PResult<TokenTree> { -+ if let Ok((input, l)) = literal(input) { -+ // must be parsed before ident -+ Ok((input, TokenTree::Literal(crate::Literal::_new_stable(l)))) -+ } else if let Ok((input, p)) = punct(input) { -+ Ok((input, TokenTree::Punct(p))) -+ } else if let Ok((input, i)) = ident(input) { -+ Ok((input, TokenTree::Ident(i))) -+ } else { -+ Err(LexError) -+ } -+} -+ -+fn ident(input: Cursor) -> PResult<crate::Ident> { -+ if ["r\"", "r#\"", "r##", "b\"", "b\'", "br\"", "br#"] -+ .iter() -+ .any(|prefix| input.starts_with(prefix)) -+ { -+ Err(LexError) -+ } else { -+ ident_any(input) -+ } -+} -+ -+fn ident_any(input: Cursor) -> PResult<crate::Ident> { -+ let raw = input.starts_with("r#"); -+ let rest = input.advance((raw as usize) << 1); -+ -+ let (rest, sym) = ident_not_raw(rest)?; -+ -+ if !raw { -+ let ident = crate::Ident::new(sym, crate::Span::call_site()); -+ return Ok((rest, ident)); -+ } -+ -+ if sym == "_" { -+ return Err(LexError); -+ } -+ -+ let ident = crate::Ident::_new_raw(sym, crate::Span::call_site()); -+ Ok((rest, ident)) -+} -+ -+fn ident_not_raw(input: Cursor) -> PResult<&str> { -+ let mut chars = input.char_indices(); -+ -+ match chars.next() { -+ Some((_, ch)) if is_ident_start(ch) => {} -+ _ => return Err(LexError), -+ } -+ -+ let mut end = input.len(); -+ for (i, ch) in chars { -+ if !is_ident_continue(ch) { -+ end = i; -+ break; -+ } -+ } -+ -+ Ok((input.advance(end), &input.rest[..end])) -+} -+ -+fn literal(input: Cursor) -> PResult<Literal> { -+ match literal_nocapture(input) { -+ Ok(a) => { -+ let end = input.len() - a.len(); -+ Ok((a, Literal::_new(input.rest[..end].to_string()))) -+ } -+ Err(LexError) => Err(LexError), -+ } -+} -+ -+fn literal_nocapture(input: Cursor) -> Result<Cursor, LexError> { -+ if let Ok(ok) = string(input) { -+ Ok(ok) -+ } else if let Ok(ok) = byte_string(input) { -+ Ok(ok) -+ } else if let Ok(ok) = byte(input) { -+ Ok(ok) -+ } else if let Ok(ok) = character(input) { -+ Ok(ok) -+ } else if let Ok(ok) = float(input) { -+ Ok(ok) -+ } else if let Ok(ok) = int(input) { -+ Ok(ok) -+ } else { -+ Err(LexError) -+ } -+} -+ -+fn literal_suffix(input: Cursor) -> Cursor { -+ match ident_not_raw(input) { -+ Ok((input, _)) => input, -+ Err(LexError) => input, -+ } -+} -+ -+fn string(input: Cursor) -> Result<Cursor, LexError> { -+ if let Ok(input) = input.parse("\"") { -+ cooked_string(input) -+ } else if let Ok(input) = input.parse("r") { -+ raw_string(input) -+ } else { -+ Err(LexError) -+ } -+} -+ -+fn cooked_string(input: Cursor) -> Result<Cursor, LexError> { -+ let mut chars = input.char_indices().peekable(); -+ -+ while let Some((i, ch)) = chars.next() { -+ match ch { -+ '"' => { -+ let input = input.advance(i + 1); -+ return Ok(literal_suffix(input)); -+ } -+ '\r' => match chars.next() { -+ Some((_, '\n')) => {} -+ _ => break, -+ }, -+ '\\' => match chars.next() { -+ Some((_, 'x')) => { -+ if !backslash_x_char(&mut chars) { -+ break; -+ } -+ } -+ Some((_, 'n')) | Some((_, 'r')) | Some((_, 't')) | Some((_, '\\')) -+ | Some((_, '\'')) | Some((_, '"')) | Some((_, '0')) => {} -+ Some((_, 'u')) => { -+ if !backslash_u(&mut chars) { -+ break; -+ } -+ } -+ Some((_, ch @ '\n')) | Some((_, ch @ '\r')) => { -+ let mut last = ch; -+ loop { -+ if last == '\r' && chars.next().map_or(true, |(_, ch)| ch != '\n') { -+ return Err(LexError); -+ } -+ match chars.peek() { -+ Some((_, ch)) if ch.is_whitespace() => { -+ last = *ch; -+ chars.next(); -+ } -+ _ => break, -+ } -+ } -+ } -+ _ => break, -+ }, -+ _ch => {} -+ } -+ } -+ Err(LexError) -+} -+ -+fn byte_string(input: Cursor) -> Result<Cursor, LexError> { -+ if let Ok(input) = input.parse("b\"") { -+ cooked_byte_string(input) -+ } else if let Ok(input) = input.parse("br") { -+ raw_string(input) -+ } else { -+ Err(LexError) -+ } -+} -+ -+fn cooked_byte_string(mut input: Cursor) -> Result<Cursor, LexError> { -+ let mut bytes = input.bytes().enumerate(); -+ while let Some((offset, b)) = bytes.next() { -+ match b { -+ b'"' => { -+ let input = input.advance(offset + 1); -+ return Ok(literal_suffix(input)); -+ } -+ b'\r' => match bytes.next() { -+ Some((_, b'\n')) => {} -+ _ => break, -+ }, -+ b'\\' => match bytes.next() { -+ Some((_, b'x')) => { -+ if !backslash_x_byte(&mut bytes) { -+ break; -+ } -+ } -+ Some((_, b'n')) | Some((_, b'r')) | Some((_, b't')) | Some((_, b'\\')) -+ | Some((_, b'0')) | Some((_, b'\'')) | Some((_, b'"')) => {} -+ Some((newline, b @ b'\n')) | Some((newline, b @ b'\r')) => { -+ let mut last = b as char; -+ let rest = input.advance(newline + 1); -+ let mut chars = rest.char_indices(); -+ loop { -+ if last == '\r' && chars.next().map_or(true, |(_, ch)| ch != '\n') { -+ return Err(LexError); -+ } -+ match chars.next() { -+ Some((_, ch)) if ch.is_whitespace() => last = ch, -+ Some((offset, _)) => { -+ input = rest.advance(offset); -+ bytes = input.bytes().enumerate(); -+ break; -+ } -+ None => return Err(LexError), -+ } -+ } -+ } -+ _ => break, -+ }, -+ b if b < 0x80 => {} -+ _ => break, -+ } -+ } -+ Err(LexError) -+} -+ -+fn raw_string(input: Cursor) -> Result<Cursor, LexError> { -+ let mut chars = input.char_indices(); -+ let mut n = 0; -+ while let Some((i, ch)) = chars.next() { -+ match ch { -+ '"' => { -+ n = i; -+ break; -+ } -+ '#' => {} -+ _ => return Err(LexError), -+ } -+ } -+ while let Some((i, ch)) = chars.next() { -+ match ch { -+ '"' if input.rest[i + 1..].starts_with(&input.rest[..n]) => { -+ let rest = input.advance(i + 1 + n); -+ return Ok(literal_suffix(rest)); -+ } -+ '\r' => match chars.next() { -+ Some((_, '\n')) => {} -+ _ => break, -+ }, -+ _ => {} -+ } -+ } -+ Err(LexError) -+} -+ -+fn byte(input: Cursor) -> Result<Cursor, LexError> { -+ let input = input.parse("b'")?; -+ let mut bytes = input.bytes().enumerate(); -+ let ok = match bytes.next().map(|(_, b)| b) { -+ Some(b'\\') => match bytes.next().map(|(_, b)| b) { -+ Some(b'x') => backslash_x_byte(&mut bytes), -+ Some(b'n') | Some(b'r') | Some(b't') | Some(b'\\') | Some(b'0') | Some(b'\'') -+ | Some(b'"') => true, -+ _ => false, -+ }, -+ b => b.is_some(), -+ }; -+ if !ok { -+ return Err(LexError); -+ } -+ let (offset, _) = bytes.next().ok_or(LexError)?; -+ if !input.chars().as_str().is_char_boundary(offset) { -+ return Err(LexError); -+ } -+ let input = input.advance(offset).parse("'")?; -+ Ok(literal_suffix(input)) -+} -+ -+fn character(input: Cursor) -> Result<Cursor, LexError> { -+ let input = input.parse("'")?; -+ let mut chars = input.char_indices(); -+ let ok = match chars.next().map(|(_, ch)| ch) { -+ Some('\\') => match chars.next().map(|(_, ch)| ch) { -+ Some('x') => backslash_x_char(&mut chars), -+ Some('u') => backslash_u(&mut chars), -+ Some('n') | Some('r') | Some('t') | Some('\\') | Some('0') | Some('\'') | Some('"') => { -+ true -+ } -+ _ => false, -+ }, -+ ch => ch.is_some(), -+ }; -+ if !ok { -+ return Err(LexError); -+ } -+ let (idx, _) = chars.next().ok_or(LexError)?; -+ let input = input.advance(idx).parse("'")?; -+ Ok(literal_suffix(input)) -+} -+ -+macro_rules! next_ch { -+ ($chars:ident @ $pat:pat $(| $rest:pat)*) => { -+ match $chars.next() { -+ Some((_, ch)) => match ch { -+ $pat $(| $rest)* => ch, -+ _ => return false, -+ }, -+ None => return false, -+ } -+ }; -+} -+ -+fn backslash_x_char<I>(chars: &mut I) -> bool -+where -+ I: Iterator<Item = (usize, char)>, -+{ -+ next_ch!(chars @ '0'..='7'); -+ next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F'); -+ true -+} -+ -+fn backslash_x_byte<I>(chars: &mut I) -> bool -+where -+ I: Iterator<Item = (usize, u8)>, -+{ -+ next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F'); -+ next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F'); -+ true -+} -+ -+fn backslash_u<I>(chars: &mut I) -> bool -+where -+ I: Iterator<Item = (usize, char)>, -+{ -+ next_ch!(chars @ '{'); -+ let mut value = 0; -+ let mut len = 0; -+ while let Some((_, ch)) = chars.next() { -+ let digit = match ch { -+ '0'..='9' => ch as u8 - b'0', -+ 'a'..='f' => 10 + ch as u8 - b'a', -+ 'A'..='F' => 10 + ch as u8 - b'A', -+ '_' if len > 0 => continue, -+ '}' if len > 0 => return char::from_u32(value).is_some(), -+ _ => return false, -+ }; -+ if len == 6 { -+ return false; -+ } -+ value *= 0x10; -+ value += u32::from(digit); -+ len += 1; -+ } -+ false -+} -+ -+fn float(input: Cursor) -> Result<Cursor, LexError> { -+ let mut rest = float_digits(input)?; -+ if let Some(ch) = rest.chars().next() { -+ if is_ident_start(ch) { -+ rest = ident_not_raw(rest)?.0; -+ } -+ } -+ word_break(rest) -+} -+ -+fn float_digits(input: Cursor) -> Result<Cursor, LexError> { -+ let mut chars = input.chars().peekable(); -+ match chars.next() { -+ Some(ch) if ch >= '0' && ch <= '9' => {} -+ _ => return Err(LexError), -+ } -+ -+ let mut len = 1; -+ let mut has_dot = false; -+ let mut has_exp = false; -+ while let Some(&ch) = chars.peek() { -+ match ch { -+ '0'..='9' | '_' => { -+ chars.next(); -+ len += 1; -+ } -+ '.' => { -+ if has_dot { -+ break; -+ } -+ chars.next(); -+ if chars -+ .peek() -+ .map(|&ch| ch == '.' || is_ident_start(ch)) -+ .unwrap_or(false) -+ { -+ return Err(LexError); -+ } -+ len += 1; -+ has_dot = true; -+ } -+ 'e' | 'E' => { -+ chars.next(); -+ len += 1; -+ has_exp = true; -+ break; -+ } -+ _ => break, -+ } -+ } -+ -+ if !(has_dot || has_exp) { -+ return Err(LexError); -+ } -+ -+ if has_exp { -+ let token_before_exp = if has_dot { -+ Ok(input.advance(len - 1)) -+ } else { -+ Err(LexError) -+ }; -+ let mut has_sign = false; -+ let mut has_exp_value = false; -+ while let Some(&ch) = chars.peek() { -+ match ch { -+ '+' | '-' => { -+ if has_exp_value { -+ break; -+ } -+ if has_sign { -+ return token_before_exp; -+ } -+ chars.next(); -+ len += 1; -+ has_sign = true; -+ } -+ '0'..='9' => { -+ chars.next(); -+ len += 1; -+ has_exp_value = true; -+ } -+ '_' => { -+ chars.next(); -+ len += 1; -+ } -+ _ => break, -+ } -+ } -+ if !has_exp_value { -+ return token_before_exp; -+ } -+ } -+ -+ Ok(input.advance(len)) -+} -+ -+fn int(input: Cursor) -> Result<Cursor, LexError> { -+ let mut rest = digits(input)?; -+ if let Some(ch) = rest.chars().next() { -+ if is_ident_start(ch) { -+ rest = ident_not_raw(rest)?.0; -+ } -+ } -+ word_break(rest) -+} -+ -+fn digits(mut input: Cursor) -> Result<Cursor, LexError> { -+ let base = if input.starts_with("0x") { -+ input = input.advance(2); -+ 16 -+ } else if input.starts_with("0o") { -+ input = input.advance(2); -+ 8 -+ } else if input.starts_with("0b") { -+ input = input.advance(2); -+ 2 -+ } else { -+ 10 -+ }; -+ -+ let mut len = 0; -+ let mut empty = true; -+ for b in input.bytes() { -+ match b { -+ b'0'..=b'9' => { -+ let digit = (b - b'0') as u64; -+ if digit >= base { -+ return Err(LexError); -+ } -+ } -+ b'a'..=b'f' => { -+ let digit = 10 + (b - b'a') as u64; -+ if digit >= base { -+ break; -+ } -+ } -+ b'A'..=b'F' => { -+ let digit = 10 + (b - b'A') as u64; -+ if digit >= base { -+ break; -+ } -+ } -+ b'_' => { -+ if empty && base == 10 { -+ return Err(LexError); -+ } -+ len += 1; -+ continue; -+ } -+ _ => break, -+ }; -+ len += 1; -+ empty = false; -+ } -+ if empty { -+ Err(LexError) -+ } else { -+ Ok(input.advance(len)) -+ } -+} -+ -+fn punct(input: Cursor) -> PResult<Punct> { -+ match punct_char(input) { -+ Ok((rest, '\'')) => { -+ if ident_any(rest)?.0.starts_with("'") { -+ Err(LexError) -+ } else { -+ Ok((rest, Punct::new('\'', Spacing::Joint))) -+ } -+ } -+ Ok((rest, ch)) => { -+ let kind = match punct_char(rest) { -+ Ok(_) => Spacing::Joint, -+ Err(LexError) => Spacing::Alone, -+ }; -+ Ok((rest, Punct::new(ch, kind))) -+ } -+ Err(LexError) => Err(LexError), -+ } -+} -+ -+fn punct_char(input: Cursor) -> PResult<char> { -+ if input.starts_with("//") || input.starts_with("/*") { -+ // Do not accept `/` of a comment as a punct. -+ return Err(LexError); -+ } -+ -+ let mut chars = input.chars(); -+ let first = match chars.next() { -+ Some(ch) => ch, -+ None => { -+ return Err(LexError); -+ } -+ }; -+ let recognized = "~!@#$%^&*-=+|;:,<.>/?'"; -+ if recognized.contains(first) { -+ Ok((input.advance(first.len_utf8()), first)) -+ } else { -+ Err(LexError) -+ } -+} -+ -+fn doc_comment(input: Cursor) -> PResult<Vec<TokenTree>> { -+ #[cfg(span_locations)] -+ let lo = input.off; -+ let (rest, (comment, inner)) = doc_comment_contents(input)?; -+ let span = crate::Span::_new_stable(Span { -+ #[cfg(span_locations)] -+ lo, -+ #[cfg(span_locations)] -+ hi: rest.off, -+ }); -+ -+ let mut scan_for_bare_cr = comment; -+ while let Some(cr) = scan_for_bare_cr.find('\r') { -+ let rest = &scan_for_bare_cr[cr + 1..]; -+ if !rest.starts_with('\n') { -+ return Err(LexError); -+ } -+ scan_for_bare_cr = rest; -+ } -+ -+ let mut trees = Vec::new(); -+ trees.push(TokenTree::Punct(Punct::new('#', Spacing::Alone))); -+ if inner { -+ trees.push(Punct::new('!', Spacing::Alone).into()); -+ } -+ let mut stream = vec![ -+ TokenTree::Ident(crate::Ident::new("doc", span)), -+ TokenTree::Punct(Punct::new('=', Spacing::Alone)), -+ TokenTree::Literal(crate::Literal::string(comment)), -+ ]; -+ for tt in stream.iter_mut() { -+ tt.set_span(span); -+ } -+ let group = Group::new(Delimiter::Bracket, stream.into_iter().collect()); -+ trees.push(crate::Group::_new_stable(group).into()); -+ for tt in trees.iter_mut() { -+ tt.set_span(span); -+ } -+ Ok((rest, trees)) -+} -+ -+fn doc_comment_contents(input: Cursor) -> PResult<(&str, bool)> { -+ if input.starts_with("//!") { -+ let input = input.advance(3); -+ let (input, s) = take_until_newline_or_eof(input); -+ Ok((input, (s, true))) -+ } else if input.starts_with("/*!") { -+ let (input, s) = block_comment(input)?; -+ Ok((input, (&s[3..s.len() - 2], true))) -+ } else if input.starts_with("///") { -+ let input = input.advance(3); -+ if input.starts_with("/") { -+ return Err(LexError); -+ } -+ let (input, s) = take_until_newline_or_eof(input); -+ Ok((input, (s, false))) -+ } else if input.starts_with("/**") && !input.rest[3..].starts_with('*') { -+ let (input, s) = block_comment(input)?; -+ Ok((input, (&s[3..s.len() - 2], false))) -+ } else { -+ Err(LexError) -+ } -+} -+ -+fn take_until_newline_or_eof(input: Cursor) -> (Cursor, &str) { -+ let chars = input.char_indices(); -+ -+ for (i, ch) in chars { -+ if ch == '\n' { -+ return (input.advance(i), &input.rest[..i]); -+ } else if ch == '\r' && input.rest[i + 1..].starts_with('\n') { -+ return (input.advance(i + 1), &input.rest[..i]); -+ } -+ } -+ -+ (input.advance(input.len()), input.rest) -+} -diff --git a/third_party/rust/proc-macro2/src/strnom.rs b/third_party/rust/proc-macro2/src/strnom.rs -deleted file mode 100644 -index eb7d0b8a8e..0000000000 ---- a/third_party/rust/proc-macro2/src/strnom.rs -+++ /dev/null -@@ -1,391 +0,0 @@ --//! Adapted from [`nom`](https://github.com/Geal/nom). -- --use crate::fallback::LexError; --use std::str::{Bytes, CharIndices, Chars}; --use unicode_xid::UnicodeXID; -- --#[derive(Copy, Clone, Eq, PartialEq)] --pub struct Cursor<'a> { -- pub rest: &'a str, -- #[cfg(span_locations)] -- pub off: u32, --} -- --impl<'a> Cursor<'a> { -- #[cfg(not(span_locations))] -- pub fn advance(&self, amt: usize) -> Cursor<'a> { -- Cursor { -- rest: &self.rest[amt..], -- } -- } -- #[cfg(span_locations)] -- pub fn advance(&self, amt: usize) -> Cursor<'a> { -- Cursor { -- rest: &self.rest[amt..], -- off: self.off + (amt as u32), -- } -- } -- -- pub fn find(&self, p: char) -> Option<usize> { -- self.rest.find(p) -- } -- -- pub fn starts_with(&self, s: &str) -> bool { -- self.rest.starts_with(s) -- } -- -- pub fn is_empty(&self) -> bool { -- self.rest.is_empty() -- } -- -- pub fn len(&self) -> usize { -- self.rest.len() -- } -- -- pub fn as_bytes(&self) -> &'a [u8] { -- self.rest.as_bytes() -- } -- -- pub fn bytes(&self) -> Bytes<'a> { -- self.rest.bytes() -- } -- -- pub fn chars(&self) -> Chars<'a> { -- self.rest.chars() -- } -- -- pub fn char_indices(&self) -> CharIndices<'a> { -- self.rest.char_indices() -- } --} -- --pub type PResult<'a, O> = Result<(Cursor<'a>, O), LexError>; -- --pub fn whitespace(input: Cursor) -> PResult<()> { -- if input.is_empty() { -- return Err(LexError); -- } -- -- let bytes = input.as_bytes(); -- let mut i = 0; -- while i < bytes.len() { -- let s = input.advance(i); -- if bytes[i] == b'/' { -- if s.starts_with("//") -- && (!s.starts_with("///") || s.starts_with("////")) -- && !s.starts_with("//!") -- { -- if let Some(len) = s.find('\n') { -- i += len + 1; -- continue; -- } -- break; -- } else if s.starts_with("/**/") { -- i += 4; -- continue; -- } else if s.starts_with("/*") -- && (!s.starts_with("/**") || s.starts_with("/***")) -- && !s.starts_with("/*!") -- { -- let (_, com) = block_comment(s)?; -- i += com.len(); -- continue; -- } -- } -- match bytes[i] { -- b' ' | 0x09..=0x0d => { -- i += 1; -- continue; -- } -- b if b <= 0x7f => {} -- _ => { -- let ch = s.chars().next().unwrap(); -- if is_whitespace(ch) { -- i += ch.len_utf8(); -- continue; -- } -- } -- } -- return if i > 0 { Ok((s, ())) } else { Err(LexError) }; -- } -- Ok((input.advance(input.len()), ())) --} -- --pub fn block_comment(input: Cursor) -> PResult<&str> { -- if !input.starts_with("/*") { -- return Err(LexError); -- } -- -- let mut depth = 0; -- let bytes = input.as_bytes(); -- let mut i = 0; -- let upper = bytes.len() - 1; -- while i < upper { -- if bytes[i] == b'/' && bytes[i + 1] == b'*' { -- depth += 1; -- i += 1; // eat '*' -- } else if bytes[i] == b'*' && bytes[i + 1] == b'/' { -- depth -= 1; -- if depth == 0 { -- return Ok((input.advance(i + 2), &input.rest[..i + 2])); -- } -- i += 1; // eat '/' -- } -- i += 1; -- } -- Err(LexError) --} -- --pub fn skip_whitespace(input: Cursor) -> Cursor { -- match whitespace(input) { -- Ok((rest, _)) => rest, -- Err(LexError) => input, -- } --} -- --fn is_whitespace(ch: char) -> bool { -- // Rust treats left-to-right mark and right-to-left mark as whitespace -- ch.is_whitespace() || ch == '\u{200e}' || ch == '\u{200f}' --} -- --pub fn word_break(input: Cursor) -> PResult<()> { -- match input.chars().next() { -- Some(ch) if UnicodeXID::is_xid_continue(ch) => Err(LexError), -- Some(_) | None => Ok((input, ())), -- } --} -- --macro_rules! named { -- ($name:ident -> $o:ty, $submac:ident!( $($args:tt)* )) => { -- fn $name<'a>(i: Cursor<'a>) -> $crate::strnom::PResult<'a, $o> { -- $submac!(i, $($args)*) -- } -- }; --} -- --macro_rules! alt { -- ($i:expr, $e:ident | $($rest:tt)*) => { -- alt!($i, call!($e) | $($rest)*) -- }; -- -- ($i:expr, $subrule:ident!( $($args:tt)*) | $($rest:tt)*) => { -- match $subrule!($i, $($args)*) { -- res @ Ok(_) => res, -- _ => alt!($i, $($rest)*) -- } -- }; -- -- ($i:expr, $subrule:ident!( $($args:tt)* ) => { $gen:expr } | $($rest:tt)+) => { -- match $subrule!($i, $($args)*) { -- Ok((i, o)) => Ok((i, $gen(o))), -- Err(LexError) => alt!($i, $($rest)*) -- } -- }; -- -- ($i:expr, $e:ident => { $gen:expr } | $($rest:tt)*) => { -- alt!($i, call!($e) => { $gen } | $($rest)*) -- }; -- -- ($i:expr, $e:ident => { $gen:expr }) => { -- alt!($i, call!($e) => { $gen }) -- }; -- -- ($i:expr, $subrule:ident!( $($args:tt)* ) => { $gen:expr }) => { -- match $subrule!($i, $($args)*) { -- Ok((i, o)) => Ok((i, $gen(o))), -- Err(LexError) => Err(LexError), -- } -- }; -- -- ($i:expr, $e:ident) => { -- alt!($i, call!($e)) -- }; -- -- ($i:expr, $subrule:ident!( $($args:tt)*)) => { -- $subrule!($i, $($args)*) -- }; --} -- --macro_rules! do_parse { -- ($i:expr, ( $($rest:expr),* )) => { -- Ok(($i, ( $($rest),* ))) -- }; -- -- ($i:expr, $e:ident >> $($rest:tt)*) => { -- do_parse!($i, call!($e) >> $($rest)*) -- }; -- -- ($i:expr, $submac:ident!( $($args:tt)* ) >> $($rest:tt)*) => { -- match $submac!($i, $($args)*) { -- Err(LexError) => Err(LexError), -- Ok((i, _)) => do_parse!(i, $($rest)*), -- } -- }; -- -- ($i:expr, $field:ident : $e:ident >> $($rest:tt)*) => { -- do_parse!($i, $field: call!($e) >> $($rest)*) -- }; -- -- ($i:expr, $field:ident : $submac:ident!( $($args:tt)* ) >> $($rest:tt)*) => { -- match $submac!($i, $($args)*) { -- Err(LexError) => Err(LexError), -- Ok((i, o)) => { -- let $field = o; -- do_parse!(i, $($rest)*) -- }, -- } -- }; --} -- --macro_rules! peek { -- ($i:expr, $submac:ident!( $($args:tt)* )) => { -- match $submac!($i, $($args)*) { -- Ok((_, o)) => Ok(($i, o)), -- Err(LexError) => Err(LexError), -- } -- }; --} -- --macro_rules! call { -- ($i:expr, $fun:expr $(, $args:expr)*) => { -- $fun($i $(, $args)*) -- }; --} -- --macro_rules! option { -- ($i:expr, $f:expr) => { -- match $f($i) { -- Ok((i, o)) => Ok((i, Some(o))), -- Err(LexError) => Ok(($i, None)), -- } -- }; --} -- --macro_rules! take_until_newline_or_eof { -- ($i:expr,) => {{ -- if $i.len() == 0 { -- Ok(($i, "")) -- } else { -- match $i.find('\n') { -- Some(i) => Ok(($i.advance(i), &$i.rest[..i])), -- None => Ok(($i.advance($i.len()), &$i.rest[..$i.len()])), -- } -- } -- }}; --} -- --macro_rules! tuple { -- ($i:expr, $($rest:tt)*) => { -- tuple_parser!($i, (), $($rest)*) -- }; --} -- --/// Do not use directly. Use `tuple!`. --macro_rules! tuple_parser { -- ($i:expr, ($($parsed:tt),*), $e:ident, $($rest:tt)*) => { -- tuple_parser!($i, ($($parsed),*), call!($e), $($rest)*) -- }; -- -- ($i:expr, (), $submac:ident!( $($args:tt)* ), $($rest:tt)*) => { -- match $submac!($i, $($args)*) { -- Err(LexError) => Err(LexError), -- Ok((i, o)) => tuple_parser!(i, (o), $($rest)*), -- } -- }; -- -- ($i:expr, ($($parsed:tt)*), $submac:ident!( $($args:tt)* ), $($rest:tt)*) => { -- match $submac!($i, $($args)*) { -- Err(LexError) => Err(LexError), -- Ok((i, o)) => tuple_parser!(i, ($($parsed)* , o), $($rest)*), -- } -- }; -- -- ($i:expr, ($($parsed:tt),*), $e:ident) => { -- tuple_parser!($i, ($($parsed),*), call!($e)) -- }; -- -- ($i:expr, (), $submac:ident!( $($args:tt)* )) => { -- $submac!($i, $($args)*) -- }; -- -- ($i:expr, ($($parsed:expr),*), $submac:ident!( $($args:tt)* )) => { -- match $submac!($i, $($args)*) { -- Err(LexError) => Err(LexError), -- Ok((i, o)) => Ok((i, ($($parsed),*, o))) -- } -- }; -- -- ($i:expr, ($($parsed:expr),*)) => { -- Ok(($i, ($($parsed),*))) -- }; --} -- --macro_rules! not { -- ($i:expr, $submac:ident!( $($args:tt)* )) => { -- match $submac!($i, $($args)*) { -- Ok((_, _)) => Err(LexError), -- Err(LexError) => Ok(($i, ())), -- } -- }; --} -- --macro_rules! tag { -- ($i:expr, $tag:expr) => { -- if $i.starts_with($tag) { -- Ok(($i.advance($tag.len()), &$i.rest[..$tag.len()])) -- } else { -- Err(LexError) -- } -- }; --} -- --macro_rules! punct { -- ($i:expr, $punct:expr) => { -- $crate::strnom::punct($i, $punct) -- }; --} -- --/// Do not use directly. Use `punct!`. --pub fn punct<'a>(input: Cursor<'a>, token: &'static str) -> PResult<'a, &'a str> { -- let input = skip_whitespace(input); -- if input.starts_with(token) { -- Ok((input.advance(token.len()), token)) -- } else { -- Err(LexError) -- } --} -- --macro_rules! preceded { -- ($i:expr, $submac:ident!( $($args:tt)* ), $submac2:ident!( $($args2:tt)* )) => { -- match tuple!($i, $submac!($($args)*), $submac2!($($args2)*)) { -- Ok((remaining, (_, o))) => Ok((remaining, o)), -- Err(LexError) => Err(LexError), -- } -- }; -- -- ($i:expr, $submac:ident!( $($args:tt)* ), $g:expr) => { -- preceded!($i, $submac!($($args)*), call!($g)) -- }; --} -- --macro_rules! delimited { -- ($i:expr, $submac:ident!( $($args:tt)* ), $($rest:tt)+) => { -- match tuple_parser!($i, (), $submac!($($args)*), $($rest)*) { -- Err(LexError) => Err(LexError), -- Ok((i1, (_, o, _))) => Ok((i1, o)) -- } -- }; --} -- --macro_rules! map { -- ($i:expr, $submac:ident!( $($args:tt)* ), $g:expr) => { -- match $submac!($i, $($args)*) { -- Err(LexError) => Err(LexError), -- Ok((i, o)) => Ok((i, call!(o, $g))) -- } -- }; -- -- ($i:expr, $f:expr, $g:expr) => { -- map!($i, call!($f), $g) -- }; --} -diff --git a/third_party/rust/proc-macro2/src/wrapper.rs b/third_party/rust/proc-macro2/src/wrapper.rs -index 552b9381cf..3df044af17 100644 ---- a/third_party/rust/proc-macro2/src/wrapper.rs -+++ b/third_party/rust/proc-macro2/src/wrapper.rs -@@ -1,15 +1,15 @@ --use std::fmt; --use std::iter; -+use crate::detection::inside_proc_macro; -+use crate::{fallback, Delimiter, Punct, Spacing, TokenTree}; -+use std::fmt::{self, Debug, Display}; -+use std::iter::FromIterator; - use std::ops::RangeBounds; --use std::panic::{self, PanicInfo}; -+use std::panic; - #[cfg(super_unstable)] - use std::path::PathBuf; - use std::str::FromStr; - --use crate::{fallback, Delimiter, Punct, Spacing, TokenTree}; -- - #[derive(Clone)] --pub enum TokenStream { -+pub(crate) enum TokenStream { - Compiler(DeferredTokenStream), - Fallback(fallback::TokenStream), - } -@@ -19,73 +19,16 @@ pub enum TokenStream { - // we hold on to the appended tokens and do proc_macro::TokenStream::extend as - // late as possible to batch together consecutive uses of the Extend impl. - #[derive(Clone)] --pub struct DeferredTokenStream { -+pub(crate) struct DeferredTokenStream { - stream: proc_macro::TokenStream, - extra: Vec<proc_macro::TokenTree>, - } - --pub enum LexError { -+pub(crate) enum LexError { - Compiler(proc_macro::LexError), - Fallback(fallback::LexError), - } - --fn nightly_works() -> bool { -- use std::sync::atomic::*; -- use std::sync::Once; -- -- static WORKS: AtomicUsize = AtomicUsize::new(0); -- static INIT: Once = Once::new(); -- -- match WORKS.load(Ordering::SeqCst) { -- 1 => return false, -- 2 => return true, -- _ => {} -- } -- -- // Swap in a null panic hook to avoid printing "thread panicked" to stderr, -- // then use catch_unwind to determine whether the compiler's proc_macro is -- // working. When proc-macro2 is used from outside of a procedural macro all -- // of the proc_macro crate's APIs currently panic. -- // -- // The Once is to prevent the possibility of this ordering: -- // -- // thread 1 calls take_hook, gets the user's original hook -- // thread 1 calls set_hook with the null hook -- // thread 2 calls take_hook, thinks null hook is the original hook -- // thread 2 calls set_hook with the null hook -- // thread 1 calls set_hook with the actual original hook -- // thread 2 calls set_hook with what it thinks is the original hook -- // -- // in which the user's hook has been lost. -- // -- // There is still a race condition where a panic in a different thread can -- // happen during the interval that the user's original panic hook is -- // unregistered such that their hook is incorrectly not called. This is -- // sufficiently unlikely and less bad than printing panic messages to stderr -- // on correct use of this crate. Maybe there is a libstd feature request -- // here. For now, if a user needs to guarantee that this failure mode does -- // not occur, they need to call e.g. `proc_macro2::Span::call_site()` from -- // the main thread before launching any other threads. -- INIT.call_once(|| { -- type PanicHook = dyn Fn(&PanicInfo) + Sync + Send + 'static; -- -- let null_hook: Box<PanicHook> = Box::new(|_panic_info| { /* ignore */ }); -- let sanity_check = &*null_hook as *const PanicHook; -- let original_hook = panic::take_hook(); -- panic::set_hook(null_hook); -- -- let works = panic::catch_unwind(|| proc_macro::Span::call_site()).is_ok(); -- WORKS.store(works as usize + 1, Ordering::SeqCst); -- -- let hopefully_null_hook = panic::take_hook(); -- panic::set_hook(original_hook); -- if sanity_check != &*hopefully_null_hook { -- panic!("observed race condition in proc_macro2::nightly_works"); -- } -- }); -- nightly_works() --} -- - fn mismatch() -> ! { - panic!("stable/nightly mismatch") - } -@@ -103,7 +46,12 @@ impl DeferredTokenStream { - } - - fn evaluate_now(&mut self) { -- self.stream.extend(self.extra.drain(..)); -+ // If-check provides a fast short circuit for the common case of `extra` -+ // being empty, which saves a round trip over the proc macro bridge. -+ // Improves macro expansion time in winrt by 6% in debug mode. -+ if !self.extra.is_empty() { -+ self.stream.extend(self.extra.drain(..)); -+ } - } - - fn into_token_stream(mut self) -> proc_macro::TokenStream { -@@ -114,7 +62,7 @@ impl DeferredTokenStream { - - impl TokenStream { - pub fn new() -> TokenStream { -- if nightly_works() { -+ if inside_proc_macro() { - TokenStream::Compiler(DeferredTokenStream::new(proc_macro::TokenStream::new())) - } else { - TokenStream::Fallback(fallback::TokenStream::new()) -@@ -147,9 +95,9 @@ impl FromStr for TokenStream { - type Err = LexError; - - fn from_str(src: &str) -> Result<TokenStream, LexError> { -- if nightly_works() { -+ if inside_proc_macro() { - Ok(TokenStream::Compiler(DeferredTokenStream::new( -- src.parse()?, -+ proc_macro_parse(src)?, - ))) - } else { - Ok(TokenStream::Fallback(src.parse()?)) -@@ -157,11 +105,17 @@ impl FromStr for TokenStream { - } - } - --impl fmt::Display for TokenStream { -+// Work around https://github.com/rust-lang/rust/issues/58736. -+fn proc_macro_parse(src: &str) -> Result<proc_macro::TokenStream, LexError> { -+ panic::catch_unwind(|| src.parse().map_err(LexError::Compiler)) -+ .unwrap_or(Err(LexError::Fallback(fallback::LexError))) -+} -+ -+impl Display for TokenStream { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- TokenStream::Compiler(tts) => tts.clone().into_token_stream().fmt(f), -- TokenStream::Fallback(tts) => tts.fmt(f), -+ TokenStream::Compiler(tts) => Display::fmt(&tts.clone().into_token_stream(), f), -+ TokenStream::Fallback(tts) => Display::fmt(tts, f), - } - } - } -@@ -187,7 +141,7 @@ impl From<fallback::TokenStream> for TokenStream { - } - } - --// Assumes nightly_works(). -+// Assumes inside_proc_macro(). - fn into_compiler_token(token: TokenTree) -> proc_macro::TokenTree { - match token { - TokenTree::Group(tt) => tt.inner.unwrap_nightly().into(), -@@ -196,9 +150,9 @@ fn into_compiler_token(token: TokenTree) -> proc_macro::TokenTree { - Spacing::Joint => proc_macro::Spacing::Joint, - Spacing::Alone => proc_macro::Spacing::Alone, - }; -- let mut op = proc_macro::Punct::new(tt.as_char(), spacing); -- op.set_span(tt.span().inner.unwrap_nightly()); -- op.into() -+ let mut punct = proc_macro::Punct::new(tt.as_char(), spacing); -+ punct.set_span(tt.span().inner.unwrap_nightly()); -+ punct.into() - } - TokenTree::Ident(tt) => tt.inner.unwrap_nightly().into(), - TokenTree::Literal(tt) => tt.inner.unwrap_nightly().into(), -@@ -207,7 +161,7 @@ fn into_compiler_token(token: TokenTree) -> proc_macro::TokenTree { - - impl From<TokenTree> for TokenStream { - fn from(token: TokenTree) -> TokenStream { -- if nightly_works() { -+ if inside_proc_macro() { - TokenStream::Compiler(DeferredTokenStream::new(into_compiler_token(token).into())) - } else { - TokenStream::Fallback(token.into()) -@@ -215,9 +169,9 @@ impl From<TokenTree> for TokenStream { - } - } - --impl iter::FromIterator<TokenTree> for TokenStream { -+impl FromIterator<TokenTree> for TokenStream { - fn from_iter<I: IntoIterator<Item = TokenTree>>(trees: I) -> Self { -- if nightly_works() { -+ if inside_proc_macro() { - TokenStream::Compiler(DeferredTokenStream::new( - trees.into_iter().map(into_compiler_token).collect(), - )) -@@ -227,7 +181,7 @@ impl iter::FromIterator<TokenTree> for TokenStream { - } - } - --impl iter::FromIterator<TokenStream> for TokenStream { -+impl FromIterator<TokenStream> for TokenStream { - fn from_iter<I: IntoIterator<Item = TokenStream>>(streams: I) -> Self { - let mut streams = streams.into_iter(); - match streams.next() { -@@ -252,14 +206,15 @@ impl iter::FromIterator<TokenStream> for TokenStream { - } - - impl Extend<TokenTree> for TokenStream { -- fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, streams: I) { -+ fn extend<I: IntoIterator<Item = TokenTree>>(&mut self, stream: I) { - match self { - TokenStream::Compiler(tts) => { - // Here is the reason for DeferredTokenStream. -- tts.extra -- .extend(streams.into_iter().map(into_compiler_token)); -+ for token in stream { -+ tts.extra.push(into_compiler_token(token)); -+ } - } -- TokenStream::Fallback(tts) => tts.extend(streams), -+ TokenStream::Fallback(tts) => tts.extend(stream), - } - } - } -@@ -270,20 +225,20 @@ impl Extend<TokenStream> for TokenStream { - TokenStream::Compiler(tts) => { - tts.evaluate_now(); - tts.stream -- .extend(streams.into_iter().map(|stream| stream.unwrap_nightly())); -+ .extend(streams.into_iter().map(TokenStream::unwrap_nightly)); - } - TokenStream::Fallback(tts) => { -- tts.extend(streams.into_iter().map(|stream| stream.unwrap_stable())); -+ tts.extend(streams.into_iter().map(TokenStream::unwrap_stable)); - } - } - } - } - --impl fmt::Debug for TokenStream { -+impl Debug for TokenStream { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- TokenStream::Compiler(tts) => tts.clone().into_token_stream().fmt(f), -- TokenStream::Fallback(tts) => tts.fmt(f), -+ TokenStream::Compiler(tts) => Debug::fmt(&tts.clone().into_token_stream(), f), -+ TokenStream::Fallback(tts) => Debug::fmt(tts, f), - } - } - } -@@ -300,17 +255,29 @@ impl From<fallback::LexError> for LexError { - } - } - --impl fmt::Debug for LexError { -+impl Debug for LexError { -+ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ LexError::Compiler(e) => Debug::fmt(e, f), -+ LexError::Fallback(e) => Debug::fmt(e, f), -+ } -+ } -+} -+ -+impl Display for LexError { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- LexError::Compiler(e) => e.fmt(f), -- LexError::Fallback(e) => e.fmt(f), -+ #[cfg(lexerror_display)] -+ LexError::Compiler(e) => Display::fmt(e, f), -+ #[cfg(not(lexerror_display))] -+ LexError::Compiler(_e) => Display::fmt(&fallback::LexError, f), -+ LexError::Fallback(e) => Display::fmt(e, f), - } - } - } - - #[derive(Clone)] --pub enum TokenTreeIter { -+pub(crate) enum TokenTreeIter { - Compiler(proc_macro::token_stream::IntoIter), - Fallback(fallback::TokenTreeIter), - } -@@ -361,7 +328,7 @@ impl Iterator for TokenTreeIter { - } - } - --impl fmt::Debug for TokenTreeIter { -+impl Debug for TokenTreeIter { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.debug_struct("TokenTreeIter").finish() - } -@@ -369,7 +336,7 @@ impl fmt::Debug for TokenTreeIter { - - #[derive(Clone, PartialEq, Eq)] - #[cfg(super_unstable)] --pub enum SourceFile { -+pub(crate) enum SourceFile { - Compiler(proc_macro::SourceFile), - Fallback(fallback::SourceFile), - } -@@ -397,58 +364,77 @@ impl SourceFile { - } - - #[cfg(super_unstable)] --impl fmt::Debug for SourceFile { -+impl Debug for SourceFile { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- SourceFile::Compiler(a) => a.fmt(f), -- SourceFile::Fallback(a) => a.fmt(f), -+ SourceFile::Compiler(a) => Debug::fmt(a, f), -+ SourceFile::Fallback(a) => Debug::fmt(a, f), - } - } - } - - #[cfg(any(super_unstable, feature = "span-locations"))] --pub struct LineColumn { -+pub(crate) struct LineColumn { - pub line: usize, - pub column: usize, - } - - #[derive(Copy, Clone)] --pub enum Span { -+pub(crate) enum Span { - Compiler(proc_macro::Span), - Fallback(fallback::Span), - } - - impl Span { - pub fn call_site() -> Span { -- if nightly_works() { -+ if inside_proc_macro() { - Span::Compiler(proc_macro::Span::call_site()) - } else { - Span::Fallback(fallback::Span::call_site()) - } - } - -+ #[cfg(hygiene)] -+ pub fn mixed_site() -> Span { -+ if inside_proc_macro() { -+ Span::Compiler(proc_macro::Span::mixed_site()) -+ } else { -+ Span::Fallback(fallback::Span::mixed_site()) -+ } -+ } -+ - #[cfg(super_unstable)] - pub fn def_site() -> Span { -- if nightly_works() { -+ if inside_proc_macro() { - Span::Compiler(proc_macro::Span::def_site()) - } else { - Span::Fallback(fallback::Span::def_site()) - } - } - -- #[cfg(super_unstable)] - pub fn resolved_at(&self, other: Span) -> Span { - match (self, other) { -+ #[cfg(hygiene)] - (Span::Compiler(a), Span::Compiler(b)) => Span::Compiler(a.resolved_at(b)), -+ -+ // Name resolution affects semantics, but location is only cosmetic -+ #[cfg(not(hygiene))] -+ (Span::Compiler(_), Span::Compiler(_)) => other, -+ - (Span::Fallback(a), Span::Fallback(b)) => Span::Fallback(a.resolved_at(b)), - _ => mismatch(), - } - } - -- #[cfg(super_unstable)] - pub fn located_at(&self, other: Span) -> Span { - match (self, other) { -+ #[cfg(hygiene)] - (Span::Compiler(a), Span::Compiler(b)) => Span::Compiler(a.located_at(b)), -+ -+ // Name resolution affects semantics, but location is only cosmetic -+ #[cfg(not(hygiene))] -+ (Span::Compiler(_), Span::Compiler(_)) => *self, -+ - (Span::Fallback(a), Span::Fallback(b)) => Span::Fallback(a.located_at(b)), - _ => mismatch(), - } -@@ -542,16 +528,16 @@ impl From<fallback::Span> for Span { - } - } - --impl fmt::Debug for Span { -+impl Debug for Span { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- Span::Compiler(s) => s.fmt(f), -- Span::Fallback(s) => s.fmt(f), -+ Span::Compiler(s) => Debug::fmt(s, f), -+ Span::Fallback(s) => Debug::fmt(s, f), - } - } - } - --pub fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) { -+pub(crate) fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) { - match span { - Span::Compiler(s) => { - debug.field("span", &s); -@@ -561,7 +547,7 @@ pub fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) - } - - #[derive(Clone)] --pub enum Group { -+pub(crate) enum Group { - Compiler(proc_macro::Group), - Fallback(fallback::Group), - } -@@ -652,26 +638,26 @@ impl From<fallback::Group> for Group { - } - } - --impl fmt::Display for Group { -+impl Display for Group { - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - match self { -- Group::Compiler(group) => group.fmt(formatter), -- Group::Fallback(group) => group.fmt(formatter), -+ Group::Compiler(group) => Display::fmt(group, formatter), -+ Group::Fallback(group) => Display::fmt(group, formatter), - } - } - } - --impl fmt::Debug for Group { -+impl Debug for Group { - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - match self { -- Group::Compiler(group) => group.fmt(formatter), -- Group::Fallback(group) => group.fmt(formatter), -+ Group::Compiler(group) => Debug::fmt(group, formatter), -+ Group::Fallback(group) => Debug::fmt(group, formatter), - } - } - } - - #[derive(Clone)] --pub enum Ident { -+pub(crate) enum Ident { - Compiler(proc_macro::Ident), - Fallback(fallback::Ident), - } -@@ -747,26 +733,26 @@ where - } - } - --impl fmt::Display for Ident { -+impl Display for Ident { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- Ident::Compiler(t) => t.fmt(f), -- Ident::Fallback(t) => t.fmt(f), -+ Ident::Compiler(t) => Display::fmt(t, f), -+ Ident::Fallback(t) => Display::fmt(t, f), - } - } - } - --impl fmt::Debug for Ident { -+impl Debug for Ident { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- Ident::Compiler(t) => t.fmt(f), -- Ident::Fallback(t) => t.fmt(f), -+ Ident::Compiler(t) => Debug::fmt(t, f), -+ Ident::Fallback(t) => Debug::fmt(t, f), - } - } - } - - #[derive(Clone)] --pub enum Literal { -+pub(crate) enum Literal { - Compiler(proc_macro::Literal), - Fallback(fallback::Literal), - } -@@ -774,7 +760,7 @@ pub enum Literal { - macro_rules! suffixed_numbers { - ($($name:ident => $kind:ident,)*) => ($( - pub fn $name(n: $kind) -> Literal { -- if nightly_works() { -+ if inside_proc_macro() { - Literal::Compiler(proc_macro::Literal::$name(n)) - } else { - Literal::Fallback(fallback::Literal::$name(n)) -@@ -786,7 +772,7 @@ macro_rules! suffixed_numbers { - macro_rules! unsuffixed_integers { - ($($name:ident => $kind:ident,)*) => ($( - pub fn $name(n: $kind) -> Literal { -- if nightly_works() { -+ if inside_proc_macro() { - Literal::Compiler(proc_macro::Literal::$name(n)) - } else { - Literal::Fallback(fallback::Literal::$name(n)) -@@ -830,7 +816,7 @@ impl Literal { - } - - pub fn f32_unsuffixed(f: f32) -> Literal { -- if nightly_works() { -+ if inside_proc_macro() { - Literal::Compiler(proc_macro::Literal::f32_unsuffixed(f)) - } else { - Literal::Fallback(fallback::Literal::f32_unsuffixed(f)) -@@ -838,7 +824,7 @@ impl Literal { - } - - pub fn f64_unsuffixed(f: f64) -> Literal { -- if nightly_works() { -+ if inside_proc_macro() { - Literal::Compiler(proc_macro::Literal::f64_unsuffixed(f)) - } else { - Literal::Fallback(fallback::Literal::f64_unsuffixed(f)) -@@ -846,7 +832,7 @@ impl Literal { - } - - pub fn string(t: &str) -> Literal { -- if nightly_works() { -+ if inside_proc_macro() { - Literal::Compiler(proc_macro::Literal::string(t)) - } else { - Literal::Fallback(fallback::Literal::string(t)) -@@ -854,7 +840,7 @@ impl Literal { - } - - pub fn character(t: char) -> Literal { -- if nightly_works() { -+ if inside_proc_macro() { - Literal::Compiler(proc_macro::Literal::character(t)) - } else { - Literal::Fallback(fallback::Literal::character(t)) -@@ -862,7 +848,7 @@ impl Literal { - } - - pub fn byte_string(bytes: &[u8]) -> Literal { -- if nightly_works() { -+ if inside_proc_macro() { - Literal::Compiler(proc_macro::Literal::byte_string(bytes)) - } else { - Literal::Fallback(fallback::Literal::byte_string(bytes)) -@@ -908,20 +894,20 @@ impl From<fallback::Literal> for Literal { - } - } - --impl fmt::Display for Literal { -+impl Display for Literal { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- Literal::Compiler(t) => t.fmt(f), -- Literal::Fallback(t) => t.fmt(f), -+ Literal::Compiler(t) => Display::fmt(t, f), -+ Literal::Fallback(t) => Display::fmt(t, f), - } - } - } - --impl fmt::Debug for Literal { -+impl Debug for Literal { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - match self { -- Literal::Compiler(t) => t.fmt(f), -- Literal::Fallback(t) => t.fmt(f), -+ Literal::Compiler(t) => Debug::fmt(t, f), -+ Literal::Fallback(t) => Debug::fmt(t, f), - } - } - } -diff --git a/third_party/rust/proc-macro2/tests/comments.rs b/third_party/rust/proc-macro2/tests/comments.rs -new file mode 100644 -index 0000000000..708cccb880 ---- /dev/null -+++ b/third_party/rust/proc-macro2/tests/comments.rs -@@ -0,0 +1,103 @@ -+use proc_macro2::{Delimiter, Literal, Spacing, TokenStream, TokenTree}; -+ -+// #[doc = "..."] -> "..." -+fn lit_of_outer_doc_comment(tokens: TokenStream) -> Literal { -+ lit_of_doc_comment(tokens, false) -+} -+ -+// #![doc = "..."] -> "..." -+fn lit_of_inner_doc_comment(tokens: TokenStream) -> Literal { -+ lit_of_doc_comment(tokens, true) -+} -+ -+fn lit_of_doc_comment(tokens: TokenStream, inner: bool) -> Literal { -+ let mut iter = tokens.clone().into_iter(); -+ match iter.next().unwrap() { -+ TokenTree::Punct(punct) => { -+ assert_eq!(punct.as_char(), '#'); -+ assert_eq!(punct.spacing(), Spacing::Alone); -+ } -+ _ => panic!("wrong token {:?}", tokens), -+ } -+ if inner { -+ match iter.next().unwrap() { -+ TokenTree::Punct(punct) => { -+ assert_eq!(punct.as_char(), '!'); -+ assert_eq!(punct.spacing(), Spacing::Alone); -+ } -+ _ => panic!("wrong token {:?}", tokens), -+ } -+ } -+ iter = match iter.next().unwrap() { -+ TokenTree::Group(group) => { -+ assert_eq!(group.delimiter(), Delimiter::Bracket); -+ assert!(iter.next().is_none(), "unexpected token {:?}", tokens); -+ group.stream().into_iter() -+ } -+ _ => panic!("wrong token {:?}", tokens), -+ }; -+ match iter.next().unwrap() { -+ TokenTree::Ident(ident) => assert_eq!(ident.to_string(), "doc"), -+ _ => panic!("wrong token {:?}", tokens), -+ } -+ match iter.next().unwrap() { -+ TokenTree::Punct(punct) => { -+ assert_eq!(punct.as_char(), '='); -+ assert_eq!(punct.spacing(), Spacing::Alone); -+ } -+ _ => panic!("wrong token {:?}", tokens), -+ } -+ match iter.next().unwrap() { -+ TokenTree::Literal(literal) => { -+ assert!(iter.next().is_none(), "unexpected token {:?}", tokens); -+ literal -+ } -+ _ => panic!("wrong token {:?}", tokens), -+ } -+} -+ -+#[test] -+fn closed_immediately() { -+ let stream = "/**/".parse::<TokenStream>().unwrap(); -+ let tokens = stream.into_iter().collect::<Vec<_>>(); -+ assert!(tokens.is_empty(), "not empty -- {:?}", tokens); -+} -+ -+#[test] -+fn incomplete() { -+ assert!("/*/".parse::<TokenStream>().is_err()); -+} -+ -+#[test] -+fn lit() { -+ let stream = "/// doc".parse::<TokenStream>().unwrap(); -+ let lit = lit_of_outer_doc_comment(stream); -+ assert_eq!(lit.to_string(), "\" doc\""); -+ -+ let stream = "//! doc".parse::<TokenStream>().unwrap(); -+ let lit = lit_of_inner_doc_comment(stream); -+ assert_eq!(lit.to_string(), "\" doc\""); -+ -+ let stream = "/** doc */".parse::<TokenStream>().unwrap(); -+ let lit = lit_of_outer_doc_comment(stream); -+ assert_eq!(lit.to_string(), "\" doc \""); -+ -+ let stream = "/*! doc */".parse::<TokenStream>().unwrap(); -+ let lit = lit_of_inner_doc_comment(stream); -+ assert_eq!(lit.to_string(), "\" doc \""); -+} -+ -+#[test] -+fn carriage_return() { -+ let stream = "///\r\n".parse::<TokenStream>().unwrap(); -+ let lit = lit_of_outer_doc_comment(stream); -+ assert_eq!(lit.to_string(), "\"\""); -+ -+ let stream = "/**\r\n*/".parse::<TokenStream>().unwrap(); -+ let lit = lit_of_outer_doc_comment(stream); -+ assert_eq!(lit.to_string(), "\"\\r\\n\""); -+ -+ "///\r".parse::<TokenStream>().unwrap_err(); -+ "///\r \n".parse::<TokenStream>().unwrap_err(); -+ "/**\r \n*/".parse::<TokenStream>().unwrap_err(); -+} -diff --git a/third_party/rust/proc-macro2/tests/marker.rs b/third_party/rust/proc-macro2/tests/marker.rs -index 7af2539c1a..70e57677cd 100644 ---- a/third_party/rust/proc-macro2/tests/marker.rs -+++ b/third_party/rust/proc-macro2/tests/marker.rs -@@ -57,3 +57,36 @@ mod semver_exempt { - - assert_impl!(SourceFile is not Send or Sync); - } -+ -+#[cfg(not(no_libprocmacro_unwind_safe))] -+mod unwind_safe { -+ use super::*; -+ use std::panic::{RefUnwindSafe, UnwindSafe}; -+ -+ macro_rules! assert_unwind_safe { -+ ($($types:ident)*) => { -+ $( -+ assert_impl!($types is UnwindSafe and RefUnwindSafe); -+ )* -+ }; -+ } -+ -+ assert_unwind_safe! { -+ Delimiter -+ Group -+ Ident -+ LexError -+ Literal -+ Punct -+ Spacing -+ Span -+ TokenStream -+ TokenTree -+ } -+ -+ #[cfg(procmacro2_semver_exempt)] -+ assert_unwind_safe! { -+ LineColumn -+ SourceFile -+ } -+} -diff --git a/third_party/rust/proc-macro2/tests/test.rs b/third_party/rust/proc-macro2/tests/test.rs -index 7528388138..1e9f633944 100644 ---- a/third_party/rust/proc-macro2/tests/test.rs -+++ b/third_party/rust/proc-macro2/tests/test.rs -@@ -1,7 +1,6 @@ -+use proc_macro2::{Ident, Literal, Punct, Spacing, Span, TokenStream, TokenTree}; - use std::str::{self, FromStr}; - --use proc_macro2::{Ident, Literal, Spacing, Span, TokenStream, TokenTree}; -- - #[test] - fn idents() { - assert_eq!( -@@ -84,6 +83,11 @@ fn literal_string() { - assert_eq!(Literal::string("didn't").to_string(), "\"didn't\""); - } - -+#[test] -+fn literal_raw_string() { -+ "r\"\r\n\"".parse::<TokenStream>().unwrap(); -+} -+ - #[test] - fn literal_character() { - assert_eq!(Literal::character('x').to_string(), "'x'"); -@@ -110,6 +114,37 @@ fn literal_suffix() { - assert_eq!(token_count("1._0"), 3); - assert_eq!(token_count("1._m"), 3); - assert_eq!(token_count("\"\"s"), 1); -+ assert_eq!(token_count("r\"\"r"), 1); -+ assert_eq!(token_count("b\"\"b"), 1); -+ assert_eq!(token_count("br\"\"br"), 1); -+ assert_eq!(token_count("r#\"\"#r"), 1); -+ assert_eq!(token_count("'c'c"), 1); -+ assert_eq!(token_count("b'b'b"), 1); -+ assert_eq!(token_count("0E"), 1); -+ assert_eq!(token_count("0o0A"), 1); -+ assert_eq!(token_count("0E--0"), 4); -+ assert_eq!(token_count("0.0ECMA"), 1); -+} -+ -+#[test] -+fn literal_iter_negative() { -+ let negative_literal = Literal::i32_suffixed(-3); -+ let tokens = TokenStream::from(TokenTree::Literal(negative_literal)); -+ let mut iter = tokens.into_iter(); -+ match iter.next().unwrap() { -+ TokenTree::Punct(punct) => { -+ assert_eq!(punct.as_char(), '-'); -+ assert_eq!(punct.spacing(), Spacing::Alone); -+ } -+ unexpected => panic!("unexpected token {:?}", unexpected), -+ } -+ match iter.next().unwrap() { -+ TokenTree::Literal(literal) => { -+ assert_eq!(literal.to_string(), "3i32"); -+ } -+ unexpected => panic!("unexpected token {:?}", unexpected), -+ } -+ assert!(iter.next().is_none()); - } - - #[test] -@@ -161,41 +196,21 @@ fn fail() { - fail("' static"); - fail("r#1"); - fail("r#_"); -+ fail("\"\\u{0000000}\""); // overlong unicode escape (rust allows at most 6 hex digits) -+ fail("\"\\u{999999}\""); // outside of valid range of char -+ fail("\"\\u{_0}\""); // leading underscore -+ fail("\"\\u{}\""); // empty -+ fail("b\"\r\""); // bare carriage return in byte string -+ fail("r\"\r\""); // bare carriage return in raw string -+ fail("\"\\\r \""); // backslash carriage return -+ fail("'aa'aa"); -+ fail("br##\"\"#"); -+ fail("\"\\\n\u{85}\r\""); - } - - #[cfg(span_locations)] - #[test] - fn span_test() { -- use proc_macro2::TokenTree; -- -- fn check_spans(p: &str, mut lines: &[(usize, usize, usize, usize)]) { -- let ts = p.parse::<TokenStream>().unwrap(); -- check_spans_internal(ts, &mut lines); -- } -- -- fn check_spans_internal(ts: TokenStream, lines: &mut &[(usize, usize, usize, usize)]) { -- for i in ts { -- if let Some((&(sline, scol, eline, ecol), rest)) = lines.split_first() { -- *lines = rest; -- -- let start = i.span().start(); -- assert_eq!(start.line, sline, "sline did not match for {}", i); -- assert_eq!(start.column, scol, "scol did not match for {}", i); -- -- let end = i.span().end(); -- assert_eq!(end.line, eline, "eline did not match for {}", i); -- assert_eq!(end.column, ecol, "ecol did not match for {}", i); -- -- match i { -- TokenTree::Group(ref g) => { -- check_spans_internal(g.stream().clone(), lines); -- } -- _ => {} -- } -- } -- } -- } -- - check_spans( - "\ - /// This is a document comment -@@ -274,53 +289,11 @@ fn span_join() { - #[test] - fn no_panic() { - let s = str::from_utf8(b"b\'\xc2\x86 \x00\x00\x00^\"").unwrap(); -- assert!(s.parse::<proc_macro2::TokenStream>().is_err()); -+ assert!(s.parse::<TokenStream>().is_err()); - } - - #[test] --fn tricky_doc_comment() { -- let stream = "/**/".parse::<proc_macro2::TokenStream>().unwrap(); -- let tokens = stream.into_iter().collect::<Vec<_>>(); -- assert!(tokens.is_empty(), "not empty -- {:?}", tokens); -- -- let stream = "/// doc".parse::<proc_macro2::TokenStream>().unwrap(); -- let tokens = stream.into_iter().collect::<Vec<_>>(); -- assert!(tokens.len() == 2, "not length 2 -- {:?}", tokens); -- match tokens[0] { -- proc_macro2::TokenTree::Punct(ref tt) => assert_eq!(tt.as_char(), '#'), -- _ => panic!("wrong token {:?}", tokens[0]), -- } -- let mut tokens = match tokens[1] { -- proc_macro2::TokenTree::Group(ref tt) => { -- assert_eq!(tt.delimiter(), proc_macro2::Delimiter::Bracket); -- tt.stream().into_iter() -- } -- _ => panic!("wrong token {:?}", tokens[0]), -- }; -- -- match tokens.next().unwrap() { -- proc_macro2::TokenTree::Ident(ref tt) => assert_eq!(tt.to_string(), "doc"), -- t => panic!("wrong token {:?}", t), -- } -- match tokens.next().unwrap() { -- proc_macro2::TokenTree::Punct(ref tt) => assert_eq!(tt.as_char(), '='), -- t => panic!("wrong token {:?}", t), -- } -- match tokens.next().unwrap() { -- proc_macro2::TokenTree::Literal(ref tt) => { -- assert_eq!(tt.to_string(), "\" doc\""); -- } -- t => panic!("wrong token {:?}", t), -- } -- assert!(tokens.next().is_none()); -- -- let stream = "//! doc".parse::<proc_macro2::TokenStream>().unwrap(); -- let tokens = stream.into_iter().collect::<Vec<_>>(); -- assert!(tokens.len() == 3, "not length 3 -- {:?}", tokens); --} -- --#[test] --fn op_before_comment() { -+fn punct_before_comment() { - let mut tts = TokenStream::from_str("~// comment").unwrap().into_iter(); - match tts.next().unwrap() { - TokenTree::Punct(tt) => { -@@ -331,6 +304,22 @@ fn op_before_comment() { - } - } - -+#[test] -+fn joint_last_token() { -+ // This test verifies that we match the behavior of libproc_macro *not* in -+ // the range nightly-2020-09-06 through nightly-2020-09-10, in which this -+ // behavior was temporarily broken. -+ // See https://github.com/rust-lang/rust/issues/76399 -+ -+ let joint_punct = Punct::new(':', Spacing::Joint); -+ let stream = TokenStream::from(TokenTree::Punct(joint_punct)); -+ let punct = match stream.into_iter().next().unwrap() { -+ TokenTree::Punct(punct) => punct, -+ _ => unreachable!(), -+ }; -+ assert_eq!(punct.spacing(), Spacing::Joint); -+} -+ - #[test] - fn raw_identifier() { - let mut tts = TokenStream::from_str("r#dyn").unwrap().into_iter(); -@@ -345,11 +334,11 @@ fn raw_identifier() { - fn test_debug_ident() { - let ident = Ident::new("proc_macro", Span::call_site()); - -- #[cfg(not(procmacro2_semver_exempt))] -+ #[cfg(not(span_locations))] - let expected = "Ident(proc_macro)"; - -- #[cfg(procmacro2_semver_exempt)] -- let expected = "Ident { sym: proc_macro, span: bytes(0..0) }"; -+ #[cfg(span_locations)] -+ let expected = "Ident { sym: proc_macro }"; - - assert_eq!(expected, format!("{:?}", ident)); - } -@@ -358,7 +347,7 @@ fn test_debug_ident() { - fn test_debug_tokenstream() { - let tts = TokenStream::from_str("[a + 1]").unwrap(); - -- #[cfg(not(procmacro2_semver_exempt))] -+ #[cfg(not(span_locations))] - let expected = "\ - TokenStream [ - Group { -@@ -368,7 +357,7 @@ TokenStream [ - sym: a, - }, - Punct { -- op: '+', -+ char: '+', - spacing: Alone, - }, - Literal { -@@ -379,7 +368,7 @@ TokenStream [ - ]\ - "; - -- #[cfg(not(procmacro2_semver_exempt))] -+ #[cfg(not(span_locations))] - let expected_before_trailing_commas = "\ - TokenStream [ - Group { -@@ -389,7 +378,7 @@ TokenStream [ - sym: a - }, - Punct { -- op: '+', -+ char: '+', - spacing: Alone - }, - Literal { -@@ -400,7 +389,7 @@ TokenStream [ - ]\ - "; - -- #[cfg(procmacro2_semver_exempt)] -+ #[cfg(span_locations)] - let expected = "\ - TokenStream [ - Group { -@@ -411,7 +400,7 @@ TokenStream [ - span: bytes(2..3), - }, - Punct { -- op: '+', -+ char: '+', - spacing: Alone, - span: bytes(4..5), - }, -@@ -425,7 +414,7 @@ TokenStream [ - ]\ - "; - -- #[cfg(procmacro2_semver_exempt)] -+ #[cfg(span_locations)] - let expected_before_trailing_commas = "\ - TokenStream [ - Group { -@@ -436,7 +425,7 @@ TokenStream [ - span: bytes(2..3) - }, - Punct { -- op: '+', -+ char: '+', - spacing: Alone, - span: bytes(4..5) - }, -@@ -464,3 +453,80 @@ fn default_tokenstream_is_empty() { - - assert!(default_token_stream.is_empty()); - } -+ -+#[test] -+fn tuple_indexing() { -+ // This behavior may change depending on https://github.com/rust-lang/rust/pull/71322 -+ let mut tokens = "tuple.0.0".parse::<TokenStream>().unwrap().into_iter(); -+ assert_eq!("tuple", tokens.next().unwrap().to_string()); -+ assert_eq!(".", tokens.next().unwrap().to_string()); -+ assert_eq!("0.0", tokens.next().unwrap().to_string()); -+ assert!(tokens.next().is_none()); -+} -+ -+#[cfg(span_locations)] -+#[test] -+fn non_ascii_tokens() { -+ check_spans("// abc", &[]); -+ check_spans("// ábc", &[]); -+ check_spans("// abc x", &[]); -+ check_spans("// ábc x", &[]); -+ check_spans("/* abc */ x", &[(1, 10, 1, 11)]); -+ check_spans("/* ábc */ x", &[(1, 10, 1, 11)]); -+ check_spans("/* ab\nc */ x", &[(2, 5, 2, 6)]); -+ check_spans("/* áb\nc */ x", &[(2, 5, 2, 6)]); -+ check_spans("/*** abc */ x", &[(1, 12, 1, 13)]); -+ check_spans("/*** ábc */ x", &[(1, 12, 1, 13)]); -+ check_spans(r#""abc""#, &[(1, 0, 1, 5)]); -+ check_spans(r#""ábc""#, &[(1, 0, 1, 5)]); -+ check_spans(r###"r#"abc"#"###, &[(1, 0, 1, 8)]); -+ check_spans(r###"r#"ábc"#"###, &[(1, 0, 1, 8)]); -+ check_spans("r#\"a\nc\"#", &[(1, 0, 2, 3)]); -+ check_spans("r#\"á\nc\"#", &[(1, 0, 2, 3)]); -+ check_spans("'a'", &[(1, 0, 1, 3)]); -+ check_spans("'á'", &[(1, 0, 1, 3)]); -+ check_spans("//! abc", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]); -+ check_spans("//! ábc", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]); -+ check_spans("//! abc\n", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]); -+ check_spans("//! ábc\n", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]); -+ check_spans("/*! abc */", &[(1, 0, 1, 10), (1, 0, 1, 10), (1, 0, 1, 10)]); -+ check_spans("/*! ábc */", &[(1, 0, 1, 10), (1, 0, 1, 10), (1, 0, 1, 10)]); -+ check_spans("/*! a\nc */", &[(1, 0, 2, 4), (1, 0, 2, 4), (1, 0, 2, 4)]); -+ check_spans("/*! á\nc */", &[(1, 0, 2, 4), (1, 0, 2, 4), (1, 0, 2, 4)]); -+ check_spans("abc", &[(1, 0, 1, 3)]); -+ check_spans("ábc", &[(1, 0, 1, 3)]); -+ check_spans("ábć", &[(1, 0, 1, 3)]); -+ check_spans("abc// foo", &[(1, 0, 1, 3)]); -+ check_spans("ábc// foo", &[(1, 0, 1, 3)]); -+ check_spans("ábć// foo", &[(1, 0, 1, 3)]); -+ check_spans("b\"a\\\n c\"", &[(1, 0, 2, 3)]); -+ check_spans("b\"a\\\n\u{00a0}c\"", &[(1, 0, 2, 3)]); -+} -+ -+#[cfg(span_locations)] -+fn check_spans(p: &str, mut lines: &[(usize, usize, usize, usize)]) { -+ let ts = p.parse::<TokenStream>().unwrap(); -+ check_spans_internal(ts, &mut lines); -+ assert!(lines.is_empty(), "leftover ranges: {:?}", lines); -+} -+ -+#[cfg(span_locations)] -+fn check_spans_internal(ts: TokenStream, lines: &mut &[(usize, usize, usize, usize)]) { -+ for i in ts { -+ if let Some((&(sline, scol, eline, ecol), rest)) = lines.split_first() { -+ *lines = rest; -+ -+ let start = i.span().start(); -+ assert_eq!(start.line, sline, "sline did not match for {}", i); -+ assert_eq!(start.column, scol, "scol did not match for {}", i); -+ -+ let end = i.span().end(); -+ assert_eq!(end.line, eline, "eline did not match for {}", i); -+ assert_eq!(end.column, ecol, "ecol did not match for {}", i); -+ -+ if let TokenTree::Group(g) = i { -+ check_spans_internal(g.stream().clone(), lines); -+ } -+ } -+ } -+} -diff --git a/third_party/rust/proc-macro2/tests/test_fmt.rs b/third_party/rust/proc-macro2/tests/test_fmt.rs -new file mode 100644 -index 0000000000..99a0aee5c8 ---- /dev/null -+++ b/third_party/rust/proc-macro2/tests/test_fmt.rs -@@ -0,0 +1,26 @@ -+use proc_macro2::{Delimiter, Group, Ident, Span, TokenStream, TokenTree}; -+use std::iter::{self, FromIterator}; -+ -+#[test] -+fn test_fmt_group() { -+ let ident = Ident::new("x", Span::call_site()); -+ let inner = TokenStream::from_iter(iter::once(TokenTree::Ident(ident))); -+ let parens_empty = Group::new(Delimiter::Parenthesis, TokenStream::new()); -+ let parens_nonempty = Group::new(Delimiter::Parenthesis, inner.clone()); -+ let brackets_empty = Group::new(Delimiter::Bracket, TokenStream::new()); -+ let brackets_nonempty = Group::new(Delimiter::Bracket, inner.clone()); -+ let braces_empty = Group::new(Delimiter::Brace, TokenStream::new()); -+ let braces_nonempty = Group::new(Delimiter::Brace, inner.clone()); -+ let none_empty = Group::new(Delimiter::None, TokenStream::new()); -+ let none_nonempty = Group::new(Delimiter::None, inner.clone()); -+ -+ // Matches libproc_macro. -+ assert_eq!("()", parens_empty.to_string()); -+ assert_eq!("(x)", parens_nonempty.to_string()); -+ assert_eq!("[]", brackets_empty.to_string()); -+ assert_eq!("[x]", brackets_nonempty.to_string()); -+ assert_eq!("{ }", braces_empty.to_string()); -+ assert_eq!("{ x }", braces_nonempty.to_string()); -+ assert_eq!("", none_empty.to_string()); -+ assert_eq!("x", none_nonempty.to_string()); -+} -diff --git a/third_party/rust/spirv-cross-internal/.cargo-checksum.json b/third_party/rust/spirv-cross-internal/.cargo-checksum.json -index 3c732d6d0e..014aa640e1 100644 ---- a/third_party/rust/spirv-cross-internal/.cargo-checksum.json -+++ b/third_party/rust/spirv-cross-internal/.cargo-checksum.json -@@ -1 +1 @@ --{"files":{"Cargo.toml":"32644850d6dd8a8496fcf2dd0327dfc18a41f87bbd5f0922e174a905babde20d","build.rs":"68d1e7d99b4d890e21606aa7e7904d4f9b8caed6c0951bb8f5028745a7103d1e","src/bindings_native.rs":"6aa4e3a3bd73a638b3282405c0eaf2565ff8f364919c509f94f79e326679b03e","src/bindings_wasm.rs":"331d19691566beb163fc459d630e9830167cc86ec8cacde6be53fb0a7ca2b1be","src/bindings_wasm_functions.rs":"2515dd91e98e769fe282e7dc4f60820f4be7365c784a9f3bd17310d18a136da8","src/compiler.rs":"a53c7e0136ea3deddbfaf158295daca36623a0e244426b7c04d2856922d91c73","src/emscripten.rs":"3169890001970610013026468739910afca0d85e00d7e34beadfdd31bbcbeeb7","src/glsl.rs":"7ca1f6a11db8e7926a813fb91298dac1c0e2f90fe5426cc985cde7d8f36c05c9","src/hlsl.rs":"3734ad89a4f51647ebeb761753cb324a48ebca724970201e7598a3763d094d73","src/lib.rs":"cc41cbbe48f3e96791ba5338c66fa1fe0e533eaed6bbdced3f008d5e9fe6c6ce","src/msl.rs":"5505d1d626d8e7903ffa9d137e7392a1670fa7b574eacc4bbd33673937b36ea7","src/ptr_util.rs":"280404beede469b2c9ae40536323515a9213dac5d30014fac870a23b37672442","src/spirv.rs":"8a2cbe6b554bb6312f2aede0469338ace21e79720b5128c653e7a68c0e161277","src/vendor/SPIRV-Cross/.clang-format":"9ec4314e20afecad827a2dbd4832256be8464e88aab4a53fab45173ed129b2ed","src/vendor/SPIRV-Cross/.gitignore":"7f23cc92ddb5e1f584447e98d3e8ab6543fc182f1543f0f6ec29856f9250cdd6","src/vendor/SPIRV-Cross/.travis.yml":"abcc1b2f622b65feafd3e37a2b5e867fce3cf7211cae9fb2bf92a6de79100be4","src/vendor/SPIRV-Cross/CMakeLists.txt":"0972ab271e1eecdfe41ae0a85bf14ce7fe142b7609f8d2965b2c94f92c63b6aa","src/vendor/SPIRV-Cross/CODE_OF_CONDUCT.md":"a25e58cd66a9543e1500db9a5c3c027e874893ad1a264530bf26eb10918b5d80","src/vendor/SPIRV-Cross/GLSL.std.450.h":"20f32378793c5f416bc0704f44345c2a14c99cba3f411e3beaf1bcea372d58ba","src/vendor/SPIRV-Cross/LICENSE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","src/vendor/SPIRV-Cross/Makefile":"e2255d32e47d447b100ce3cd0753d0758dc26460e0440d14cc157d4caf9b62f1","src/vendor/SPIRV-Cross/README.md":"b944fc5b1de709089fc3cae0dba09186ce2e43b64de6dcae1423ba1c139ee395","src/vendor/SPIRV-Cross/appveyor.yml":"0f18b8ae5fadc027a20f69307fc32e56a97edfbdcb55ac392852308f88545a04","src/vendor/SPIRV-Cross/include/spirv_cross/barrier.hpp":"bb796625e89f75e239e92f9a61597d421ffe5fb1902d200691ebe95cf856a1f8","src/vendor/SPIRV-Cross/include/spirv_cross/external_interface.h":"cdceda962d87133e44989510edc944e99052d713869b406a8b6b2d54e3d02dd7","src/vendor/SPIRV-Cross/include/spirv_cross/image.hpp":"681d0964b144c5009424196a8bc832cb81cfe5df5b91c2f3e1bfb625765a0c50","src/vendor/SPIRV-Cross/include/spirv_cross/internal_interface.hpp":"ab8851e5708b944a9bf340ce17297d94bef4876d30c833ea83d44b16f60726f6","src/vendor/SPIRV-Cross/include/spirv_cross/sampler.hpp":"b0b1bd4796b4315e826985c224ea5fa7d5bc823fcd6091f7527a5e18d9ae42fb","src/vendor/SPIRV-Cross/include/spirv_cross/thread_group.hpp":"70d9e0400f62de71d3775972eadc196ddb218254fa8155e8e33daf8d99957cc0","src/vendor/SPIRV-Cross/main.cpp":"ab2835f6dff9299f562a89755893f98a4bd946d4460abca885ba2172ebce851c","src/vendor/SPIRV-Cross/pkg-config/spirv-cross-c-shared.pc.in":"75a27e069ee07362bc6b7412b2c4e1270778dd639a8b96b8afbb113d21de79e7","src/vendor/SPIRV-Cross/spirv.h":"2c19cd1d262a3757e92276fbaa8e1a706b2328a92f47bda88f849b5cebebb630","src/vendor/SPIRV-Cross/spirv.hpp":"eb7c39a017f0a33e9d9bae7556c678c2840af4cc0beb98b2aeff9d651e370128","src/vendor/SPIRV-Cross/spirv_cfg.cpp":"09b756068d95a87a65a186831484fe21a973d3eb19675225b23864b9d37fe3d0","src/vendor/SPIRV-Cross/spirv_cfg.hpp":"ad98c4e82d6da3ed450dfc7939814115ae6b29ba2a25b0148cfc8c88774055b5","src/vendor/SPIRV-Cross/spirv_common.hpp":"5d0658a6fe9ac2f628754d2439b4d26ec8df7e50e4b196567cd4c7e7b8ce7574","src/vendor/SPIRV-Cross/spirv_cpp.cpp":"d067269ec6fc56860b4ed39edddf0a127f5e2d091512a85a79f02d5f3beccd19","src/vendor/SPIRV-Cross/spirv_cpp.hpp":"751ce82c70a399781f18aca54ea7fbb98083b98706f2a6be1cd1aa90627ef597","src/vendor/SPIRV-Cross/spirv_cross.cpp":"225b4cf4c7f8868019680d0a75a3da7983db428783ee1a3dcbb8c2765a71e79a","src/vendor/SPIRV-Cross/spirv_cross.hpp":"7eab2d7ae4b25a3c4fe85631e664727e036ae23a776aeb8c17db23f08020258a","src/vendor/SPIRV-Cross/spirv_cross_c.cpp":"80f438f4700f0b0b02547771f82be0610ba5e24ba3edb56d4331d59a206a4c2e","src/vendor/SPIRV-Cross/spirv_cross_c.h":"8b0ad63ed9fe52bc62f305afa27b5e33d9bd689a8b3f9935353742faf88a1e91","src/vendor/SPIRV-Cross/spirv_cross_containers.hpp":"409f60a5cb1dba1d0c96ef61761d8643402fc5ab67cecce12f6af3d135cfa338","src/vendor/SPIRV-Cross/spirv_cross_error_handling.hpp":"45868796346eef895cc05825582e60d26c34ec35d1a2b97f5e172f05fc565b19","src/vendor/SPIRV-Cross/spirv_cross_parsed_ir.cpp":"7c7e08db4dfc1084fd9cd266a6f829d35a6b2856198b16307a44f4d1c0743106","src/vendor/SPIRV-Cross/spirv_cross_parsed_ir.hpp":"d15446565eaa430bf2b14b596b3e579a72095a386b1eb256afc977cdf42ec5b9","src/vendor/SPIRV-Cross/spirv_cross_util.cpp":"f2426dccad2fff44053f6b1b9558719471a1ba0445c317f2c0311bc0d8b4636d","src/vendor/SPIRV-Cross/spirv_cross_util.hpp":"63ca5b2d6c80b5ad39473d6841676e48d5db3d2cbcb252fe6a6db0ef2077f0f5","src/vendor/SPIRV-Cross/spirv_glsl.cpp":"c1704189895442d593819472d3f852979107ac1798375d5a44d8f97be17fa3b5","src/vendor/SPIRV-Cross/spirv_glsl.hpp":"fb5e00ff589e3c5a25c5a15e78cf4809b753ebe04c84a008dc977330b8cbbc27","src/vendor/SPIRV-Cross/spirv_hlsl.cpp":"549ff42d0773a3f9e555d1aebd4c0084709e11528082f47c5f2b8b07de029f7c","src/vendor/SPIRV-Cross/spirv_hlsl.hpp":"18f303e7a384acf0e14677b579b100aee838813f54735330f0d1387f2493b363","src/vendor/SPIRV-Cross/spirv_msl.cpp":"7266afeb827e50782cb35362788d27fa9bd641992380008604ea1a4e48ec9c37","src/vendor/SPIRV-Cross/spirv_msl.hpp":"76b609e0b8d2f421c51e98d6357fcf44666b0d510935e083e4e02f20a80051e1","src/vendor/SPIRV-Cross/spirv_parser.cpp":"4def4db8c77967dcd2d6d93330343dc6ebb309e8cd696f52ee568a7c3ee97036","src/vendor/SPIRV-Cross/spirv_parser.hpp":"fc5f92184d1b4986f78088bee8ed7ddb9b342a34f9a3e55a4a594187292b66b8","src/vendor/SPIRV-Cross/spirv_reflect.cpp":"995a4e4315f67d4a2084e2b5d982de9baf72c7e265dde71d03ae0b8a29a24b92","src/vendor/SPIRV-Cross/spirv_reflect.hpp":"a874b40be0b210c69718e87a90e9add24653957656a995d83656f0918cfd10e4","src/wrapper.cpp":"7800cec5564dc1c7c13059cb1b1cac8d9be9248bbc887d5176600980c0d18142","src/wrapper.hpp":"b9a4f846bf57ee7a10fbb81f8f49df96ad11b1e5749c3c510925bb9b029ac08a","tests/common/mod.rs":"2843bf104c7938d93065f7b5688c9f063ad9e5720c407c737aedc5f2dee5a80f","tests/glsl_tests.rs":"ddd85107370dbfcde9d004d6717e229a7278d29ecba375828d8cb79e86625f66","tests/hlsl_tests.rs":"2058cb590c5ab85a636c93c18d0f2a79eb5ea5e647b7f10a2c83fbf394964dd6","tests/msl_tests.rs":"211d3b9cb43455a4c55bd619c05acdd21953358580c50ae75cac3f06eb26c5dd","tests/shaders/array.vert":"d0dab7ddea131e069961054f40a164602448aa78720b7ff480e141d1f7b0b2d6","tests/shaders/array.vert.spv":"8e44421590ade1716be66ad39f60fb1ce58eedeab8f0806335a7369687b308b1","tests/shaders/multiple_entry_points.cl":"2abbe57f2387f07f7f5f4cd375e47900be9c13bdc79aa0ed98a43a798cb0df81","tests/shaders/multiple_entry_points.cl.spv":"bdd34ce6765dbeab637631c3cbdf251532870d9fd6cd6c54883c0c872058ab3b","tests/shaders/rasterize_disabled.vert":"da6de172549830216933c44edf18b13113d7ca87462e3d09ad50dfc9c9836821","tests/shaders/rasterize_disabled.vert.spv":"2ba809eb500ed6e5a067389ccc056551e796e7019517593d110fb62c9dca2056","tests/shaders/sampler.frag":"4c568e65176afe596dd8ef279485e992607e94d612786214ae1c6702d0322e1f","tests/shaders/sampler.frag.spv":"bd7bd1973a82dcfdf5755361fa4dd420fdf1c32c5de0a6f0896a8d5971f98684","tests/shaders/simple.vert":"ea143c97dff5ef03728b96b2dd893bdc59d56651581ecf9fe50f10807b0efdd0","tests/shaders/simple.vert.spv":"a2b5094ffd76288e0d08c37ce0351e28f20bb6d80ddd73fc44a71c1c7cbbf7db","tests/shaders/specialization.comp":"ce32fa1615737209f2e465ea347d79030ddcb33a88c38447e7cde7dffc920163","tests/shaders/specialization.comp.spv":"848604e37b870b8999692b266677be2ce0df6ce38093a0d81e6bc43d0bdf8a3f","tests/shaders/struct.frag":"d8840bb1961d6f14609b00ee54406c1e3ea31cecd8231b77cfb73d28b71910c0","tests/shaders/struct.frag.spv":"774aa886374eb95abf9bb7d0045ee77d97e26529e9ec96b90991a515fdbca4be","tests/shaders/struct.vert":"9299cda83ddb5b5c3d95ab0d057e4df2af137dfd92d6c4d3e96295b7d42e29a1","tests/shaders/struct.vert.spv":"4a82bdee72616ac058bc60d4255efa3e78199a2b8597570c013bebbee7107fb7","tests/shaders/two_ubo.vert":"be109b2c65e5e9e1bb0dab968d7f651232f6b1c46935a3928f980bf7a40f2d62","tests/shaders/two_ubo.vert.spv":"efd14e2d0a782d61dd944711f30b9e7fcb14af17593c1fe4e11cf2b7e232bcc2","tests/shaders/workgroup.comp":"478044b5392e0d1fb042253d71ea6bf7b8a014af4a6ee35d8db4c5343ac69739","tests/shaders/workgroup.comp.spv":"72f636fe3d1d6d0c5963f71bf4349c7e40d544331b33b6b64fb5b65784e6abee","tests/spirv_tests.rs":"6de5c893f631d550fc86853537bddb824ffb534a0a7f130406be3b9ed166f198"},"package":null} -\ No newline at end of file -+{"files":{"Cargo.toml":"32644850d6dd8a8496fcf2dd0327dfc18a41f87bbd5f0922e174a905babde20d","build.rs":"68d1e7d99b4d890e21606aa7e7904d4f9b8caed6c0951bb8f5028745a7103d1e","src/bindings_native.rs":"6aa4e3a3bd73a638b3282405c0eaf2565ff8f364919c509f94f79e326679b03e","src/bindings_wasm.rs":"331d19691566beb163fc459d630e9830167cc86ec8cacde6be53fb0a7ca2b1be","src/bindings_wasm_functions.rs":"2515dd91e98e769fe282e7dc4f60820f4be7365c784a9f3bd17310d18a136da8","src/compiler.rs":"a53c7e0136ea3deddbfaf158295daca36623a0e244426b7c04d2856922d91c73","src/emscripten.rs":"3169890001970610013026468739910afca0d85e00d7e34beadfdd31bbcbeeb7","src/glsl.rs":"7ca1f6a11db8e7926a813fb91298dac1c0e2f90fe5426cc985cde7d8f36c05c9","src/hlsl.rs":"3734ad89a4f51647ebeb761753cb324a48ebca724970201e7598a3763d094d73","src/lib.rs":"cc41cbbe48f3e96791ba5338c66fa1fe0e533eaed6bbdced3f008d5e9fe6c6ce","src/msl.rs":"5505d1d626d8e7903ffa9d137e7392a1670fa7b574eacc4bbd33673937b36ea7","src/ptr_util.rs":"280404beede469b2c9ae40536323515a9213dac5d30014fac870a23b37672442","src/spirv.rs":"8a2cbe6b554bb6312f2aede0469338ace21e79720b5128c653e7a68c0e161277","src/vendor/SPIRV-Cross/.clang-format":"9ec4314e20afecad827a2dbd4832256be8464e88aab4a53fab45173ed129b2ed","src/vendor/SPIRV-Cross/.travis.yml":"abcc1b2f622b65feafd3e37a2b5e867fce3cf7211cae9fb2bf92a6de79100be4","src/vendor/SPIRV-Cross/CMakeLists.txt":"0972ab271e1eecdfe41ae0a85bf14ce7fe142b7609f8d2965b2c94f92c63b6aa","src/vendor/SPIRV-Cross/CODE_OF_CONDUCT.md":"a25e58cd66a9543e1500db9a5c3c027e874893ad1a264530bf26eb10918b5d80","src/vendor/SPIRV-Cross/GLSL.std.450.h":"20f32378793c5f416bc0704f44345c2a14c99cba3f411e3beaf1bcea372d58ba","src/vendor/SPIRV-Cross/LICENSE":"cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30","src/vendor/SPIRV-Cross/Makefile":"e2255d32e47d447b100ce3cd0753d0758dc26460e0440d14cc157d4caf9b62f1","src/vendor/SPIRV-Cross/README.md":"b944fc5b1de709089fc3cae0dba09186ce2e43b64de6dcae1423ba1c139ee395","src/vendor/SPIRV-Cross/appveyor.yml":"0f18b8ae5fadc027a20f69307fc32e56a97edfbdcb55ac392852308f88545a04","src/vendor/SPIRV-Cross/include/spirv_cross/barrier.hpp":"bb796625e89f75e239e92f9a61597d421ffe5fb1902d200691ebe95cf856a1f8","src/vendor/SPIRV-Cross/include/spirv_cross/external_interface.h":"cdceda962d87133e44989510edc944e99052d713869b406a8b6b2d54e3d02dd7","src/vendor/SPIRV-Cross/include/spirv_cross/image.hpp":"681d0964b144c5009424196a8bc832cb81cfe5df5b91c2f3e1bfb625765a0c50","src/vendor/SPIRV-Cross/include/spirv_cross/internal_interface.hpp":"ab8851e5708b944a9bf340ce17297d94bef4876d30c833ea83d44b16f60726f6","src/vendor/SPIRV-Cross/include/spirv_cross/sampler.hpp":"b0b1bd4796b4315e826985c224ea5fa7d5bc823fcd6091f7527a5e18d9ae42fb","src/vendor/SPIRV-Cross/include/spirv_cross/thread_group.hpp":"70d9e0400f62de71d3775972eadc196ddb218254fa8155e8e33daf8d99957cc0","src/vendor/SPIRV-Cross/main.cpp":"ab2835f6dff9299f562a89755893f98a4bd946d4460abca885ba2172ebce851c","src/vendor/SPIRV-Cross/pkg-config/spirv-cross-c-shared.pc.in":"75a27e069ee07362bc6b7412b2c4e1270778dd639a8b96b8afbb113d21de79e7","src/vendor/SPIRV-Cross/spirv.h":"2c19cd1d262a3757e92276fbaa8e1a706b2328a92f47bda88f849b5cebebb630","src/vendor/SPIRV-Cross/spirv.hpp":"eb7c39a017f0a33e9d9bae7556c678c2840af4cc0beb98b2aeff9d651e370128","src/vendor/SPIRV-Cross/spirv_cfg.cpp":"09b756068d95a87a65a186831484fe21a973d3eb19675225b23864b9d37fe3d0","src/vendor/SPIRV-Cross/spirv_cfg.hpp":"ad98c4e82d6da3ed450dfc7939814115ae6b29ba2a25b0148cfc8c88774055b5","src/vendor/SPIRV-Cross/spirv_common.hpp":"5d0658a6fe9ac2f628754d2439b4d26ec8df7e50e4b196567cd4c7e7b8ce7574","src/vendor/SPIRV-Cross/spirv_cpp.cpp":"d067269ec6fc56860b4ed39edddf0a127f5e2d091512a85a79f02d5f3beccd19","src/vendor/SPIRV-Cross/spirv_cpp.hpp":"751ce82c70a399781f18aca54ea7fbb98083b98706f2a6be1cd1aa90627ef597","src/vendor/SPIRV-Cross/spirv_cross.cpp":"225b4cf4c7f8868019680d0a75a3da7983db428783ee1a3dcbb8c2765a71e79a","src/vendor/SPIRV-Cross/spirv_cross.hpp":"7eab2d7ae4b25a3c4fe85631e664727e036ae23a776aeb8c17db23f08020258a","src/vendor/SPIRV-Cross/spirv_cross_c.cpp":"80f438f4700f0b0b02547771f82be0610ba5e24ba3edb56d4331d59a206a4c2e","src/vendor/SPIRV-Cross/spirv_cross_c.h":"8b0ad63ed9fe52bc62f305afa27b5e33d9bd689a8b3f9935353742faf88a1e91","src/vendor/SPIRV-Cross/spirv_cross_containers.hpp":"409f60a5cb1dba1d0c96ef61761d8643402fc5ab67cecce12f6af3d135cfa338","src/vendor/SPIRV-Cross/spirv_cross_error_handling.hpp":"45868796346eef895cc05825582e60d26c34ec35d1a2b97f5e172f05fc565b19","src/vendor/SPIRV-Cross/spirv_cross_parsed_ir.cpp":"7c7e08db4dfc1084fd9cd266a6f829d35a6b2856198b16307a44f4d1c0743106","src/vendor/SPIRV-Cross/spirv_cross_parsed_ir.hpp":"d15446565eaa430bf2b14b596b3e579a72095a386b1eb256afc977cdf42ec5b9","src/vendor/SPIRV-Cross/spirv_cross_util.cpp":"f2426dccad2fff44053f6b1b9558719471a1ba0445c317f2c0311bc0d8b4636d","src/vendor/SPIRV-Cross/spirv_cross_util.hpp":"63ca5b2d6c80b5ad39473d6841676e48d5db3d2cbcb252fe6a6db0ef2077f0f5","src/vendor/SPIRV-Cross/spirv_glsl.cpp":"c1704189895442d593819472d3f852979107ac1798375d5a44d8f97be17fa3b5","src/vendor/SPIRV-Cross/spirv_glsl.hpp":"fb5e00ff589e3c5a25c5a15e78cf4809b753ebe04c84a008dc977330b8cbbc27","src/vendor/SPIRV-Cross/spirv_hlsl.cpp":"549ff42d0773a3f9e555d1aebd4c0084709e11528082f47c5f2b8b07de029f7c","src/vendor/SPIRV-Cross/spirv_hlsl.hpp":"18f303e7a384acf0e14677b579b100aee838813f54735330f0d1387f2493b363","src/vendor/SPIRV-Cross/spirv_msl.cpp":"7266afeb827e50782cb35362788d27fa9bd641992380008604ea1a4e48ec9c37","src/vendor/SPIRV-Cross/spirv_msl.hpp":"76b609e0b8d2f421c51e98d6357fcf44666b0d510935e083e4e02f20a80051e1","src/vendor/SPIRV-Cross/spirv_parser.cpp":"4def4db8c77967dcd2d6d93330343dc6ebb309e8cd696f52ee568a7c3ee97036","src/vendor/SPIRV-Cross/spirv_parser.hpp":"fc5f92184d1b4986f78088bee8ed7ddb9b342a34f9a3e55a4a594187292b66b8","src/vendor/SPIRV-Cross/spirv_reflect.cpp":"995a4e4315f67d4a2084e2b5d982de9baf72c7e265dde71d03ae0b8a29a24b92","src/vendor/SPIRV-Cross/spirv_reflect.hpp":"a874b40be0b210c69718e87a90e9add24653957656a995d83656f0918cfd10e4","src/wrapper.cpp":"7800cec5564dc1c7c13059cb1b1cac8d9be9248bbc887d5176600980c0d18142","src/wrapper.hpp":"b9a4f846bf57ee7a10fbb81f8f49df96ad11b1e5749c3c510925bb9b029ac08a","tests/common/mod.rs":"2843bf104c7938d93065f7b5688c9f063ad9e5720c407c737aedc5f2dee5a80f","tests/glsl_tests.rs":"ddd85107370dbfcde9d004d6717e229a7278d29ecba375828d8cb79e86625f66","tests/hlsl_tests.rs":"2058cb590c5ab85a636c93c18d0f2a79eb5ea5e647b7f10a2c83fbf394964dd6","tests/msl_tests.rs":"211d3b9cb43455a4c55bd619c05acdd21953358580c50ae75cac3f06eb26c5dd","tests/shaders/array.vert":"d0dab7ddea131e069961054f40a164602448aa78720b7ff480e141d1f7b0b2d6","tests/shaders/array.vert.spv":"8e44421590ade1716be66ad39f60fb1ce58eedeab8f0806335a7369687b308b1","tests/shaders/multiple_entry_points.cl":"2abbe57f2387f07f7f5f4cd375e47900be9c13bdc79aa0ed98a43a798cb0df81","tests/shaders/multiple_entry_points.cl.spv":"bdd34ce6765dbeab637631c3cbdf251532870d9fd6cd6c54883c0c872058ab3b","tests/shaders/rasterize_disabled.vert":"da6de172549830216933c44edf18b13113d7ca87462e3d09ad50dfc9c9836821","tests/shaders/rasterize_disabled.vert.spv":"2ba809eb500ed6e5a067389ccc056551e796e7019517593d110fb62c9dca2056","tests/shaders/sampler.frag":"4c568e65176afe596dd8ef279485e992607e94d612786214ae1c6702d0322e1f","tests/shaders/sampler.frag.spv":"bd7bd1973a82dcfdf5755361fa4dd420fdf1c32c5de0a6f0896a8d5971f98684","tests/shaders/simple.vert":"ea143c97dff5ef03728b96b2dd893bdc59d56651581ecf9fe50f10807b0efdd0","tests/shaders/simple.vert.spv":"a2b5094ffd76288e0d08c37ce0351e28f20bb6d80ddd73fc44a71c1c7cbbf7db","tests/shaders/specialization.comp":"ce32fa1615737209f2e465ea347d79030ddcb33a88c38447e7cde7dffc920163","tests/shaders/specialization.comp.spv":"848604e37b870b8999692b266677be2ce0df6ce38093a0d81e6bc43d0bdf8a3f","tests/shaders/struct.frag":"d8840bb1961d6f14609b00ee54406c1e3ea31cecd8231b77cfb73d28b71910c0","tests/shaders/struct.frag.spv":"774aa886374eb95abf9bb7d0045ee77d97e26529e9ec96b90991a515fdbca4be","tests/shaders/struct.vert":"9299cda83ddb5b5c3d95ab0d057e4df2af137dfd92d6c4d3e96295b7d42e29a1","tests/shaders/struct.vert.spv":"4a82bdee72616ac058bc60d4255efa3e78199a2b8597570c013bebbee7107fb7","tests/shaders/two_ubo.vert":"be109b2c65e5e9e1bb0dab968d7f651232f6b1c46935a3928f980bf7a40f2d62","tests/shaders/two_ubo.vert.spv":"efd14e2d0a782d61dd944711f30b9e7fcb14af17593c1fe4e11cf2b7e232bcc2","tests/shaders/workgroup.comp":"478044b5392e0d1fb042253d71ea6bf7b8a014af4a6ee35d8db4c5343ac69739","tests/shaders/workgroup.comp.spv":"72f636fe3d1d6d0c5963f71bf4349c7e40d544331b33b6b64fb5b65784e6abee","tests/spirv_tests.rs":"6de5c893f631d550fc86853537bddb824ffb534a0a7f130406be3b9ed166f198"},"package":null} -\ No newline at end of file -diff --git a/third_party/rust/syn/.cargo-checksum.json b/third_party/rust/syn/.cargo-checksum.json -index 77939d8fc6..704f2ed200 100644 ---- a/third_party/rust/syn/.cargo-checksum.json -+++ b/third_party/rust/syn/.cargo-checksum.json -@@ -1 +1 @@ --{"files":{"Cargo.toml":"484d29864d333a361652fa4e24e1dcfab9efa47705ffd8c106d802eb03b78da7","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"ca605417b6db8c995458f8407afaad6c177aedcc2274004283600f5638fa1b0c","benches/file.rs":"b45211cc4a0296a77aac2b4de16dbc6b5cb66adfb5afac00a77bccea87f43968","benches/rust.rs":"9cc0f62e944f1583d05c43a395a1556731501cf5976ef67a081f4f6387f883ba","build.rs":"7423ab199728d55c7d64c44b7c6729cfd93bd8273366a77707353003e27565d7","src/attr.rs":"cf81add298f0e75c35a9980a59bc3c2fd3fe933635830d1591374eeb2487c225","src/await.rs":"18f0b2ecb319991f891e300011424985e3cf33d166ea9f29f22d575fc8c83a76","src/bigint.rs":"efc7f64959980653d73fe4f8bc2a3a2904dc05f45b02c6dc15cd316fa3d7c338","src/buffer.rs":"2a432c11a3da67a21d46c2272bf9ce60a0bb20893b5750027bbd8ca3e843ab35","src/custom_keyword.rs":"589e46ec1be9a04d6de12c0b8cadf87cc1c05606ed46ddea62e9869cbca4a191","src/custom_punctuation.rs":"2ba2e294e15a0fce7ede3686c42b2891797079a724dd1193b66e7d305624c891","src/data.rs":"cc9b250d084e444782d3ff5e63c1ba387cbde8f7f2e977eab9846d920b4b8c3f","src/derive.rs":"c18878f14be5d5ab11fd7dda2d2ff1ff75c9662daf11eed033de62e4d0670a89","src/discouraged.rs":"50e10915695c4d14f64a78e20ecbef90a2cd53a7c26ee3426a2524a8ee5c9cbf","src/error.rs":"2c17a402f83ed5ae4ad96e753216771bef620235c2ff1ccc23f4bbafc7266fe1","src/export.rs":"dcae67456278c0339acfbcbb4737b8d37cfba5a150ae789f31f4be79abf7e726","src/expr.rs":"871d8eeb43cef02ef88de3bea7477b79b4eabc096a0899dde0e5750edf482f49","src/ext.rs":"b97ed549490b9248b5b5df31b3d5b08ba8791e23e6c5d3a1157a0363eb683ff3","src/file.rs":"3cc2bf5c709238d515a557f721f231c8c725b196400de051f945b549299d38a7","src/gen/fold.rs":"10b3ae33d0ce410d6bbe8b93be9d5f9e856c7dc8212133cc46b703f97d548190","src/gen/visit.rs":"e0f5798552d186024696b7bfc7219d4ff53b0e45f735a83e77cbb6b6578c5fa4","src/gen/visit_mut.rs":"9f7dda83907969971dba84d545aaa563b0728e54db97ffab5050fdf43a79c731","src/gen_helper.rs":"ea6c66388365971db6a2fc86cbb208f7eacde77e245bc8623f27a3642a3d7741","src/generics.rs":"d845d7a828863123a5187fd0fe59c9dae3636f63bad302bd035792eed3dcb1ba","src/group.rs":"119b62d8481b4b1c327639bed40e114bf1969765250b68186628247fd4144b3b","src/ident.rs":"503156ce51a7ef0420892e8dbf2ecf8fe51f42a84d52cc2c05654e1a83020cbf","src/item.rs":"213f2f58c65ee1aa222f111bc9b1be681f8fb069caed04ca56586839979318d0","src/keyword.rs":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","src/lib.rs":"24778e9f15e8025e75aca114c712716ada586b471adb3b3b69278f4d39b8a21b","src/lifetime.rs":"905359708f772ec858954badde69ee016d29e6eeba1dd205b268445b1aff6f3a","src/lit.rs":"5bb0bddb94cbd256e50e92dc091a0baa09f1be40a77058b897507f3b17191e5d","src/lookahead.rs":"5cce8b4cb345a85c24a452ea6d78eadb76f01ca0a789cbf5ce35108334904173","src/mac.rs":"6b468244cc07e3f2f10419f833d9e2ed23edbcd6dc34cf21c5947633699db964","src/macros.rs":"0d8c3bab47539aa2d00bec64e92c901ea2c9c0af74c868051c0905b82650f970","src/op.rs":"93cd44770bb110deadf807a01d9a666efe644b6e3010f4b51cae77ee7438cfbb","src/parse.rs":"5017123c249ebc65866af113a0ad671814b9873f47568180e6539a305eb0317d","src/parse_macro_input.rs":"f799aadb7216c2d333b579f48ed2fedfe07b5e96f004b25b569649ffbaa958d2","src/parse_quote.rs":"81575bf60b18b0d8624d7025a5bcc8dcd6633ad70c454dee2a06e4c391700b6c","src/pat.rs":"db0f2263b9813de1f4e3e3e0396fe0080b1e11c8090c6b4fb6fca3cfbe22bc96","src/path.rs":"32e685ac7fd2d4b9989802de8f326a8d47fa710f86ec3e45fd9d3ff8fdfe97ef","src/print.rs":"da6529c1d9d21aaf6c835f66b4e67eacb7cf91a10eb5e9a2143b49bf99b3b5e1","src/punctuated.rs":"384e7b317b26f24118eb4b0c39e949ee9f4f3e700a4c80e462342c83b2cc3282","src/sealed.rs":"896a495a5340eec898527f18bd4ddca408ea03ea0ee3af30074ff48deace778d","src/span.rs":"748c51c6feb223c26d3b1701f5bb98aee823666c775c98106cfa24fe29d8cec1","src/spanned.rs":"adddb6acae14a0fa340df302b932c31e34b259706ce56fd82ab597ec424500e1","src/stmt.rs":"fbccf2b4da7980fe6ea8d99457d291577c0f225b370c1dd97da41abf2a18fcf7","src/thread.rs":"815eca6bd64f4eef7c447f0809e84108f5428ff50225224b373efd8fbb696874","src/token.rs":"761d8d1793560eb2b631c36ddfdbb14ac65178405f095453aa0e75e8816bdbb9","src/tt.rs":"1e32ae216d14d895ff621bf32bc611f138aa00108b0090be2cbaa0affebe8e2a","src/ty.rs":"ce052e0079b65b66bea4e9502d2ff2c90ad4b867904bf7eb892eb60aa3ef219a","tests/clone.sh":"961243d42540d9992090efbbd5478b7aa395671db64a6c28cdadb6edc610ebdf","tests/common/eq.rs":"a42d339808fd32dd4bfd440c254add8c56d5e2cde3a6bf0c88621b618ce5eaa7","tests/common/mod.rs":"20a3300016351fa210a193fbb0db059ef5125fa7909585ded64790004d4977ed","tests/common/parse.rs":"17ba6d1e74aaa3f8096c6d379d803221f12d95cca69927be047d6ddf8367647f","tests/debug/gen.rs":"57bd5cf585e0b86ad00f29f09ff3db3390c4a756d503514a9b28407500dcea3c","tests/debug/mod.rs":"462d6fe34ee75c3ca1207d4db2ff3bdee5b430b9f9ca632e5671d1588d3f76b3","tests/features/error.rs":"e0581a2869cbd237c2bc18a0a85272296e1577bb5f7317a67fa85e28e04eea6f","tests/features/mod.rs":"66a2605ec54ede29208da350f2bed536dfa763b58408d64d3fca3b13de64b64f","tests/macros/mod.rs":"3f2d758c0ba76b93f54b0c1fc22ad50edff8ef42629ba4d47ac7d7f823da8359","tests/repo/mod.rs":"e851a68972c9194a9a8d7b68538b16ed79ae81cba55e1a2ce210d1b759fb1a21","tests/test_asyncness.rs":"b6c46118b036e6807d24eb0e1779244b4fca23dac0d8031e9843b3edec484ce8","tests/test_attribute.rs":"2d8f18a98c989d3f7adaaeb1aeebd4f8413365ace63feecb37cb3f9db9db4d8f","tests/test_derive_input.rs":"477d80f914c54b526f8ff229788dc0e7798d118f6dcfa348f4c99755edb347b9","tests/test_expr.rs":"f35ca80566849a36e6ba6403d9663519eff37e4224360c468fedff8b561a643e","tests/test_generics.rs":"83a5dc07f5c5701c12625399262f7120b66f01a742523f3eda28da2cf2c87eb3","tests/test_grouping.rs":"aadd75215addd9e5a8fa2f9472117d4cb80f1e8b84e07f4c0845675c9014164f","tests/test_ident.rs":"236c239dd66f543f084f44ff747d7bc3962cf11a019a279777fe972f6e17aa4c","tests/test_iterators.rs":"718938da14778dcba06324d36a99d9317c9d45d81a34c6a44c47e1fa38085e9f","tests/test_lit.rs":"7dff2661a5ac586d6ed2fe27501cb8ff62f4cf3f6c91f596bff6057c67ad7857","tests/test_meta.rs":"8444dee084882243b107dfc8a6aac27f9382f9774162d1ac8ed8ec30d60c048e","tests/test_parse_buffer.rs":"b244bb4bc41ff06d21f239e60a3d663fdec5aa4af33f2a354afef36d34f0aefc","tests/test_pat.rs":"41776b878efae9b8e340f21ffe6296e921cf309f618482efd98609c33e32c28b","tests/test_precedence.rs":"71f3ea52cda8b40166bb7416fb98774e6a653542497b521f8e183e283dcf579d","tests/test_round_trip.rs":"e0de37f45fa223b488d25a41beab185eb92abb7bf765a9f13fe5d870ff31f5f1","tests/test_should_parse.rs":"4da4e25ee2baa7e75135c375042a7f958de136c5698dab03f99ff7a774dcd463","tests/test_size.rs":"970150b9d49ef91ab4c8f8c6a59b83f9a68a02acb779f0280733a5efaec6487a","tests/test_token_trees.rs":"a07ea657bf03b9c667c821b2db2af49b176ca737e3e01217a73cca78b7f11380","tests/zzz_stable.rs":"961d4940a926db4ca523d834b060c62de988e6a8e01c9f5efaa7bb4c86745b47"},"package":"66850e97125af79138385e9b88339cbcd037e3f28ceab8c5ad98e64f0f1f80bf"} -\ No newline at end of file -+{"files":{"Cargo.toml":"28ddb678a5ccac4423435384c8b7116f804e896eabc5aae9d5c2bc666aaebbb4","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"03f3b53cf858536a0883aa5b5882ee61dcd0f1e71c0930c9106fcfa1d6aad2df","benches/file.rs":"b4724fc7c0f48b8f488e2632a1064f6c0bf16ded3969680fc3f4a2369536269b","benches/rust.rs":"ea6291ef2d2a83d94a3312fe179d48259f8ec0b04c961993ddd181d0a4ab740e","build.rs":"aeca2312f05aec658eaa66980a0ef3d578837db107a55702b39419ea0422eb4a","src/attr.rs":"7d79482634d6544eb4a4825405407b53660d0f5f8b929f7e1671e005b9d92038","src/await.rs":"18f0b2ecb319991f891e300011424985e3cf33d166ea9f29f22d575fc8c83a76","src/bigint.rs":"efc7f64959980653d73fe4f8bc2a3a2904dc05f45b02c6dc15cd316fa3d7c338","src/buffer.rs":"cf2a4b3bdc247b80c85ff5625a1dfb7a5f517fd835f6e1518a7b924990e4c293","src/custom_keyword.rs":"9627467063e41776315a6a14b2aaea3875592d8e0ebd2dc6df1fc2f12c06f146","src/custom_punctuation.rs":"b00e7bee96eb473507527e39db65e74e71592dc06421d2cfe45ed899c17d4847","src/data.rs":"7aec9a745cd53ec95688afa353f6efb9576e7fc0143757b51d28bc3d900b1d2a","src/derive.rs":"fa71866df6e383673dd3329f455a9f953585b83f9739050be3bf1f8c6d526b96","src/discouraged.rs":"a1f3d85e20dedf50b1b7b4571d970a3a6e9b2de4afde7dd0c986fe240df2ba46","src/error.rs":"c3005b50e3132026250c5356d0d391bf96db8087f0f5f744de98e360d8a20a3e","src/export.rs":"dcae67456278c0339acfbcbb4737b8d37cfba5a150ae789f31f4be79abf7e726","src/expr.rs":"54455fd20041996653ca5379b03cdf3c2fc1b3dd2e1149b5bc6b1dd492545d55","src/ext.rs":"870086d9021e6a6fcefa2f00cd91b55c4b74dcee8f0f6a07e76d96fb44707d61","src/file.rs":"75167ebc77e7870122078eabde1b872c337142d4b0962c20cedffcaaa2a5b7c6","src/gen/clone.rs":"0845c1bf8624c3f235cd247b4eb748e7e16b4c240097cb0ff16751f688c079ae","src/gen/debug.rs":"d24fe37f4ce1dd74f2dc54136e893782d3c4d0908323c036c97599551a56960c","src/gen/eq.rs":"1e6ef09b17ca7f36861ef23ce2a6991b231ed5f087f046469b5f23da40f5b419","src/gen/fold.rs":"3f59e59ed8ad2ab5dd347bfbe41bbc785c2aabd8ae902087a584a6daed597182","src/gen/hash.rs":"e5b2a52587173076777233a9e57e2b3c8e0dd6d6f41d16fa7c9fde68b05c2bfc","src/gen/visit.rs":"23008c170d4dd3975232876a0a654921d9b6af57372cb9fcc133ca740588d666","src/gen/visit_mut.rs":"42886c3ee02ded72d9c3eec006e20431eaee0c6b90ddefc1a36ec7bf50c6a24a","src/gen_helper.rs":"ea6c66388365971db6a2fc86cbb208f7eacde77e245bc8623f27a3642a3d7741","src/generics.rs":"d1c175284ca21e777ef0414c28383929b170ccb00aaf7a929eb18d3b05e18da8","src/group.rs":"119b62d8481b4b1c327639bed40e114bf1969765250b68186628247fd4144b3b","src/ident.rs":"503156ce51a7ef0420892e8dbf2ecf8fe51f42a84d52cc2c05654e1a83020cbf","src/item.rs":"c9ad9881e8cda8ee3f157f0c7602fc53d08a7e3288b9afc388c393689eac5aea","src/lib.rs":"558ad13779233b27bebc4b2fc8025eb1c7e57b32130dc1dd911391e27b427500","src/lifetime.rs":"f390fe06692fc51fbf3eb490bb9f795da70e4452f51c5b0df3bbaa899084ddf1","src/lit.rs":"9fab84e38756b092fbb055dcdf01e31d42d916c49e3eaae8c9019043b0ee4301","src/lookahead.rs":"5cce8b4cb345a85c24a452ea6d78eadb76f01ca0a789cbf5ce35108334904173","src/mac.rs":"e5cecea397fd01a44958162781d8d94343fe2a1b9b9754a5666c3d2ab4d7ef64","src/macros.rs":"2ce05b553f14da4ee550bb681cb0733b7186ad94719cd36f96d53e15fd02cf2b","src/op.rs":"449514e146deab0ab020bc6f764544c294dbc780941c9802bf60cf1b2839d550","src/parse.rs":"bde888c98ee259f2a73489a693515ed4875432b0d79486ac83aea19f441992a3","src/parse_macro_input.rs":"653a020f023cac0eccbc1fcc34aa7bf80567b43e5475deab4ad3e487a5363201","src/parse_quote.rs":"642f21e5fa54df4b7c373fb158289ee1005d49e1a49b1d194df5438faee71c46","src/pat.rs":"1473b258162cc822f1ee0c0869f521053ed345a140c39ed83b9b4dfb6f9f2aca","src/path.rs":"f119f0c2af12fabd360eac9a2312e0f6e6c28c633c9671bde6ef0bece7c5ba3c","src/print.rs":"da6529c1d9d21aaf6c835f66b4e67eacb7cf91a10eb5e9a2143b49bf99b3b5e1","src/punctuated.rs":"212f5a601d6c2eb8b8fa679be1167b455b595bee964d2775b0101ebb16c3eaa5","src/reserved.rs":"3625eb2a64589a4992ab79a1674e9679f465bea613ab139a671df5337e88cee6","src/sealed.rs":"896a495a5340eec898527f18bd4ddca408ea03ea0ee3af30074ff48deace778d","src/span.rs":"748c51c6feb223c26d3b1701f5bb98aee823666c775c98106cfa24fe29d8cec1","src/spanned.rs":"7d77714d585e6f42397091ffb3a799fd7b20c05c5442c737683c429ea7d409a5","src/stmt.rs":"3917fbc897f80efe838267833c55650ff8d636cb49a6d1084e28eff65d0e3ccd","src/thread.rs":"815eca6bd64f4eef7c447f0809e84108f5428ff50225224b373efd8fbb696874","src/token.rs":"a1ca6298bf6592cb80cbab1db4eac2fa4e3fa56729bb807bfb0f08ab0f229ca5","src/tt.rs":"1cc9e200624288322f800f32e3d6e2e53da946467bb312dd40a52c02cdcc4730","src/ty.rs":"cb167cbb16240c59a31b44adec175172caaf75ffef9a0bb168584b51bf105795","src/verbatim.rs":"802a97df997432f18cac6e6200ff6ea29fb2474986005e0fcdbc2b65197f87f7","src/whitespace.rs":"e63dd0aa3d34029f17766a8b09c1a6e4479e36c552c8b7023d710a399333aace","tests/common/eq.rs":"4b190a3833bdfd20a4cb1e3dff25a698751dec71d6f30249cf09426e061a4fb1","tests/common/mod.rs":"25ef6d7daa09bad3198a0e9e91b2812425f92db7c585c1e34a03a84d7362ccd8","tests/common/parse.rs":"8b7ba32f4988c30758c108536c4877dc5a039a237bf9b0687220ef2295797bbd","tests/debug/gen.rs":"d6e2abf2a7bb58a7895a60c2f094a98a4f85c9189d02011d0dcef6ef053f26e3","tests/debug/mod.rs":"868763d0ef1609a3ad5e05e9f1bfa0f813e91e7e9a36653414a188bb2fdaa425","tests/macros/mod.rs":"c0eafa4e3845fc08f6efe6021bac37822c0ac325eb7b51194a5f35236f648d92","tests/repo/mod.rs":"9e316b88d57ae213e81950c35e45443078ec90e702798353bc3528cb8a2810b6","tests/repo/progress.rs":"c08d0314a7f3ecf760d471f27da3cd2a500aeb9f1c8331bffb2aa648f9fabf3f","tests/test_asyncness.rs":"cff01db49d28ab23b0b258bc6c0a5cc4071be4fe7248eef344a5d79d2fb649b7","tests/test_attribute.rs":"0ffd99384e1a52ae17d9fed5c4053e411e8f9018decef07ffa621d1faa7329d8","tests/test_derive_input.rs":"610444351e3bf99366976bbf1da109c334a70ac9500caef366bcf9b68819829f","tests/test_expr.rs":"0ee83f6f6de950018c043efcc3e85776b4227dae3068309998a8d9709f2fc66c","tests/test_generics.rs":"9d713f90a79d6145efc89fb6f946029ca03486c632219950889da39940152ba0","tests/test_grouping.rs":"46c27baec4daaaf1e891892f0b0515ea8a44619071c7d0cc9192580916f1569f","tests/test_ident.rs":"9eb53d1e21edf23e7c9e14dc74dcc2b2538e9221e19dbcc0a44e3acc2e90f3f6","tests/test_item.rs":"461ed0c8648afffcea3217f52c9a88298182b4d39d73a11803b1281d99c98c25","tests/test_iterators.rs":"53ed6078d37550bd6765d2411e3660be401aef8a31a407350cc064a7d08c7c33","tests/test_lit.rs":"2a46c5f2f2ad1dcbb7e9b0cd11b55861c5ff818c2c4c51351d07e2daa7c74674","tests/test_meta.rs":"1fc98af3279cadc3d8db3c7e8d4d7f9e9dbd4d17548cf6a2f6f4536ed65367f6","tests/test_parse_buffer.rs":"8bbe2d24ca8a3788f72c6908fc96c26d546f11c69687bf8d72727f851d5e2d27","tests/test_parse_stream.rs":"2f449a2c41a3dee6fd14bee24e1666a453cb808eda17332fd91afd127fcdd2a6","tests/test_pat.rs":"2cb331fe404496d51e7cc7e283ae13c519a2265ca82e1c88e113296f860c2cba","tests/test_path.rs":"fcd5591e639fc787acc9763d828a811c8114525c9341282eefda8f331e082a51","tests/test_precedence.rs":"8d03656741b01e577d7501ce24332d1a4febec3e31a043e47c61062b8c527ed2","tests/test_receiver.rs":"084eca59984b9a18651da52f2c4407355da3de1335916a12477652999e2d01cc","tests/test_round_trip.rs":"ba01bf4ec04cd2d6f9e4800c343563925ae960c5f16752dc0797fda4451b6cc2","tests/test_shebang.rs":"f5772cadad5b56e3112cb16308b779f92bce1c3a48091fc9933deb2276a69331","tests/test_should_parse.rs":"1d3535698a446e2755bfc360676bdb161841a1f454cdef6e7556c6d06a95c89d","tests/test_size.rs":"5fae772bab66809d6708232f35cfb4a287882486763b0f763feec2ad79fbb68b","tests/test_stmt.rs":"17e4355843ee2982b51faba2721a18966f8c2b9422e16b052a123b8ee8b80752","tests/test_token_trees.rs":"43e56a701817e3c3bfd0cae54a457dd7a38ccb3ca19da41e2b995fdf20e6ed18","tests/test_ty.rs":"5b7c0bfc4963d41920dd0b39fdea419e34f00409ba86ad4211d6c3c7e8bbe1c0","tests/test_visibility.rs":"3f958e2b3b5908005e756a80eea326a91eac97cc4ab60599bebde8d4b942d65c","tests/zzz_stable.rs":"2a862e59cb446235ed99aec0e6ada8e16d3ecc30229b29d825b7c0bbc2602989"},"package":"963f7d3cc59b59b9325165add223142bbf1df27655d07789f109896d353d8350"} -\ No newline at end of file -diff --git a/third_party/rust/syn/Cargo.toml b/third_party/rust/syn/Cargo.toml -index 7a5c962f06..20277fc461 100644 ---- a/third_party/rust/syn/Cargo.toml -+++ b/third_party/rust/syn/Cargo.toml -@@ -13,7 +13,7 @@ - [package] - edition = "2018" - name = "syn" --version = "1.0.5" -+version = "1.0.40" - authors = ["David Tolnay <dtolnay@gmail.com>"] - include = ["/benches/**", "/build.rs", "/Cargo.toml", "/LICENSE-APACHE", "/LICENSE-MIT", "/README.md", "/src/**", "/tests/**"] - description = "Parser for Rust source code" -@@ -24,25 +24,21 @@ license = "MIT OR Apache-2.0" - repository = "https://github.com/dtolnay/syn" - [package.metadata.docs.rs] - all-features = true -+targets = ["x86_64-unknown-linux-gnu"] - - [package.metadata.playground] --all-features = true -- --[lib] --name = "syn" -+features = ["full", "visit", "visit-mut", "fold", "extra-traits"] - - [[bench]] - name = "rust" - harness = false - required-features = ["full", "parsing"] --edition = "2018" - - [[bench]] - name = "file" - required-features = ["full", "parsing"] --edition = "2018" - [dependencies.proc-macro2] --version = "1.0" -+version = "1.0.13" - default-features = false - - [dependencies.quote] -@@ -52,18 +48,34 @@ default-features = false - - [dependencies.unicode-xid] - version = "0.2" -+[dev-dependencies.anyhow] -+version = "1.0" -+ -+[dev-dependencies.flate2] -+version = "1.0" -+ - [dev-dependencies.insta] --version = "0.9" -+version = "0.16" - - [dev-dependencies.rayon] - version = "1.0" - - [dev-dependencies.ref-cast] --version = "0.2" -+version = "1.0" - - [dev-dependencies.regex] - version = "1.0" - -+[dev-dependencies.reqwest] -+version = "0.10" -+features = ["blocking"] -+ -+[dev-dependencies.syn-test-suite] -+version = "0" -+ -+[dev-dependencies.tar] -+version = "0.4" -+ - [dev-dependencies.termcolor] - version = "1.0" - -@@ -80,7 +92,6 @@ full = [] - parsing = [] - printing = ["quote"] - proc-macro = ["proc-macro2/proc-macro", "quote/proc-macro"] -+test = ["syn-test-suite/all-features"] - visit = [] - visit-mut = [] --[badges.travis-ci] --repository = "dtolnay/syn" -diff --git a/third_party/rust/syn/README.md b/third_party/rust/syn/README.md -index 29a7f32a46..12b5f45b3d 100644 ---- a/third_party/rust/syn/README.md -+++ b/third_party/rust/syn/README.md -@@ -1,10 +1,10 @@ - Parser for Rust source code - =========================== - --[](https://travis-ci.org/dtolnay/syn) --[](https://crates.io/crates/syn) --[](https://docs.rs/syn/1.0/syn/) --[](https://blog.rust-lang.org/2018/12/06/Rust-1.31-and-rust-2018.html) -+[<img alt="github" src="https://img.shields.io/badge/github-dtolnay/syn-8da0cb?style=for-the-badge&labelColor=555555&logo=github" height="20">](https://github.com/dtolnay/syn) -+[<img alt="crates.io" src="https://img.shields.io/crates/v/syn.svg?style=for-the-badge&color=fc8d62&logo=rust" height="20">](https://crates.io/crates/syn) -+[<img alt="docs.rs" src="https://img.shields.io/badge/docs.rs-syn-66c2a5?style=for-the-badge&labelColor=555555&logoColor=white&logo=data:image/svg+xml;base64,PHN2ZyByb2xlPSJpbWciIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAwIDUxMiA1MTIiPjxwYXRoIGZpbGw9IiNmNWY1ZjUiIGQ9Ik00ODguNiAyNTAuMkwzOTIgMjE0VjEwNS41YzAtMTUtOS4zLTI4LjQtMjMuNC0zMy43bC0xMDAtMzcuNWMtOC4xLTMuMS0xNy4xLTMuMS0yNS4zIDBsLTEwMCAzNy41Yy0xNC4xIDUuMy0yMy40IDE4LjctMjMuNCAzMy43VjIxNGwtOTYuNiAzNi4yQzkuMyAyNTUuNSAwIDI2OC45IDAgMjgzLjlWMzk0YzAgMTMuNiA3LjcgMjYuMSAxOS45IDMyLjJsMTAwIDUwYzEwLjEgNS4xIDIyLjEgNS4xIDMyLjIgMGwxMDMuOS01MiAxMDMuOSA1MmMxMC4xIDUuMSAyMi4xIDUuMSAzMi4yIDBsMTAwLTUwYzEyLjItNi4xIDE5LjktMTguNiAxOS45LTMyLjJWMjgzLjljMC0xNS05LjMtMjguNC0yMy40LTMzLjd6TTM1OCAyMTQuOGwtODUgMzEuOXYtNjguMmw4NS0zN3Y3My4zek0xNTQgMTA0LjFsMTAyLTM4LjIgMTAyIDM4LjJ2LjZsLTEwMiA0MS40LTEwMi00MS40di0uNnptODQgMjkxLjFsLTg1IDQyLjV2LTc5LjFsODUtMzguOHY3NS40em0wLTExMmwtMTAyIDQxLjQtMTAyLTQxLjR2LS42bDEwMi0zOC4yIDEwMiAzOC4ydi42em0yNDAgMTEybC04NSA0Mi41di03OS4xbDg1LTM4Ljh2NzUuNHptMC0xMTJsLTEwMiA0MS40LTEwMi00MS40di0uNmwxMDItMzguMiAxMDIgMzguMnYuNnoiPjwvcGF0aD48L3N2Zz4K" height="20">](https://docs.rs/syn) -+[<img alt="build status" src="https://img.shields.io/github/workflow/status/dtolnay/syn/CI/master?style=for-the-badge" height="20">](https://github.com/dtolnay/syn/actions?query=branch%3Amaster) - - Syn is a parsing library for parsing a stream of Rust tokens into a syntax tree - of Rust source code. -@@ -46,10 +46,6 @@ contains some APIs that may be useful more generally. - [`syn::DeriveInput`]: https://docs.rs/syn/1.0/syn/struct.DeriveInput.html - [parser functions]: https://docs.rs/syn/1.0/syn/parse/index.html - --If you get stuck with anything involving procedural macros in Rust I am happy to --provide help even if the issue is not related to Syn. Please file a ticket in --this repo. -- - *Version requirement: Syn supports rustc 1.31 and up.* - - [*Release notes*](https://github.com/dtolnay/syn/releases) -@@ -88,8 +84,6 @@ proc-macro = true - ``` - - ```rust --extern crate proc_macro; -- - use proc_macro::TokenStream; - use quote::quote; - use syn::{parse_macro_input, DeriveInput}; -@@ -271,7 +265,7 @@ points, which are required by the language to use `proc_macro::TokenStream`. - The proc-macro2 crate will automatically detect and use the compiler's data - structures when a procedural macro is active. - --[proc-macro2]: https://docs.rs/proc-macro2/1.0.0/proc_macro2/ -+[proc-macro2]: https://docs.rs/proc-macro2/1.0/proc_macro2/ - - <br> - -diff --git a/third_party/rust/syn/benches/file.rs b/third_party/rust/syn/benches/file.rs -index 08ecd90960..58ab8df297 100644 ---- a/third_party/rust/syn/benches/file.rs -+++ b/third_party/rust/syn/benches/file.rs -@@ -1,9 +1,16 @@ - // $ cargo bench --features full --bench file - - #![feature(rustc_private, test)] -+#![recursion_limit = "1024"] - - extern crate test; - -+#[macro_use] -+#[path = "../tests/macros/mod.rs"] -+mod macros; -+ -+#[path = "../tests/common/mod.rs"] -+mod common; - #[path = "../tests/repo/mod.rs"] - pub mod repo; - -diff --git a/third_party/rust/syn/benches/rust.rs b/third_party/rust/syn/benches/rust.rs -index e3d9cd29ba..50e1a7f601 100644 ---- a/third_party/rust/syn/benches/rust.rs -+++ b/third_party/rust/syn/benches/rust.rs -@@ -4,7 +4,14 @@ - // $ RUSTFLAGS='--cfg syn_only' cargo build --release --features full --bench rust - - #![cfg_attr(not(syn_only), feature(rustc_private))] -+#![recursion_limit = "1024"] - -+#[macro_use] -+#[path = "../tests/macros/mod.rs"] -+mod macros; -+ -+#[path = "../tests/common/mod.rs"] -+mod common; - #[path = "../tests/repo/mod.rs"] - mod repo; - -@@ -28,31 +35,35 @@ mod syn_parse { - } - - #[cfg(not(syn_only))] --mod libsyntax_parse { -+mod librustc_parse { - extern crate rustc_data_structures; -- extern crate syntax; -- extern crate syntax_pos; -+ extern crate rustc_errors; -+ extern crate rustc_parse; -+ extern crate rustc_session; -+ extern crate rustc_span; - - use rustc_data_structures::sync::Lrc; -- use syntax::edition::Edition; -- use syntax::errors::{emitter::Emitter, DiagnosticBuilder, Handler}; -- use syntax::parse::ParseSess; -- use syntax::source_map::{FilePathMapping, SourceMap}; -- use syntax_pos::FileName; -+ use rustc_errors::{emitter::Emitter, Diagnostic, Handler}; -+ use rustc_session::parse::ParseSess; -+ use rustc_span::source_map::{FilePathMapping, SourceMap}; -+ use rustc_span::{edition::Edition, FileName}; - - pub fn bench(content: &str) -> Result<(), ()> { - struct SilentEmitter; - - impl Emitter for SilentEmitter { -- fn emit_diagnostic(&mut self, _db: &DiagnosticBuilder) {} -+ fn emit_diagnostic(&mut self, _diag: &Diagnostic) {} -+ fn source_map(&self) -> Option<&Lrc<SourceMap>> { -+ None -+ } - } - -- syntax::with_globals(Edition::Edition2018, || { -+ rustc_span::with_session_globals(Edition::Edition2018, || { - let cm = Lrc::new(SourceMap::new(FilePathMapping::empty())); - let emitter = Box::new(SilentEmitter); - let handler = Handler::with_emitter(false, None, emitter); - let sess = ParseSess::with_span_handler(handler, cm); -- if let Err(mut diagnostic) = syntax::parse::parse_crate_from_source_str( -+ if let Err(mut diagnostic) = rustc_parse::parse_crate_from_source_str( - FileName::Custom("bench".to_owned()), - content.to_owned(), - &sess, -@@ -104,11 +115,11 @@ fn main() { - repo::clone_rust(); - - macro_rules! testcases { -- ($($(#[$cfg:meta])* $name:path,)*) => { -+ ($($(#[$cfg:meta])* $name:ident,)*) => { - vec![ - $( - $(#[$cfg])* -- (stringify!($name), $name as fn(&str) -> Result<(), ()>), -+ (stringify!($name), $name::bench as fn(&str) -> Result<(), ()>), - )* - ] - }; -@@ -128,12 +139,12 @@ fn main() { - - for (name, f) in testcases!( - #[cfg(not(syn_only))] -- read_from_disk::bench, -+ read_from_disk, - #[cfg(not(syn_only))] -- tokenstream_parse::bench, -- syn_parse::bench, -+ tokenstream_parse, -+ syn_parse, - #[cfg(not(syn_only))] -- libsyntax_parse::bench, -+ librustc_parse, - ) { - eprint!("{:20}", format!("{}:", name)); - let elapsed = exec(f); -diff --git a/third_party/rust/syn/build.rs b/third_party/rust/syn/build.rs -index c0f9ed3406..cf7681c3f9 100644 ---- a/third_party/rust/syn/build.rs -+++ b/third_party/rust/syn/build.rs -@@ -1,6 +1,6 @@ - use std::env; - use std::process::Command; --use std::str::{self, FromStr}; -+use std::str; - - // The rustc-cfg strings below are *not* public API. Please let us know by - // opening a GitHub issue if your build environment requires some way to enable -@@ -26,38 +26,14 @@ struct Compiler { - } - - fn rustc_version() -> Option<Compiler> { -- let rustc = match env::var_os("RUSTC") { -- Some(rustc) => rustc, -- None => return None, -- }; -- -- let output = match Command::new(rustc).arg("--version").output() { -- Ok(output) => output, -- Err(_) => return None, -- }; -- -- let version = match str::from_utf8(&output.stdout) { -- Ok(version) => version, -- Err(_) => return None, -- }; -- -+ let rustc = env::var_os("RUSTC")?; -+ let output = Command::new(rustc).arg("--version").output().ok()?; -+ let version = str::from_utf8(&output.stdout).ok()?; - let mut pieces = version.split('.'); - if pieces.next() != Some("rustc 1") { - return None; - } -- -- let next = match pieces.next() { -- Some(next) => next, -- None => return None, -- }; -- -- let minor = match u32::from_str(next) { -- Ok(minor) => minor, -- Err(_) => return None, -- }; -- -- Some(Compiler { -- minor: minor, -- nightly: version.contains("nightly"), -- }) -+ let minor = pieces.next()?.parse().ok()?; -+ let nightly = version.contains("nightly"); -+ Some(Compiler { minor, nightly }) - } -diff --git a/third_party/rust/syn/src/attr.rs b/third_party/rust/syn/src/attr.rs -index 34009deabc..fa4f1cb2a3 100644 ---- a/third_party/rust/syn/src/attr.rs -+++ b/third_party/rust/syn/src/attr.rs -@@ -9,15 +9,11 @@ use proc_macro2::TokenStream; - use crate::parse::{Parse, ParseBuffer, ParseStream, Parser, Result}; - #[cfg(feature = "parsing")] - use crate::punctuated::Pair; --#[cfg(feature = "extra-traits")] --use crate::tt::TokenStreamHelper; --#[cfg(feature = "extra-traits")] --use std::hash::{Hash, Hasher}; - - ast_struct! { - /// An attribute like `#[repr(transparent)]`. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - /// - /// <br> -@@ -111,7 +107,46 @@ ast_struct! { - /// - /// [`parse_meta()`]: Attribute::parse_meta - /// [`parse_args()`]: Attribute::parse_args -- pub struct Attribute #manual_extra_traits { -+ /// -+ /// <p><br></p> -+ /// -+ /// # Doc comments -+ /// -+ /// The compiler transforms doc comments, such as `/// comment` and `/*! -+ /// comment */`, into attributes before macros are expanded. Each comment is -+ /// expanded into an attribute of the form `#[doc = r"comment"]`. -+ /// -+ /// As an example, the following `mod` items are expanded identically: -+ /// -+ /// ``` -+ /// # use syn::{ItemMod, parse_quote}; -+ /// let doc: ItemMod = parse_quote! { -+ /// /// Single line doc comments -+ /// /// We write so many! -+ /// /** -+ /// * Multi-line comments... -+ /// * May span many lines -+ /// */ -+ /// mod example { -+ /// //! Of course, they can be inner too -+ /// /*! And fit in a single line */ -+ /// } -+ /// }; -+ /// let attr: ItemMod = parse_quote! { -+ /// #[doc = r" Single line doc comments"] -+ /// #[doc = r" We write so many!"] -+ /// #[doc = r" -+ /// * Multi-line comments... -+ /// * May span many lines -+ /// "] -+ /// mod example { -+ /// #![doc = r" Of course, they can be inner too"] -+ /// #![doc = r" And fit in a single line "] -+ /// } -+ /// }; -+ /// assert_eq!(doc, attr); -+ /// ``` -+ pub struct Attribute { - pub pound_token: Token![#], - pub style: AttrStyle, - pub bracket_token: token::Bracket, -@@ -120,39 +155,11 @@ ast_struct! { - } - } - --#[cfg(feature = "extra-traits")] --impl Eq for Attribute {} -- --#[cfg(feature = "extra-traits")] --impl PartialEq for Attribute { -- fn eq(&self, other: &Self) -> bool { -- self.style == other.style -- && self.pound_token == other.pound_token -- && self.bracket_token == other.bracket_token -- && self.path == other.path -- && TokenStreamHelper(&self.tokens) == TokenStreamHelper(&other.tokens) -- } --} -- --#[cfg(feature = "extra-traits")] --impl Hash for Attribute { -- fn hash<H>(&self, state: &mut H) -- where -- H: Hasher, -- { -- self.style.hash(state); -- self.pound_token.hash(state); -- self.bracket_token.hash(state); -- self.path.hash(state); -- TokenStreamHelper(&self.tokens).hash(state); -- } --} -- - impl Attribute { - /// Parses the content of the attribute, consisting of the path and tokens, - /// as a [`Meta`] if possible. - /// -- /// *This function is available if Syn is built with the `"parsing"` -+ /// *This function is available only if Syn is built with the `"parsing"` - /// feature.* - #[cfg(feature = "parsing")] - pub fn parse_meta(&self) -> Result<Meta> { -@@ -199,7 +206,7 @@ impl Attribute { - /// ^^^^^^^^^ what gets parsed - /// ``` - /// -- /// *This function is available if Syn is built with the `"parsing"` -+ /// *This function is available only if Syn is built with the `"parsing"` - /// feature.* - #[cfg(feature = "parsing")] - pub fn parse_args<T: Parse>(&self) -> Result<T> { -@@ -208,7 +215,7 @@ impl Attribute { - - /// Parse the arguments to the attribute using the given parser. - /// -- /// *This function is available if Syn is built with the `"parsing"` -+ /// *This function is available only if Syn is built with the `"parsing"` - /// feature.* - #[cfg(feature = "parsing")] - pub fn parse_args_with<F: Parser>(&self, parser: F) -> Result<F::Output> { -@@ -221,7 +228,7 @@ impl Attribute { - - /// Parses zero or more outer attributes from the stream. - /// -- /// *This function is available if Syn is built with the `"parsing"` -+ /// *This function is available only if Syn is built with the `"parsing"` - /// feature.* - #[cfg(feature = "parsing")] - pub fn parse_outer(input: ParseStream) -> Result<Vec<Self>> { -@@ -234,7 +241,7 @@ impl Attribute { - - /// Parses zero or more inner attributes from the stream. - /// -- /// *This function is available if Syn is built with the `"parsing"` -+ /// *This function is available only if Syn is built with the `"parsing"` - /// feature.* - #[cfg(feature = "parsing")] - pub fn parse_inner(input: ParseStream) -> Result<Vec<Self>> { -@@ -247,7 +254,7 @@ impl Attribute { - } - - #[cfg(feature = "parsing")] --fn error_expected_args(attr: &Attribute) -> Error { -+fn expected_parentheses(attr: &Attribute) -> String { - let style = match attr.style { - AttrStyle::Outer => "#", - AttrStyle::Inner(_) => "#!", -@@ -261,19 +268,23 @@ fn error_expected_args(attr: &Attribute) -> Error { - path += &segment.ident.to_string(); - } - -- let msg = format!("expected attribute arguments: {}[{}(...)]", style, path); -- -- #[cfg(feature = "printing")] -- return Error::new_spanned(attr, msg); -- -- #[cfg(not(feature = "printing"))] -- return Error::new(attr.bracket_token.span, msg); -+ format!("{}[{}(...)]", style, path) - } - - #[cfg(feature = "parsing")] - fn enter_args<'a>(attr: &Attribute, input: ParseStream<'a>) -> Result<ParseBuffer<'a>> { - if input.is_empty() { -- return Err(error_expected_args(attr)); -+ let expected = expected_parentheses(attr); -+ let msg = format!("expected attribute arguments in parentheses: {}", expected); -+ return Err(crate::error::new2( -+ attr.pound_token.span, -+ attr.bracket_token.span, -+ msg, -+ )); -+ } else if input.peek(Token![=]) { -+ let expected = expected_parentheses(attr); -+ let msg = format!("expected parentheses: {}", expected); -+ return Err(input.error(msg)); - }; - - let content; -@@ -298,7 +309,7 @@ ast_enum! { - /// Distinguishes between attributes that decorate an item and attributes - /// that are contained within an item. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - /// - /// # Outer attributes -@@ -312,7 +323,6 @@ ast_enum! { - /// - `#![feature(proc_macro)]` - /// - `//! # Example` - /// - `/*! Please file an issue */` -- #[cfg_attr(feature = "clone-impls", derive(Copy))] - pub enum AttrStyle { - Outer, - Inner(Token![!]), -@@ -322,7 +332,7 @@ ast_enum! { - ast_enum_of_structs! { - /// Content of a compile-time structured attribute. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - /// - /// ## Path -@@ -360,7 +370,7 @@ ast_enum_of_structs! { - ast_struct! { - /// A structured list within an attribute, like `derive(Copy, Clone)`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct MetaList { - pub path: Path, -@@ -372,7 +382,7 @@ ast_struct! { - ast_struct! { - /// A name-value pair within an attribute, like `feature = "nightly"`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct MetaNameValue { - pub path: Path, -@@ -398,7 +408,7 @@ impl Meta { - ast_enum_of_structs! { - /// Element of a compile-time attribute list. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - pub enum NestedMeta { - /// A structured meta item, like the `Copy` in `#[derive(Copy)]` which -@@ -429,8 +439,8 @@ ast_enum_of_structs! { - /// as type `AttributeArgs`. - /// - /// ``` --/// extern crate proc_macro; --/// -+/// # extern crate proc_macro; -+/// # - /// use proc_macro::TokenStream; - /// use syn::{parse_macro_input, AttributeArgs, ItemFn}; - /// -@@ -464,7 +474,7 @@ where - fn is_outer(attr: &&Attribute) -> bool { - match attr.style { - AttrStyle::Outer => true, -- _ => false, -+ AttrStyle::Inner(_) => false, - } - } - self.into_iter().filter(is_outer) -@@ -474,7 +484,7 @@ where - fn is_inner(attr: &&Attribute) -> bool { - match attr.style { - AttrStyle::Inner(_) => true, -- _ => false, -+ AttrStyle::Outer => false, - } - } - self.into_iter().filter(is_inner) -diff --git a/third_party/rust/syn/src/buffer.rs b/third_party/rust/syn/src/buffer.rs -index 551a5ac816..a461cc49ea 100644 ---- a/third_party/rust/syn/src/buffer.rs -+++ b/third_party/rust/syn/src/buffer.rs -@@ -1,7 +1,7 @@ - //! A stably addressed token buffer supporting efficient traversal based on a - //! cheaply copyable cursor. - //! --//! *This module is available if Syn is built with the `"parsing"` feature.* -+//! *This module is available only if Syn is built with the `"parsing"` feature.* - - // This module is heavily commented as it contains most of the unsafe code in - // Syn, and caution should be used when editing it. The public-facing interface -@@ -36,7 +36,7 @@ enum Entry { - /// `TokenStream` which requires a deep copy in order to traverse more than - /// once. - /// --/// *This type is available if Syn is built with the `"parsing"` feature.* -+/// *This type is available only if Syn is built with the `"parsing"` feature.* - pub struct TokenBuffer { - // NOTE: Do not derive clone on this - there are raw pointers inside which - // will be messed up. Moving the `TokenBuffer` itself is safe as the actual -@@ -98,7 +98,7 @@ impl TokenBuffer { - /// Creates a `TokenBuffer` containing all the tokens from the input - /// `TokenStream`. - /// -- /// *This method is available if Syn is built with both the `"parsing"` and -+ /// *This method is available only if Syn is built with both the `"parsing"` and - /// `"proc-macro"` features.* - #[cfg(all( - not(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "wasi"))), -@@ -133,8 +133,7 @@ impl TokenBuffer { - /// Two cursors are equal if they have the same location in the same input - /// stream, and have the same scope. - /// --/// *This type is available if Syn is built with the `"parsing"` feature.* --#[derive(Copy, Clone, Eq, PartialEq)] -+/// *This type is available only if Syn is built with the `"parsing"` feature.* - pub struct Cursor<'a> { - // The current entry which the `Cursor` is pointing at. - ptr: *const Entry, -@@ -201,13 +200,13 @@ impl<'a> Cursor<'a> { - Cursor::create(self.ptr.offset(1), self.scope) - } - -- /// If the cursor is looking at a `None`-delimited group, move it to look at -- /// the first token inside instead. If the group is empty, this will move -+ /// While the cursor is looking at a `None`-delimited group, move it to look -+ /// at the first token inside instead. If the group is empty, this will move - /// the cursor past the `None`-delimited group. - /// - /// WARNING: This mutates its argument. - fn ignore_none(&mut self) { -- if let Entry::Group(group, buf) = self.entry() { -+ while let Entry::Group(group, buf) = self.entry() { - if group.delimiter() == Delimiter::None { - // NOTE: We call `Cursor::create` here to make sure that - // situations where we should immediately exit the span after -@@ -215,13 +214,14 @@ impl<'a> Cursor<'a> { - unsafe { - *self = Cursor::create(&buf.data[0], self.scope); - } -+ } else { -+ break; - } - } - } - - /// Checks whether the cursor is currently pointing at the end of its valid - /// scope. -- #[inline] - pub fn eof(self) -> bool { - // We're at eof if we're at the end of our scope. - self.ptr == self.scope -@@ -342,6 +342,44 @@ impl<'a> Cursor<'a> { - Entry::End(..) => Span::call_site(), - } - } -+ -+ /// Skip over the next token without cloning it. Returns `None` if this -+ /// cursor points to eof. -+ /// -+ /// This method treats `'lifetimes` as a single token. -+ pub(crate) fn skip(self) -> Option<Cursor<'a>> { -+ match self.entry() { -+ Entry::End(..) => None, -+ -+ // Treat lifetimes as a single tt for the purposes of 'skip'. -+ Entry::Punct(op) if op.as_char() == '\'' && op.spacing() == Spacing::Joint => { -+ let next = unsafe { self.bump() }; -+ match next.entry() { -+ Entry::Ident(_) => Some(unsafe { next.bump() }), -+ _ => Some(next), -+ } -+ } -+ _ => Some(unsafe { self.bump() }), -+ } -+ } -+} -+ -+impl<'a> Copy for Cursor<'a> {} -+ -+impl<'a> Clone for Cursor<'a> { -+ fn clone(&self) -> Self { -+ *self -+ } -+} -+ -+impl<'a> Eq for Cursor<'a> {} -+ -+impl<'a> PartialEq for Cursor<'a> { -+ fn eq(&self, other: &Self) -> bool { -+ let Cursor { ptr, scope, marker } = self; -+ let _ = marker; -+ *ptr == other.ptr && *scope == other.scope -+ } - } - - pub(crate) fn same_scope(a: Cursor, b: Cursor) -> bool { -diff --git a/third_party/rust/syn/src/custom_keyword.rs b/third_party/rust/syn/src/custom_keyword.rs -index 200e8478ef..a33044a564 100644 ---- a/third_party/rust/syn/src/custom_keyword.rs -+++ b/third_party/rust/syn/src/custom_keyword.rs -@@ -86,7 +86,7 @@ - /// } - /// } - /// ``` --#[macro_export(local_inner_macros)] -+#[macro_export] - macro_rules! custom_keyword { - ($ident:ident) => { - #[allow(non_camel_case_types)] -@@ -95,7 +95,7 @@ macro_rules! custom_keyword { - } - - #[doc(hidden)] -- #[allow(non_snake_case)] -+ #[allow(dead_code, non_snake_case)] - pub fn $ident<__S: $crate::export::IntoSpans<[$crate::export::Span; 1]>>( - span: __S, - ) -> $ident { -@@ -112,10 +112,10 @@ macro_rules! custom_keyword { - } - } - -- impl_parse_for_custom_keyword!($ident); -- impl_to_tokens_for_custom_keyword!($ident); -- impl_clone_for_custom_keyword!($ident); -- impl_extra_traits_for_custom_keyword!($ident); -+ $crate::impl_parse_for_custom_keyword!($ident); -+ $crate::impl_to_tokens_for_custom_keyword!($ident); -+ $crate::impl_clone_for_custom_keyword!($ident); -+ $crate::impl_extra_traits_for_custom_keyword!($ident); - }; - } - -diff --git a/third_party/rust/syn/src/custom_punctuation.rs b/third_party/rust/syn/src/custom_punctuation.rs -index 29fa448bd8..70dff42851 100644 ---- a/third_party/rust/syn/src/custom_punctuation.rs -+++ b/third_party/rust/syn/src/custom_punctuation.rs -@@ -74,19 +74,19 @@ - /// let _: PathSegments = syn::parse_str(input).unwrap(); - /// } - /// ``` --#[macro_export(local_inner_macros)] -+#[macro_export] - macro_rules! custom_punctuation { - ($ident:ident, $($tt:tt)+) => { - pub struct $ident { -- pub spans: custom_punctuation_repr!($($tt)+), -+ pub spans: $crate::custom_punctuation_repr!($($tt)+), - } - - #[doc(hidden)] -- #[allow(non_snake_case)] -- pub fn $ident<__S: $crate::export::IntoSpans<custom_punctuation_repr!($($tt)+)>>( -+ #[allow(dead_code, non_snake_case)] -+ pub fn $ident<__S: $crate::export::IntoSpans<$crate::custom_punctuation_repr!($($tt)+)>>( - spans: __S, - ) -> $ident { -- let _validate_len = 0 $(+ custom_punctuation_len!(strict, $tt))*; -+ let _validate_len = 0 $(+ $crate::custom_punctuation_len!(strict, $tt))*; - $ident { - spans: $crate::export::IntoSpans::into_spans(spans) - } -@@ -98,33 +98,33 @@ macro_rules! custom_punctuation { - } - } - -- impl_parse_for_custom_punctuation!($ident, $($tt)+); -- impl_to_tokens_for_custom_punctuation!($ident, $($tt)+); -- impl_clone_for_custom_punctuation!($ident, $($tt)+); -- impl_extra_traits_for_custom_punctuation!($ident, $($tt)+); -+ $crate::impl_parse_for_custom_punctuation!($ident, $($tt)+); -+ $crate::impl_to_tokens_for_custom_punctuation!($ident, $($tt)+); -+ $crate::impl_clone_for_custom_punctuation!($ident, $($tt)+); -+ $crate::impl_extra_traits_for_custom_punctuation!($ident, $($tt)+); - }; - } - - // Not public API. - #[cfg(feature = "parsing")] - #[doc(hidden)] --#[macro_export(local_inner_macros)] -+#[macro_export] - macro_rules! impl_parse_for_custom_punctuation { - ($ident:ident, $($tt:tt)+) => { - impl $crate::token::CustomToken for $ident { - fn peek(cursor: $crate::buffer::Cursor) -> bool { -- $crate::token::parsing::peek_punct(cursor, stringify_punct!($($tt)+)) -+ $crate::token::parsing::peek_punct(cursor, $crate::stringify_punct!($($tt)+)) - } - - fn display() -> &'static $crate::export::str { -- custom_punctuation_concat!("`", stringify_punct!($($tt)+), "`") -+ concat!("`", $crate::stringify_punct!($($tt)+), "`") - } - } - - impl $crate::parse::Parse for $ident { - fn parse(input: $crate::parse::ParseStream) -> $crate::parse::Result<$ident> { -- let spans: custom_punctuation_repr!($($tt)+) = -- $crate::token::parsing::punct(input, stringify_punct!($($tt)+))?; -+ let spans: $crate::custom_punctuation_repr!($($tt)+) = -+ $crate::token::parsing::punct(input, $crate::stringify_punct!($($tt)+))?; - Ok($ident(spans)) - } - } -@@ -142,12 +142,12 @@ macro_rules! impl_parse_for_custom_punctuation { - // Not public API. - #[cfg(feature = "printing")] - #[doc(hidden)] --#[macro_export(local_inner_macros)] -+#[macro_export] - macro_rules! impl_to_tokens_for_custom_punctuation { - ($ident:ident, $($tt:tt)+) => { - impl $crate::export::ToTokens for $ident { - fn to_tokens(&self, tokens: &mut $crate::export::TokenStream2) { -- $crate::token::printing::punct(stringify_punct!($($tt)+), &self.spans, tokens) -+ $crate::token::printing::punct($crate::stringify_punct!($($tt)+), &self.spans, tokens) - } - } - }; -@@ -221,16 +221,16 @@ macro_rules! impl_extra_traits_for_custom_punctuation { - - // Not public API. - #[doc(hidden)] --#[macro_export(local_inner_macros)] -+#[macro_export] - macro_rules! custom_punctuation_repr { - ($($tt:tt)+) => { -- [$crate::export::Span; 0 $(+ custom_punctuation_len!(lenient, $tt))+] -+ [$crate::export::Span; 0 $(+ $crate::custom_punctuation_len!(lenient, $tt))+] - }; - } - - // Not public API. - #[doc(hidden)] --#[macro_export(local_inner_macros)] -+#[macro_export] - #[rustfmt::skip] - macro_rules! custom_punctuation_len { - ($mode:ident, +) => { 1 }; -@@ -279,7 +279,7 @@ macro_rules! custom_punctuation_len { - ($mode:ident, -=) => { 2 }; - ($mode:ident, ~) => { 1 }; - (lenient, $tt:tt) => { 0 }; -- (strict, $tt:tt) => {{ custom_punctuation_unexpected!($tt); 0 }}; -+ (strict, $tt:tt) => {{ $crate::custom_punctuation_unexpected!($tt); 0 }}; - } - - // Not public API. -@@ -297,13 +297,3 @@ macro_rules! stringify_punct { - concat!($(stringify!($tt)),+) - }; - } -- --// Not public API. --// Without this, local_inner_macros breaks when looking for concat! --#[doc(hidden)] --#[macro_export] --macro_rules! custom_punctuation_concat { -- ($($tt:tt)*) => { -- concat!($($tt)*) -- }; --} -diff --git a/third_party/rust/syn/src/data.rs b/third_party/rust/syn/src/data.rs -index be43679874..b217b8ca6f 100644 ---- a/third_party/rust/syn/src/data.rs -+++ b/third_party/rust/syn/src/data.rs -@@ -4,7 +4,7 @@ use crate::punctuated::Punctuated; - ast_struct! { - /// An enum variant. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - pub struct Variant { - /// Attributes tagged on the variant. -@@ -24,7 +24,7 @@ ast_struct! { - ast_enum_of_structs! { - /// Data stored within an enum variant or struct. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - /// - /// # Syntax tree enum -@@ -52,7 +52,7 @@ ast_struct! { - /// Named fields of a struct or struct variant such as `Point { x: f64, - /// y: f64 }`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct FieldsNamed { - pub brace_token: token::Brace, -@@ -63,7 +63,7 @@ ast_struct! { - ast_struct! { - /// Unnamed fields of a tuple struct or tuple variant such as `Some(T)`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct FieldsUnnamed { - pub paren_token: token::Paren, -@@ -93,6 +93,24 @@ impl Fields { - Fields::Unnamed(f) => f.unnamed.iter_mut(), - } - } -+ -+ /// Returns the number of fields. -+ pub fn len(&self) -> usize { -+ match self { -+ Fields::Unit => 0, -+ Fields::Named(f) => f.named.len(), -+ Fields::Unnamed(f) => f.unnamed.len(), -+ } -+ } -+ -+ /// Returns `true` if there are zero fields. -+ pub fn is_empty(&self) -> bool { -+ match self { -+ Fields::Unit => true, -+ Fields::Named(f) => f.named.is_empty(), -+ Fields::Unnamed(f) => f.unnamed.is_empty(), -+ } -+ } - } - - impl IntoIterator for Fields { -@@ -129,7 +147,7 @@ impl<'a> IntoIterator for &'a mut Fields { - ast_struct! { - /// A field of a struct or enum variant. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - pub struct Field { - /// Attributes tagged on the field. -@@ -154,7 +172,7 @@ ast_enum_of_structs! { - /// The visibility level of an item: inherited or `pub` or - /// `pub(restricted)`. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - /// - /// # Syntax tree enum -@@ -184,7 +202,7 @@ ast_enum_of_structs! { - ast_struct! { - /// A public visibility level: `pub`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct VisPublic { - pub pub_token: Token![pub], -@@ -194,7 +212,7 @@ ast_struct! { - ast_struct! { - /// A crate-level visibility: `crate`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct VisCrate { - pub crate_token: Token![crate], -@@ -205,7 +223,7 @@ ast_struct! { - /// A visibility level restricted to some path: `pub(self)` or - /// `pub(super)` or `pub(crate)` or `pub(in some::module)`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct VisRestricted { - pub pub_token: Token![pub], -@@ -220,12 +238,15 @@ pub mod parsing { - use super::*; - - use crate::ext::IdentExt; -+ use crate::parse::discouraged::Speculative; - use crate::parse::{Parse, ParseStream, Result}; - - impl Parse for Variant { - fn parse(input: ParseStream) -> Result<Self> { -+ let attrs = input.call(Attribute::parse_outer)?; -+ let _visibility: Visibility = input.parse()?; - Ok(Variant { -- attrs: input.call(Attribute::parse_outer)?, -+ attrs, - ident: input.parse()?, - fields: { - if input.peek(token::Brace) { -@@ -295,6 +316,17 @@ pub mod parsing { - - impl Parse for Visibility { - fn parse(input: ParseStream) -> Result<Self> { -+ // Recognize an empty None-delimited group, as produced by a $:vis -+ // matcher that matched no tokens. -+ if input.peek(token::Group) { -+ let ahead = input.fork(); -+ let group = crate::group::parse_group(&ahead)?; -+ if group.content.is_empty() { -+ input.advance_to(&ahead); -+ return Ok(Visibility::Inherited); -+ } -+ } -+ - if input.peek(Token![pub]) { - Self::parse_pub(input) - } else if input.peek(Token![crate]) { -@@ -310,27 +342,39 @@ pub mod parsing { - let pub_token = input.parse::<Token![pub]>()?; - - if input.peek(token::Paren) { -- // TODO: optimize using advance_to - let ahead = input.fork(); -- let mut content; -- parenthesized!(content in ahead); - -+ let content; -+ let paren_token = parenthesized!(content in ahead); - if content.peek(Token![crate]) - || content.peek(Token![self]) - || content.peek(Token![super]) - { -- return Ok(Visibility::Restricted(VisRestricted { -- pub_token, -- paren_token: parenthesized!(content in input), -- in_token: None, -- path: Box::new(Path::from(content.call(Ident::parse_any)?)), -- })); -+ let path = content.call(Ident::parse_any)?; -+ -+ // Ensure there are no additional tokens within `content`. -+ // Without explicitly checking, we may misinterpret a tuple -+ // field as a restricted visibility, causing a parse error. -+ // e.g. `pub (crate::A, crate::B)` (Issue #720). -+ if content.is_empty() { -+ input.advance_to(&ahead); -+ return Ok(Visibility::Restricted(VisRestricted { -+ pub_token, -+ paren_token, -+ in_token: None, -+ path: Box::new(Path::from(path)), -+ })); -+ } - } else if content.peek(Token![in]) { -+ let in_token: Token![in] = content.parse()?; -+ let path = content.call(Path::parse_mod_style)?; -+ -+ input.advance_to(&ahead); - return Ok(Visibility::Restricted(VisRestricted { - pub_token, -- paren_token: parenthesized!(content in input), -- in_token: Some(content.parse()?), -- path: Box::new(content.call(Path::parse_mod_style)?), -+ paren_token, -+ in_token: Some(in_token), -+ path: Box::new(path), - })); - } - } -@@ -347,6 +391,14 @@ pub mod parsing { - })) - } - } -+ -+ #[cfg(feature = "full")] -+ pub(crate) fn is_some(&self) -> bool { -+ match self { -+ Visibility::Inherited => false, -+ _ => true, -+ } -+ } - } - } - -diff --git a/third_party/rust/syn/src/derive.rs b/third_party/rust/syn/src/derive.rs -index 8cb9cf7b6d..3fa9d89a93 100644 ---- a/third_party/rust/syn/src/derive.rs -+++ b/third_party/rust/syn/src/derive.rs -@@ -4,7 +4,7 @@ use crate::punctuated::Punctuated; - ast_struct! { - /// Data structure sent to a `proc_macro_derive` macro. - /// -- /// *This type is available if Syn is built with the `"derive"` feature.* -+ /// *This type is available only if Syn is built with the `"derive"` feature.* - pub struct DeriveInput { - /// Attributes tagged on the whole struct or enum. - pub attrs: Vec<Attribute>, -@@ -26,7 +26,7 @@ ast_struct! { - ast_enum_of_structs! { - /// The storage of a struct, enum or union data structure. - /// -- /// *This type is available if Syn is built with the `"derive"` feature.* -+ /// *This type is available only if Syn is built with the `"derive"` feature.* - /// - /// # Syntax tree enum - /// -@@ -53,7 +53,7 @@ ast_enum_of_structs! { - ast_struct! { - /// A struct input to a `proc_macro_derive` macro. - /// -- /// *This type is available if Syn is built with the `"derive"` -+ /// *This type is available only if Syn is built with the `"derive"` - /// feature.* - pub struct DataStruct { - pub struct_token: Token![struct], -@@ -65,7 +65,7 @@ ast_struct! { - ast_struct! { - /// An enum input to a `proc_macro_derive` macro. - /// -- /// *This type is available if Syn is built with the `"derive"` -+ /// *This type is available only if Syn is built with the `"derive"` - /// feature.* - pub struct DataEnum { - pub enum_token: Token![enum], -@@ -77,7 +77,7 @@ ast_struct! { - ast_struct! { - /// An untagged union input to a `proc_macro_derive` macro. - /// -- /// *This type is available if Syn is built with the `"derive"` -+ /// *This type is available only if Syn is built with the `"derive"` - /// feature.* - pub struct DataUnion { - pub union_token: Token![union], -diff --git a/third_party/rust/syn/src/discouraged.rs b/third_party/rust/syn/src/discouraged.rs -index 4d9ff93728..76c9fce6f8 100644 ---- a/third_party/rust/syn/src/discouraged.rs -+++ b/third_party/rust/syn/src/discouraged.rs -@@ -16,7 +16,7 @@ pub trait Speculative { - /// syntax of the form `A* B*` for arbitrary syntax `A` and `B`. The problem - /// is that when the fork fails to parse an `A`, it's impossible to tell - /// whether that was because of a syntax error and the user meant to provide -- /// an `A`, or that the `A`s are finished and its time to start parsing -+ /// an `A`, or that the `A`s are finished and it's time to start parsing - /// `B`s. Use with care. - /// - /// Also note that if `A` is a subset of `B`, `A* B*` can be parsed by -@@ -72,7 +72,6 @@ pub trait Speculative { - /// || input.peek(Token![self]) - /// || input.peek(Token![Self]) - /// || input.peek(Token![crate]) -- /// || input.peek(Token![extern]) - /// { - /// let ident = input.call(Ident::parse_any)?; - /// return Ok(PathSegment::from(ident)); -@@ -164,6 +163,30 @@ impl<'a> Speculative for ParseBuffer<'a> { - panic!("Fork was not derived from the advancing parse stream"); - } - -+ let (self_unexp, self_sp) = inner_unexpected(self); -+ let (fork_unexp, fork_sp) = inner_unexpected(fork); -+ if !Rc::ptr_eq(&self_unexp, &fork_unexp) { -+ match (fork_sp, self_sp) { -+ // Unexpected set on the fork, but not on `self`, copy it over. -+ (Some(span), None) => { -+ self_unexp.set(Unexpected::Some(span)); -+ } -+ // Unexpected unset. Use chain to propagate errors from fork. -+ (None, None) => { -+ fork_unexp.set(Unexpected::Chain(self_unexp)); -+ -+ // Ensure toplevel 'unexpected' tokens from the fork don't -+ // bubble up the chain by replacing the root `unexpected` -+ // pointer, only 'unexpected' tokens from existing group -+ // parsers should bubble. -+ fork.unexpected -+ .set(Some(Rc::new(Cell::new(Unexpected::None)))); -+ } -+ // Unexpected has been set on `self`. No changes needed. -+ (_, Some(_)) => {} -+ } -+ } -+ - // See comment on `cell` in the struct definition. - self.cell - .set(unsafe { mem::transmute::<Cursor, Cursor<'static>>(fork.cursor()) }) -diff --git a/third_party/rust/syn/src/error.rs b/third_party/rust/syn/src/error.rs -index 146d652299..dba34f9254 100644 ---- a/third_party/rust/syn/src/error.rs -+++ b/third_party/rust/syn/src/error.rs -@@ -1,4 +1,3 @@ --use std; - use std::fmt::{self, Debug, Display}; - use std::iter::FromIterator; - use std::slice; -@@ -32,8 +31,8 @@ pub type Result<T> = std::result::Result<T, Error>; - /// conversion to `compile_error!` automatically. - /// - /// ``` --/// extern crate proc_macro; --/// -+/// # extern crate proc_macro; -+/// # - /// use proc_macro::TokenStream; - /// use syn::{parse_macro_input, AttributeArgs, ItemFn}; - /// -@@ -82,7 +81,6 @@ pub type Result<T> = std::result::Result<T, Error>; - /// # } - /// # } - /// ``` --#[derive(Clone)] - pub struct Error { - messages: Vec<ErrorMessage>, - } -@@ -250,6 +248,17 @@ pub fn new_at<T: Display>(scope: Span, cursor: Cursor, message: T) -> Error { - } - } - -+#[cfg(all(feature = "parsing", any(feature = "full", feature = "derive")))] -+pub fn new2<T: Display>(start: Span, end: Span, message: T) -> Error { -+ Error { -+ messages: vec![ErrorMessage { -+ start_span: ThreadBound::new(start), -+ end_span: ThreadBound::new(end), -+ message: message.to_string(), -+ }], -+ } -+} -+ - impl Debug for Error { - fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { - if self.messages.len() == 1 { -@@ -278,6 +287,14 @@ impl Display for Error { - } - } - -+impl Clone for Error { -+ fn clone(&self) -> Self { -+ Error { -+ messages: self.messages.clone(), -+ } -+ } -+} -+ - impl Clone for ErrorMessage { - fn clone(&self) -> Self { - let start = self -@@ -355,3 +372,11 @@ impl<'a> Iterator for Iter<'a> { - }) - } - } -+ -+impl Extend<Error> for Error { -+ fn extend<T: IntoIterator<Item = Error>>(&mut self, iter: T) { -+ for err in iter { -+ self.combine(err); -+ } -+ } -+} -diff --git a/third_party/rust/syn/src/expr.rs b/third_party/rust/syn/src/expr.rs -index 2874a463aa..2fe0e0b5d8 100644 ---- a/third_party/rust/syn/src/expr.rs -+++ b/third_party/rust/syn/src/expr.rs -@@ -1,18 +1,21 @@ - use super::*; - use crate::punctuated::Punctuated; --#[cfg(feature = "extra-traits")] --use crate::tt::TokenStreamHelper; -+#[cfg(feature = "full")] -+use crate::reserved::Reserved; - use proc_macro2::{Span, TokenStream}; --#[cfg(feature = "extra-traits")] -+#[cfg(feature = "printing")] -+use quote::IdentFragment; -+#[cfg(feature = "printing")] -+use std::fmt::{self, Display}; - use std::hash::{Hash, Hasher}; --#[cfg(all(feature = "parsing", feature = "full"))] -+#[cfg(feature = "parsing")] - use std::mem; - - ast_enum_of_structs! { - /// A Rust expression. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -- /// feature.* -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` -+ /// feature, but most of the variants are not available unless "full" is enabled.* - /// - /// # Syntax tree enums - /// -@@ -83,7 +86,7 @@ ast_enum_of_structs! { - /// A sign that you may not be choosing the right variable names is if you - /// see names getting repeated in your code, like accessing - /// `receiver.receiver` or `pat.pat` or `cond.cond`. -- pub enum Expr #manual_extra_traits { -+ pub enum Expr { - /// A slice literal expression: `[a, b, c, d]`. - Array(ExprArray), - -@@ -228,7 +231,7 @@ ast_enum_of_structs! { - ast_struct! { - /// A slice literal expression: `[a, b, c, d]`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprArray #full { - pub attrs: Vec<Attribute>, - pub bracket_token: token::Bracket, -@@ -239,7 +242,7 @@ ast_struct! { - ast_struct! { - /// An assignment expression: `a = compute()`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprAssign #full { - pub attrs: Vec<Attribute>, - pub left: Box<Expr>, -@@ -251,7 +254,7 @@ ast_struct! { - ast_struct! { - /// A compound assignment expression: `counter += 1`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprAssignOp #full { - pub attrs: Vec<Attribute>, - pub left: Box<Expr>, -@@ -263,7 +266,7 @@ ast_struct! { - ast_struct! { - /// An async block: `async { ... }`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprAsync #full { - pub attrs: Vec<Attribute>, - pub async_token: Token![async], -@@ -275,7 +278,7 @@ ast_struct! { - ast_struct! { - /// An await expression: `fut.await`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprAwait #full { - pub attrs: Vec<Attribute>, - pub base: Box<Expr>, -@@ -287,7 +290,7 @@ ast_struct! { - ast_struct! { - /// A binary operation: `a + b`, `a * b`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct ExprBinary { - pub attrs: Vec<Attribute>, -@@ -300,7 +303,7 @@ ast_struct! { - ast_struct! { - /// A blocked scope: `{ ... }`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprBlock #full { - pub attrs: Vec<Attribute>, - pub label: Option<Label>, -@@ -311,7 +314,7 @@ ast_struct! { - ast_struct! { - /// A box expression: `box f`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprBox #full { - pub attrs: Vec<Attribute>, - pub box_token: Token![box], -@@ -323,7 +326,7 @@ ast_struct! { - /// A `break`, with an optional label to break and an optional - /// expression. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprBreak #full { - pub attrs: Vec<Attribute>, - pub break_token: Token![break], -@@ -335,7 +338,7 @@ ast_struct! { - ast_struct! { - /// A function call expression: `invoke(a, b)`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct ExprCall { - pub attrs: Vec<Attribute>, -@@ -348,7 +351,7 @@ ast_struct! { - ast_struct! { - /// A cast expression: `foo as f64`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct ExprCast { - pub attrs: Vec<Attribute>, -@@ -361,7 +364,7 @@ ast_struct! { - ast_struct! { - /// A closure expression: `|a, b| a + b`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprClosure #full { - pub attrs: Vec<Attribute>, - pub asyncness: Option<Token![async]>, -@@ -378,7 +381,7 @@ ast_struct! { - ast_struct! { - /// A `continue`, with an optional label. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprContinue #full { - pub attrs: Vec<Attribute>, - pub continue_token: Token![continue], -@@ -390,7 +393,7 @@ ast_struct! { - /// Access of a named struct field (`obj.k`) or unnamed tuple struct - /// field (`obj.0`). - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprField { - pub attrs: Vec<Attribute>, - pub base: Box<Expr>, -@@ -402,7 +405,7 @@ ast_struct! { - ast_struct! { - /// A for loop: `for pat in expr { ... }`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprForLoop #full { - pub attrs: Vec<Attribute>, - pub label: Option<Label>, -@@ -421,7 +424,7 @@ ast_struct! { - /// of expressions and is related to `None`-delimited spans in a - /// `TokenStream`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprGroup #full { - pub attrs: Vec<Attribute>, - pub group_token: token::Group, -@@ -436,7 +439,7 @@ ast_struct! { - /// The `else` branch expression may only be an `If` or `Block` - /// expression, not any of the other types of expression. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprIf #full { - pub attrs: Vec<Attribute>, - pub if_token: Token![if], -@@ -449,7 +452,7 @@ ast_struct! { - ast_struct! { - /// A square bracketed indexing expression: `vector[2]`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct ExprIndex { - pub attrs: Vec<Attribute>, -@@ -462,7 +465,7 @@ ast_struct! { - ast_struct! { - /// A `let` guard: `let Some(x) = opt`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprLet #full { - pub attrs: Vec<Attribute>, - pub let_token: Token![let], -@@ -475,7 +478,7 @@ ast_struct! { - ast_struct! { - /// A literal in place of an expression: `1`, `"foo"`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct ExprLit { - pub attrs: Vec<Attribute>, -@@ -486,7 +489,7 @@ ast_struct! { - ast_struct! { - /// Conditionless loop: `loop { ... }`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprLoop #full { - pub attrs: Vec<Attribute>, - pub label: Option<Label>, -@@ -498,7 +501,7 @@ ast_struct! { - ast_struct! { - /// A macro invocation expression: `format!("{}", q)`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprMacro #full { - pub attrs: Vec<Attribute>, - pub mac: Macro, -@@ -508,7 +511,7 @@ ast_struct! { - ast_struct! { - /// A `match` expression: `match n { Some(n) => {}, None => {} }`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprMatch #full { - pub attrs: Vec<Attribute>, - pub match_token: Token![match], -@@ -521,7 +524,7 @@ ast_struct! { - ast_struct! { - /// A method call expression: `x.foo::<T>(a, b)`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprMethodCall #full { - pub attrs: Vec<Attribute>, - pub receiver: Box<Expr>, -@@ -536,7 +539,7 @@ ast_struct! { - ast_struct! { - /// A parenthesized expression: `(a + b)`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprParen { - pub attrs: Vec<Attribute>, - pub paren_token: token::Paren, -@@ -550,7 +553,7 @@ ast_struct! { - /// - /// A plain identifier like `x` is a path of length 1. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct ExprPath { - pub attrs: Vec<Attribute>, -@@ -562,7 +565,7 @@ ast_struct! { - ast_struct! { - /// A range expression: `1..2`, `1..`, `..2`, `1..=2`, `..=2`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprRange #full { - pub attrs: Vec<Attribute>, - pub from: Option<Box<Expr>>, -@@ -574,7 +577,7 @@ ast_struct! { - ast_struct! { - /// A referencing operation: `&a` or `&mut a`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprReference #full { - pub attrs: Vec<Attribute>, - pub and_token: Token![&], -@@ -587,7 +590,7 @@ ast_struct! { - ast_struct! { - /// An array literal constructed from one repeated element: `[0u8; N]`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprRepeat #full { - pub attrs: Vec<Attribute>, - pub bracket_token: token::Bracket, -@@ -600,7 +603,7 @@ ast_struct! { - ast_struct! { - /// A `return`, with an optional value to be returned. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprReturn #full { - pub attrs: Vec<Attribute>, - pub return_token: Token![return], -@@ -614,7 +617,7 @@ ast_struct! { - /// The `rest` provides the value of the remaining fields as in `S { a: - /// 1, b: 1, ..rest }`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprStruct #full { - pub attrs: Vec<Attribute>, - pub path: Path, -@@ -628,7 +631,7 @@ ast_struct! { - ast_struct! { - /// A try-expression: `expr?`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprTry #full { - pub attrs: Vec<Attribute>, - pub expr: Box<Expr>, -@@ -639,7 +642,7 @@ ast_struct! { - ast_struct! { - /// A try block: `try { ... }`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprTryBlock #full { - pub attrs: Vec<Attribute>, - pub try_token: Token![try], -@@ -650,7 +653,7 @@ ast_struct! { - ast_struct! { - /// A tuple expression: `(a, b, c, d)`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprTuple #full { - pub attrs: Vec<Attribute>, - pub paren_token: token::Paren, -@@ -661,7 +664,7 @@ ast_struct! { - ast_struct! { - /// A type ascription expression: `foo: f64`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprType #full { - pub attrs: Vec<Attribute>, - pub expr: Box<Expr>, -@@ -673,7 +676,7 @@ ast_struct! { - ast_struct! { - /// A unary operation: `!x`, `*x`. - /// -- /// *This type is available if Syn is built with the `"derive"` or -+ /// *This type is available only if Syn is built with the `"derive"` or - /// `"full"` feature.* - pub struct ExprUnary { - pub attrs: Vec<Attribute>, -@@ -685,7 +688,7 @@ ast_struct! { - ast_struct! { - /// An unsafe block: `unsafe { ... }`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprUnsafe #full { - pub attrs: Vec<Attribute>, - pub unsafe_token: Token![unsafe], -@@ -696,7 +699,7 @@ ast_struct! { - ast_struct! { - /// A while loop: `while expr { ... }`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprWhile #full { - pub attrs: Vec<Attribute>, - pub label: Option<Label>, -@@ -709,7 +712,7 @@ ast_struct! { - ast_struct! { - /// A yield expression: `yield expr`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct ExprYield #full { - pub attrs: Vec<Attribute>, - pub yield_token: Token![yield], -@@ -717,232 +720,6 @@ ast_struct! { - } - } - --#[cfg(feature = "extra-traits")] --impl Eq for Expr {} -- --#[cfg(feature = "extra-traits")] --impl PartialEq for Expr { -- fn eq(&self, other: &Self) -> bool { -- match (self, other) { -- (Expr::Array(this), Expr::Array(other)) => this == other, -- (Expr::Assign(this), Expr::Assign(other)) => this == other, -- (Expr::AssignOp(this), Expr::AssignOp(other)) => this == other, -- (Expr::Async(this), Expr::Async(other)) => this == other, -- (Expr::Await(this), Expr::Await(other)) => this == other, -- (Expr::Binary(this), Expr::Binary(other)) => this == other, -- (Expr::Block(this), Expr::Block(other)) => this == other, -- (Expr::Box(this), Expr::Box(other)) => this == other, -- (Expr::Break(this), Expr::Break(other)) => this == other, -- (Expr::Call(this), Expr::Call(other)) => this == other, -- (Expr::Cast(this), Expr::Cast(other)) => this == other, -- (Expr::Closure(this), Expr::Closure(other)) => this == other, -- (Expr::Continue(this), Expr::Continue(other)) => this == other, -- (Expr::Field(this), Expr::Field(other)) => this == other, -- (Expr::ForLoop(this), Expr::ForLoop(other)) => this == other, -- (Expr::Group(this), Expr::Group(other)) => this == other, -- (Expr::If(this), Expr::If(other)) => this == other, -- (Expr::Index(this), Expr::Index(other)) => this == other, -- (Expr::Let(this), Expr::Let(other)) => this == other, -- (Expr::Lit(this), Expr::Lit(other)) => this == other, -- (Expr::Loop(this), Expr::Loop(other)) => this == other, -- (Expr::Macro(this), Expr::Macro(other)) => this == other, -- (Expr::Match(this), Expr::Match(other)) => this == other, -- (Expr::MethodCall(this), Expr::MethodCall(other)) => this == other, -- (Expr::Paren(this), Expr::Paren(other)) => this == other, -- (Expr::Path(this), Expr::Path(other)) => this == other, -- (Expr::Range(this), Expr::Range(other)) => this == other, -- (Expr::Reference(this), Expr::Reference(other)) => this == other, -- (Expr::Repeat(this), Expr::Repeat(other)) => this == other, -- (Expr::Return(this), Expr::Return(other)) => this == other, -- (Expr::Struct(this), Expr::Struct(other)) => this == other, -- (Expr::Try(this), Expr::Try(other)) => this == other, -- (Expr::TryBlock(this), Expr::TryBlock(other)) => this == other, -- (Expr::Tuple(this), Expr::Tuple(other)) => this == other, -- (Expr::Type(this), Expr::Type(other)) => this == other, -- (Expr::Unary(this), Expr::Unary(other)) => this == other, -- (Expr::Unsafe(this), Expr::Unsafe(other)) => this == other, -- (Expr::Verbatim(this), Expr::Verbatim(other)) => { -- TokenStreamHelper(this) == TokenStreamHelper(other) -- } -- (Expr::While(this), Expr::While(other)) => this == other, -- (Expr::Yield(this), Expr::Yield(other)) => this == other, -- _ => false, -- } -- } --} -- --#[cfg(feature = "extra-traits")] --impl Hash for Expr { -- fn hash<H>(&self, hash: &mut H) -- where -- H: Hasher, -- { -- match self { -- Expr::Array(expr) => { -- hash.write_u8(0); -- expr.hash(hash); -- } -- Expr::Assign(expr) => { -- hash.write_u8(1); -- expr.hash(hash); -- } -- Expr::AssignOp(expr) => { -- hash.write_u8(2); -- expr.hash(hash); -- } -- Expr::Async(expr) => { -- hash.write_u8(3); -- expr.hash(hash); -- } -- Expr::Await(expr) => { -- hash.write_u8(4); -- expr.hash(hash); -- } -- Expr::Binary(expr) => { -- hash.write_u8(5); -- expr.hash(hash); -- } -- Expr::Block(expr) => { -- hash.write_u8(6); -- expr.hash(hash); -- } -- Expr::Box(expr) => { -- hash.write_u8(7); -- expr.hash(hash); -- } -- Expr::Break(expr) => { -- hash.write_u8(8); -- expr.hash(hash); -- } -- Expr::Call(expr) => { -- hash.write_u8(9); -- expr.hash(hash); -- } -- Expr::Cast(expr) => { -- hash.write_u8(10); -- expr.hash(hash); -- } -- Expr::Closure(expr) => { -- hash.write_u8(11); -- expr.hash(hash); -- } -- Expr::Continue(expr) => { -- hash.write_u8(12); -- expr.hash(hash); -- } -- Expr::Field(expr) => { -- hash.write_u8(13); -- expr.hash(hash); -- } -- Expr::ForLoop(expr) => { -- hash.write_u8(14); -- expr.hash(hash); -- } -- Expr::Group(expr) => { -- hash.write_u8(15); -- expr.hash(hash); -- } -- Expr::If(expr) => { -- hash.write_u8(16); -- expr.hash(hash); -- } -- Expr::Index(expr) => { -- hash.write_u8(17); -- expr.hash(hash); -- } -- Expr::Let(expr) => { -- hash.write_u8(18); -- expr.hash(hash); -- } -- Expr::Lit(expr) => { -- hash.write_u8(19); -- expr.hash(hash); -- } -- Expr::Loop(expr) => { -- hash.write_u8(20); -- expr.hash(hash); -- } -- Expr::Macro(expr) => { -- hash.write_u8(21); -- expr.hash(hash); -- } -- Expr::Match(expr) => { -- hash.write_u8(22); -- expr.hash(hash); -- } -- Expr::MethodCall(expr) => { -- hash.write_u8(23); -- expr.hash(hash); -- } -- Expr::Paren(expr) => { -- hash.write_u8(24); -- expr.hash(hash); -- } -- Expr::Path(expr) => { -- hash.write_u8(25); -- expr.hash(hash); -- } -- Expr::Range(expr) => { -- hash.write_u8(26); -- expr.hash(hash); -- } -- Expr::Reference(expr) => { -- hash.write_u8(27); -- expr.hash(hash); -- } -- Expr::Repeat(expr) => { -- hash.write_u8(28); -- expr.hash(hash); -- } -- Expr::Return(expr) => { -- hash.write_u8(29); -- expr.hash(hash); -- } -- Expr::Struct(expr) => { -- hash.write_u8(30); -- expr.hash(hash); -- } -- Expr::Try(expr) => { -- hash.write_u8(31); -- expr.hash(hash); -- } -- Expr::TryBlock(expr) => { -- hash.write_u8(32); -- expr.hash(hash); -- } -- Expr::Tuple(expr) => { -- hash.write_u8(33); -- expr.hash(hash); -- } -- Expr::Type(expr) => { -- hash.write_u8(34); -- expr.hash(hash); -- } -- Expr::Unary(expr) => { -- hash.write_u8(35); -- expr.hash(hash); -- } -- Expr::Unsafe(expr) => { -- hash.write_u8(36); -- expr.hash(hash); -- } -- Expr::Verbatim(expr) => { -- hash.write_u8(37); -- TokenStreamHelper(expr).hash(hash); -- } -- Expr::While(expr) => { -- hash.write_u8(38); -- expr.hash(hash); -- } -- Expr::Yield(expr) => { -- hash.write_u8(39); -- expr.hash(hash); -- } -- Expr::__Nonexhaustive => unreachable!(), -- } -- } --} -- - impl Expr { - #[cfg(all(feature = "parsing", feature = "full"))] - pub(crate) fn replace_attrs(&mut self, new: Vec<Attribute>) -> Vec<Attribute> { -@@ -996,7 +773,7 @@ ast_enum! { - /// A struct or tuple struct field accessed in a struct literal or field - /// expression. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* - pub enum Member { - /// A named field like `self.x`. -@@ -1006,12 +783,50 @@ ast_enum! { - } - } - -+impl Eq for Member {} -+ -+impl PartialEq for Member { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (Member::Named(this), Member::Named(other)) => this == other, -+ (Member::Unnamed(this), Member::Unnamed(other)) => this == other, -+ _ => false, -+ } -+ } -+} -+ -+impl Hash for Member { -+ fn hash<H: Hasher>(&self, state: &mut H) { -+ match self { -+ Member::Named(m) => m.hash(state), -+ Member::Unnamed(m) => m.hash(state), -+ } -+ } -+} -+ -+#[cfg(feature = "printing")] -+impl IdentFragment for Member { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ Member::Named(m) => Display::fmt(m, formatter), -+ Member::Unnamed(m) => Display::fmt(&m.index, formatter), -+ } -+ } -+ -+ fn span(&self) -> Option<Span> { -+ match self { -+ Member::Named(m) => Some(m.span()), -+ Member::Unnamed(m) => Some(m.span), -+ } -+ } -+} -+ - ast_struct! { - /// The index of an unnamed tuple struct field. - /// -- /// *This type is available if Syn is built with the `"derive"` or `"full"` -+ /// *This type is available only if Syn is built with the `"derive"` or `"full"` - /// feature.* -- pub struct Index #manual_extra_traits { -+ pub struct Index { - pub index: u32, - pub span: Span, - } -@@ -1027,28 +842,28 @@ impl From<usize> for Index { - } - } - --#[cfg(feature = "extra-traits")] - impl Eq for Index {} - --#[cfg(feature = "extra-traits")] - impl PartialEq for Index { - fn eq(&self, other: &Self) -> bool { - self.index == other.index - } - } - --#[cfg(feature = "extra-traits")] - impl Hash for Index { - fn hash<H: Hasher>(&self, state: &mut H) { - self.index.hash(state); - } - } - --#[cfg(feature = "full")] --ast_struct! { -- #[derive(Default)] -- pub struct Reserved { -- private: (), -+#[cfg(feature = "printing")] -+impl IdentFragment for Index { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ Display::fmt(&self.index, formatter) -+ } -+ -+ fn span(&self) -> Option<Span> { -+ Some(self.span) - } - } - -@@ -1057,7 +872,7 @@ ast_struct! { - /// The `::<>` explicit type parameters passed to a method call: - /// `parse::<u64>()`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct MethodTurbofish { - pub colon2_token: Token![::], - pub lt_token: Token![<], -@@ -1070,7 +885,7 @@ ast_struct! { - ast_enum! { - /// An individual generic argument to a method, like `T`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub enum GenericMethodArgument { - /// A type argument. - Type(Type), -@@ -1086,7 +901,7 @@ ast_enum! { - ast_struct! { - /// A field-value pair in a struct literal. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct FieldValue { - /// Attributes tagged on the field. - pub attrs: Vec<Attribute>, -@@ -1107,7 +922,7 @@ ast_struct! { - ast_struct! { - /// A lifetime labeling a `for`, `while`, or `loop`. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct Label { - pub name: Lifetime, - pub colon_token: Token![:], -@@ -1134,7 +949,7 @@ ast_struct! { - /// # } - /// ``` - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub struct Arm { - pub attrs: Vec<Attribute>, - pub pat: Pat, -@@ -1149,8 +964,7 @@ ast_struct! { - ast_enum! { - /// Limit types of a range, inclusive or exclusive. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -- #[cfg_attr(feature = "clone-impls", derive(Copy))] -+ /// *This type is available only if Syn is built with the `"full"` feature.* - pub enum RangeLimits { - /// Inclusive at the beginning, exclusive at the end. - HalfOpen(Token![..]), -@@ -1162,7 +976,7 @@ ast_enum! { - #[cfg(any(feature = "parsing", feature = "printing"))] - #[cfg(feature = "full")] - pub(crate) fn requires_terminator(expr: &Expr) -> bool { -- // see https://github.com/rust-lang/rust/blob/eb8f2586e/src/libsyntax/parse/classify.rs#L17-L37 -+ // see https://github.com/rust-lang/rust/blob/2679c38fc/src/librustc_ast/util/classify.rs#L7-L25 - match *expr { - Expr::Unsafe(..) - | Expr::Block(..) -@@ -1183,16 +997,17 @@ pub(crate) mod parsing { - - use crate::parse::{Parse, ParseStream, Result}; - use crate::path; -+ use std::cmp::Ordering; -+ -+ crate::custom_keyword!(raw); - - // When we're parsing expressions which occur before blocks, like in an if - // statement's condition, we cannot parse a struct literal. - // - // Struct literals are ambiguous in certain positions - // https://github.com/rust-lang/rfcs/pull/92 -- #[derive(Copy, Clone)] - pub struct AllowStruct(bool); - -- #[derive(Copy, Clone, PartialEq, PartialOrd)] - enum Precedence { - Any, - Assign, -@@ -1246,9 +1061,121 @@ pub(crate) mod parsing { - } - } - -- #[cfg(feature = "full")] -- fn expr_no_struct(input: ParseStream) -> Result<Expr> { -- ambiguous_expr(input, AllowStruct(false)) -+ impl Expr { -+ /// An alternative to the primary `Expr::parse` parser (from the -+ /// [`Parse`] trait) for ambiguous syntactic positions in which a -+ /// trailing brace should not be taken as part of the expression. -+ /// -+ /// Rust grammar has an ambiguity where braces sometimes turn a path -+ /// expression into a struct initialization and sometimes do not. In the -+ /// following code, the expression `S {}` is one expression. Presumably -+ /// there is an empty struct `struct S {}` defined somewhere which it is -+ /// instantiating. -+ /// -+ /// ``` -+ /// # struct S; -+ /// # impl std::ops::Deref for S { -+ /// # type Target = bool; -+ /// # fn deref(&self) -> &Self::Target { -+ /// # &true -+ /// # } -+ /// # } -+ /// let _ = *S {}; -+ /// -+ /// // parsed by rustc as: `*(S {})` -+ /// ``` -+ /// -+ /// We would want to parse the above using `Expr::parse` after the `=` -+ /// token. -+ /// -+ /// But in the following, `S {}` is *not* a struct init expression. -+ /// -+ /// ``` -+ /// # const S: &bool = &true; -+ /// if *S {} {} -+ /// -+ /// // parsed by rustc as: -+ /// // -+ /// // if (*S) { -+ /// // /* empty block */ -+ /// // } -+ /// // { -+ /// // /* another empty block */ -+ /// // } -+ /// ``` -+ /// -+ /// For that reason we would want to parse if-conditions using -+ /// `Expr::parse_without_eager_brace` after the `if` token. Same for -+ /// similar syntactic positions such as the condition expr after a -+ /// `while` token or the expr at the top of a `match`. -+ /// -+ /// The Rust grammar's choices around which way this ambiguity is -+ /// resolved at various syntactic positions is fairly arbitrary. Really -+ /// either parse behavior could work in most positions, and language -+ /// designers just decide each case based on which is more likely to be -+ /// what the programmer had in mind most of the time. -+ /// -+ /// ``` -+ /// # struct S; -+ /// # fn doc() -> S { -+ /// if return S {} {} -+ /// # unreachable!() -+ /// # } -+ /// -+ /// // parsed by rustc as: -+ /// // -+ /// // if (return (S {})) { -+ /// // } -+ /// // -+ /// // but could equally well have been this other arbitrary choice: -+ /// // -+ /// // if (return S) { -+ /// // } -+ /// // {} -+ /// ``` -+ /// -+ /// Note the grammar ambiguity on trailing braces is distinct from -+ /// precedence and is not captured by assigning a precedence level to -+ /// the braced struct init expr in relation to other operators. This can -+ /// be illustrated by `return 0..S {}` vs `match 0..S {}`. The former -+ /// parses as `return (0..(S {}))` implying tighter precedence for -+ /// struct init than `..`, while the latter parses as `match (0..S) {}` -+ /// implying tighter precedence for `..` than struct init, a -+ /// contradiction. -+ #[cfg(feature = "full")] -+ pub fn parse_without_eager_brace(input: ParseStream) -> Result<Expr> { -+ ambiguous_expr(input, AllowStruct(false)) -+ } -+ } -+ -+ impl Copy for AllowStruct {} -+ -+ impl Clone for AllowStruct { -+ fn clone(&self) -> Self { -+ *self -+ } -+ } -+ -+ impl Copy for Precedence {} -+ -+ impl Clone for Precedence { -+ fn clone(&self) -> Self { -+ *self -+ } -+ } -+ -+ impl PartialEq for Precedence { -+ fn eq(&self, other: &Self) -> bool { -+ *self as u8 == *other as u8 -+ } -+ } -+ -+ impl PartialOrd for Precedence { -+ fn partial_cmp(&self, other: &Self) -> Option<Ordering> { -+ let this = *self as u8; -+ let other = *other as u8; -+ Some(this.cmp(&other)) -+ } - } - - #[cfg(feature = "full")] -@@ -1430,56 +1357,84 @@ pub(crate) mod parsing { - parse_expr(input, lhs, allow_struct, Precedence::Any) - } - -+ #[cfg(feature = "full")] -+ fn expr_attrs(input: ParseStream) -> Result<Vec<Attribute>> { -+ let mut attrs = Vec::new(); -+ loop { -+ if input.peek(token::Group) { -+ let ahead = input.fork(); -+ let group = crate::group::parse_group(&ahead)?; -+ if !group.content.peek(Token![#]) || group.content.peek2(Token![!]) { -+ break; -+ } -+ let attr = group.content.call(attr::parsing::single_parse_outer)?; -+ if !group.content.is_empty() { -+ break; -+ } -+ attrs.push(attr); -+ } else if input.peek(Token![#]) { -+ attrs.push(input.call(attr::parsing::single_parse_outer)?); -+ } else { -+ break; -+ } -+ } -+ Ok(attrs) -+ } -+ - // <UnOp> <trailer> - // & <trailer> - // &mut <trailer> - // box <trailer> - #[cfg(feature = "full")] - fn unary_expr(input: ParseStream, allow_struct: AllowStruct) -> Result<Expr> { -- // TODO: optimize using advance_to -- let ahead = input.fork(); -- ahead.call(Attribute::parse_outer)?; -- if ahead.peek(Token![&]) -- || ahead.peek(Token![box]) -- || ahead.peek(Token![*]) -- || ahead.peek(Token![!]) -- || ahead.peek(Token![-]) -- { -- let attrs = input.call(Attribute::parse_outer)?; -- if input.peek(Token![&]) { -+ let begin = input.fork(); -+ let attrs = input.call(expr_attrs)?; -+ if input.peek(Token![&]) { -+ let and_token: Token![&] = input.parse()?; -+ let raw: Option<raw> = -+ if input.peek(raw) && (input.peek2(Token![mut]) || input.peek2(Token![const])) { -+ Some(input.parse()?) -+ } else { -+ None -+ }; -+ let mutability: Option<Token![mut]> = input.parse()?; -+ if raw.is_some() && mutability.is_none() { -+ input.parse::<Token![const]>()?; -+ } -+ let expr = Box::new(unary_expr(input, allow_struct)?); -+ if raw.is_some() { -+ Ok(Expr::Verbatim(verbatim::between(begin, input))) -+ } else { - Ok(Expr::Reference(ExprReference { - attrs, -- and_token: input.parse()?, -+ and_token, - raw: Reserved::default(), -- mutability: input.parse()?, -- expr: Box::new(unary_expr(input, allow_struct)?), -- })) -- } else if input.peek(Token![box]) { -- Ok(Expr::Box(ExprBox { -- attrs, -- box_token: input.parse()?, -- expr: Box::new(unary_expr(input, allow_struct)?), -- })) -- } else { -- Ok(Expr::Unary(ExprUnary { -- attrs, -- op: input.parse()?, -- expr: Box::new(unary_expr(input, allow_struct)?), -+ mutability, -+ expr, - })) - } -+ } else if input.peek(Token![box]) { -+ Ok(Expr::Box(ExprBox { -+ attrs, -+ box_token: input.parse()?, -+ expr: Box::new(unary_expr(input, allow_struct)?), -+ })) -+ } else if input.peek(Token![*]) || input.peek(Token![!]) || input.peek(Token![-]) { -+ Ok(Expr::Unary(ExprUnary { -+ attrs, -+ op: input.parse()?, -+ expr: Box::new(unary_expr(input, allow_struct)?), -+ })) - } else { -- trailer_expr(input, allow_struct) -+ trailer_expr(attrs, input, allow_struct) - } - } - - #[cfg(not(feature = "full"))] - fn unary_expr(input: ParseStream, allow_struct: AllowStruct) -> Result<Expr> { -- // TODO: optimize using advance_to -- let ahead = input.fork(); -- ahead.call(Attribute::parse_outer)?; -- if ahead.peek(Token![*]) || ahead.peek(Token![!]) || ahead.peek(Token![-]) { -+ if input.peek(Token![*]) || input.peek(Token![!]) || input.peek(Token![-]) { - Ok(Expr::Unary(ExprUnary { -- attrs: input.call(Attribute::parse_outer)?, -+ attrs: Vec::new(), - op: input.parse()?, - expr: Box::new(unary_expr(input, allow_struct)?), - })) -@@ -1495,13 +1450,11 @@ pub(crate) mod parsing { - // <atom> [ <expr> ] ... - // <atom> ? ... - #[cfg(feature = "full")] -- fn trailer_expr(input: ParseStream, allow_struct: AllowStruct) -> Result<Expr> { -- if input.peek(token::Group) { -- return input.call(expr_group).map(Expr::Group); -- } -- -- let outer_attrs = input.call(Attribute::parse_outer)?; -- -+ fn trailer_expr( -+ outer_attrs: Vec<Attribute>, -+ input: ParseStream, -+ allow_struct: AllowStruct, -+ ) -> Result<Expr> { - let atom = atom_expr(input, allow_struct)?; - let mut e = trailer_helper(input, atom)?; - -@@ -1523,18 +1476,26 @@ pub(crate) mod parsing { - args: content.parse_terminated(Expr::parse)?, - }); - } else if input.peek(Token![.]) && !input.peek(Token![..]) { -- let dot_token: Token![.] = input.parse()?; -+ let mut dot_token: Token![.] = input.parse()?; - -- if input.peek(token::Await) { -+ let await_token: Option<token::Await> = input.parse()?; -+ if let Some(await_token) = await_token { - e = Expr::Await(ExprAwait { - attrs: Vec::new(), - base: Box::new(e), - dot_token, -- await_token: input.parse()?, -+ await_token, - }); - continue; - } - -+ let float_token: Option<LitFloat> = input.parse()?; -+ if let Some(float_token) = float_token { -+ if multi_index(&mut e, &mut dot_token, float_token)? { -+ continue; -+ } -+ } -+ - let member: Member = input.parse()?; - let turbofish = if member.is_named() && input.peek(Token![::]) { - Some(MethodTurbofish { -@@ -1620,10 +1581,17 @@ pub(crate) mod parsing { - }); - } else if input.peek(Token![.]) && !input.peek(Token![..]) && !input.peek2(token::Await) - { -+ let mut dot_token: Token![.] = input.parse()?; -+ let float_token: Option<LitFloat> = input.parse()?; -+ if let Some(float_token) = float_token { -+ if multi_index(&mut e, &mut dot_token, float_token)? { -+ continue; -+ } -+ } - e = Expr::Field(ExprField { - attrs: Vec::new(), - base: Box::new(e), -- dot_token: input.parse()?, -+ dot_token, - member: input.parse()?, - }); - } else if input.peek(token::Bracket) { -@@ -1646,7 +1614,11 @@ pub(crate) mod parsing { - // interactions, as they are fully contained. - #[cfg(feature = "full")] - fn atom_expr(input: ParseStream, allow_struct: AllowStruct) -> Result<Expr> { -- if input.peek(token::Group) { -+ if input.peek(token::Group) -+ && !input.peek2(Token![::]) -+ && !input.peek2(Token![!]) -+ && !input.peek2(token::Brace) -+ { - input.call(expr_group).map(Expr::Group) - } else if input.peek(Lit) { - input.parse().map(Expr::Lit) -@@ -1668,7 +1640,6 @@ pub(crate) mod parsing { - || input.peek(Token![self]) - || input.peek(Token![Self]) - || input.peek(Token![super]) -- || input.peek(Token![extern]) - || input.peek(Token![crate]) - { - path_or_macro_or_struct(input, allow_struct) -@@ -1740,7 +1711,6 @@ pub(crate) mod parsing { - || input.peek(Token![self]) - || input.peek(Token![Self]) - || input.peek(Token![super]) -- || input.peek(Token![extern]) - || input.peek(Token![crate]) - { - input.parse().map(Expr::Path) -@@ -1878,7 +1848,7 @@ pub(crate) mod parsing { - - #[cfg(feature = "full")] - pub(crate) fn expr_early(input: ParseStream) -> Result<Expr> { -- let mut attrs = input.call(Attribute::parse_outer)?; -+ let mut attrs = input.call(expr_attrs)?; - let mut expr = if input.peek(Token![if]) { - Expr::If(input.parse()?) - } else if input.peek(Token![while]) { -@@ -1905,7 +1875,7 @@ pub(crate) mod parsing { - return parse_expr(input, expr, allow_struct, Precedence::Any); - }; - -- if input.peek(Token![.]) || input.peek(Token![?]) { -+ if input.peek(Token![.]) && !input.peek(Token![..]) || input.peek(Token![?]) { - expr = trailer_helper(input, expr)?; - - attrs.extend(expr.replace_attrs(Vec::new())); -@@ -1951,7 +1921,16 @@ pub(crate) mod parsing { - - #[cfg(feature = "full")] - fn generic_method_argument(input: ParseStream) -> Result<GenericMethodArgument> { -- // TODO parse const generics as well -+ if input.peek(Lit) { -+ let lit = input.parse()?; -+ return Ok(GenericMethodArgument::Const(Expr::Lit(lit))); -+ } -+ -+ if input.peek(token::Brace) { -+ let block = input.call(expr::parsing::expr_block)?; -+ return Ok(GenericMethodArgument::Const(Expr::Block(block))); -+ } -+ - input.parse().map(GenericMethodArgument::Type) - } - -@@ -1960,44 +1939,20 @@ pub(crate) mod parsing { - Ok(ExprLet { - attrs: Vec::new(), - let_token: input.parse()?, -- pat: { -- let leading_vert: Option<Token![|]> = input.parse()?; -- let pat: Pat = input.parse()?; -- if leading_vert.is_some() -- || input.peek(Token![|]) && !input.peek(Token![||]) && !input.peek(Token![|=]) -- { -- let mut cases = Punctuated::new(); -- cases.push_value(pat); -- while input.peek(Token![|]) -- && !input.peek(Token![||]) -- && !input.peek(Token![|=]) -- { -- let punct = input.parse()?; -- cases.push_punct(punct); -- let pat: Pat = input.parse()?; -- cases.push_value(pat); -- } -- Pat::Or(PatOr { -- attrs: Vec::new(), -- leading_vert, -- cases, -- }) -- } else { -- pat -- } -- }, -+ pat: pat::parsing::multi_pat_with_leading_vert(input)?, - eq_token: input.parse()?, -- expr: Box::new(input.call(expr_no_struct)?), -+ expr: Box::new(input.call(Expr::parse_without_eager_brace)?), - }) - } - - #[cfg(feature = "full")] - impl Parse for ExprIf { - fn parse(input: ParseStream) -> Result<Self> { -+ let attrs = input.call(Attribute::parse_outer)?; - Ok(ExprIf { -- attrs: Vec::new(), -+ attrs, - if_token: input.parse()?, -- cond: Box::new(input.call(expr_no_struct)?), -+ cond: Box::new(input.call(Expr::parse_without_eager_brace)?), - then_branch: input.parse()?, - else_branch: { - if input.peek(Token![else]) { -@@ -2033,29 +1988,14 @@ pub(crate) mod parsing { - #[cfg(feature = "full")] - impl Parse for ExprForLoop { - fn parse(input: ParseStream) -> Result<Self> { -+ let outer_attrs = input.call(Attribute::parse_outer)?; - let label: Option<Label> = input.parse()?; - let for_token: Token![for] = input.parse()?; - -- let leading_vert: Option<Token![|]> = input.parse()?; -- let mut pat: Pat = input.parse()?; -- if leading_vert.is_some() || input.peek(Token![|]) { -- let mut cases = Punctuated::new(); -- cases.push_value(pat); -- while input.peek(Token![|]) { -- let punct = input.parse()?; -- cases.push_punct(punct); -- let pat: Pat = input.parse()?; -- cases.push_value(pat); -- } -- pat = Pat::Or(PatOr { -- attrs: Vec::new(), -- leading_vert, -- cases, -- }); -- } -+ let pat = pat::parsing::multi_pat_with_leading_vert(input)?; - - let in_token: Token![in] = input.parse()?; -- let expr: Expr = input.call(expr_no_struct)?; -+ let expr: Expr = input.call(Expr::parse_without_eager_brace)?; - - let content; - let brace_token = braced!(content in input); -@@ -2063,7 +2003,7 @@ pub(crate) mod parsing { - let stmts = content.call(Block::parse_within)?; - - Ok(ExprForLoop { -- attrs: inner_attrs, -+ attrs: private::attrs(outer_attrs, inner_attrs), - label, - for_token, - pat, -@@ -2077,6 +2017,7 @@ pub(crate) mod parsing { - #[cfg(feature = "full")] - impl Parse for ExprLoop { - fn parse(input: ParseStream) -> Result<Self> { -+ let outer_attrs = input.call(Attribute::parse_outer)?; - let label: Option<Label> = input.parse()?; - let loop_token: Token![loop] = input.parse()?; - -@@ -2086,7 +2027,7 @@ pub(crate) mod parsing { - let stmts = content.call(Block::parse_within)?; - - Ok(ExprLoop { -- attrs: inner_attrs, -+ attrs: private::attrs(outer_attrs, inner_attrs), - label, - loop_token, - body: Block { brace_token, stmts }, -@@ -2097,8 +2038,9 @@ pub(crate) mod parsing { - #[cfg(feature = "full")] - impl Parse for ExprMatch { - fn parse(input: ParseStream) -> Result<Self> { -+ let outer_attrs = input.call(Attribute::parse_outer)?; - let match_token: Token![match] = input.parse()?; -- let expr = expr_no_struct(input)?; -+ let expr = Expr::parse_without_eager_brace(input)?; - - let content; - let brace_token = braced!(content in input); -@@ -2110,7 +2052,7 @@ pub(crate) mod parsing { - } - - Ok(ExprMatch { -- attrs: inner_attrs, -+ attrs: private::attrs(outer_attrs, inner_attrs), - match_token, - expr: Box::new(expr), - brace_token, -@@ -2305,9 +2247,10 @@ pub(crate) mod parsing { - #[cfg(feature = "full")] - impl Parse for ExprWhile { - fn parse(input: ParseStream) -> Result<Self> { -+ let outer_attrs = input.call(Attribute::parse_outer)?; - let label: Option<Label> = input.parse()?; - let while_token: Token![while] = input.parse()?; -- let cond = expr_no_struct(input)?; -+ let cond = Expr::parse_without_eager_brace(input)?; - - let content; - let brace_token = braced!(content in input); -@@ -2315,7 +2258,7 @@ pub(crate) mod parsing { - let stmts = content.call(Block::parse_within)?; - - Ok(ExprWhile { -- attrs: inner_attrs, -+ attrs: private::attrs(outer_attrs, inner_attrs), - label, - while_token, - cond: Box::new(cond), -@@ -2399,6 +2342,7 @@ pub(crate) mod parsing { - #[cfg(feature = "full")] - impl Parse for FieldValue { - fn parse(input: ParseStream) -> Result<Self> { -+ let attrs = input.call(Attribute::parse_outer)?; - let member: Member = input.parse()?; - let (colon_token, value) = if input.peek(Token![:]) || !member.is_named() { - let colon_token: Token![:] = input.parse()?; -@@ -2416,7 +2360,7 @@ pub(crate) mod parsing { - }; - - Ok(FieldValue { -- attrs: Vec::new(), -+ attrs, - member, - colon_token, - expr: value, -@@ -2433,46 +2377,36 @@ pub(crate) mod parsing { - let content; - let brace_token = braced!(content in input); - let inner_attrs = content.call(Attribute::parse_inner)?; -+ let attrs = private::attrs(outer_attrs, inner_attrs); - - let mut fields = Punctuated::new(); -- loop { -- let attrs = content.call(Attribute::parse_outer)?; -- // TODO: optimize using advance_to -- if content.fork().parse::<Member>().is_err() { -- if attrs.is_empty() { -- break; -- } else { -- return Err(content.error("expected struct field")); -- } -+ while !content.is_empty() { -+ if content.peek(Token![..]) { -+ return Ok(ExprStruct { -+ attrs, -+ brace_token, -+ path, -+ fields, -+ dot2_token: Some(content.parse()?), -+ rest: Some(Box::new(content.parse()?)), -+ }); - } - -- fields.push(FieldValue { -- attrs, -- ..content.parse()? -- }); -- -- if !content.peek(Token![,]) { -+ fields.push(content.parse()?); -+ if content.is_empty() { - break; - } - let punct: Token![,] = content.parse()?; - fields.push_punct(punct); - } - -- let (dot2_token, rest) = if fields.empty_or_trailing() && content.peek(Token![..]) { -- let dot2_token: Token![..] = content.parse()?; -- let rest: Expr = content.parse()?; -- (Some(dot2_token), Some(Box::new(rest))) -- } else { -- (None, None) -- }; -- - Ok(ExprStruct { -- attrs: private::attrs(outer_attrs, inner_attrs), -+ attrs, - brace_token, - path, - fields, -- dot2_token, -- rest, -+ dot2_token: None, -+ rest: None, - }) - } - -@@ -2577,27 +2511,7 @@ pub(crate) mod parsing { - let requires_comma; - Ok(Arm { - attrs: input.call(Attribute::parse_outer)?, -- pat: { -- let leading_vert: Option<Token![|]> = input.parse()?; -- let pat: Pat = input.parse()?; -- if leading_vert.is_some() || input.peek(Token![|]) { -- let mut cases = Punctuated::new(); -- cases.push_value(pat); -- while input.peek(Token![|]) { -- let punct = input.parse()?; -- cases.push_punct(punct); -- let pat: Pat = input.parse()?; -- cases.push_value(pat); -- } -- Pat::Or(PatOr { -- attrs: Vec::new(), -- leading_vert, -- cases, -- }) -- } else { -- pat -- } -- }, -+ pat: pat::parsing::multi_pat_with_leading_vert(input)?, - guard: { - if input.peek(Token![if]) { - let if_token: Token![if] = input.parse()?; -@@ -2641,6 +2555,26 @@ pub(crate) mod parsing { - } - } - -+ fn multi_index(e: &mut Expr, dot_token: &mut Token![.], float: LitFloat) -> Result<bool> { -+ let mut float_repr = float.to_string(); -+ let trailing_dot = float_repr.ends_with('.'); -+ if trailing_dot { -+ float_repr.truncate(float_repr.len() - 1); -+ } -+ for part in float_repr.split('.') { -+ let index = crate::parse_str(part).map_err(|err| Error::new(float.span(), err))?; -+ let base = mem::replace(e, Expr::__Nonexhaustive); -+ *e = Expr::Field(ExprField { -+ attrs: Vec::new(), -+ base: Box::new(base), -+ dot_token: Token, -+ member: Member::Unnamed(index), -+ }); -+ *dot_token = Token); -+ } -+ Ok(!trailing_dot) -+ } -+ - #[cfg(feature = "full")] - impl Member { - fn is_named(&self) -> bool { -diff --git a/third_party/rust/syn/src/ext.rs b/third_party/rust/syn/src/ext.rs -index d09577a27a..4f9bc145d9 100644 ---- a/third_party/rust/syn/src/ext.rs -+++ b/third_party/rust/syn/src/ext.rs -@@ -1,6 +1,6 @@ - //! Extension traits to provide parsing methods on foreign types. - //! --//! *This module is available if Syn is built with the `"parsing"` feature.* -+//! *This module is available only if Syn is built with the `"parsing"` feature.* - - use proc_macro2::Ident; - -@@ -16,7 +16,7 @@ use crate::token::CustomToken; - /// This trait is sealed and cannot be implemented for types outside of Syn. It - /// is implemented only for `proc_macro2::Ident`. - /// --/// *This trait is available if Syn is built with the `"parsing"` feature.* -+/// *This trait is available only if Syn is built with the `"parsing"` feature.* - pub trait IdentExt: Sized + private::Sealed { - /// Parses any identifier including keywords. - /// -@@ -129,7 +129,13 @@ mod private { - - impl Sealed for Ident {} - -- #[derive(Copy, Clone)] - pub struct PeekFn; - pub struct IdentAny; -+ -+ impl Copy for PeekFn {} -+ impl Clone for PeekFn { -+ fn clone(&self) -> Self { -+ *self -+ } -+ } - } -diff --git a/third_party/rust/syn/src/file.rs b/third_party/rust/syn/src/file.rs -index 88c02fe832..c8fab63cd9 100644 ---- a/third_party/rust/syn/src/file.rs -+++ b/third_party/rust/syn/src/file.rs -@@ -3,7 +3,7 @@ use super::*; - ast_struct! { - /// A complete file of Rust source code. - /// -- /// *This type is available if Syn is built with the `"full"` feature.* -+ /// *This type is available only if Syn is built with the `"full"` feature.* - /// - /// # Example - /// -@@ -37,6 +37,8 @@ ast_struct! { - /// file.read_to_string(&mut src).expect("Unable to read file"); - /// - /// let syntax = syn::parse_file(&src).expect("Unable to parse file"); -+ /// -+ /// // Debug impl is available if Syn is built with "extra-traits" feature. - /// println!("{:#?}", syntax); - /// } - /// ``` -diff --git a/third_party/rust/syn/src/gen/clone.rs b/third_party/rust/syn/src/gen/clone.rs -new file mode 100644 -index 0000000000..bea3887013 ---- /dev/null -+++ b/third_party/rust/syn/src/gen/clone.rs -@@ -0,0 +1,2051 @@ -+// This file is @generated by syn-internal-codegen. -+// It is not intended for manual editing. -+ -+#![allow(clippy::clone_on_copy, clippy::expl_impl_clone_on_copy)] -+use crate::*; -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Abi { -+ fn clone(&self) -> Self { -+ Abi { -+ extern_token: self.extern_token.clone(), -+ name: self.name.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for AngleBracketedGenericArguments { -+ fn clone(&self) -> Self { -+ AngleBracketedGenericArguments { -+ colon2_token: self.colon2_token.clone(), -+ lt_token: self.lt_token.clone(), -+ args: self.args.clone(), -+ gt_token: self.gt_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for Arm { -+ fn clone(&self) -> Self { -+ Arm { -+ attrs: self.attrs.clone(), -+ pat: self.pat.clone(), -+ guard: self.guard.clone(), -+ fat_arrow_token: self.fat_arrow_token.clone(), -+ body: self.body.clone(), -+ comma: self.comma.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Copy for AttrStyle {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for AttrStyle { -+ fn clone(&self) -> Self { -+ *self -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Attribute { -+ fn clone(&self) -> Self { -+ Attribute { -+ pound_token: self.pound_token.clone(), -+ style: self.style.clone(), -+ bracket_token: self.bracket_token.clone(), -+ path: self.path.clone(), -+ tokens: self.tokens.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for BareFnArg { -+ fn clone(&self) -> Self { -+ BareFnArg { -+ attrs: self.attrs.clone(), -+ name: self.name.clone(), -+ ty: self.ty.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Copy for BinOp {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for BinOp { -+ fn clone(&self) -> Self { -+ *self -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Binding { -+ fn clone(&self) -> Self { -+ Binding { -+ ident: self.ident.clone(), -+ eq_token: self.eq_token.clone(), -+ ty: self.ty.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for Block { -+ fn clone(&self) -> Self { -+ Block { -+ brace_token: self.brace_token.clone(), -+ stmts: self.stmts.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for BoundLifetimes { -+ fn clone(&self) -> Self { -+ BoundLifetimes { -+ for_token: self.for_token.clone(), -+ lt_token: self.lt_token.clone(), -+ lifetimes: self.lifetimes.clone(), -+ gt_token: self.gt_token.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for ConstParam { -+ fn clone(&self) -> Self { -+ ConstParam { -+ attrs: self.attrs.clone(), -+ const_token: self.const_token.clone(), -+ ident: self.ident.clone(), -+ colon_token: self.colon_token.clone(), -+ ty: self.ty.clone(), -+ eq_token: self.eq_token.clone(), -+ default: self.default.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Constraint { -+ fn clone(&self) -> Self { -+ Constraint { -+ ident: self.ident.clone(), -+ colon_token: self.colon_token.clone(), -+ bounds: self.bounds.clone(), -+ } -+ } -+} -+#[cfg(feature = "derive")] -+impl Clone for Data { -+ fn clone(&self) -> Self { -+ match self { -+ Data::Struct(v0) => Data::Struct(v0.clone()), -+ Data::Enum(v0) => Data::Enum(v0.clone()), -+ Data::Union(v0) => Data::Union(v0.clone()), -+ } -+ } -+} -+#[cfg(feature = "derive")] -+impl Clone for DataEnum { -+ fn clone(&self) -> Self { -+ DataEnum { -+ enum_token: self.enum_token.clone(), -+ brace_token: self.brace_token.clone(), -+ variants: self.variants.clone(), -+ } -+ } -+} -+#[cfg(feature = "derive")] -+impl Clone for DataStruct { -+ fn clone(&self) -> Self { -+ DataStruct { -+ struct_token: self.struct_token.clone(), -+ fields: self.fields.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "derive")] -+impl Clone for DataUnion { -+ fn clone(&self) -> Self { -+ DataUnion { -+ union_token: self.union_token.clone(), -+ fields: self.fields.clone(), -+ } -+ } -+} -+#[cfg(feature = "derive")] -+impl Clone for DeriveInput { -+ fn clone(&self) -> Self { -+ DeriveInput { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ ident: self.ident.clone(), -+ generics: self.generics.clone(), -+ data: self.data.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Expr { -+ fn clone(&self) -> Self { -+ match self { -+ #[cfg(feature = "full")] -+ Expr::Array(v0) => Expr::Array(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Assign(v0) => Expr::Assign(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::AssignOp(v0) => Expr::AssignOp(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Async(v0) => Expr::Async(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Await(v0) => Expr::Await(v0.clone()), -+ Expr::Binary(v0) => Expr::Binary(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Block(v0) => Expr::Block(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Box(v0) => Expr::Box(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Break(v0) => Expr::Break(v0.clone()), -+ Expr::Call(v0) => Expr::Call(v0.clone()), -+ Expr::Cast(v0) => Expr::Cast(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Closure(v0) => Expr::Closure(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Continue(v0) => Expr::Continue(v0.clone()), -+ Expr::Field(v0) => Expr::Field(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::ForLoop(v0) => Expr::ForLoop(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Group(v0) => Expr::Group(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::If(v0) => Expr::If(v0.clone()), -+ Expr::Index(v0) => Expr::Index(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Let(v0) => Expr::Let(v0.clone()), -+ Expr::Lit(v0) => Expr::Lit(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Loop(v0) => Expr::Loop(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Macro(v0) => Expr::Macro(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Match(v0) => Expr::Match(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::MethodCall(v0) => Expr::MethodCall(v0.clone()), -+ Expr::Paren(v0) => Expr::Paren(v0.clone()), -+ Expr::Path(v0) => Expr::Path(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Range(v0) => Expr::Range(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Reference(v0) => Expr::Reference(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Repeat(v0) => Expr::Repeat(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Return(v0) => Expr::Return(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Struct(v0) => Expr::Struct(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Try(v0) => Expr::Try(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::TryBlock(v0) => Expr::TryBlock(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Tuple(v0) => Expr::Tuple(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Type(v0) => Expr::Type(v0.clone()), -+ Expr::Unary(v0) => Expr::Unary(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Unsafe(v0) => Expr::Unsafe(v0.clone()), -+ Expr::Verbatim(v0) => Expr::Verbatim(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::While(v0) => Expr::While(v0.clone()), -+ #[cfg(feature = "full")] -+ Expr::Yield(v0) => Expr::Yield(v0.clone()), -+ _ => unreachable!(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprArray { -+ fn clone(&self) -> Self { -+ ExprArray { -+ attrs: self.attrs.clone(), -+ bracket_token: self.bracket_token.clone(), -+ elems: self.elems.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprAssign { -+ fn clone(&self) -> Self { -+ ExprAssign { -+ attrs: self.attrs.clone(), -+ left: self.left.clone(), -+ eq_token: self.eq_token.clone(), -+ right: self.right.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprAssignOp { -+ fn clone(&self) -> Self { -+ ExprAssignOp { -+ attrs: self.attrs.clone(), -+ left: self.left.clone(), -+ op: self.op.clone(), -+ right: self.right.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprAsync { -+ fn clone(&self) -> Self { -+ ExprAsync { -+ attrs: self.attrs.clone(), -+ async_token: self.async_token.clone(), -+ capture: self.capture.clone(), -+ block: self.block.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprAwait { -+ fn clone(&self) -> Self { -+ ExprAwait { -+ attrs: self.attrs.clone(), -+ base: self.base.clone(), -+ dot_token: self.dot_token.clone(), -+ await_token: self.await_token.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for ExprBinary { -+ fn clone(&self) -> Self { -+ ExprBinary { -+ attrs: self.attrs.clone(), -+ left: self.left.clone(), -+ op: self.op.clone(), -+ right: self.right.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprBlock { -+ fn clone(&self) -> Self { -+ ExprBlock { -+ attrs: self.attrs.clone(), -+ label: self.label.clone(), -+ block: self.block.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprBox { -+ fn clone(&self) -> Self { -+ ExprBox { -+ attrs: self.attrs.clone(), -+ box_token: self.box_token.clone(), -+ expr: self.expr.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprBreak { -+ fn clone(&self) -> Self { -+ ExprBreak { -+ attrs: self.attrs.clone(), -+ break_token: self.break_token.clone(), -+ label: self.label.clone(), -+ expr: self.expr.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for ExprCall { -+ fn clone(&self) -> Self { -+ ExprCall { -+ attrs: self.attrs.clone(), -+ func: self.func.clone(), -+ paren_token: self.paren_token.clone(), -+ args: self.args.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for ExprCast { -+ fn clone(&self) -> Self { -+ ExprCast { -+ attrs: self.attrs.clone(), -+ expr: self.expr.clone(), -+ as_token: self.as_token.clone(), -+ ty: self.ty.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprClosure { -+ fn clone(&self) -> Self { -+ ExprClosure { -+ attrs: self.attrs.clone(), -+ asyncness: self.asyncness.clone(), -+ movability: self.movability.clone(), -+ capture: self.capture.clone(), -+ or1_token: self.or1_token.clone(), -+ inputs: self.inputs.clone(), -+ or2_token: self.or2_token.clone(), -+ output: self.output.clone(), -+ body: self.body.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprContinue { -+ fn clone(&self) -> Self { -+ ExprContinue { -+ attrs: self.attrs.clone(), -+ continue_token: self.continue_token.clone(), -+ label: self.label.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for ExprField { -+ fn clone(&self) -> Self { -+ ExprField { -+ attrs: self.attrs.clone(), -+ base: self.base.clone(), -+ dot_token: self.dot_token.clone(), -+ member: self.member.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprForLoop { -+ fn clone(&self) -> Self { -+ ExprForLoop { -+ attrs: self.attrs.clone(), -+ label: self.label.clone(), -+ for_token: self.for_token.clone(), -+ pat: self.pat.clone(), -+ in_token: self.in_token.clone(), -+ expr: self.expr.clone(), -+ body: self.body.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprGroup { -+ fn clone(&self) -> Self { -+ ExprGroup { -+ attrs: self.attrs.clone(), -+ group_token: self.group_token.clone(), -+ expr: self.expr.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprIf { -+ fn clone(&self) -> Self { -+ ExprIf { -+ attrs: self.attrs.clone(), -+ if_token: self.if_token.clone(), -+ cond: self.cond.clone(), -+ then_branch: self.then_branch.clone(), -+ else_branch: self.else_branch.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for ExprIndex { -+ fn clone(&self) -> Self { -+ ExprIndex { -+ attrs: self.attrs.clone(), -+ expr: self.expr.clone(), -+ bracket_token: self.bracket_token.clone(), -+ index: self.index.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprLet { -+ fn clone(&self) -> Self { -+ ExprLet { -+ attrs: self.attrs.clone(), -+ let_token: self.let_token.clone(), -+ pat: self.pat.clone(), -+ eq_token: self.eq_token.clone(), -+ expr: self.expr.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for ExprLit { -+ fn clone(&self) -> Self { -+ ExprLit { -+ attrs: self.attrs.clone(), -+ lit: self.lit.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprLoop { -+ fn clone(&self) -> Self { -+ ExprLoop { -+ attrs: self.attrs.clone(), -+ label: self.label.clone(), -+ loop_token: self.loop_token.clone(), -+ body: self.body.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprMacro { -+ fn clone(&self) -> Self { -+ ExprMacro { -+ attrs: self.attrs.clone(), -+ mac: self.mac.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprMatch { -+ fn clone(&self) -> Self { -+ ExprMatch { -+ attrs: self.attrs.clone(), -+ match_token: self.match_token.clone(), -+ expr: self.expr.clone(), -+ brace_token: self.brace_token.clone(), -+ arms: self.arms.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprMethodCall { -+ fn clone(&self) -> Self { -+ ExprMethodCall { -+ attrs: self.attrs.clone(), -+ receiver: self.receiver.clone(), -+ dot_token: self.dot_token.clone(), -+ method: self.method.clone(), -+ turbofish: self.turbofish.clone(), -+ paren_token: self.paren_token.clone(), -+ args: self.args.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for ExprParen { -+ fn clone(&self) -> Self { -+ ExprParen { -+ attrs: self.attrs.clone(), -+ paren_token: self.paren_token.clone(), -+ expr: self.expr.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for ExprPath { -+ fn clone(&self) -> Self { -+ ExprPath { -+ attrs: self.attrs.clone(), -+ qself: self.qself.clone(), -+ path: self.path.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprRange { -+ fn clone(&self) -> Self { -+ ExprRange { -+ attrs: self.attrs.clone(), -+ from: self.from.clone(), -+ limits: self.limits.clone(), -+ to: self.to.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprReference { -+ fn clone(&self) -> Self { -+ ExprReference { -+ attrs: self.attrs.clone(), -+ and_token: self.and_token.clone(), -+ raw: self.raw.clone(), -+ mutability: self.mutability.clone(), -+ expr: self.expr.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprRepeat { -+ fn clone(&self) -> Self { -+ ExprRepeat { -+ attrs: self.attrs.clone(), -+ bracket_token: self.bracket_token.clone(), -+ expr: self.expr.clone(), -+ semi_token: self.semi_token.clone(), -+ len: self.len.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprReturn { -+ fn clone(&self) -> Self { -+ ExprReturn { -+ attrs: self.attrs.clone(), -+ return_token: self.return_token.clone(), -+ expr: self.expr.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprStruct { -+ fn clone(&self) -> Self { -+ ExprStruct { -+ attrs: self.attrs.clone(), -+ path: self.path.clone(), -+ brace_token: self.brace_token.clone(), -+ fields: self.fields.clone(), -+ dot2_token: self.dot2_token.clone(), -+ rest: self.rest.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprTry { -+ fn clone(&self) -> Self { -+ ExprTry { -+ attrs: self.attrs.clone(), -+ expr: self.expr.clone(), -+ question_token: self.question_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprTryBlock { -+ fn clone(&self) -> Self { -+ ExprTryBlock { -+ attrs: self.attrs.clone(), -+ try_token: self.try_token.clone(), -+ block: self.block.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprTuple { -+ fn clone(&self) -> Self { -+ ExprTuple { -+ attrs: self.attrs.clone(), -+ paren_token: self.paren_token.clone(), -+ elems: self.elems.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprType { -+ fn clone(&self) -> Self { -+ ExprType { -+ attrs: self.attrs.clone(), -+ expr: self.expr.clone(), -+ colon_token: self.colon_token.clone(), -+ ty: self.ty.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for ExprUnary { -+ fn clone(&self) -> Self { -+ ExprUnary { -+ attrs: self.attrs.clone(), -+ op: self.op.clone(), -+ expr: self.expr.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprUnsafe { -+ fn clone(&self) -> Self { -+ ExprUnsafe { -+ attrs: self.attrs.clone(), -+ unsafe_token: self.unsafe_token.clone(), -+ block: self.block.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprWhile { -+ fn clone(&self) -> Self { -+ ExprWhile { -+ attrs: self.attrs.clone(), -+ label: self.label.clone(), -+ while_token: self.while_token.clone(), -+ cond: self.cond.clone(), -+ body: self.body.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ExprYield { -+ fn clone(&self) -> Self { -+ ExprYield { -+ attrs: self.attrs.clone(), -+ yield_token: self.yield_token.clone(), -+ expr: self.expr.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Field { -+ fn clone(&self) -> Self { -+ Field { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ ident: self.ident.clone(), -+ colon_token: self.colon_token.clone(), -+ ty: self.ty.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for FieldPat { -+ fn clone(&self) -> Self { -+ FieldPat { -+ attrs: self.attrs.clone(), -+ member: self.member.clone(), -+ colon_token: self.colon_token.clone(), -+ pat: self.pat.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for FieldValue { -+ fn clone(&self) -> Self { -+ FieldValue { -+ attrs: self.attrs.clone(), -+ member: self.member.clone(), -+ colon_token: self.colon_token.clone(), -+ expr: self.expr.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Fields { -+ fn clone(&self) -> Self { -+ match self { -+ Fields::Named(v0) => Fields::Named(v0.clone()), -+ Fields::Unnamed(v0) => Fields::Unnamed(v0.clone()), -+ Fields::Unit => Fields::Unit, -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for FieldsNamed { -+ fn clone(&self) -> Self { -+ FieldsNamed { -+ brace_token: self.brace_token.clone(), -+ named: self.named.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for FieldsUnnamed { -+ fn clone(&self) -> Self { -+ FieldsUnnamed { -+ paren_token: self.paren_token.clone(), -+ unnamed: self.unnamed.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for File { -+ fn clone(&self) -> Self { -+ File { -+ shebang: self.shebang.clone(), -+ attrs: self.attrs.clone(), -+ items: self.items.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for FnArg { -+ fn clone(&self) -> Self { -+ match self { -+ FnArg::Receiver(v0) => FnArg::Receiver(v0.clone()), -+ FnArg::Typed(v0) => FnArg::Typed(v0.clone()), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ForeignItem { -+ fn clone(&self) -> Self { -+ match self { -+ ForeignItem::Fn(v0) => ForeignItem::Fn(v0.clone()), -+ ForeignItem::Static(v0) => ForeignItem::Static(v0.clone()), -+ ForeignItem::Type(v0) => ForeignItem::Type(v0.clone()), -+ ForeignItem::Macro(v0) => ForeignItem::Macro(v0.clone()), -+ ForeignItem::Verbatim(v0) => ForeignItem::Verbatim(v0.clone()), -+ _ => unreachable!(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ForeignItemFn { -+ fn clone(&self) -> Self { -+ ForeignItemFn { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ sig: self.sig.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ForeignItemMacro { -+ fn clone(&self) -> Self { -+ ForeignItemMacro { -+ attrs: self.attrs.clone(), -+ mac: self.mac.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ForeignItemStatic { -+ fn clone(&self) -> Self { -+ ForeignItemStatic { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ static_token: self.static_token.clone(), -+ mutability: self.mutability.clone(), -+ ident: self.ident.clone(), -+ colon_token: self.colon_token.clone(), -+ ty: self.ty.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ForeignItemType { -+ fn clone(&self) -> Self { -+ ForeignItemType { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ type_token: self.type_token.clone(), -+ ident: self.ident.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for GenericArgument { -+ fn clone(&self) -> Self { -+ match self { -+ GenericArgument::Lifetime(v0) => GenericArgument::Lifetime(v0.clone()), -+ GenericArgument::Type(v0) => GenericArgument::Type(v0.clone()), -+ GenericArgument::Binding(v0) => GenericArgument::Binding(v0.clone()), -+ GenericArgument::Constraint(v0) => GenericArgument::Constraint(v0.clone()), -+ GenericArgument::Const(v0) => GenericArgument::Const(v0.clone()), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for GenericMethodArgument { -+ fn clone(&self) -> Self { -+ match self { -+ GenericMethodArgument::Type(v0) => GenericMethodArgument::Type(v0.clone()), -+ GenericMethodArgument::Const(v0) => GenericMethodArgument::Const(v0.clone()), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for GenericParam { -+ fn clone(&self) -> Self { -+ match self { -+ GenericParam::Type(v0) => GenericParam::Type(v0.clone()), -+ GenericParam::Lifetime(v0) => GenericParam::Lifetime(v0.clone()), -+ GenericParam::Const(v0) => GenericParam::Const(v0.clone()), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Generics { -+ fn clone(&self) -> Self { -+ Generics { -+ lt_token: self.lt_token.clone(), -+ params: self.params.clone(), -+ gt_token: self.gt_token.clone(), -+ where_clause: self.where_clause.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ImplItem { -+ fn clone(&self) -> Self { -+ match self { -+ ImplItem::Const(v0) => ImplItem::Const(v0.clone()), -+ ImplItem::Method(v0) => ImplItem::Method(v0.clone()), -+ ImplItem::Type(v0) => ImplItem::Type(v0.clone()), -+ ImplItem::Macro(v0) => ImplItem::Macro(v0.clone()), -+ ImplItem::Verbatim(v0) => ImplItem::Verbatim(v0.clone()), -+ _ => unreachable!(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ImplItemConst { -+ fn clone(&self) -> Self { -+ ImplItemConst { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ defaultness: self.defaultness.clone(), -+ const_token: self.const_token.clone(), -+ ident: self.ident.clone(), -+ colon_token: self.colon_token.clone(), -+ ty: self.ty.clone(), -+ eq_token: self.eq_token.clone(), -+ expr: self.expr.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ImplItemMacro { -+ fn clone(&self) -> Self { -+ ImplItemMacro { -+ attrs: self.attrs.clone(), -+ mac: self.mac.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ImplItemMethod { -+ fn clone(&self) -> Self { -+ ImplItemMethod { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ defaultness: self.defaultness.clone(), -+ sig: self.sig.clone(), -+ block: self.block.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ImplItemType { -+ fn clone(&self) -> Self { -+ ImplItemType { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ defaultness: self.defaultness.clone(), -+ type_token: self.type_token.clone(), -+ ident: self.ident.clone(), -+ generics: self.generics.clone(), -+ eq_token: self.eq_token.clone(), -+ ty: self.ty.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Index { -+ fn clone(&self) -> Self { -+ Index { -+ index: self.index.clone(), -+ span: self.span.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for Item { -+ fn clone(&self) -> Self { -+ match self { -+ Item::Const(v0) => Item::Const(v0.clone()), -+ Item::Enum(v0) => Item::Enum(v0.clone()), -+ Item::ExternCrate(v0) => Item::ExternCrate(v0.clone()), -+ Item::Fn(v0) => Item::Fn(v0.clone()), -+ Item::ForeignMod(v0) => Item::ForeignMod(v0.clone()), -+ Item::Impl(v0) => Item::Impl(v0.clone()), -+ Item::Macro(v0) => Item::Macro(v0.clone()), -+ Item::Macro2(v0) => Item::Macro2(v0.clone()), -+ Item::Mod(v0) => Item::Mod(v0.clone()), -+ Item::Static(v0) => Item::Static(v0.clone()), -+ Item::Struct(v0) => Item::Struct(v0.clone()), -+ Item::Trait(v0) => Item::Trait(v0.clone()), -+ Item::TraitAlias(v0) => Item::TraitAlias(v0.clone()), -+ Item::Type(v0) => Item::Type(v0.clone()), -+ Item::Union(v0) => Item::Union(v0.clone()), -+ Item::Use(v0) => Item::Use(v0.clone()), -+ Item::Verbatim(v0) => Item::Verbatim(v0.clone()), -+ _ => unreachable!(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ItemConst { -+ fn clone(&self) -> Self { -+ ItemConst { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ const_token: self.const_token.clone(), -+ ident: self.ident.clone(), -+ colon_token: self.colon_token.clone(), -+ ty: self.ty.clone(), -+ eq_token: self.eq_token.clone(), -+ expr: self.expr.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ItemEnum { -+ fn clone(&self) -> Self { -+ ItemEnum { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ enum_token: self.enum_token.clone(), -+ ident: self.ident.clone(), -+ generics: self.generics.clone(), -+ brace_token: self.brace_token.clone(), -+ variants: self.variants.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ItemExternCrate { -+ fn clone(&self) -> Self { -+ ItemExternCrate { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ extern_token: self.extern_token.clone(), -+ crate_token: self.crate_token.clone(), -+ ident: self.ident.clone(), -+ rename: self.rename.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ItemFn { -+ fn clone(&self) -> Self { -+ ItemFn { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ sig: self.sig.clone(), -+ block: self.block.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ItemForeignMod { -+ fn clone(&self) -> Self { -+ ItemForeignMod { -+ attrs: self.attrs.clone(), -+ abi: self.abi.clone(), -+ brace_token: self.brace_token.clone(), -+ items: self.items.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ItemImpl { -+ fn clone(&self) -> Self { -+ ItemImpl { -+ attrs: self.attrs.clone(), -+ defaultness: self.defaultness.clone(), -+ unsafety: self.unsafety.clone(), -+ impl_token: self.impl_token.clone(), -+ generics: self.generics.clone(), -+ trait_: self.trait_.clone(), -+ self_ty: self.self_ty.clone(), -+ brace_token: self.brace_token.clone(), -+ items: self.items.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ItemMacro { -+ fn clone(&self) -> Self { -+ ItemMacro { -+ attrs: self.attrs.clone(), -+ ident: self.ident.clone(), -+ mac: self.mac.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ItemMacro2 { -+ fn clone(&self) -> Self { -+ ItemMacro2 { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ macro_token: self.macro_token.clone(), -+ ident: self.ident.clone(), -+ rules: self.rules.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ItemMod { -+ fn clone(&self) -> Self { -+ ItemMod { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ mod_token: self.mod_token.clone(), -+ ident: self.ident.clone(), -+ content: self.content.clone(), -+ semi: self.semi.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ItemStatic { -+ fn clone(&self) -> Self { -+ ItemStatic { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ static_token: self.static_token.clone(), -+ mutability: self.mutability.clone(), -+ ident: self.ident.clone(), -+ colon_token: self.colon_token.clone(), -+ ty: self.ty.clone(), -+ eq_token: self.eq_token.clone(), -+ expr: self.expr.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ItemStruct { -+ fn clone(&self) -> Self { -+ ItemStruct { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ struct_token: self.struct_token.clone(), -+ ident: self.ident.clone(), -+ generics: self.generics.clone(), -+ fields: self.fields.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ItemTrait { -+ fn clone(&self) -> Self { -+ ItemTrait { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ unsafety: self.unsafety.clone(), -+ auto_token: self.auto_token.clone(), -+ trait_token: self.trait_token.clone(), -+ ident: self.ident.clone(), -+ generics: self.generics.clone(), -+ colon_token: self.colon_token.clone(), -+ supertraits: self.supertraits.clone(), -+ brace_token: self.brace_token.clone(), -+ items: self.items.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ItemTraitAlias { -+ fn clone(&self) -> Self { -+ ItemTraitAlias { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ trait_token: self.trait_token.clone(), -+ ident: self.ident.clone(), -+ generics: self.generics.clone(), -+ eq_token: self.eq_token.clone(), -+ bounds: self.bounds.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ItemType { -+ fn clone(&self) -> Self { -+ ItemType { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ type_token: self.type_token.clone(), -+ ident: self.ident.clone(), -+ generics: self.generics.clone(), -+ eq_token: self.eq_token.clone(), -+ ty: self.ty.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ItemUnion { -+ fn clone(&self) -> Self { -+ ItemUnion { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ union_token: self.union_token.clone(), -+ ident: self.ident.clone(), -+ generics: self.generics.clone(), -+ fields: self.fields.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for ItemUse { -+ fn clone(&self) -> Self { -+ ItemUse { -+ attrs: self.attrs.clone(), -+ vis: self.vis.clone(), -+ use_token: self.use_token.clone(), -+ leading_colon: self.leading_colon.clone(), -+ tree: self.tree.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for Label { -+ fn clone(&self) -> Self { -+ Label { -+ name: self.name.clone(), -+ colon_token: self.colon_token.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for LifetimeDef { -+ fn clone(&self) -> Self { -+ LifetimeDef { -+ attrs: self.attrs.clone(), -+ lifetime: self.lifetime.clone(), -+ colon_token: self.colon_token.clone(), -+ bounds: self.bounds.clone(), -+ } -+ } -+} -+impl Clone for Lit { -+ fn clone(&self) -> Self { -+ match self { -+ Lit::Str(v0) => Lit::Str(v0.clone()), -+ Lit::ByteStr(v0) => Lit::ByteStr(v0.clone()), -+ Lit::Byte(v0) => Lit::Byte(v0.clone()), -+ Lit::Char(v0) => Lit::Char(v0.clone()), -+ Lit::Int(v0) => Lit::Int(v0.clone()), -+ Lit::Float(v0) => Lit::Float(v0.clone()), -+ Lit::Bool(v0) => Lit::Bool(v0.clone()), -+ Lit::Verbatim(v0) => Lit::Verbatim(v0.clone()), -+ } -+ } -+} -+impl Clone for LitBool { -+ fn clone(&self) -> Self { -+ LitBool { -+ value: self.value.clone(), -+ span: self.span.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for Local { -+ fn clone(&self) -> Self { -+ Local { -+ attrs: self.attrs.clone(), -+ let_token: self.let_token.clone(), -+ pat: self.pat.clone(), -+ init: self.init.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Macro { -+ fn clone(&self) -> Self { -+ Macro { -+ path: self.path.clone(), -+ bang_token: self.bang_token.clone(), -+ delimiter: self.delimiter.clone(), -+ tokens: self.tokens.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for MacroDelimiter { -+ fn clone(&self) -> Self { -+ match self { -+ MacroDelimiter::Paren(v0) => MacroDelimiter::Paren(v0.clone()), -+ MacroDelimiter::Brace(v0) => MacroDelimiter::Brace(v0.clone()), -+ MacroDelimiter::Bracket(v0) => MacroDelimiter::Bracket(v0.clone()), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Member { -+ fn clone(&self) -> Self { -+ match self { -+ Member::Named(v0) => Member::Named(v0.clone()), -+ Member::Unnamed(v0) => Member::Unnamed(v0.clone()), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Meta { -+ fn clone(&self) -> Self { -+ match self { -+ Meta::Path(v0) => Meta::Path(v0.clone()), -+ Meta::List(v0) => Meta::List(v0.clone()), -+ Meta::NameValue(v0) => Meta::NameValue(v0.clone()), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for MetaList { -+ fn clone(&self) -> Self { -+ MetaList { -+ path: self.path.clone(), -+ paren_token: self.paren_token.clone(), -+ nested: self.nested.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for MetaNameValue { -+ fn clone(&self) -> Self { -+ MetaNameValue { -+ path: self.path.clone(), -+ eq_token: self.eq_token.clone(), -+ lit: self.lit.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for MethodTurbofish { -+ fn clone(&self) -> Self { -+ MethodTurbofish { -+ colon2_token: self.colon2_token.clone(), -+ lt_token: self.lt_token.clone(), -+ args: self.args.clone(), -+ gt_token: self.gt_token.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for NestedMeta { -+ fn clone(&self) -> Self { -+ match self { -+ NestedMeta::Meta(v0) => NestedMeta::Meta(v0.clone()), -+ NestedMeta::Lit(v0) => NestedMeta::Lit(v0.clone()), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for ParenthesizedGenericArguments { -+ fn clone(&self) -> Self { -+ ParenthesizedGenericArguments { -+ paren_token: self.paren_token.clone(), -+ inputs: self.inputs.clone(), -+ output: self.output.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for Pat { -+ fn clone(&self) -> Self { -+ match self { -+ Pat::Box(v0) => Pat::Box(v0.clone()), -+ Pat::Ident(v0) => Pat::Ident(v0.clone()), -+ Pat::Lit(v0) => Pat::Lit(v0.clone()), -+ Pat::Macro(v0) => Pat::Macro(v0.clone()), -+ Pat::Or(v0) => Pat::Or(v0.clone()), -+ Pat::Path(v0) => Pat::Path(v0.clone()), -+ Pat::Range(v0) => Pat::Range(v0.clone()), -+ Pat::Reference(v0) => Pat::Reference(v0.clone()), -+ Pat::Rest(v0) => Pat::Rest(v0.clone()), -+ Pat::Slice(v0) => Pat::Slice(v0.clone()), -+ Pat::Struct(v0) => Pat::Struct(v0.clone()), -+ Pat::Tuple(v0) => Pat::Tuple(v0.clone()), -+ Pat::TupleStruct(v0) => Pat::TupleStruct(v0.clone()), -+ Pat::Type(v0) => Pat::Type(v0.clone()), -+ Pat::Verbatim(v0) => Pat::Verbatim(v0.clone()), -+ Pat::Wild(v0) => Pat::Wild(v0.clone()), -+ _ => unreachable!(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for PatBox { -+ fn clone(&self) -> Self { -+ PatBox { -+ attrs: self.attrs.clone(), -+ box_token: self.box_token.clone(), -+ pat: self.pat.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for PatIdent { -+ fn clone(&self) -> Self { -+ PatIdent { -+ attrs: self.attrs.clone(), -+ by_ref: self.by_ref.clone(), -+ mutability: self.mutability.clone(), -+ ident: self.ident.clone(), -+ subpat: self.subpat.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for PatLit { -+ fn clone(&self) -> Self { -+ PatLit { -+ attrs: self.attrs.clone(), -+ expr: self.expr.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for PatMacro { -+ fn clone(&self) -> Self { -+ PatMacro { -+ attrs: self.attrs.clone(), -+ mac: self.mac.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for PatOr { -+ fn clone(&self) -> Self { -+ PatOr { -+ attrs: self.attrs.clone(), -+ leading_vert: self.leading_vert.clone(), -+ cases: self.cases.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for PatPath { -+ fn clone(&self) -> Self { -+ PatPath { -+ attrs: self.attrs.clone(), -+ qself: self.qself.clone(), -+ path: self.path.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for PatRange { -+ fn clone(&self) -> Self { -+ PatRange { -+ attrs: self.attrs.clone(), -+ lo: self.lo.clone(), -+ limits: self.limits.clone(), -+ hi: self.hi.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for PatReference { -+ fn clone(&self) -> Self { -+ PatReference { -+ attrs: self.attrs.clone(), -+ and_token: self.and_token.clone(), -+ mutability: self.mutability.clone(), -+ pat: self.pat.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for PatRest { -+ fn clone(&self) -> Self { -+ PatRest { -+ attrs: self.attrs.clone(), -+ dot2_token: self.dot2_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for PatSlice { -+ fn clone(&self) -> Self { -+ PatSlice { -+ attrs: self.attrs.clone(), -+ bracket_token: self.bracket_token.clone(), -+ elems: self.elems.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for PatStruct { -+ fn clone(&self) -> Self { -+ PatStruct { -+ attrs: self.attrs.clone(), -+ path: self.path.clone(), -+ brace_token: self.brace_token.clone(), -+ fields: self.fields.clone(), -+ dot2_token: self.dot2_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for PatTuple { -+ fn clone(&self) -> Self { -+ PatTuple { -+ attrs: self.attrs.clone(), -+ paren_token: self.paren_token.clone(), -+ elems: self.elems.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for PatTupleStruct { -+ fn clone(&self) -> Self { -+ PatTupleStruct { -+ attrs: self.attrs.clone(), -+ path: self.path.clone(), -+ pat: self.pat.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for PatType { -+ fn clone(&self) -> Self { -+ PatType { -+ attrs: self.attrs.clone(), -+ pat: self.pat.clone(), -+ colon_token: self.colon_token.clone(), -+ ty: self.ty.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for PatWild { -+ fn clone(&self) -> Self { -+ PatWild { -+ attrs: self.attrs.clone(), -+ underscore_token: self.underscore_token.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Path { -+ fn clone(&self) -> Self { -+ Path { -+ leading_colon: self.leading_colon.clone(), -+ segments: self.segments.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for PathArguments { -+ fn clone(&self) -> Self { -+ match self { -+ PathArguments::None => PathArguments::None, -+ PathArguments::AngleBracketed(v0) => PathArguments::AngleBracketed(v0.clone()), -+ PathArguments::Parenthesized(v0) => PathArguments::Parenthesized(v0.clone()), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for PathSegment { -+ fn clone(&self) -> Self { -+ PathSegment { -+ ident: self.ident.clone(), -+ arguments: self.arguments.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for PredicateEq { -+ fn clone(&self) -> Self { -+ PredicateEq { -+ lhs_ty: self.lhs_ty.clone(), -+ eq_token: self.eq_token.clone(), -+ rhs_ty: self.rhs_ty.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for PredicateLifetime { -+ fn clone(&self) -> Self { -+ PredicateLifetime { -+ lifetime: self.lifetime.clone(), -+ colon_token: self.colon_token.clone(), -+ bounds: self.bounds.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for PredicateType { -+ fn clone(&self) -> Self { -+ PredicateType { -+ lifetimes: self.lifetimes.clone(), -+ bounded_ty: self.bounded_ty.clone(), -+ colon_token: self.colon_token.clone(), -+ bounds: self.bounds.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for QSelf { -+ fn clone(&self) -> Self { -+ QSelf { -+ lt_token: self.lt_token.clone(), -+ ty: self.ty.clone(), -+ position: self.position.clone(), -+ as_token: self.as_token.clone(), -+ gt_token: self.gt_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Copy for RangeLimits {} -+#[cfg(feature = "full")] -+impl Clone for RangeLimits { -+ fn clone(&self) -> Self { -+ *self -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for Receiver { -+ fn clone(&self) -> Self { -+ Receiver { -+ attrs: self.attrs.clone(), -+ reference: self.reference.clone(), -+ mutability: self.mutability.clone(), -+ self_token: self.self_token.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for ReturnType { -+ fn clone(&self) -> Self { -+ match self { -+ ReturnType::Default => ReturnType::Default, -+ ReturnType::Type(v0, v1) => ReturnType::Type(v0.clone(), v1.clone()), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for Signature { -+ fn clone(&self) -> Self { -+ Signature { -+ constness: self.constness.clone(), -+ asyncness: self.asyncness.clone(), -+ unsafety: self.unsafety.clone(), -+ abi: self.abi.clone(), -+ fn_token: self.fn_token.clone(), -+ ident: self.ident.clone(), -+ generics: self.generics.clone(), -+ paren_token: self.paren_token.clone(), -+ inputs: self.inputs.clone(), -+ variadic: self.variadic.clone(), -+ output: self.output.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for Stmt { -+ fn clone(&self) -> Self { -+ match self { -+ Stmt::Local(v0) => Stmt::Local(v0.clone()), -+ Stmt::Item(v0) => Stmt::Item(v0.clone()), -+ Stmt::Expr(v0) => Stmt::Expr(v0.clone()), -+ Stmt::Semi(v0, v1) => Stmt::Semi(v0.clone(), v1.clone()), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TraitBound { -+ fn clone(&self) -> Self { -+ TraitBound { -+ paren_token: self.paren_token.clone(), -+ modifier: self.modifier.clone(), -+ lifetimes: self.lifetimes.clone(), -+ path: self.path.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Copy for TraitBoundModifier {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TraitBoundModifier { -+ fn clone(&self) -> Self { -+ *self -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for TraitItem { -+ fn clone(&self) -> Self { -+ match self { -+ TraitItem::Const(v0) => TraitItem::Const(v0.clone()), -+ TraitItem::Method(v0) => TraitItem::Method(v0.clone()), -+ TraitItem::Type(v0) => TraitItem::Type(v0.clone()), -+ TraitItem::Macro(v0) => TraitItem::Macro(v0.clone()), -+ TraitItem::Verbatim(v0) => TraitItem::Verbatim(v0.clone()), -+ _ => unreachable!(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for TraitItemConst { -+ fn clone(&self) -> Self { -+ TraitItemConst { -+ attrs: self.attrs.clone(), -+ const_token: self.const_token.clone(), -+ ident: self.ident.clone(), -+ colon_token: self.colon_token.clone(), -+ ty: self.ty.clone(), -+ default: self.default.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for TraitItemMacro { -+ fn clone(&self) -> Self { -+ TraitItemMacro { -+ attrs: self.attrs.clone(), -+ mac: self.mac.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for TraitItemMethod { -+ fn clone(&self) -> Self { -+ TraitItemMethod { -+ attrs: self.attrs.clone(), -+ sig: self.sig.clone(), -+ default: self.default.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for TraitItemType { -+ fn clone(&self) -> Self { -+ TraitItemType { -+ attrs: self.attrs.clone(), -+ type_token: self.type_token.clone(), -+ ident: self.ident.clone(), -+ generics: self.generics.clone(), -+ colon_token: self.colon_token.clone(), -+ bounds: self.bounds.clone(), -+ default: self.default.clone(), -+ semi_token: self.semi_token.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Type { -+ fn clone(&self) -> Self { -+ match self { -+ Type::Array(v0) => Type::Array(v0.clone()), -+ Type::BareFn(v0) => Type::BareFn(v0.clone()), -+ Type::Group(v0) => Type::Group(v0.clone()), -+ Type::ImplTrait(v0) => Type::ImplTrait(v0.clone()), -+ Type::Infer(v0) => Type::Infer(v0.clone()), -+ Type::Macro(v0) => Type::Macro(v0.clone()), -+ Type::Never(v0) => Type::Never(v0.clone()), -+ Type::Paren(v0) => Type::Paren(v0.clone()), -+ Type::Path(v0) => Type::Path(v0.clone()), -+ Type::Ptr(v0) => Type::Ptr(v0.clone()), -+ Type::Reference(v0) => Type::Reference(v0.clone()), -+ Type::Slice(v0) => Type::Slice(v0.clone()), -+ Type::TraitObject(v0) => Type::TraitObject(v0.clone()), -+ Type::Tuple(v0) => Type::Tuple(v0.clone()), -+ Type::Verbatim(v0) => Type::Verbatim(v0.clone()), -+ _ => unreachable!(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TypeArray { -+ fn clone(&self) -> Self { -+ TypeArray { -+ bracket_token: self.bracket_token.clone(), -+ elem: self.elem.clone(), -+ semi_token: self.semi_token.clone(), -+ len: self.len.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TypeBareFn { -+ fn clone(&self) -> Self { -+ TypeBareFn { -+ lifetimes: self.lifetimes.clone(), -+ unsafety: self.unsafety.clone(), -+ abi: self.abi.clone(), -+ fn_token: self.fn_token.clone(), -+ paren_token: self.paren_token.clone(), -+ inputs: self.inputs.clone(), -+ variadic: self.variadic.clone(), -+ output: self.output.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TypeGroup { -+ fn clone(&self) -> Self { -+ TypeGroup { -+ group_token: self.group_token.clone(), -+ elem: self.elem.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TypeImplTrait { -+ fn clone(&self) -> Self { -+ TypeImplTrait { -+ impl_token: self.impl_token.clone(), -+ bounds: self.bounds.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TypeInfer { -+ fn clone(&self) -> Self { -+ TypeInfer { -+ underscore_token: self.underscore_token.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TypeMacro { -+ fn clone(&self) -> Self { -+ TypeMacro { -+ mac: self.mac.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TypeNever { -+ fn clone(&self) -> Self { -+ TypeNever { -+ bang_token: self.bang_token.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TypeParam { -+ fn clone(&self) -> Self { -+ TypeParam { -+ attrs: self.attrs.clone(), -+ ident: self.ident.clone(), -+ colon_token: self.colon_token.clone(), -+ bounds: self.bounds.clone(), -+ eq_token: self.eq_token.clone(), -+ default: self.default.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TypeParamBound { -+ fn clone(&self) -> Self { -+ match self { -+ TypeParamBound::Trait(v0) => TypeParamBound::Trait(v0.clone()), -+ TypeParamBound::Lifetime(v0) => TypeParamBound::Lifetime(v0.clone()), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TypeParen { -+ fn clone(&self) -> Self { -+ TypeParen { -+ paren_token: self.paren_token.clone(), -+ elem: self.elem.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TypePath { -+ fn clone(&self) -> Self { -+ TypePath { -+ qself: self.qself.clone(), -+ path: self.path.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TypePtr { -+ fn clone(&self) -> Self { -+ TypePtr { -+ star_token: self.star_token.clone(), -+ const_token: self.const_token.clone(), -+ mutability: self.mutability.clone(), -+ elem: self.elem.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TypeReference { -+ fn clone(&self) -> Self { -+ TypeReference { -+ and_token: self.and_token.clone(), -+ lifetime: self.lifetime.clone(), -+ mutability: self.mutability.clone(), -+ elem: self.elem.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TypeSlice { -+ fn clone(&self) -> Self { -+ TypeSlice { -+ bracket_token: self.bracket_token.clone(), -+ elem: self.elem.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TypeTraitObject { -+ fn clone(&self) -> Self { -+ TypeTraitObject { -+ dyn_token: self.dyn_token.clone(), -+ bounds: self.bounds.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for TypeTuple { -+ fn clone(&self) -> Self { -+ TypeTuple { -+ paren_token: self.paren_token.clone(), -+ elems: self.elems.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Copy for UnOp {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for UnOp { -+ fn clone(&self) -> Self { -+ *self -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for UseGlob { -+ fn clone(&self) -> Self { -+ UseGlob { -+ star_token: self.star_token.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for UseGroup { -+ fn clone(&self) -> Self { -+ UseGroup { -+ brace_token: self.brace_token.clone(), -+ items: self.items.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for UseName { -+ fn clone(&self) -> Self { -+ UseName { -+ ident: self.ident.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for UsePath { -+ fn clone(&self) -> Self { -+ UsePath { -+ ident: self.ident.clone(), -+ colon2_token: self.colon2_token.clone(), -+ tree: self.tree.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for UseRename { -+ fn clone(&self) -> Self { -+ UseRename { -+ ident: self.ident.clone(), -+ as_token: self.as_token.clone(), -+ rename: self.rename.clone(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Clone for UseTree { -+ fn clone(&self) -> Self { -+ match self { -+ UseTree::Path(v0) => UseTree::Path(v0.clone()), -+ UseTree::Name(v0) => UseTree::Name(v0.clone()), -+ UseTree::Rename(v0) => UseTree::Rename(v0.clone()), -+ UseTree::Glob(v0) => UseTree::Glob(v0.clone()), -+ UseTree::Group(v0) => UseTree::Group(v0.clone()), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Variadic { -+ fn clone(&self) -> Self { -+ Variadic { -+ attrs: self.attrs.clone(), -+ dots: self.dots.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Variant { -+ fn clone(&self) -> Self { -+ Variant { -+ attrs: self.attrs.clone(), -+ ident: self.ident.clone(), -+ fields: self.fields.clone(), -+ discriminant: self.discriminant.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for VisCrate { -+ fn clone(&self) -> Self { -+ VisCrate { -+ crate_token: self.crate_token.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for VisPublic { -+ fn clone(&self) -> Self { -+ VisPublic { -+ pub_token: self.pub_token.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for VisRestricted { -+ fn clone(&self) -> Self { -+ VisRestricted { -+ pub_token: self.pub_token.clone(), -+ paren_token: self.paren_token.clone(), -+ in_token: self.in_token.clone(), -+ path: self.path.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for Visibility { -+ fn clone(&self) -> Self { -+ match self { -+ Visibility::Public(v0) => Visibility::Public(v0.clone()), -+ Visibility::Crate(v0) => Visibility::Crate(v0.clone()), -+ Visibility::Restricted(v0) => Visibility::Restricted(v0.clone()), -+ Visibility::Inherited => Visibility::Inherited, -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for WhereClause { -+ fn clone(&self) -> Self { -+ WhereClause { -+ where_token: self.where_token.clone(), -+ predicates: self.predicates.clone(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Clone for WherePredicate { -+ fn clone(&self) -> Self { -+ match self { -+ WherePredicate::Type(v0) => WherePredicate::Type(v0.clone()), -+ WherePredicate::Lifetime(v0) => WherePredicate::Lifetime(v0.clone()), -+ WherePredicate::Eq(v0) => WherePredicate::Eq(v0.clone()), -+ } -+ } -+} -diff --git a/third_party/rust/syn/src/gen/debug.rs b/third_party/rust/syn/src/gen/debug.rs -new file mode 100644 -index 0000000000..72baab05f4 ---- /dev/null -+++ b/third_party/rust/syn/src/gen/debug.rs -@@ -0,0 +1,2857 @@ -+// This file is @generated by syn-internal-codegen. -+// It is not intended for manual editing. -+ -+use crate::*; -+use std::fmt::{self, Debug}; -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Abi { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Abi"); -+ formatter.field("extern_token", &self.extern_token); -+ formatter.field("name", &self.name); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for AngleBracketedGenericArguments { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("AngleBracketedGenericArguments"); -+ formatter.field("colon2_token", &self.colon2_token); -+ formatter.field("lt_token", &self.lt_token); -+ formatter.field("args", &self.args); -+ formatter.field("gt_token", &self.gt_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for Arm { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Arm"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("pat", &self.pat); -+ formatter.field("guard", &self.guard); -+ formatter.field("fat_arrow_token", &self.fat_arrow_token); -+ formatter.field("body", &self.body); -+ formatter.field("comma", &self.comma); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for AttrStyle { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ AttrStyle::Outer => formatter.write_str("Outer"), -+ AttrStyle::Inner(v0) => { -+ let mut formatter = formatter.debug_tuple("Inner"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Attribute { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Attribute"); -+ formatter.field("pound_token", &self.pound_token); -+ formatter.field("style", &self.style); -+ formatter.field("bracket_token", &self.bracket_token); -+ formatter.field("path", &self.path); -+ formatter.field("tokens", &self.tokens); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for BareFnArg { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("BareFnArg"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("name", &self.name); -+ formatter.field("ty", &self.ty); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for BinOp { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ BinOp::Add(v0) => { -+ let mut formatter = formatter.debug_tuple("Add"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::Sub(v0) => { -+ let mut formatter = formatter.debug_tuple("Sub"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::Mul(v0) => { -+ let mut formatter = formatter.debug_tuple("Mul"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::Div(v0) => { -+ let mut formatter = formatter.debug_tuple("Div"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::Rem(v0) => { -+ let mut formatter = formatter.debug_tuple("Rem"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::And(v0) => { -+ let mut formatter = formatter.debug_tuple("And"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::Or(v0) => { -+ let mut formatter = formatter.debug_tuple("Or"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::BitXor(v0) => { -+ let mut formatter = formatter.debug_tuple("BitXor"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::BitAnd(v0) => { -+ let mut formatter = formatter.debug_tuple("BitAnd"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::BitOr(v0) => { -+ let mut formatter = formatter.debug_tuple("BitOr"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::Shl(v0) => { -+ let mut formatter = formatter.debug_tuple("Shl"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::Shr(v0) => { -+ let mut formatter = formatter.debug_tuple("Shr"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::Eq(v0) => { -+ let mut formatter = formatter.debug_tuple("Eq"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::Lt(v0) => { -+ let mut formatter = formatter.debug_tuple("Lt"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::Le(v0) => { -+ let mut formatter = formatter.debug_tuple("Le"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::Ne(v0) => { -+ let mut formatter = formatter.debug_tuple("Ne"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::Ge(v0) => { -+ let mut formatter = formatter.debug_tuple("Ge"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::Gt(v0) => { -+ let mut formatter = formatter.debug_tuple("Gt"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::AddEq(v0) => { -+ let mut formatter = formatter.debug_tuple("AddEq"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::SubEq(v0) => { -+ let mut formatter = formatter.debug_tuple("SubEq"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::MulEq(v0) => { -+ let mut formatter = formatter.debug_tuple("MulEq"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::DivEq(v0) => { -+ let mut formatter = formatter.debug_tuple("DivEq"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::RemEq(v0) => { -+ let mut formatter = formatter.debug_tuple("RemEq"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::BitXorEq(v0) => { -+ let mut formatter = formatter.debug_tuple("BitXorEq"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::BitAndEq(v0) => { -+ let mut formatter = formatter.debug_tuple("BitAndEq"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::BitOrEq(v0) => { -+ let mut formatter = formatter.debug_tuple("BitOrEq"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::ShlEq(v0) => { -+ let mut formatter = formatter.debug_tuple("ShlEq"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ BinOp::ShrEq(v0) => { -+ let mut formatter = formatter.debug_tuple("ShrEq"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Binding { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Binding"); -+ formatter.field("ident", &self.ident); -+ formatter.field("eq_token", &self.eq_token); -+ formatter.field("ty", &self.ty); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for Block { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Block"); -+ formatter.field("brace_token", &self.brace_token); -+ formatter.field("stmts", &self.stmts); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for BoundLifetimes { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("BoundLifetimes"); -+ formatter.field("for_token", &self.for_token); -+ formatter.field("lt_token", &self.lt_token); -+ formatter.field("lifetimes", &self.lifetimes); -+ formatter.field("gt_token", &self.gt_token); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for ConstParam { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ConstParam"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("const_token", &self.const_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("ty", &self.ty); -+ formatter.field("eq_token", &self.eq_token); -+ formatter.field("default", &self.default); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Constraint { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Constraint"); -+ formatter.field("ident", &self.ident); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("bounds", &self.bounds); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "derive")] -+impl Debug for Data { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ Data::Struct(v0) => { -+ let mut formatter = formatter.debug_tuple("Struct"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Data::Enum(v0) => { -+ let mut formatter = formatter.debug_tuple("Enum"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Data::Union(v0) => { -+ let mut formatter = formatter.debug_tuple("Union"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(feature = "derive")] -+impl Debug for DataEnum { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("DataEnum"); -+ formatter.field("enum_token", &self.enum_token); -+ formatter.field("brace_token", &self.brace_token); -+ formatter.field("variants", &self.variants); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "derive")] -+impl Debug for DataStruct { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("DataStruct"); -+ formatter.field("struct_token", &self.struct_token); -+ formatter.field("fields", &self.fields); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "derive")] -+impl Debug for DataUnion { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("DataUnion"); -+ formatter.field("union_token", &self.union_token); -+ formatter.field("fields", &self.fields); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "derive")] -+impl Debug for DeriveInput { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("DeriveInput"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("ident", &self.ident); -+ formatter.field("generics", &self.generics); -+ formatter.field("data", &self.data); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Expr { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ #[cfg(feature = "full")] -+ Expr::Array(v0) => { -+ let mut formatter = formatter.debug_tuple("Array"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Assign(v0) => { -+ let mut formatter = formatter.debug_tuple("Assign"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::AssignOp(v0) => { -+ let mut formatter = formatter.debug_tuple("AssignOp"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Async(v0) => { -+ let mut formatter = formatter.debug_tuple("Async"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Await(v0) => { -+ let mut formatter = formatter.debug_tuple("Await"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Expr::Binary(v0) => { -+ let mut formatter = formatter.debug_tuple("Binary"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Block(v0) => { -+ let mut formatter = formatter.debug_tuple("Block"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Box(v0) => { -+ let mut formatter = formatter.debug_tuple("Box"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Break(v0) => { -+ let mut formatter = formatter.debug_tuple("Break"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Expr::Call(v0) => { -+ let mut formatter = formatter.debug_tuple("Call"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Expr::Cast(v0) => { -+ let mut formatter = formatter.debug_tuple("Cast"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Closure(v0) => { -+ let mut formatter = formatter.debug_tuple("Closure"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Continue(v0) => { -+ let mut formatter = formatter.debug_tuple("Continue"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Expr::Field(v0) => { -+ let mut formatter = formatter.debug_tuple("Field"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::ForLoop(v0) => { -+ let mut formatter = formatter.debug_tuple("ForLoop"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Group(v0) => { -+ let mut formatter = formatter.debug_tuple("Group"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::If(v0) => { -+ let mut formatter = formatter.debug_tuple("If"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Expr::Index(v0) => { -+ let mut formatter = formatter.debug_tuple("Index"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Let(v0) => { -+ let mut formatter = formatter.debug_tuple("Let"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Expr::Lit(v0) => { -+ let mut formatter = formatter.debug_tuple("Lit"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Loop(v0) => { -+ let mut formatter = formatter.debug_tuple("Loop"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Macro(v0) => { -+ let mut formatter = formatter.debug_tuple("Macro"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Match(v0) => { -+ let mut formatter = formatter.debug_tuple("Match"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::MethodCall(v0) => { -+ let mut formatter = formatter.debug_tuple("MethodCall"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Expr::Paren(v0) => { -+ let mut formatter = formatter.debug_tuple("Paren"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Expr::Path(v0) => { -+ let mut formatter = formatter.debug_tuple("Path"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Range(v0) => { -+ let mut formatter = formatter.debug_tuple("Range"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Reference(v0) => { -+ let mut formatter = formatter.debug_tuple("Reference"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Repeat(v0) => { -+ let mut formatter = formatter.debug_tuple("Repeat"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Return(v0) => { -+ let mut formatter = formatter.debug_tuple("Return"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Struct(v0) => { -+ let mut formatter = formatter.debug_tuple("Struct"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Try(v0) => { -+ let mut formatter = formatter.debug_tuple("Try"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::TryBlock(v0) => { -+ let mut formatter = formatter.debug_tuple("TryBlock"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Tuple(v0) => { -+ let mut formatter = formatter.debug_tuple("Tuple"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Type(v0) => { -+ let mut formatter = formatter.debug_tuple("Type"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Expr::Unary(v0) => { -+ let mut formatter = formatter.debug_tuple("Unary"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Unsafe(v0) => { -+ let mut formatter = formatter.debug_tuple("Unsafe"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Expr::Verbatim(v0) => { -+ let mut formatter = formatter.debug_tuple("Verbatim"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::While(v0) => { -+ let mut formatter = formatter.debug_tuple("While"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ #[cfg(feature = "full")] -+ Expr::Yield(v0) => { -+ let mut formatter = formatter.debug_tuple("Yield"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ _ => unreachable!(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprArray { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprArray"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("bracket_token", &self.bracket_token); -+ formatter.field("elems", &self.elems); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprAssign { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprAssign"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("left", &self.left); -+ formatter.field("eq_token", &self.eq_token); -+ formatter.field("right", &self.right); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprAssignOp { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprAssignOp"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("left", &self.left); -+ formatter.field("op", &self.op); -+ formatter.field("right", &self.right); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprAsync { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprAsync"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("async_token", &self.async_token); -+ formatter.field("capture", &self.capture); -+ formatter.field("block", &self.block); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprAwait { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprAwait"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("base", &self.base); -+ formatter.field("dot_token", &self.dot_token); -+ formatter.field("await_token", &self.await_token); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for ExprBinary { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprBinary"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("left", &self.left); -+ formatter.field("op", &self.op); -+ formatter.field("right", &self.right); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprBlock { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprBlock"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("label", &self.label); -+ formatter.field("block", &self.block); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprBox { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprBox"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("box_token", &self.box_token); -+ formatter.field("expr", &self.expr); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprBreak { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprBreak"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("break_token", &self.break_token); -+ formatter.field("label", &self.label); -+ formatter.field("expr", &self.expr); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for ExprCall { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprCall"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("func", &self.func); -+ formatter.field("paren_token", &self.paren_token); -+ formatter.field("args", &self.args); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for ExprCast { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprCast"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("expr", &self.expr); -+ formatter.field("as_token", &self.as_token); -+ formatter.field("ty", &self.ty); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprClosure { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprClosure"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("asyncness", &self.asyncness); -+ formatter.field("movability", &self.movability); -+ formatter.field("capture", &self.capture); -+ formatter.field("or1_token", &self.or1_token); -+ formatter.field("inputs", &self.inputs); -+ formatter.field("or2_token", &self.or2_token); -+ formatter.field("output", &self.output); -+ formatter.field("body", &self.body); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprContinue { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprContinue"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("continue_token", &self.continue_token); -+ formatter.field("label", &self.label); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for ExprField { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprField"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("base", &self.base); -+ formatter.field("dot_token", &self.dot_token); -+ formatter.field("member", &self.member); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprForLoop { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprForLoop"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("label", &self.label); -+ formatter.field("for_token", &self.for_token); -+ formatter.field("pat", &self.pat); -+ formatter.field("in_token", &self.in_token); -+ formatter.field("expr", &self.expr); -+ formatter.field("body", &self.body); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprGroup { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprGroup"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("group_token", &self.group_token); -+ formatter.field("expr", &self.expr); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprIf { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprIf"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("if_token", &self.if_token); -+ formatter.field("cond", &self.cond); -+ formatter.field("then_branch", &self.then_branch); -+ formatter.field("else_branch", &self.else_branch); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for ExprIndex { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprIndex"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("expr", &self.expr); -+ formatter.field("bracket_token", &self.bracket_token); -+ formatter.field("index", &self.index); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprLet { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprLet"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("let_token", &self.let_token); -+ formatter.field("pat", &self.pat); -+ formatter.field("eq_token", &self.eq_token); -+ formatter.field("expr", &self.expr); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for ExprLit { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprLit"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("lit", &self.lit); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprLoop { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprLoop"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("label", &self.label); -+ formatter.field("loop_token", &self.loop_token); -+ formatter.field("body", &self.body); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprMacro { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprMacro"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("mac", &self.mac); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprMatch { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprMatch"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("match_token", &self.match_token); -+ formatter.field("expr", &self.expr); -+ formatter.field("brace_token", &self.brace_token); -+ formatter.field("arms", &self.arms); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprMethodCall { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprMethodCall"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("receiver", &self.receiver); -+ formatter.field("dot_token", &self.dot_token); -+ formatter.field("method", &self.method); -+ formatter.field("turbofish", &self.turbofish); -+ formatter.field("paren_token", &self.paren_token); -+ formatter.field("args", &self.args); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for ExprParen { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprParen"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("paren_token", &self.paren_token); -+ formatter.field("expr", &self.expr); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for ExprPath { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprPath"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("qself", &self.qself); -+ formatter.field("path", &self.path); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprRange { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprRange"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("from", &self.from); -+ formatter.field("limits", &self.limits); -+ formatter.field("to", &self.to); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprReference { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprReference"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("and_token", &self.and_token); -+ formatter.field("raw", &self.raw); -+ formatter.field("mutability", &self.mutability); -+ formatter.field("expr", &self.expr); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprRepeat { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprRepeat"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("bracket_token", &self.bracket_token); -+ formatter.field("expr", &self.expr); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.field("len", &self.len); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprReturn { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprReturn"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("return_token", &self.return_token); -+ formatter.field("expr", &self.expr); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprStruct { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprStruct"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("path", &self.path); -+ formatter.field("brace_token", &self.brace_token); -+ formatter.field("fields", &self.fields); -+ formatter.field("dot2_token", &self.dot2_token); -+ formatter.field("rest", &self.rest); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprTry { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprTry"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("expr", &self.expr); -+ formatter.field("question_token", &self.question_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprTryBlock { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprTryBlock"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("try_token", &self.try_token); -+ formatter.field("block", &self.block); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprTuple { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprTuple"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("paren_token", &self.paren_token); -+ formatter.field("elems", &self.elems); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprType { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprType"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("expr", &self.expr); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("ty", &self.ty); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for ExprUnary { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprUnary"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("op", &self.op); -+ formatter.field("expr", &self.expr); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprUnsafe { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprUnsafe"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("unsafe_token", &self.unsafe_token); -+ formatter.field("block", &self.block); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprWhile { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprWhile"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("label", &self.label); -+ formatter.field("while_token", &self.while_token); -+ formatter.field("cond", &self.cond); -+ formatter.field("body", &self.body); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ExprYield { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ExprYield"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("yield_token", &self.yield_token); -+ formatter.field("expr", &self.expr); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Field { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Field"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("ident", &self.ident); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("ty", &self.ty); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for FieldPat { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("FieldPat"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("member", &self.member); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("pat", &self.pat); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for FieldValue { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("FieldValue"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("member", &self.member); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("expr", &self.expr); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Fields { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ Fields::Named(v0) => { -+ let mut formatter = formatter.debug_tuple("Named"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Fields::Unnamed(v0) => { -+ let mut formatter = formatter.debug_tuple("Unnamed"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Fields::Unit => formatter.write_str("Unit"), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for FieldsNamed { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("FieldsNamed"); -+ formatter.field("brace_token", &self.brace_token); -+ formatter.field("named", &self.named); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for FieldsUnnamed { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("FieldsUnnamed"); -+ formatter.field("paren_token", &self.paren_token); -+ formatter.field("unnamed", &self.unnamed); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for File { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("File"); -+ formatter.field("shebang", &self.shebang); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("items", &self.items); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for FnArg { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ FnArg::Receiver(v0) => { -+ let mut formatter = formatter.debug_tuple("Receiver"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ FnArg::Typed(v0) => { -+ let mut formatter = formatter.debug_tuple("Typed"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ForeignItem { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ ForeignItem::Fn(v0) => { -+ let mut formatter = formatter.debug_tuple("Fn"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ ForeignItem::Static(v0) => { -+ let mut formatter = formatter.debug_tuple("Static"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ ForeignItem::Type(v0) => { -+ let mut formatter = formatter.debug_tuple("Type"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ ForeignItem::Macro(v0) => { -+ let mut formatter = formatter.debug_tuple("Macro"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ ForeignItem::Verbatim(v0) => { -+ let mut formatter = formatter.debug_tuple("Verbatim"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ _ => unreachable!(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ForeignItemFn { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ForeignItemFn"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("sig", &self.sig); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ForeignItemMacro { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ForeignItemMacro"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("mac", &self.mac); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ForeignItemStatic { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ForeignItemStatic"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("static_token", &self.static_token); -+ formatter.field("mutability", &self.mutability); -+ formatter.field("ident", &self.ident); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("ty", &self.ty); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ForeignItemType { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ForeignItemType"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("type_token", &self.type_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for GenericArgument { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ GenericArgument::Lifetime(v0) => { -+ let mut formatter = formatter.debug_tuple("Lifetime"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ GenericArgument::Type(v0) => { -+ let mut formatter = formatter.debug_tuple("Type"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ GenericArgument::Binding(v0) => { -+ let mut formatter = formatter.debug_tuple("Binding"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ GenericArgument::Constraint(v0) => { -+ let mut formatter = formatter.debug_tuple("Constraint"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ GenericArgument::Const(v0) => { -+ let mut formatter = formatter.debug_tuple("Const"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for GenericMethodArgument { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ GenericMethodArgument::Type(v0) => { -+ let mut formatter = formatter.debug_tuple("Type"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ GenericMethodArgument::Const(v0) => { -+ let mut formatter = formatter.debug_tuple("Const"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for GenericParam { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ GenericParam::Type(v0) => { -+ let mut formatter = formatter.debug_tuple("Type"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ GenericParam::Lifetime(v0) => { -+ let mut formatter = formatter.debug_tuple("Lifetime"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ GenericParam::Const(v0) => { -+ let mut formatter = formatter.debug_tuple("Const"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Generics { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Generics"); -+ formatter.field("lt_token", &self.lt_token); -+ formatter.field("params", &self.params); -+ formatter.field("gt_token", &self.gt_token); -+ formatter.field("where_clause", &self.where_clause); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ImplItem { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ ImplItem::Const(v0) => { -+ let mut formatter = formatter.debug_tuple("Const"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ ImplItem::Method(v0) => { -+ let mut formatter = formatter.debug_tuple("Method"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ ImplItem::Type(v0) => { -+ let mut formatter = formatter.debug_tuple("Type"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ ImplItem::Macro(v0) => { -+ let mut formatter = formatter.debug_tuple("Macro"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ ImplItem::Verbatim(v0) => { -+ let mut formatter = formatter.debug_tuple("Verbatim"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ _ => unreachable!(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ImplItemConst { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ImplItemConst"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("defaultness", &self.defaultness); -+ formatter.field("const_token", &self.const_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("ty", &self.ty); -+ formatter.field("eq_token", &self.eq_token); -+ formatter.field("expr", &self.expr); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ImplItemMacro { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ImplItemMacro"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("mac", &self.mac); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ImplItemMethod { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ImplItemMethod"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("defaultness", &self.defaultness); -+ formatter.field("sig", &self.sig); -+ formatter.field("block", &self.block); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ImplItemType { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ImplItemType"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("defaultness", &self.defaultness); -+ formatter.field("type_token", &self.type_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("generics", &self.generics); -+ formatter.field("eq_token", &self.eq_token); -+ formatter.field("ty", &self.ty); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Index { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Index"); -+ formatter.field("index", &self.index); -+ formatter.field("span", &self.span); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for Item { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ Item::Const(v0) => { -+ let mut formatter = formatter.debug_tuple("Const"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Item::Enum(v0) => { -+ let mut formatter = formatter.debug_tuple("Enum"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Item::ExternCrate(v0) => { -+ let mut formatter = formatter.debug_tuple("ExternCrate"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Item::Fn(v0) => { -+ let mut formatter = formatter.debug_tuple("Fn"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Item::ForeignMod(v0) => { -+ let mut formatter = formatter.debug_tuple("ForeignMod"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Item::Impl(v0) => { -+ let mut formatter = formatter.debug_tuple("Impl"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Item::Macro(v0) => { -+ let mut formatter = formatter.debug_tuple("Macro"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Item::Macro2(v0) => { -+ let mut formatter = formatter.debug_tuple("Macro2"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Item::Mod(v0) => { -+ let mut formatter = formatter.debug_tuple("Mod"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Item::Static(v0) => { -+ let mut formatter = formatter.debug_tuple("Static"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Item::Struct(v0) => { -+ let mut formatter = formatter.debug_tuple("Struct"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Item::Trait(v0) => { -+ let mut formatter = formatter.debug_tuple("Trait"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Item::TraitAlias(v0) => { -+ let mut formatter = formatter.debug_tuple("TraitAlias"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Item::Type(v0) => { -+ let mut formatter = formatter.debug_tuple("Type"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Item::Union(v0) => { -+ let mut formatter = formatter.debug_tuple("Union"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Item::Use(v0) => { -+ let mut formatter = formatter.debug_tuple("Use"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Item::Verbatim(v0) => { -+ let mut formatter = formatter.debug_tuple("Verbatim"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ _ => unreachable!(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ItemConst { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ItemConst"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("const_token", &self.const_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("ty", &self.ty); -+ formatter.field("eq_token", &self.eq_token); -+ formatter.field("expr", &self.expr); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ItemEnum { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ItemEnum"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("enum_token", &self.enum_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("generics", &self.generics); -+ formatter.field("brace_token", &self.brace_token); -+ formatter.field("variants", &self.variants); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ItemExternCrate { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ItemExternCrate"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("extern_token", &self.extern_token); -+ formatter.field("crate_token", &self.crate_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("rename", &self.rename); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ItemFn { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ItemFn"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("sig", &self.sig); -+ formatter.field("block", &self.block); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ItemForeignMod { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ItemForeignMod"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("abi", &self.abi); -+ formatter.field("brace_token", &self.brace_token); -+ formatter.field("items", &self.items); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ItemImpl { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ItemImpl"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("defaultness", &self.defaultness); -+ formatter.field("unsafety", &self.unsafety); -+ formatter.field("impl_token", &self.impl_token); -+ formatter.field("generics", &self.generics); -+ formatter.field("trait_", &self.trait_); -+ formatter.field("self_ty", &self.self_ty); -+ formatter.field("brace_token", &self.brace_token); -+ formatter.field("items", &self.items); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ItemMacro { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ItemMacro"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("ident", &self.ident); -+ formatter.field("mac", &self.mac); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ItemMacro2 { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ItemMacro2"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("macro_token", &self.macro_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("rules", &self.rules); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ItemMod { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ItemMod"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("mod_token", &self.mod_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("content", &self.content); -+ formatter.field("semi", &self.semi); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ItemStatic { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ItemStatic"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("static_token", &self.static_token); -+ formatter.field("mutability", &self.mutability); -+ formatter.field("ident", &self.ident); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("ty", &self.ty); -+ formatter.field("eq_token", &self.eq_token); -+ formatter.field("expr", &self.expr); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ItemStruct { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ItemStruct"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("struct_token", &self.struct_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("generics", &self.generics); -+ formatter.field("fields", &self.fields); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ItemTrait { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ItemTrait"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("unsafety", &self.unsafety); -+ formatter.field("auto_token", &self.auto_token); -+ formatter.field("trait_token", &self.trait_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("generics", &self.generics); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("supertraits", &self.supertraits); -+ formatter.field("brace_token", &self.brace_token); -+ formatter.field("items", &self.items); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ItemTraitAlias { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ItemTraitAlias"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("trait_token", &self.trait_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("generics", &self.generics); -+ formatter.field("eq_token", &self.eq_token); -+ formatter.field("bounds", &self.bounds); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ItemType { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ItemType"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("type_token", &self.type_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("generics", &self.generics); -+ formatter.field("eq_token", &self.eq_token); -+ formatter.field("ty", &self.ty); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ItemUnion { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ItemUnion"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("union_token", &self.union_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("generics", &self.generics); -+ formatter.field("fields", &self.fields); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for ItemUse { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ItemUse"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("vis", &self.vis); -+ formatter.field("use_token", &self.use_token); -+ formatter.field("leading_colon", &self.leading_colon); -+ formatter.field("tree", &self.tree); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for Label { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Label"); -+ formatter.field("name", &self.name); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.finish() -+ } -+} -+impl Debug for Lifetime { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Lifetime"); -+ formatter.field("apostrophe", &self.apostrophe); -+ formatter.field("ident", &self.ident); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for LifetimeDef { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("LifetimeDef"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("lifetime", &self.lifetime); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("bounds", &self.bounds); -+ formatter.finish() -+ } -+} -+impl Debug for Lit { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ Lit::Str(v0) => { -+ let mut formatter = formatter.debug_tuple("Str"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Lit::ByteStr(v0) => { -+ let mut formatter = formatter.debug_tuple("ByteStr"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Lit::Byte(v0) => { -+ let mut formatter = formatter.debug_tuple("Byte"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Lit::Char(v0) => { -+ let mut formatter = formatter.debug_tuple("Char"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Lit::Int(v0) => { -+ let mut formatter = formatter.debug_tuple("Int"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Lit::Float(v0) => { -+ let mut formatter = formatter.debug_tuple("Float"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Lit::Bool(v0) => { -+ let mut formatter = formatter.debug_tuple("Bool"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Lit::Verbatim(v0) => { -+ let mut formatter = formatter.debug_tuple("Verbatim"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for Local { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Local"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("let_token", &self.let_token); -+ formatter.field("pat", &self.pat); -+ formatter.field("init", &self.init); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Macro { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Macro"); -+ formatter.field("path", &self.path); -+ formatter.field("bang_token", &self.bang_token); -+ formatter.field("delimiter", &self.delimiter); -+ formatter.field("tokens", &self.tokens); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for MacroDelimiter { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ MacroDelimiter::Paren(v0) => { -+ let mut formatter = formatter.debug_tuple("Paren"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ MacroDelimiter::Brace(v0) => { -+ let mut formatter = formatter.debug_tuple("Brace"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ MacroDelimiter::Bracket(v0) => { -+ let mut formatter = formatter.debug_tuple("Bracket"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Member { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ Member::Named(v0) => { -+ let mut formatter = formatter.debug_tuple("Named"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Member::Unnamed(v0) => { -+ let mut formatter = formatter.debug_tuple("Unnamed"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Meta { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ Meta::Path(v0) => { -+ let mut formatter = formatter.debug_tuple("Path"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Meta::List(v0) => { -+ let mut formatter = formatter.debug_tuple("List"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Meta::NameValue(v0) => { -+ let mut formatter = formatter.debug_tuple("NameValue"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for MetaList { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("MetaList"); -+ formatter.field("path", &self.path); -+ formatter.field("paren_token", &self.paren_token); -+ formatter.field("nested", &self.nested); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for MetaNameValue { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("MetaNameValue"); -+ formatter.field("path", &self.path); -+ formatter.field("eq_token", &self.eq_token); -+ formatter.field("lit", &self.lit); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for MethodTurbofish { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("MethodTurbofish"); -+ formatter.field("colon2_token", &self.colon2_token); -+ formatter.field("lt_token", &self.lt_token); -+ formatter.field("args", &self.args); -+ formatter.field("gt_token", &self.gt_token); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for NestedMeta { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ NestedMeta::Meta(v0) => { -+ let mut formatter = formatter.debug_tuple("Meta"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ NestedMeta::Lit(v0) => { -+ let mut formatter = formatter.debug_tuple("Lit"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for ParenthesizedGenericArguments { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("ParenthesizedGenericArguments"); -+ formatter.field("paren_token", &self.paren_token); -+ formatter.field("inputs", &self.inputs); -+ formatter.field("output", &self.output); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for Pat { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ Pat::Box(v0) => { -+ let mut formatter = formatter.debug_tuple("Box"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Pat::Ident(v0) => { -+ let mut formatter = formatter.debug_tuple("Ident"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Pat::Lit(v0) => { -+ let mut formatter = formatter.debug_tuple("Lit"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Pat::Macro(v0) => { -+ let mut formatter = formatter.debug_tuple("Macro"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Pat::Or(v0) => { -+ let mut formatter = formatter.debug_tuple("Or"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Pat::Path(v0) => { -+ let mut formatter = formatter.debug_tuple("Path"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Pat::Range(v0) => { -+ let mut formatter = formatter.debug_tuple("Range"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Pat::Reference(v0) => { -+ let mut formatter = formatter.debug_tuple("Reference"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Pat::Rest(v0) => { -+ let mut formatter = formatter.debug_tuple("Rest"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Pat::Slice(v0) => { -+ let mut formatter = formatter.debug_tuple("Slice"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Pat::Struct(v0) => { -+ let mut formatter = formatter.debug_tuple("Struct"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Pat::Tuple(v0) => { -+ let mut formatter = formatter.debug_tuple("Tuple"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Pat::TupleStruct(v0) => { -+ let mut formatter = formatter.debug_tuple("TupleStruct"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Pat::Type(v0) => { -+ let mut formatter = formatter.debug_tuple("Type"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Pat::Verbatim(v0) => { -+ let mut formatter = formatter.debug_tuple("Verbatim"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Pat::Wild(v0) => { -+ let mut formatter = formatter.debug_tuple("Wild"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ _ => unreachable!(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for PatBox { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PatBox"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("box_token", &self.box_token); -+ formatter.field("pat", &self.pat); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for PatIdent { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PatIdent"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("by_ref", &self.by_ref); -+ formatter.field("mutability", &self.mutability); -+ formatter.field("ident", &self.ident); -+ formatter.field("subpat", &self.subpat); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for PatLit { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PatLit"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("expr", &self.expr); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for PatMacro { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PatMacro"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("mac", &self.mac); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for PatOr { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PatOr"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("leading_vert", &self.leading_vert); -+ formatter.field("cases", &self.cases); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for PatPath { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PatPath"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("qself", &self.qself); -+ formatter.field("path", &self.path); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for PatRange { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PatRange"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("lo", &self.lo); -+ formatter.field("limits", &self.limits); -+ formatter.field("hi", &self.hi); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for PatReference { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PatReference"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("and_token", &self.and_token); -+ formatter.field("mutability", &self.mutability); -+ formatter.field("pat", &self.pat); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for PatRest { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PatRest"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("dot2_token", &self.dot2_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for PatSlice { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PatSlice"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("bracket_token", &self.bracket_token); -+ formatter.field("elems", &self.elems); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for PatStruct { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PatStruct"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("path", &self.path); -+ formatter.field("brace_token", &self.brace_token); -+ formatter.field("fields", &self.fields); -+ formatter.field("dot2_token", &self.dot2_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for PatTuple { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PatTuple"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("paren_token", &self.paren_token); -+ formatter.field("elems", &self.elems); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for PatTupleStruct { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PatTupleStruct"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("path", &self.path); -+ formatter.field("pat", &self.pat); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for PatType { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PatType"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("pat", &self.pat); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("ty", &self.ty); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for PatWild { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PatWild"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("underscore_token", &self.underscore_token); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Path { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Path"); -+ formatter.field("leading_colon", &self.leading_colon); -+ formatter.field("segments", &self.segments); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for PathArguments { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ PathArguments::None => formatter.write_str("None"), -+ PathArguments::AngleBracketed(v0) => { -+ let mut formatter = formatter.debug_tuple("AngleBracketed"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ PathArguments::Parenthesized(v0) => { -+ let mut formatter = formatter.debug_tuple("Parenthesized"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for PathSegment { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PathSegment"); -+ formatter.field("ident", &self.ident); -+ formatter.field("arguments", &self.arguments); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for PredicateEq { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PredicateEq"); -+ formatter.field("lhs_ty", &self.lhs_ty); -+ formatter.field("eq_token", &self.eq_token); -+ formatter.field("rhs_ty", &self.rhs_ty); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for PredicateLifetime { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PredicateLifetime"); -+ formatter.field("lifetime", &self.lifetime); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("bounds", &self.bounds); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for PredicateType { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("PredicateType"); -+ formatter.field("lifetimes", &self.lifetimes); -+ formatter.field("bounded_ty", &self.bounded_ty); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("bounds", &self.bounds); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for QSelf { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("QSelf"); -+ formatter.field("lt_token", &self.lt_token); -+ formatter.field("ty", &self.ty); -+ formatter.field("position", &self.position); -+ formatter.field("as_token", &self.as_token); -+ formatter.field("gt_token", &self.gt_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for RangeLimits { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ RangeLimits::HalfOpen(v0) => { -+ let mut formatter = formatter.debug_tuple("HalfOpen"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ RangeLimits::Closed(v0) => { -+ let mut formatter = formatter.debug_tuple("Closed"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for Receiver { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Receiver"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("reference", &self.reference); -+ formatter.field("mutability", &self.mutability); -+ formatter.field("self_token", &self.self_token); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for ReturnType { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ ReturnType::Default => formatter.write_str("Default"), -+ ReturnType::Type(v0, v1) => { -+ let mut formatter = formatter.debug_tuple("Type"); -+ formatter.field(v0); -+ formatter.field(v1); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for Signature { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Signature"); -+ formatter.field("constness", &self.constness); -+ formatter.field("asyncness", &self.asyncness); -+ formatter.field("unsafety", &self.unsafety); -+ formatter.field("abi", &self.abi); -+ formatter.field("fn_token", &self.fn_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("generics", &self.generics); -+ formatter.field("paren_token", &self.paren_token); -+ formatter.field("inputs", &self.inputs); -+ formatter.field("variadic", &self.variadic); -+ formatter.field("output", &self.output); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for Stmt { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ Stmt::Local(v0) => { -+ let mut formatter = formatter.debug_tuple("Local"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Stmt::Item(v0) => { -+ let mut formatter = formatter.debug_tuple("Item"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Stmt::Expr(v0) => { -+ let mut formatter = formatter.debug_tuple("Expr"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Stmt::Semi(v0, v1) => { -+ let mut formatter = formatter.debug_tuple("Semi"); -+ formatter.field(v0); -+ formatter.field(v1); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TraitBound { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TraitBound"); -+ formatter.field("paren_token", &self.paren_token); -+ formatter.field("modifier", &self.modifier); -+ formatter.field("lifetimes", &self.lifetimes); -+ formatter.field("path", &self.path); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TraitBoundModifier { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ TraitBoundModifier::None => formatter.write_str("None"), -+ TraitBoundModifier::Maybe(v0) => { -+ let mut formatter = formatter.debug_tuple("Maybe"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for TraitItem { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ TraitItem::Const(v0) => { -+ let mut formatter = formatter.debug_tuple("Const"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ TraitItem::Method(v0) => { -+ let mut formatter = formatter.debug_tuple("Method"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ TraitItem::Type(v0) => { -+ let mut formatter = formatter.debug_tuple("Type"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ TraitItem::Macro(v0) => { -+ let mut formatter = formatter.debug_tuple("Macro"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ TraitItem::Verbatim(v0) => { -+ let mut formatter = formatter.debug_tuple("Verbatim"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ _ => unreachable!(), -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for TraitItemConst { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TraitItemConst"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("const_token", &self.const_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("ty", &self.ty); -+ formatter.field("default", &self.default); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for TraitItemMacro { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TraitItemMacro"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("mac", &self.mac); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for TraitItemMethod { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TraitItemMethod"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("sig", &self.sig); -+ formatter.field("default", &self.default); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for TraitItemType { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TraitItemType"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("type_token", &self.type_token); -+ formatter.field("ident", &self.ident); -+ formatter.field("generics", &self.generics); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("bounds", &self.bounds); -+ formatter.field("default", &self.default); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Type { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ Type::Array(v0) => { -+ let mut formatter = formatter.debug_tuple("Array"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Type::BareFn(v0) => { -+ let mut formatter = formatter.debug_tuple("BareFn"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Type::Group(v0) => { -+ let mut formatter = formatter.debug_tuple("Group"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Type::ImplTrait(v0) => { -+ let mut formatter = formatter.debug_tuple("ImplTrait"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Type::Infer(v0) => { -+ let mut formatter = formatter.debug_tuple("Infer"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Type::Macro(v0) => { -+ let mut formatter = formatter.debug_tuple("Macro"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Type::Never(v0) => { -+ let mut formatter = formatter.debug_tuple("Never"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Type::Paren(v0) => { -+ let mut formatter = formatter.debug_tuple("Paren"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Type::Path(v0) => { -+ let mut formatter = formatter.debug_tuple("Path"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Type::Ptr(v0) => { -+ let mut formatter = formatter.debug_tuple("Ptr"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Type::Reference(v0) => { -+ let mut formatter = formatter.debug_tuple("Reference"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Type::Slice(v0) => { -+ let mut formatter = formatter.debug_tuple("Slice"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Type::TraitObject(v0) => { -+ let mut formatter = formatter.debug_tuple("TraitObject"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Type::Tuple(v0) => { -+ let mut formatter = formatter.debug_tuple("Tuple"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Type::Verbatim(v0) => { -+ let mut formatter = formatter.debug_tuple("Verbatim"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ _ => unreachable!(), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TypeArray { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TypeArray"); -+ formatter.field("bracket_token", &self.bracket_token); -+ formatter.field("elem", &self.elem); -+ formatter.field("semi_token", &self.semi_token); -+ formatter.field("len", &self.len); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TypeBareFn { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TypeBareFn"); -+ formatter.field("lifetimes", &self.lifetimes); -+ formatter.field("unsafety", &self.unsafety); -+ formatter.field("abi", &self.abi); -+ formatter.field("fn_token", &self.fn_token); -+ formatter.field("paren_token", &self.paren_token); -+ formatter.field("inputs", &self.inputs); -+ formatter.field("variadic", &self.variadic); -+ formatter.field("output", &self.output); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TypeGroup { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TypeGroup"); -+ formatter.field("group_token", &self.group_token); -+ formatter.field("elem", &self.elem); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TypeImplTrait { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TypeImplTrait"); -+ formatter.field("impl_token", &self.impl_token); -+ formatter.field("bounds", &self.bounds); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TypeInfer { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TypeInfer"); -+ formatter.field("underscore_token", &self.underscore_token); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TypeMacro { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TypeMacro"); -+ formatter.field("mac", &self.mac); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TypeNever { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TypeNever"); -+ formatter.field("bang_token", &self.bang_token); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TypeParam { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TypeParam"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("ident", &self.ident); -+ formatter.field("colon_token", &self.colon_token); -+ formatter.field("bounds", &self.bounds); -+ formatter.field("eq_token", &self.eq_token); -+ formatter.field("default", &self.default); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TypeParamBound { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ TypeParamBound::Trait(v0) => { -+ let mut formatter = formatter.debug_tuple("Trait"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ TypeParamBound::Lifetime(v0) => { -+ let mut formatter = formatter.debug_tuple("Lifetime"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TypeParen { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TypeParen"); -+ formatter.field("paren_token", &self.paren_token); -+ formatter.field("elem", &self.elem); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TypePath { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TypePath"); -+ formatter.field("qself", &self.qself); -+ formatter.field("path", &self.path); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TypePtr { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TypePtr"); -+ formatter.field("star_token", &self.star_token); -+ formatter.field("const_token", &self.const_token); -+ formatter.field("mutability", &self.mutability); -+ formatter.field("elem", &self.elem); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TypeReference { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TypeReference"); -+ formatter.field("and_token", &self.and_token); -+ formatter.field("lifetime", &self.lifetime); -+ formatter.field("mutability", &self.mutability); -+ formatter.field("elem", &self.elem); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TypeSlice { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TypeSlice"); -+ formatter.field("bracket_token", &self.bracket_token); -+ formatter.field("elem", &self.elem); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TypeTraitObject { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TypeTraitObject"); -+ formatter.field("dyn_token", &self.dyn_token); -+ formatter.field("bounds", &self.bounds); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for TypeTuple { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("TypeTuple"); -+ formatter.field("paren_token", &self.paren_token); -+ formatter.field("elems", &self.elems); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for UnOp { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ UnOp::Deref(v0) => { -+ let mut formatter = formatter.debug_tuple("Deref"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ UnOp::Not(v0) => { -+ let mut formatter = formatter.debug_tuple("Not"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ UnOp::Neg(v0) => { -+ let mut formatter = formatter.debug_tuple("Neg"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for UseGlob { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("UseGlob"); -+ formatter.field("star_token", &self.star_token); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for UseGroup { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("UseGroup"); -+ formatter.field("brace_token", &self.brace_token); -+ formatter.field("items", &self.items); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for UseName { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("UseName"); -+ formatter.field("ident", &self.ident); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for UsePath { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("UsePath"); -+ formatter.field("ident", &self.ident); -+ formatter.field("colon2_token", &self.colon2_token); -+ formatter.field("tree", &self.tree); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for UseRename { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("UseRename"); -+ formatter.field("ident", &self.ident); -+ formatter.field("as_token", &self.as_token); -+ formatter.field("rename", &self.rename); -+ formatter.finish() -+ } -+} -+#[cfg(feature = "full")] -+impl Debug for UseTree { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ UseTree::Path(v0) => { -+ let mut formatter = formatter.debug_tuple("Path"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ UseTree::Name(v0) => { -+ let mut formatter = formatter.debug_tuple("Name"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ UseTree::Rename(v0) => { -+ let mut formatter = formatter.debug_tuple("Rename"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ UseTree::Glob(v0) => { -+ let mut formatter = formatter.debug_tuple("Glob"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ UseTree::Group(v0) => { -+ let mut formatter = formatter.debug_tuple("Group"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Variadic { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Variadic"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("dots", &self.dots); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Variant { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("Variant"); -+ formatter.field("attrs", &self.attrs); -+ formatter.field("ident", &self.ident); -+ formatter.field("fields", &self.fields); -+ formatter.field("discriminant", &self.discriminant); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for VisCrate { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("VisCrate"); -+ formatter.field("crate_token", &self.crate_token); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for VisPublic { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("VisPublic"); -+ formatter.field("pub_token", &self.pub_token); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for VisRestricted { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("VisRestricted"); -+ formatter.field("pub_token", &self.pub_token); -+ formatter.field("paren_token", &self.paren_token); -+ formatter.field("in_token", &self.in_token); -+ formatter.field("path", &self.path); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for Visibility { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ Visibility::Public(v0) => { -+ let mut formatter = formatter.debug_tuple("Public"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Visibility::Crate(v0) => { -+ let mut formatter = formatter.debug_tuple("Crate"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Visibility::Restricted(v0) => { -+ let mut formatter = formatter.debug_tuple("Restricted"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ Visibility::Inherited => formatter.write_str("Inherited"), -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for WhereClause { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ let mut formatter = formatter.debug_struct("WhereClause"); -+ formatter.field("where_token", &self.where_token); -+ formatter.field("predicates", &self.predicates); -+ formatter.finish() -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Debug for WherePredicate { -+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { -+ match self { -+ WherePredicate::Type(v0) => { -+ let mut formatter = formatter.debug_tuple("Type"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ WherePredicate::Lifetime(v0) => { -+ let mut formatter = formatter.debug_tuple("Lifetime"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ WherePredicate::Eq(v0) => { -+ let mut formatter = formatter.debug_tuple("Eq"); -+ formatter.field(v0); -+ formatter.finish() -+ } -+ } -+ } -+} -diff --git a/third_party/rust/syn/src/gen/eq.rs b/third_party/rust/syn/src/gen/eq.rs -new file mode 100644 -index 0000000000..15b2bcbbde ---- /dev/null -+++ b/third_party/rust/syn/src/gen/eq.rs -@@ -0,0 +1,1930 @@ -+// This file is @generated by syn-internal-codegen. -+// It is not intended for manual editing. -+ -+#[cfg(any(feature = "derive", feature = "full"))] -+use crate::tt::TokenStreamHelper; -+use crate::*; -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for Abi {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for Abi { -+ fn eq(&self, other: &Self) -> bool { -+ self.name == other.name -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for AngleBracketedGenericArguments {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for AngleBracketedGenericArguments { -+ fn eq(&self, other: &Self) -> bool { -+ self.colon2_token == other.colon2_token && self.args == other.args -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for Arm {} -+#[cfg(feature = "full")] -+impl PartialEq for Arm { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.pat == other.pat -+ && self.guard == other.guard -+ && self.body == other.body -+ && self.comma == other.comma -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for AttrStyle {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for AttrStyle { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (AttrStyle::Outer, AttrStyle::Outer) => true, -+ (AttrStyle::Inner(_), AttrStyle::Inner(_)) => true, -+ _ => false, -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for Attribute {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for Attribute { -+ fn eq(&self, other: &Self) -> bool { -+ self.style == other.style -+ && self.path == other.path -+ && TokenStreamHelper(&self.tokens) == TokenStreamHelper(&other.tokens) -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for BareFnArg {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for BareFnArg { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.name == other.name && self.ty == other.ty -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for BinOp {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for BinOp { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (BinOp::Add(_), BinOp::Add(_)) => true, -+ (BinOp::Sub(_), BinOp::Sub(_)) => true, -+ (BinOp::Mul(_), BinOp::Mul(_)) => true, -+ (BinOp::Div(_), BinOp::Div(_)) => true, -+ (BinOp::Rem(_), BinOp::Rem(_)) => true, -+ (BinOp::And(_), BinOp::And(_)) => true, -+ (BinOp::Or(_), BinOp::Or(_)) => true, -+ (BinOp::BitXor(_), BinOp::BitXor(_)) => true, -+ (BinOp::BitAnd(_), BinOp::BitAnd(_)) => true, -+ (BinOp::BitOr(_), BinOp::BitOr(_)) => true, -+ (BinOp::Shl(_), BinOp::Shl(_)) => true, -+ (BinOp::Shr(_), BinOp::Shr(_)) => true, -+ (BinOp::Eq(_), BinOp::Eq(_)) => true, -+ (BinOp::Lt(_), BinOp::Lt(_)) => true, -+ (BinOp::Le(_), BinOp::Le(_)) => true, -+ (BinOp::Ne(_), BinOp::Ne(_)) => true, -+ (BinOp::Ge(_), BinOp::Ge(_)) => true, -+ (BinOp::Gt(_), BinOp::Gt(_)) => true, -+ (BinOp::AddEq(_), BinOp::AddEq(_)) => true, -+ (BinOp::SubEq(_), BinOp::SubEq(_)) => true, -+ (BinOp::MulEq(_), BinOp::MulEq(_)) => true, -+ (BinOp::DivEq(_), BinOp::DivEq(_)) => true, -+ (BinOp::RemEq(_), BinOp::RemEq(_)) => true, -+ (BinOp::BitXorEq(_), BinOp::BitXorEq(_)) => true, -+ (BinOp::BitAndEq(_), BinOp::BitAndEq(_)) => true, -+ (BinOp::BitOrEq(_), BinOp::BitOrEq(_)) => true, -+ (BinOp::ShlEq(_), BinOp::ShlEq(_)) => true, -+ (BinOp::ShrEq(_), BinOp::ShrEq(_)) => true, -+ _ => false, -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for Binding {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for Binding { -+ fn eq(&self, other: &Self) -> bool { -+ self.ident == other.ident && self.ty == other.ty -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for Block {} -+#[cfg(feature = "full")] -+impl PartialEq for Block { -+ fn eq(&self, other: &Self) -> bool { -+ self.stmts == other.stmts -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for BoundLifetimes {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for BoundLifetimes { -+ fn eq(&self, other: &Self) -> bool { -+ self.lifetimes == other.lifetimes -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for ConstParam {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for ConstParam { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.ident == other.ident -+ && self.ty == other.ty -+ && self.eq_token == other.eq_token -+ && self.default == other.default -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for Constraint {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for Constraint { -+ fn eq(&self, other: &Self) -> bool { -+ self.ident == other.ident && self.bounds == other.bounds -+ } -+} -+#[cfg(feature = "derive")] -+impl Eq for Data {} -+#[cfg(feature = "derive")] -+impl PartialEq for Data { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (Data::Struct(self0), Data::Struct(other0)) => self0 == other0, -+ (Data::Enum(self0), Data::Enum(other0)) => self0 == other0, -+ (Data::Union(self0), Data::Union(other0)) => self0 == other0, -+ _ => false, -+ } -+ } -+} -+#[cfg(feature = "derive")] -+impl Eq for DataEnum {} -+#[cfg(feature = "derive")] -+impl PartialEq for DataEnum { -+ fn eq(&self, other: &Self) -> bool { -+ self.variants == other.variants -+ } -+} -+#[cfg(feature = "derive")] -+impl Eq for DataStruct {} -+#[cfg(feature = "derive")] -+impl PartialEq for DataStruct { -+ fn eq(&self, other: &Self) -> bool { -+ self.fields == other.fields && self.semi_token == other.semi_token -+ } -+} -+#[cfg(feature = "derive")] -+impl Eq for DataUnion {} -+#[cfg(feature = "derive")] -+impl PartialEq for DataUnion { -+ fn eq(&self, other: &Self) -> bool { -+ self.fields == other.fields -+ } -+} -+#[cfg(feature = "derive")] -+impl Eq for DeriveInput {} -+#[cfg(feature = "derive")] -+impl PartialEq for DeriveInput { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.ident == other.ident -+ && self.generics == other.generics -+ && self.data == other.data -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for Expr {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for Expr { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ #[cfg(feature = "full")] -+ (Expr::Array(self0), Expr::Array(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Assign(self0), Expr::Assign(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::AssignOp(self0), Expr::AssignOp(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Async(self0), Expr::Async(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Await(self0), Expr::Await(other0)) => self0 == other0, -+ (Expr::Binary(self0), Expr::Binary(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Block(self0), Expr::Block(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Box(self0), Expr::Box(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Break(self0), Expr::Break(other0)) => self0 == other0, -+ (Expr::Call(self0), Expr::Call(other0)) => self0 == other0, -+ (Expr::Cast(self0), Expr::Cast(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Closure(self0), Expr::Closure(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Continue(self0), Expr::Continue(other0)) => self0 == other0, -+ (Expr::Field(self0), Expr::Field(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::ForLoop(self0), Expr::ForLoop(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Group(self0), Expr::Group(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::If(self0), Expr::If(other0)) => self0 == other0, -+ (Expr::Index(self0), Expr::Index(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Let(self0), Expr::Let(other0)) => self0 == other0, -+ (Expr::Lit(self0), Expr::Lit(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Loop(self0), Expr::Loop(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Macro(self0), Expr::Macro(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Match(self0), Expr::Match(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::MethodCall(self0), Expr::MethodCall(other0)) => self0 == other0, -+ (Expr::Paren(self0), Expr::Paren(other0)) => self0 == other0, -+ (Expr::Path(self0), Expr::Path(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Range(self0), Expr::Range(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Reference(self0), Expr::Reference(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Repeat(self0), Expr::Repeat(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Return(self0), Expr::Return(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Struct(self0), Expr::Struct(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Try(self0), Expr::Try(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::TryBlock(self0), Expr::TryBlock(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Tuple(self0), Expr::Tuple(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Type(self0), Expr::Type(other0)) => self0 == other0, -+ (Expr::Unary(self0), Expr::Unary(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Unsafe(self0), Expr::Unsafe(other0)) => self0 == other0, -+ (Expr::Verbatim(self0), Expr::Verbatim(other0)) => { -+ TokenStreamHelper(self0) == TokenStreamHelper(other0) -+ } -+ #[cfg(feature = "full")] -+ (Expr::While(self0), Expr::While(other0)) => self0 == other0, -+ #[cfg(feature = "full")] -+ (Expr::Yield(self0), Expr::Yield(other0)) => self0 == other0, -+ _ => false, -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprArray {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprArray { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.elems == other.elems -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprAssign {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprAssign { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.left == other.left && self.right == other.right -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprAssignOp {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprAssignOp { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.left == other.left -+ && self.op == other.op -+ && self.right == other.right -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprAsync {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprAsync { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.capture == other.capture && self.block == other.block -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprAwait {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprAwait { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.base == other.base -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for ExprBinary {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for ExprBinary { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.left == other.left -+ && self.op == other.op -+ && self.right == other.right -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprBlock {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprBlock { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.label == other.label && self.block == other.block -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprBox {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprBox { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.expr == other.expr -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprBreak {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprBreak { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.label == other.label && self.expr == other.expr -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for ExprCall {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for ExprCall { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.func == other.func && self.args == other.args -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for ExprCast {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for ExprCast { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.expr == other.expr && self.ty == other.ty -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprClosure {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprClosure { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.asyncness == other.asyncness -+ && self.movability == other.movability -+ && self.capture == other.capture -+ && self.inputs == other.inputs -+ && self.output == other.output -+ && self.body == other.body -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprContinue {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprContinue { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.label == other.label -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for ExprField {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for ExprField { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.base == other.base && self.member == other.member -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprForLoop {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprForLoop { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.label == other.label -+ && self.pat == other.pat -+ && self.expr == other.expr -+ && self.body == other.body -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprGroup {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprGroup { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.expr == other.expr -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprIf {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprIf { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.cond == other.cond -+ && self.then_branch == other.then_branch -+ && self.else_branch == other.else_branch -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for ExprIndex {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for ExprIndex { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.expr == other.expr && self.index == other.index -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprLet {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprLet { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.pat == other.pat && self.expr == other.expr -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for ExprLit {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for ExprLit { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.lit == other.lit -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprLoop {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprLoop { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.label == other.label && self.body == other.body -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprMacro {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprMacro { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.mac == other.mac -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprMatch {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprMatch { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.expr == other.expr && self.arms == other.arms -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprMethodCall {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprMethodCall { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.receiver == other.receiver -+ && self.method == other.method -+ && self.turbofish == other.turbofish -+ && self.args == other.args -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for ExprParen {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for ExprParen { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.expr == other.expr -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for ExprPath {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for ExprPath { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.qself == other.qself && self.path == other.path -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprRange {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprRange { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.from == other.from -+ && self.limits == other.limits -+ && self.to == other.to -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprReference {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprReference { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.mutability == other.mutability && self.expr == other.expr -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprRepeat {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprRepeat { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.expr == other.expr && self.len == other.len -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprReturn {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprReturn { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.expr == other.expr -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprStruct {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprStruct { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.path == other.path -+ && self.fields == other.fields -+ && self.dot2_token == other.dot2_token -+ && self.rest == other.rest -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprTry {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprTry { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.expr == other.expr -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprTryBlock {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprTryBlock { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.block == other.block -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprTuple {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprTuple { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.elems == other.elems -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprType {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprType { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.expr == other.expr && self.ty == other.ty -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for ExprUnary {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for ExprUnary { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.op == other.op && self.expr == other.expr -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprUnsafe {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprUnsafe { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.block == other.block -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprWhile {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprWhile { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.label == other.label -+ && self.cond == other.cond -+ && self.body == other.body -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ExprYield {} -+#[cfg(feature = "full")] -+impl PartialEq for ExprYield { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.expr == other.expr -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for Field {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for Field { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.ident == other.ident -+ && self.colon_token == other.colon_token -+ && self.ty == other.ty -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for FieldPat {} -+#[cfg(feature = "full")] -+impl PartialEq for FieldPat { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.member == other.member -+ && self.colon_token == other.colon_token -+ && self.pat == other.pat -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for FieldValue {} -+#[cfg(feature = "full")] -+impl PartialEq for FieldValue { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.member == other.member -+ && self.colon_token == other.colon_token -+ && self.expr == other.expr -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for Fields {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for Fields { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (Fields::Named(self0), Fields::Named(other0)) => self0 == other0, -+ (Fields::Unnamed(self0), Fields::Unnamed(other0)) => self0 == other0, -+ (Fields::Unit, Fields::Unit) => true, -+ _ => false, -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for FieldsNamed {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for FieldsNamed { -+ fn eq(&self, other: &Self) -> bool { -+ self.named == other.named -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for FieldsUnnamed {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for FieldsUnnamed { -+ fn eq(&self, other: &Self) -> bool { -+ self.unnamed == other.unnamed -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for File {} -+#[cfg(feature = "full")] -+impl PartialEq for File { -+ fn eq(&self, other: &Self) -> bool { -+ self.shebang == other.shebang && self.attrs == other.attrs && self.items == other.items -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for FnArg {} -+#[cfg(feature = "full")] -+impl PartialEq for FnArg { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (FnArg::Receiver(self0), FnArg::Receiver(other0)) => self0 == other0, -+ (FnArg::Typed(self0), FnArg::Typed(other0)) => self0 == other0, -+ _ => false, -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ForeignItem {} -+#[cfg(feature = "full")] -+impl PartialEq for ForeignItem { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (ForeignItem::Fn(self0), ForeignItem::Fn(other0)) => self0 == other0, -+ (ForeignItem::Static(self0), ForeignItem::Static(other0)) => self0 == other0, -+ (ForeignItem::Type(self0), ForeignItem::Type(other0)) => self0 == other0, -+ (ForeignItem::Macro(self0), ForeignItem::Macro(other0)) => self0 == other0, -+ (ForeignItem::Verbatim(self0), ForeignItem::Verbatim(other0)) => { -+ TokenStreamHelper(self0) == TokenStreamHelper(other0) -+ } -+ _ => false, -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ForeignItemFn {} -+#[cfg(feature = "full")] -+impl PartialEq for ForeignItemFn { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.vis == other.vis && self.sig == other.sig -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ForeignItemMacro {} -+#[cfg(feature = "full")] -+impl PartialEq for ForeignItemMacro { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.mac == other.mac && self.semi_token == other.semi_token -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ForeignItemStatic {} -+#[cfg(feature = "full")] -+impl PartialEq for ForeignItemStatic { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.mutability == other.mutability -+ && self.ident == other.ident -+ && self.ty == other.ty -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ForeignItemType {} -+#[cfg(feature = "full")] -+impl PartialEq for ForeignItemType { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.vis == other.vis && self.ident == other.ident -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for GenericArgument {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for GenericArgument { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (GenericArgument::Lifetime(self0), GenericArgument::Lifetime(other0)) => { -+ self0 == other0 -+ } -+ (GenericArgument::Type(self0), GenericArgument::Type(other0)) => self0 == other0, -+ (GenericArgument::Binding(self0), GenericArgument::Binding(other0)) => self0 == other0, -+ (GenericArgument::Constraint(self0), GenericArgument::Constraint(other0)) => { -+ self0 == other0 -+ } -+ (GenericArgument::Const(self0), GenericArgument::Const(other0)) => self0 == other0, -+ _ => false, -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for GenericMethodArgument {} -+#[cfg(feature = "full")] -+impl PartialEq for GenericMethodArgument { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (GenericMethodArgument::Type(self0), GenericMethodArgument::Type(other0)) => { -+ self0 == other0 -+ } -+ (GenericMethodArgument::Const(self0), GenericMethodArgument::Const(other0)) => { -+ self0 == other0 -+ } -+ _ => false, -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for GenericParam {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for GenericParam { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (GenericParam::Type(self0), GenericParam::Type(other0)) => self0 == other0, -+ (GenericParam::Lifetime(self0), GenericParam::Lifetime(other0)) => self0 == other0, -+ (GenericParam::Const(self0), GenericParam::Const(other0)) => self0 == other0, -+ _ => false, -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for Generics {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for Generics { -+ fn eq(&self, other: &Self) -> bool { -+ self.lt_token == other.lt_token -+ && self.params == other.params -+ && self.gt_token == other.gt_token -+ && self.where_clause == other.where_clause -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ImplItem {} -+#[cfg(feature = "full")] -+impl PartialEq for ImplItem { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (ImplItem::Const(self0), ImplItem::Const(other0)) => self0 == other0, -+ (ImplItem::Method(self0), ImplItem::Method(other0)) => self0 == other0, -+ (ImplItem::Type(self0), ImplItem::Type(other0)) => self0 == other0, -+ (ImplItem::Macro(self0), ImplItem::Macro(other0)) => self0 == other0, -+ (ImplItem::Verbatim(self0), ImplItem::Verbatim(other0)) => { -+ TokenStreamHelper(self0) == TokenStreamHelper(other0) -+ } -+ _ => false, -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ImplItemConst {} -+#[cfg(feature = "full")] -+impl PartialEq for ImplItemConst { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.defaultness == other.defaultness -+ && self.ident == other.ident -+ && self.ty == other.ty -+ && self.expr == other.expr -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ImplItemMacro {} -+#[cfg(feature = "full")] -+impl PartialEq for ImplItemMacro { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.mac == other.mac && self.semi_token == other.semi_token -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ImplItemMethod {} -+#[cfg(feature = "full")] -+impl PartialEq for ImplItemMethod { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.defaultness == other.defaultness -+ && self.sig == other.sig -+ && self.block == other.block -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ImplItemType {} -+#[cfg(feature = "full")] -+impl PartialEq for ImplItemType { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.defaultness == other.defaultness -+ && self.ident == other.ident -+ && self.generics == other.generics -+ && self.ty == other.ty -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for Item {} -+#[cfg(feature = "full")] -+impl PartialEq for Item { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (Item::Const(self0), Item::Const(other0)) => self0 == other0, -+ (Item::Enum(self0), Item::Enum(other0)) => self0 == other0, -+ (Item::ExternCrate(self0), Item::ExternCrate(other0)) => self0 == other0, -+ (Item::Fn(self0), Item::Fn(other0)) => self0 == other0, -+ (Item::ForeignMod(self0), Item::ForeignMod(other0)) => self0 == other0, -+ (Item::Impl(self0), Item::Impl(other0)) => self0 == other0, -+ (Item::Macro(self0), Item::Macro(other0)) => self0 == other0, -+ (Item::Macro2(self0), Item::Macro2(other0)) => self0 == other0, -+ (Item::Mod(self0), Item::Mod(other0)) => self0 == other0, -+ (Item::Static(self0), Item::Static(other0)) => self0 == other0, -+ (Item::Struct(self0), Item::Struct(other0)) => self0 == other0, -+ (Item::Trait(self0), Item::Trait(other0)) => self0 == other0, -+ (Item::TraitAlias(self0), Item::TraitAlias(other0)) => self0 == other0, -+ (Item::Type(self0), Item::Type(other0)) => self0 == other0, -+ (Item::Union(self0), Item::Union(other0)) => self0 == other0, -+ (Item::Use(self0), Item::Use(other0)) => self0 == other0, -+ (Item::Verbatim(self0), Item::Verbatim(other0)) => { -+ TokenStreamHelper(self0) == TokenStreamHelper(other0) -+ } -+ _ => false, -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ItemConst {} -+#[cfg(feature = "full")] -+impl PartialEq for ItemConst { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.ident == other.ident -+ && self.ty == other.ty -+ && self.expr == other.expr -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ItemEnum {} -+#[cfg(feature = "full")] -+impl PartialEq for ItemEnum { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.ident == other.ident -+ && self.generics == other.generics -+ && self.variants == other.variants -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ItemExternCrate {} -+#[cfg(feature = "full")] -+impl PartialEq for ItemExternCrate { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.ident == other.ident -+ && self.rename == other.rename -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ItemFn {} -+#[cfg(feature = "full")] -+impl PartialEq for ItemFn { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.sig == other.sig -+ && self.block == other.block -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ItemForeignMod {} -+#[cfg(feature = "full")] -+impl PartialEq for ItemForeignMod { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.abi == other.abi && self.items == other.items -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ItemImpl {} -+#[cfg(feature = "full")] -+impl PartialEq for ItemImpl { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.defaultness == other.defaultness -+ && self.unsafety == other.unsafety -+ && self.generics == other.generics -+ && self.trait_ == other.trait_ -+ && self.self_ty == other.self_ty -+ && self.items == other.items -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ItemMacro {} -+#[cfg(feature = "full")] -+impl PartialEq for ItemMacro { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.ident == other.ident -+ && self.mac == other.mac -+ && self.semi_token == other.semi_token -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ItemMacro2 {} -+#[cfg(feature = "full")] -+impl PartialEq for ItemMacro2 { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.ident == other.ident -+ && TokenStreamHelper(&self.rules) == TokenStreamHelper(&other.rules) -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ItemMod {} -+#[cfg(feature = "full")] -+impl PartialEq for ItemMod { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.ident == other.ident -+ && self.content == other.content -+ && self.semi == other.semi -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ItemStatic {} -+#[cfg(feature = "full")] -+impl PartialEq for ItemStatic { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.mutability == other.mutability -+ && self.ident == other.ident -+ && self.ty == other.ty -+ && self.expr == other.expr -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ItemStruct {} -+#[cfg(feature = "full")] -+impl PartialEq for ItemStruct { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.ident == other.ident -+ && self.generics == other.generics -+ && self.fields == other.fields -+ && self.semi_token == other.semi_token -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ItemTrait {} -+#[cfg(feature = "full")] -+impl PartialEq for ItemTrait { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.unsafety == other.unsafety -+ && self.auto_token == other.auto_token -+ && self.ident == other.ident -+ && self.generics == other.generics -+ && self.colon_token == other.colon_token -+ && self.supertraits == other.supertraits -+ && self.items == other.items -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ItemTraitAlias {} -+#[cfg(feature = "full")] -+impl PartialEq for ItemTraitAlias { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.ident == other.ident -+ && self.generics == other.generics -+ && self.bounds == other.bounds -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ItemType {} -+#[cfg(feature = "full")] -+impl PartialEq for ItemType { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.ident == other.ident -+ && self.generics == other.generics -+ && self.ty == other.ty -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ItemUnion {} -+#[cfg(feature = "full")] -+impl PartialEq for ItemUnion { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.ident == other.ident -+ && self.generics == other.generics -+ && self.fields == other.fields -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for ItemUse {} -+#[cfg(feature = "full")] -+impl PartialEq for ItemUse { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.vis == other.vis -+ && self.leading_colon == other.leading_colon -+ && self.tree == other.tree -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for Label {} -+#[cfg(feature = "full")] -+impl PartialEq for Label { -+ fn eq(&self, other: &Self) -> bool { -+ self.name == other.name -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for LifetimeDef {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for LifetimeDef { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.lifetime == other.lifetime -+ && self.colon_token == other.colon_token -+ && self.bounds == other.bounds -+ } -+} -+impl Eq for Lit {} -+impl PartialEq for Lit { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (Lit::Str(self0), Lit::Str(other0)) => self0 == other0, -+ (Lit::ByteStr(self0), Lit::ByteStr(other0)) => self0 == other0, -+ (Lit::Byte(self0), Lit::Byte(other0)) => self0 == other0, -+ (Lit::Char(self0), Lit::Char(other0)) => self0 == other0, -+ (Lit::Int(self0), Lit::Int(other0)) => self0 == other0, -+ (Lit::Float(self0), Lit::Float(other0)) => self0 == other0, -+ (Lit::Bool(self0), Lit::Bool(other0)) => self0 == other0, -+ (Lit::Verbatim(self0), Lit::Verbatim(other0)) => { -+ self0.to_string() == other0.to_string() -+ } -+ _ => false, -+ } -+ } -+} -+impl Eq for LitBool {} -+impl PartialEq for LitBool { -+ fn eq(&self, other: &Self) -> bool { -+ self.value == other.value -+ } -+} -+impl Eq for LitByte {} -+impl Eq for LitByteStr {} -+impl Eq for LitChar {} -+impl Eq for LitFloat {} -+impl Eq for LitInt {} -+impl Eq for LitStr {} -+#[cfg(feature = "full")] -+impl Eq for Local {} -+#[cfg(feature = "full")] -+impl PartialEq for Local { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.pat == other.pat && self.init == other.init -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for Macro {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for Macro { -+ fn eq(&self, other: &Self) -> bool { -+ self.path == other.path -+ && self.delimiter == other.delimiter -+ && TokenStreamHelper(&self.tokens) == TokenStreamHelper(&other.tokens) -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for MacroDelimiter {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for MacroDelimiter { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (MacroDelimiter::Paren(_), MacroDelimiter::Paren(_)) => true, -+ (MacroDelimiter::Brace(_), MacroDelimiter::Brace(_)) => true, -+ (MacroDelimiter::Bracket(_), MacroDelimiter::Bracket(_)) => true, -+ _ => false, -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for Meta {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for Meta { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (Meta::Path(self0), Meta::Path(other0)) => self0 == other0, -+ (Meta::List(self0), Meta::List(other0)) => self0 == other0, -+ (Meta::NameValue(self0), Meta::NameValue(other0)) => self0 == other0, -+ _ => false, -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for MetaList {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for MetaList { -+ fn eq(&self, other: &Self) -> bool { -+ self.path == other.path && self.nested == other.nested -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for MetaNameValue {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for MetaNameValue { -+ fn eq(&self, other: &Self) -> bool { -+ self.path == other.path && self.lit == other.lit -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for MethodTurbofish {} -+#[cfg(feature = "full")] -+impl PartialEq for MethodTurbofish { -+ fn eq(&self, other: &Self) -> bool { -+ self.args == other.args -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for NestedMeta {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for NestedMeta { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (NestedMeta::Meta(self0), NestedMeta::Meta(other0)) => self0 == other0, -+ (NestedMeta::Lit(self0), NestedMeta::Lit(other0)) => self0 == other0, -+ _ => false, -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for ParenthesizedGenericArguments {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for ParenthesizedGenericArguments { -+ fn eq(&self, other: &Self) -> bool { -+ self.inputs == other.inputs && self.output == other.output -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for Pat {} -+#[cfg(feature = "full")] -+impl PartialEq for Pat { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (Pat::Box(self0), Pat::Box(other0)) => self0 == other0, -+ (Pat::Ident(self0), Pat::Ident(other0)) => self0 == other0, -+ (Pat::Lit(self0), Pat::Lit(other0)) => self0 == other0, -+ (Pat::Macro(self0), Pat::Macro(other0)) => self0 == other0, -+ (Pat::Or(self0), Pat::Or(other0)) => self0 == other0, -+ (Pat::Path(self0), Pat::Path(other0)) => self0 == other0, -+ (Pat::Range(self0), Pat::Range(other0)) => self0 == other0, -+ (Pat::Reference(self0), Pat::Reference(other0)) => self0 == other0, -+ (Pat::Rest(self0), Pat::Rest(other0)) => self0 == other0, -+ (Pat::Slice(self0), Pat::Slice(other0)) => self0 == other0, -+ (Pat::Struct(self0), Pat::Struct(other0)) => self0 == other0, -+ (Pat::Tuple(self0), Pat::Tuple(other0)) => self0 == other0, -+ (Pat::TupleStruct(self0), Pat::TupleStruct(other0)) => self0 == other0, -+ (Pat::Type(self0), Pat::Type(other0)) => self0 == other0, -+ (Pat::Verbatim(self0), Pat::Verbatim(other0)) => { -+ TokenStreamHelper(self0) == TokenStreamHelper(other0) -+ } -+ (Pat::Wild(self0), Pat::Wild(other0)) => self0 == other0, -+ _ => false, -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for PatBox {} -+#[cfg(feature = "full")] -+impl PartialEq for PatBox { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.pat == other.pat -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for PatIdent {} -+#[cfg(feature = "full")] -+impl PartialEq for PatIdent { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.by_ref == other.by_ref -+ && self.mutability == other.mutability -+ && self.ident == other.ident -+ && self.subpat == other.subpat -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for PatLit {} -+#[cfg(feature = "full")] -+impl PartialEq for PatLit { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.expr == other.expr -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for PatMacro {} -+#[cfg(feature = "full")] -+impl PartialEq for PatMacro { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.mac == other.mac -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for PatOr {} -+#[cfg(feature = "full")] -+impl PartialEq for PatOr { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.leading_vert == other.leading_vert -+ && self.cases == other.cases -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for PatPath {} -+#[cfg(feature = "full")] -+impl PartialEq for PatPath { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.qself == other.qself && self.path == other.path -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for PatRange {} -+#[cfg(feature = "full")] -+impl PartialEq for PatRange { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.lo == other.lo -+ && self.limits == other.limits -+ && self.hi == other.hi -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for PatReference {} -+#[cfg(feature = "full")] -+impl PartialEq for PatReference { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.mutability == other.mutability && self.pat == other.pat -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for PatRest {} -+#[cfg(feature = "full")] -+impl PartialEq for PatRest { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for PatSlice {} -+#[cfg(feature = "full")] -+impl PartialEq for PatSlice { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.elems == other.elems -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for PatStruct {} -+#[cfg(feature = "full")] -+impl PartialEq for PatStruct { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.path == other.path -+ && self.fields == other.fields -+ && self.dot2_token == other.dot2_token -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for PatTuple {} -+#[cfg(feature = "full")] -+impl PartialEq for PatTuple { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.elems == other.elems -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for PatTupleStruct {} -+#[cfg(feature = "full")] -+impl PartialEq for PatTupleStruct { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.path == other.path && self.pat == other.pat -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for PatType {} -+#[cfg(feature = "full")] -+impl PartialEq for PatType { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.pat == other.pat && self.ty == other.ty -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for PatWild {} -+#[cfg(feature = "full")] -+impl PartialEq for PatWild { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for Path {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for Path { -+ fn eq(&self, other: &Self) -> bool { -+ self.leading_colon == other.leading_colon && self.segments == other.segments -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for PathArguments {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for PathArguments { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (PathArguments::None, PathArguments::None) => true, -+ (PathArguments::AngleBracketed(self0), PathArguments::AngleBracketed(other0)) => { -+ self0 == other0 -+ } -+ (PathArguments::Parenthesized(self0), PathArguments::Parenthesized(other0)) => { -+ self0 == other0 -+ } -+ _ => false, -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for PathSegment {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for PathSegment { -+ fn eq(&self, other: &Self) -> bool { -+ self.ident == other.ident && self.arguments == other.arguments -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for PredicateEq {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for PredicateEq { -+ fn eq(&self, other: &Self) -> bool { -+ self.lhs_ty == other.lhs_ty && self.rhs_ty == other.rhs_ty -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for PredicateLifetime {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for PredicateLifetime { -+ fn eq(&self, other: &Self) -> bool { -+ self.lifetime == other.lifetime && self.bounds == other.bounds -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for PredicateType {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for PredicateType { -+ fn eq(&self, other: &Self) -> bool { -+ self.lifetimes == other.lifetimes -+ && self.bounded_ty == other.bounded_ty -+ && self.bounds == other.bounds -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for QSelf {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for QSelf { -+ fn eq(&self, other: &Self) -> bool { -+ self.ty == other.ty && self.position == other.position && self.as_token == other.as_token -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for RangeLimits {} -+#[cfg(feature = "full")] -+impl PartialEq for RangeLimits { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (RangeLimits::HalfOpen(_), RangeLimits::HalfOpen(_)) => true, -+ (RangeLimits::Closed(_), RangeLimits::Closed(_)) => true, -+ _ => false, -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for Receiver {} -+#[cfg(feature = "full")] -+impl PartialEq for Receiver { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.reference == other.reference -+ && self.mutability == other.mutability -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for ReturnType {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for ReturnType { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (ReturnType::Default, ReturnType::Default) => true, -+ (ReturnType::Type(_, self1), ReturnType::Type(_, other1)) => self1 == other1, -+ _ => false, -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for Signature {} -+#[cfg(feature = "full")] -+impl PartialEq for Signature { -+ fn eq(&self, other: &Self) -> bool { -+ self.constness == other.constness -+ && self.asyncness == other.asyncness -+ && self.unsafety == other.unsafety -+ && self.abi == other.abi -+ && self.ident == other.ident -+ && self.generics == other.generics -+ && self.inputs == other.inputs -+ && self.variadic == other.variadic -+ && self.output == other.output -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for Stmt {} -+#[cfg(feature = "full")] -+impl PartialEq for Stmt { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (Stmt::Local(self0), Stmt::Local(other0)) => self0 == other0, -+ (Stmt::Item(self0), Stmt::Item(other0)) => self0 == other0, -+ (Stmt::Expr(self0), Stmt::Expr(other0)) => self0 == other0, -+ (Stmt::Semi(self0, _), Stmt::Semi(other0, _)) => self0 == other0, -+ _ => false, -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TraitBound {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TraitBound { -+ fn eq(&self, other: &Self) -> bool { -+ self.paren_token == other.paren_token -+ && self.modifier == other.modifier -+ && self.lifetimes == other.lifetimes -+ && self.path == other.path -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TraitBoundModifier {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TraitBoundModifier { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (TraitBoundModifier::None, TraitBoundModifier::None) => true, -+ (TraitBoundModifier::Maybe(_), TraitBoundModifier::Maybe(_)) => true, -+ _ => false, -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for TraitItem {} -+#[cfg(feature = "full")] -+impl PartialEq for TraitItem { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (TraitItem::Const(self0), TraitItem::Const(other0)) => self0 == other0, -+ (TraitItem::Method(self0), TraitItem::Method(other0)) => self0 == other0, -+ (TraitItem::Type(self0), TraitItem::Type(other0)) => self0 == other0, -+ (TraitItem::Macro(self0), TraitItem::Macro(other0)) => self0 == other0, -+ (TraitItem::Verbatim(self0), TraitItem::Verbatim(other0)) => { -+ TokenStreamHelper(self0) == TokenStreamHelper(other0) -+ } -+ _ => false, -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for TraitItemConst {} -+#[cfg(feature = "full")] -+impl PartialEq for TraitItemConst { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.ident == other.ident -+ && self.ty == other.ty -+ && self.default == other.default -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for TraitItemMacro {} -+#[cfg(feature = "full")] -+impl PartialEq for TraitItemMacro { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs && self.mac == other.mac && self.semi_token == other.semi_token -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for TraitItemMethod {} -+#[cfg(feature = "full")] -+impl PartialEq for TraitItemMethod { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.sig == other.sig -+ && self.default == other.default -+ && self.semi_token == other.semi_token -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for TraitItemType {} -+#[cfg(feature = "full")] -+impl PartialEq for TraitItemType { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.ident == other.ident -+ && self.generics == other.generics -+ && self.colon_token == other.colon_token -+ && self.bounds == other.bounds -+ && self.default == other.default -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for Type {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for Type { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (Type::Array(self0), Type::Array(other0)) => self0 == other0, -+ (Type::BareFn(self0), Type::BareFn(other0)) => self0 == other0, -+ (Type::Group(self0), Type::Group(other0)) => self0 == other0, -+ (Type::ImplTrait(self0), Type::ImplTrait(other0)) => self0 == other0, -+ (Type::Infer(self0), Type::Infer(other0)) => self0 == other0, -+ (Type::Macro(self0), Type::Macro(other0)) => self0 == other0, -+ (Type::Never(self0), Type::Never(other0)) => self0 == other0, -+ (Type::Paren(self0), Type::Paren(other0)) => self0 == other0, -+ (Type::Path(self0), Type::Path(other0)) => self0 == other0, -+ (Type::Ptr(self0), Type::Ptr(other0)) => self0 == other0, -+ (Type::Reference(self0), Type::Reference(other0)) => self0 == other0, -+ (Type::Slice(self0), Type::Slice(other0)) => self0 == other0, -+ (Type::TraitObject(self0), Type::TraitObject(other0)) => self0 == other0, -+ (Type::Tuple(self0), Type::Tuple(other0)) => self0 == other0, -+ (Type::Verbatim(self0), Type::Verbatim(other0)) => { -+ TokenStreamHelper(self0) == TokenStreamHelper(other0) -+ } -+ _ => false, -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TypeArray {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TypeArray { -+ fn eq(&self, other: &Self) -> bool { -+ self.elem == other.elem && self.len == other.len -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TypeBareFn {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TypeBareFn { -+ fn eq(&self, other: &Self) -> bool { -+ self.lifetimes == other.lifetimes -+ && self.unsafety == other.unsafety -+ && self.abi == other.abi -+ && self.inputs == other.inputs -+ && self.variadic == other.variadic -+ && self.output == other.output -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TypeGroup {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TypeGroup { -+ fn eq(&self, other: &Self) -> bool { -+ self.elem == other.elem -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TypeImplTrait {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TypeImplTrait { -+ fn eq(&self, other: &Self) -> bool { -+ self.bounds == other.bounds -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TypeInfer {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TypeInfer { -+ fn eq(&self, _other: &Self) -> bool { -+ true -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TypeMacro {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TypeMacro { -+ fn eq(&self, other: &Self) -> bool { -+ self.mac == other.mac -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TypeNever {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TypeNever { -+ fn eq(&self, _other: &Self) -> bool { -+ true -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TypeParam {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TypeParam { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.ident == other.ident -+ && self.colon_token == other.colon_token -+ && self.bounds == other.bounds -+ && self.eq_token == other.eq_token -+ && self.default == other.default -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TypeParamBound {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TypeParamBound { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (TypeParamBound::Trait(self0), TypeParamBound::Trait(other0)) => self0 == other0, -+ (TypeParamBound::Lifetime(self0), TypeParamBound::Lifetime(other0)) => self0 == other0, -+ _ => false, -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TypeParen {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TypeParen { -+ fn eq(&self, other: &Self) -> bool { -+ self.elem == other.elem -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TypePath {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TypePath { -+ fn eq(&self, other: &Self) -> bool { -+ self.qself == other.qself && self.path == other.path -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TypePtr {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TypePtr { -+ fn eq(&self, other: &Self) -> bool { -+ self.const_token == other.const_token -+ && self.mutability == other.mutability -+ && self.elem == other.elem -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TypeReference {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TypeReference { -+ fn eq(&self, other: &Self) -> bool { -+ self.lifetime == other.lifetime -+ && self.mutability == other.mutability -+ && self.elem == other.elem -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TypeSlice {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TypeSlice { -+ fn eq(&self, other: &Self) -> bool { -+ self.elem == other.elem -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TypeTraitObject {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TypeTraitObject { -+ fn eq(&self, other: &Self) -> bool { -+ self.dyn_token == other.dyn_token && self.bounds == other.bounds -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for TypeTuple {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for TypeTuple { -+ fn eq(&self, other: &Self) -> bool { -+ self.elems == other.elems -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for UnOp {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for UnOp { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (UnOp::Deref(_), UnOp::Deref(_)) => true, -+ (UnOp::Not(_), UnOp::Not(_)) => true, -+ (UnOp::Neg(_), UnOp::Neg(_)) => true, -+ _ => false, -+ } -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for UseGlob {} -+#[cfg(feature = "full")] -+impl PartialEq for UseGlob { -+ fn eq(&self, _other: &Self) -> bool { -+ true -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for UseGroup {} -+#[cfg(feature = "full")] -+impl PartialEq for UseGroup { -+ fn eq(&self, other: &Self) -> bool { -+ self.items == other.items -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for UseName {} -+#[cfg(feature = "full")] -+impl PartialEq for UseName { -+ fn eq(&self, other: &Self) -> bool { -+ self.ident == other.ident -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for UsePath {} -+#[cfg(feature = "full")] -+impl PartialEq for UsePath { -+ fn eq(&self, other: &Self) -> bool { -+ self.ident == other.ident && self.tree == other.tree -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for UseRename {} -+#[cfg(feature = "full")] -+impl PartialEq for UseRename { -+ fn eq(&self, other: &Self) -> bool { -+ self.ident == other.ident && self.rename == other.rename -+ } -+} -+#[cfg(feature = "full")] -+impl Eq for UseTree {} -+#[cfg(feature = "full")] -+impl PartialEq for UseTree { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (UseTree::Path(self0), UseTree::Path(other0)) => self0 == other0, -+ (UseTree::Name(self0), UseTree::Name(other0)) => self0 == other0, -+ (UseTree::Rename(self0), UseTree::Rename(other0)) => self0 == other0, -+ (UseTree::Glob(self0), UseTree::Glob(other0)) => self0 == other0, -+ (UseTree::Group(self0), UseTree::Group(other0)) => self0 == other0, -+ _ => false, -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for Variadic {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for Variadic { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for Variant {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for Variant { -+ fn eq(&self, other: &Self) -> bool { -+ self.attrs == other.attrs -+ && self.ident == other.ident -+ && self.fields == other.fields -+ && self.discriminant == other.discriminant -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for VisCrate {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for VisCrate { -+ fn eq(&self, _other: &Self) -> bool { -+ true -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for VisPublic {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for VisPublic { -+ fn eq(&self, _other: &Self) -> bool { -+ true -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for VisRestricted {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for VisRestricted { -+ fn eq(&self, other: &Self) -> bool { -+ self.in_token == other.in_token && self.path == other.path -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for Visibility {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for Visibility { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (Visibility::Public(self0), Visibility::Public(other0)) => self0 == other0, -+ (Visibility::Crate(self0), Visibility::Crate(other0)) => self0 == other0, -+ (Visibility::Restricted(self0), Visibility::Restricted(other0)) => self0 == other0, -+ (Visibility::Inherited, Visibility::Inherited) => true, -+ _ => false, -+ } -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for WhereClause {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for WhereClause { -+ fn eq(&self, other: &Self) -> bool { -+ self.predicates == other.predicates -+ } -+} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl Eq for WherePredicate {} -+#[cfg(any(feature = "derive", feature = "full"))] -+impl PartialEq for WherePredicate { -+ fn eq(&self, other: &Self) -> bool { -+ match (self, other) { -+ (WherePredicate::Type(self0), WherePredicate::Type(other0)) => self0 == other0, -+ (WherePredicate::Lifetime(self0), WherePredicate::Lifetime(other0)) => self0 == other0, -+ (WherePredicate::Eq(self0), WherePredicate::Eq(other0)) => self0 == other0, -+ _ => false, -+ } -+ } -+} -diff --git a/third_party/rust/syn/src/gen/fold.rs b/third_party/rust/syn/src/gen/fold.rs -index f51218b78c..d9dd32a420 100644 ---- a/third_party/rust/syn/src/gen/fold.rs -+++ b/third_party/rust/syn/src/gen/fold.rs -@@ -2,6 +2,7 @@ - // It is not intended for manual editing. - - #![allow(unreachable_code, unused_variables)] -+#![allow(clippy::match_wildcard_for_single_variants)] - #[cfg(any(feature = "full", feature = "derive"))] - use crate::gen::helper::fold::*; - #[cfg(any(feature = "full", feature = "derive"))] -@@ -26,7 +27,7 @@ macro_rules! full { - /// - /// [module documentation]: self - /// --/// *This trait is available if Syn is built with the `"fold"` feature.* -+/// *This trait is available only if Syn is built with the `"fold"` feature.* - pub trait Fold { - #[cfg(any(feature = "derive", feature = "full"))] - fn fold_abi(&mut self, i: Abi) -> Abi { -@@ -433,35 +434,27 @@ pub trait Fold { - fn fold_lifetime_def(&mut self, i: LifetimeDef) -> LifetimeDef { - fold_lifetime_def(self, i) - } -- #[cfg(any(feature = "derive", feature = "full"))] - fn fold_lit(&mut self, i: Lit) -> Lit { - fold_lit(self, i) - } -- #[cfg(any(feature = "derive", feature = "full"))] - fn fold_lit_bool(&mut self, i: LitBool) -> LitBool { - fold_lit_bool(self, i) - } -- #[cfg(any(feature = "derive", feature = "full"))] - fn fold_lit_byte(&mut self, i: LitByte) -> LitByte { - fold_lit_byte(self, i) - } -- #[cfg(any(feature = "derive", feature = "full"))] - fn fold_lit_byte_str(&mut self, i: LitByteStr) -> LitByteStr { - fold_lit_byte_str(self, i) - } -- #[cfg(any(feature = "derive", feature = "full"))] - fn fold_lit_char(&mut self, i: LitChar) -> LitChar { - fold_lit_char(self, i) - } -- #[cfg(any(feature = "derive", feature = "full"))] - fn fold_lit_float(&mut self, i: LitFloat) -> LitFloat { - fold_lit_float(self, i) - } -- #[cfg(any(feature = "derive", feature = "full"))] - fn fold_lit_int(&mut self, i: LitInt) -> LitInt { - fold_lit_int(self, i) - } -- #[cfg(any(feature = "derive", feature = "full"))] - fn fold_lit_str(&mut self, i: LitStr) -> LitStr { - fold_lit_str(self, i) - } -@@ -799,10 +792,10 @@ where - F: Fold + ?Sized, - { - AngleBracketedGenericArguments { -- colon2_token: (node.colon2_token).map(|it| Token ! [ :: ](tokens_helper(f, &it.spans))), -- lt_token: Token ! [ < ](tokens_helper(f, &node.lt_token.spans)), -+ colon2_token: (node.colon2_token).map(|it| Token ! [::](tokens_helper(f, &it.spans))), -+ lt_token: Token ! [<](tokens_helper(f, &node.lt_token.spans)), - args: FoldHelper::lift(node.args, |it| f.fold_generic_argument(it)), -- gt_token: Token ! [ > ](tokens_helper(f, &node.gt_token.spans)), -+ gt_token: Token ! [>](tokens_helper(f, &node.gt_token.spans)), - } - } - #[cfg(feature = "full")] -@@ -819,9 +812,9 @@ where - Box::new(f.fold_expr(*(it).1)), - ) - }), -- fat_arrow_token: Token ! [ => ](tokens_helper(f, &node.fat_arrow_token.spans)), -+ fat_arrow_token: Token ! [=>](tokens_helper(f, &node.fat_arrow_token.spans)), - body: Box::new(f.fold_expr(*node.body)), -- comma: (node.comma).map(|it| Token ! [ , ](tokens_helper(f, &it.spans))), -+ comma: (node.comma).map(|it| Token ! [,](tokens_helper(f, &it.spans))), - } - } - #[cfg(any(feature = "derive", feature = "full"))] -@@ -842,7 +835,7 @@ where - F: Fold + ?Sized, - { - Attribute { -- pound_token: Token ! [ # ](tokens_helper(f, &node.pound_token.spans)), -+ pound_token: Token ! [#](tokens_helper(f, &node.pound_token.spans)), - style: f.fold_attr_style(node.style), - bracket_token: Bracket(tokens_helper(f, &node.bracket_token.span)), - path: f.fold_path(node.path), -@@ -859,7 +852,7 @@ where - name: (node.name).map(|it| { - ( - f.fold_ident((it).0), -- Token ! [ : ](tokens_helper(f, &(it).1.spans)), -+ Token ! [:](tokens_helper(f, &(it).1.spans)), - ) - }), - ty: f.fold_type(node.ty), -@@ -871,59 +864,47 @@ where - F: Fold + ?Sized, - { - match node { -- BinOp::Add(_binding_0) => BinOp::Add(Token ! [ + ](tokens_helper(f, &_binding_0.spans))), -- BinOp::Sub(_binding_0) => BinOp::Sub(Token ! [ - ](tokens_helper(f, &_binding_0.spans))), -- BinOp::Mul(_binding_0) => BinOp::Mul(Token ! [ * ](tokens_helper(f, &_binding_0.spans))), -- BinOp::Div(_binding_0) => BinOp::Div(Token ! [ / ](tokens_helper(f, &_binding_0.spans))), -- BinOp::Rem(_binding_0) => BinOp::Rem(Token ! [ % ](tokens_helper(f, &_binding_0.spans))), -- BinOp::And(_binding_0) => BinOp::And(Token ! [ && ](tokens_helper(f, &_binding_0.spans))), -- BinOp::Or(_binding_0) => BinOp::Or(Token ! [ || ](tokens_helper(f, &_binding_0.spans))), -+ BinOp::Add(_binding_0) => BinOp::Add(Token ! [+](tokens_helper(f, &_binding_0.spans))), -+ BinOp::Sub(_binding_0) => BinOp::Sub(Token ! [-](tokens_helper(f, &_binding_0.spans))), -+ BinOp::Mul(_binding_0) => BinOp::Mul(Token ! [*](tokens_helper(f, &_binding_0.spans))), -+ BinOp::Div(_binding_0) => BinOp::Div(Token ! [/](tokens_helper(f, &_binding_0.spans))), -+ BinOp::Rem(_binding_0) => BinOp::Rem(Token ! [%](tokens_helper(f, &_binding_0.spans))), -+ BinOp::And(_binding_0) => BinOp::And(Token ! [&&](tokens_helper(f, &_binding_0.spans))), -+ BinOp::Or(_binding_0) => BinOp::Or(Token ! [||](tokens_helper(f, &_binding_0.spans))), - BinOp::BitXor(_binding_0) => { -- BinOp::BitXor(Token ! [ ^ ](tokens_helper(f, &_binding_0.spans))) -+ BinOp::BitXor(Token ! [^](tokens_helper(f, &_binding_0.spans))) - } - BinOp::BitAnd(_binding_0) => { -- BinOp::BitAnd(Token ! [ & ](tokens_helper(f, &_binding_0.spans))) -- } -- BinOp::BitOr(_binding_0) => { -- BinOp::BitOr(Token ! [ | ](tokens_helper(f, &_binding_0.spans))) -- } -- BinOp::Shl(_binding_0) => BinOp::Shl(Token ! [ << ](tokens_helper(f, &_binding_0.spans))), -- BinOp::Shr(_binding_0) => BinOp::Shr(Token ! [ >> ](tokens_helper(f, &_binding_0.spans))), -- BinOp::Eq(_binding_0) => BinOp::Eq(Token ! [ == ](tokens_helper(f, &_binding_0.spans))), -- BinOp::Lt(_binding_0) => BinOp::Lt(Token ! [ < ](tokens_helper(f, &_binding_0.spans))), -- BinOp::Le(_binding_0) => BinOp::Le(Token ! [ <= ](tokens_helper(f, &_binding_0.spans))), -- BinOp::Ne(_binding_0) => BinOp::Ne(Token ! [ != ](tokens_helper(f, &_binding_0.spans))), -- BinOp::Ge(_binding_0) => BinOp::Ge(Token ! [ >= ](tokens_helper(f, &_binding_0.spans))), -- BinOp::Gt(_binding_0) => BinOp::Gt(Token ! [ > ](tokens_helper(f, &_binding_0.spans))), -- BinOp::AddEq(_binding_0) => { -- BinOp::AddEq(Token ! [ += ](tokens_helper(f, &_binding_0.spans))) -- } -- BinOp::SubEq(_binding_0) => { -- BinOp::SubEq(Token ! [ -= ](tokens_helper(f, &_binding_0.spans))) -- } -- BinOp::MulEq(_binding_0) => { -- BinOp::MulEq(Token ! [ *= ](tokens_helper(f, &_binding_0.spans))) -- } -- BinOp::DivEq(_binding_0) => { -- BinOp::DivEq(Token ! [ /= ](tokens_helper(f, &_binding_0.spans))) -- } -- BinOp::RemEq(_binding_0) => { -- BinOp::RemEq(Token ! [ %= ](tokens_helper(f, &_binding_0.spans))) -+ BinOp::BitAnd(Token ! [&](tokens_helper(f, &_binding_0.spans))) - } -+ BinOp::BitOr(_binding_0) => BinOp::BitOr(Token ! [|](tokens_helper(f, &_binding_0.spans))), -+ BinOp::Shl(_binding_0) => BinOp::Shl(Token ! [<<](tokens_helper(f, &_binding_0.spans))), -+ BinOp::Shr(_binding_0) => BinOp::Shr(Token ! [>>](tokens_helper(f, &_binding_0.spans))), -+ BinOp::Eq(_binding_0) => BinOp::Eq(Token ! [==](tokens_helper(f, &_binding_0.spans))), -+ BinOp::Lt(_binding_0) => BinOp::Lt(Token ! [<](tokens_helper(f, &_binding_0.spans))), -+ BinOp::Le(_binding_0) => BinOp::Le(Token ! [<=](tokens_helper(f, &_binding_0.spans))), -+ BinOp::Ne(_binding_0) => BinOp::Ne(Token ! [!=](tokens_helper(f, &_binding_0.spans))), -+ BinOp::Ge(_binding_0) => BinOp::Ge(Token ! [>=](tokens_helper(f, &_binding_0.spans))), -+ BinOp::Gt(_binding_0) => BinOp::Gt(Token ! [>](tokens_helper(f, &_binding_0.spans))), -+ BinOp::AddEq(_binding_0) => BinOp::AddEq(Token ! [+=](tokens_helper(f, &_binding_0.spans))), -+ BinOp::SubEq(_binding_0) => BinOp::SubEq(Token ! [-=](tokens_helper(f, &_binding_0.spans))), -+ BinOp::MulEq(_binding_0) => BinOp::MulEq(Token ! [*=](tokens_helper(f, &_binding_0.spans))), -+ BinOp::DivEq(_binding_0) => BinOp::DivEq(Token ! [/=](tokens_helper(f, &_binding_0.spans))), -+ BinOp::RemEq(_binding_0) => BinOp::RemEq(Token ! [%=](tokens_helper(f, &_binding_0.spans))), - BinOp::BitXorEq(_binding_0) => { -- BinOp::BitXorEq(Token ! [ ^= ](tokens_helper(f, &_binding_0.spans))) -+ BinOp::BitXorEq(Token ! [^=](tokens_helper(f, &_binding_0.spans))) - } - BinOp::BitAndEq(_binding_0) => { -- BinOp::BitAndEq(Token ! [ &= ](tokens_helper(f, &_binding_0.spans))) -+ BinOp::BitAndEq(Token ! [&=](tokens_helper(f, &_binding_0.spans))) - } - BinOp::BitOrEq(_binding_0) => { -- BinOp::BitOrEq(Token ! [ |= ](tokens_helper(f, &_binding_0.spans))) -+ BinOp::BitOrEq(Token ! [|=](tokens_helper(f, &_binding_0.spans))) - } - BinOp::ShlEq(_binding_0) => { -- BinOp::ShlEq(Token ! [ <<= ](tokens_helper(f, &_binding_0.spans))) -+ BinOp::ShlEq(Token ! [<<=](tokens_helper(f, &_binding_0.spans))) - } - BinOp::ShrEq(_binding_0) => { -- BinOp::ShrEq(Token ! [ >>= ](tokens_helper(f, &_binding_0.spans))) -+ BinOp::ShrEq(Token ! [>>=](tokens_helper(f, &_binding_0.spans))) - } - } - } -@@ -934,7 +915,7 @@ where - { - Binding { - ident: f.fold_ident(node.ident), -- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)), -+ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)), - ty: f.fold_type(node.ty), - } - } -@@ -955,9 +936,9 @@ where - { - BoundLifetimes { - for_token: Token), -- lt_token: Token ! [ < ](tokens_helper(f, &node.lt_token.spans)), -+ lt_token: Token ! [<](tokens_helper(f, &node.lt_token.spans)), - lifetimes: FoldHelper::lift(node.lifetimes, |it| f.fold_lifetime_def(it)), -- gt_token: Token ! [ > ](tokens_helper(f, &node.gt_token.spans)), -+ gt_token: Token ! [>](tokens_helper(f, &node.gt_token.spans)), - } - } - #[cfg(any(feature = "derive", feature = "full"))] -@@ -969,9 +950,9 @@ where - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - const_token: Token), - ident: f.fold_ident(node.ident), -- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)), -+ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)), - ty: f.fold_type(node.ty), -- eq_token: (node.eq_token).map(|it| Token ! [ = ](tokens_helper(f, &it.spans))), -+ eq_token: (node.eq_token).map(|it| Token ! [=](tokens_helper(f, &it.spans))), - default: (node.default).map(|it| f.fold_expr(it)), - } - } -@@ -982,7 +963,7 @@ where - { - Constraint { - ident: f.fold_ident(node.ident), -- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)), -+ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)), - bounds: FoldHelper::lift(node.bounds, |it| f.fold_type_param_bound(it)), - } - } -@@ -1016,7 +997,7 @@ where - DataStruct { - struct_token: Token), - fields: f.fold_fields(node.fields), -- semi_token: (node.semi_token).map(|it| Token ! [ ; ](tokens_helper(f, &it.spans))), -+ semi_token: (node.semi_token).map(|it| Token ! [;](tokens_helper(f, &it.spans))), - } - } - #[cfg(feature = "derive")] -@@ -1112,7 +1093,7 @@ where - ExprAssign { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - left: Box::new(f.fold_expr(*node.left)), -- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)), -+ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)), - right: Box::new(f.fold_expr(*node.right)), - } - } -@@ -1148,7 +1129,7 @@ where - ExprAwait { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - base: Box::new(f.fold_expr(*node.base)), -- dot_token: Token ! [ . ](tokens_helper(f, &node.dot_token.spans)), -+ dot_token: Token ! [.](tokens_helper(f, &node.dot_token.spans)), - await_token: crate::token::Await(tokens_helper(f, &node.await_token.span)), - } - } -@@ -1232,9 +1213,9 @@ where - asyncness: (node.asyncness).map(|it| Token)), - movability: (node.movability).map(|it| Token)), - capture: (node.capture).map(|it| Token)), -- or1_token: Token ! [ | ](tokens_helper(f, &node.or1_token.spans)), -+ or1_token: Token ! [|](tokens_helper(f, &node.or1_token.spans)), - inputs: FoldHelper::lift(node.inputs, |it| f.fold_pat(it)), -- or2_token: Token ! [ | ](tokens_helper(f, &node.or2_token.spans)), -+ or2_token: Token ! [|](tokens_helper(f, &node.or2_token.spans)), - output: f.fold_return_type(node.output), - body: Box::new(f.fold_expr(*node.body)), - } -@@ -1258,7 +1239,7 @@ where - ExprField { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - base: Box::new(f.fold_expr(*node.base)), -- dot_token: Token ! [ . ](tokens_helper(f, &node.dot_token.spans)), -+ dot_token: Token ! [.](tokens_helper(f, &node.dot_token.spans)), - member: f.fold_member(node.member), - } - } -@@ -1327,7 +1308,7 @@ where - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - let_token: Token), - pat: f.fold_pat(node.pat), -- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)), -+ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)), - expr: Box::new(f.fold_expr(*node.expr)), - } - } -@@ -1384,7 +1365,7 @@ where - ExprMethodCall { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - receiver: Box::new(f.fold_expr(*node.receiver)), -- dot_token: Token ! [ . ](tokens_helper(f, &node.dot_token.spans)), -+ dot_token: Token ! [.](tokens_helper(f, &node.dot_token.spans)), - method: f.fold_ident(node.method), - turbofish: (node.turbofish).map(|it| f.fold_method_turbofish(it)), - paren_token: Paren(tokens_helper(f, &node.paren_token.span)), -@@ -1432,7 +1413,7 @@ where - { - ExprReference { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), -- and_token: Token ! [ & ](tokens_helper(f, &node.and_token.spans)), -+ and_token: Token ! [&](tokens_helper(f, &node.and_token.spans)), - raw: node.raw, - mutability: (node.mutability).map(|it| Token)), - expr: Box::new(f.fold_expr(*node.expr)), -@@ -1447,7 +1428,7 @@ where - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - bracket_token: Bracket(tokens_helper(f, &node.bracket_token.span)), - expr: Box::new(f.fold_expr(*node.expr)), -- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)), -+ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)), - len: Box::new(f.fold_expr(*node.len)), - } - } -@@ -1484,7 +1465,7 @@ where - ExprTry { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - expr: Box::new(f.fold_expr(*node.expr)), -- question_token: Token ! [ ? ](tokens_helper(f, &node.question_token.spans)), -+ question_token: Token ! [?](tokens_helper(f, &node.question_token.spans)), - } - } - #[cfg(feature = "full")] -@@ -1517,7 +1498,7 @@ where - ExprType { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - expr: Box::new(f.fold_expr(*node.expr)), -- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)), -+ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)), - ty: Box::new(f.fold_type(*node.ty)), - } - } -@@ -1576,7 +1557,7 @@ where - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - vis: f.fold_visibility(node.vis), - ident: (node.ident).map(|it| f.fold_ident(it)), -- colon_token: (node.colon_token).map(|it| Token ! [ : ](tokens_helper(f, &it.spans))), -+ colon_token: (node.colon_token).map(|it| Token ! [:](tokens_helper(f, &it.spans))), - ty: f.fold_type(node.ty), - } - } -@@ -1588,7 +1569,7 @@ where - FieldPat { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - member: f.fold_member(node.member), -- colon_token: (node.colon_token).map(|it| Token ! [ : ](tokens_helper(f, &it.spans))), -+ colon_token: (node.colon_token).map(|it| Token ! [:](tokens_helper(f, &it.spans))), - pat: Box::new(f.fold_pat(*node.pat)), - } - } -@@ -1600,7 +1581,7 @@ where - FieldValue { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - member: f.fold_member(node.member), -- colon_token: (node.colon_token).map(|it| Token ! [ : ](tokens_helper(f, &it.spans))), -+ colon_token: (node.colon_token).map(|it| Token ! [:](tokens_helper(f, &it.spans))), - expr: f.fold_expr(node.expr), - } - } -@@ -1681,7 +1662,7 @@ where - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - vis: f.fold_visibility(node.vis), - sig: f.fold_signature(node.sig), -- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)), -+ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)), - } - } - #[cfg(feature = "full")] -@@ -1692,7 +1673,7 @@ where - ForeignItemMacro { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - mac: f.fold_macro(node.mac), -- semi_token: (node.semi_token).map(|it| Token ! [ ; ](tokens_helper(f, &it.spans))), -+ semi_token: (node.semi_token).map(|it| Token ! [;](tokens_helper(f, &it.spans))), - } - } - #[cfg(feature = "full")] -@@ -1706,9 +1687,9 @@ where - static_token: Token), - mutability: (node.mutability).map(|it| Token)), - ident: f.fold_ident(node.ident), -- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)), -+ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)), - ty: Box::new(f.fold_type(*node.ty)), -- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)), -+ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)), - } - } - #[cfg(feature = "full")] -@@ -1721,7 +1702,7 @@ where - vis: f.fold_visibility(node.vis), - type_token: Token), - ident: f.fold_ident(node.ident), -- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)), -+ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)), - } - } - #[cfg(any(feature = "derive", feature = "full"))] -@@ -1779,9 +1760,9 @@ where - F: Fold + ?Sized, - { - Generics { -- lt_token: (node.lt_token).map(|it| Token ! [ < ](tokens_helper(f, &it.spans))), -+ lt_token: (node.lt_token).map(|it| Token ! [<](tokens_helper(f, &it.spans))), - params: FoldHelper::lift(node.params, |it| f.fold_generic_param(it)), -- gt_token: (node.gt_token).map(|it| Token ! [ > ](tokens_helper(f, &it.spans))), -+ gt_token: (node.gt_token).map(|it| Token ! [>](tokens_helper(f, &it.spans))), - where_clause: (node.where_clause).map(|it| f.fold_where_clause(it)), - } - } -@@ -1819,11 +1800,11 @@ where - defaultness: (node.defaultness).map(|it| Token)), - const_token: Token), - ident: f.fold_ident(node.ident), -- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)), -+ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)), - ty: f.fold_type(node.ty), -- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)), -+ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)), - expr: f.fold_expr(node.expr), -- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)), -+ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)), - } - } - #[cfg(feature = "full")] -@@ -1834,7 +1815,7 @@ where - ImplItemMacro { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - mac: f.fold_macro(node.mac), -- semi_token: (node.semi_token).map(|it| Token ! [ ; ](tokens_helper(f, &it.spans))), -+ semi_token: (node.semi_token).map(|it| Token ! [;](tokens_helper(f, &it.spans))), - } - } - #[cfg(feature = "full")] -@@ -1862,9 +1843,9 @@ where - type_token: Token), - ident: f.fold_ident(node.ident), - generics: f.fold_generics(node.generics), -- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)), -+ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)), - ty: f.fold_type(node.ty), -- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)), -+ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)), - } - } - #[cfg(any(feature = "derive", feature = "full"))] -@@ -1913,11 +1894,11 @@ where - vis: f.fold_visibility(node.vis), - const_token: Token), - ident: f.fold_ident(node.ident), -- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)), -+ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)), - ty: Box::new(f.fold_type(*node.ty)), -- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)), -+ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)), - expr: Box::new(f.fold_expr(*node.expr)), -- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)), -+ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)), - } - } - #[cfg(feature = "full")] -@@ -1952,7 +1933,7 @@ where - f.fold_ident((it).1), - ) - }), -- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)), -+ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)), - } - } - #[cfg(feature = "full")] -@@ -2011,7 +1992,7 @@ where - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - ident: (node.ident).map(|it| f.fold_ident(it)), - mac: f.fold_macro(node.mac), -- semi_token: (node.semi_token).map(|it| Token ! [ ; ](tokens_helper(f, &it.spans))), -+ semi_token: (node.semi_token).map(|it| Token ! [;](tokens_helper(f, &it.spans))), - } - } - #[cfg(feature = "full")] -@@ -2043,7 +2024,7 @@ where - FoldHelper::lift((it).1, |it| f.fold_item(it)), - ) - }), -- semi: (node.semi).map(|it| Token ! [ ; ](tokens_helper(f, &it.spans))), -+ semi: (node.semi).map(|it| Token ! [;](tokens_helper(f, &it.spans))), - } - } - #[cfg(feature = "full")] -@@ -2057,11 +2038,11 @@ where - static_token: Token), - mutability: (node.mutability).map(|it| Token)), - ident: f.fold_ident(node.ident), -- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)), -+ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)), - ty: Box::new(f.fold_type(*node.ty)), -- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)), -+ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)), - expr: Box::new(f.fold_expr(*node.expr)), -- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)), -+ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)), - } - } - #[cfg(feature = "full")] -@@ -2076,7 +2057,7 @@ where - ident: f.fold_ident(node.ident), - generics: f.fold_generics(node.generics), - fields: f.fold_fields(node.fields), -- semi_token: (node.semi_token).map(|it| Token ! [ ; ](tokens_helper(f, &it.spans))), -+ semi_token: (node.semi_token).map(|it| Token ! [;](tokens_helper(f, &it.spans))), - } - } - #[cfg(feature = "full")] -@@ -2092,7 +2073,7 @@ where - trait_token: Token), - ident: f.fold_ident(node.ident), - generics: f.fold_generics(node.generics), -- colon_token: (node.colon_token).map(|it| Token ! [ : ](tokens_helper(f, &it.spans))), -+ colon_token: (node.colon_token).map(|it| Token ! [:](tokens_helper(f, &it.spans))), - supertraits: FoldHelper::lift(node.supertraits, |it| f.fold_type_param_bound(it)), - brace_token: Brace(tokens_helper(f, &node.brace_token.span)), - items: FoldHelper::lift(node.items, |it| f.fold_trait_item(it)), -@@ -2109,9 +2090,9 @@ where - trait_token: Token), - ident: f.fold_ident(node.ident), - generics: f.fold_generics(node.generics), -- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)), -+ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)), - bounds: FoldHelper::lift(node.bounds, |it| f.fold_type_param_bound(it)), -- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)), -+ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)), - } - } - #[cfg(feature = "full")] -@@ -2125,9 +2106,9 @@ where - type_token: Token), - ident: f.fold_ident(node.ident), - generics: f.fold_generics(node.generics), -- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)), -+ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)), - ty: Box::new(f.fold_type(*node.ty)), -- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)), -+ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)), - } - } - #[cfg(feature = "full")] -@@ -2153,9 +2134,9 @@ where - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - vis: f.fold_visibility(node.vis), - use_token: Token), -- leading_colon: (node.leading_colon).map(|it| Token ! [ :: ](tokens_helper(f, &it.spans))), -+ leading_colon: (node.leading_colon).map(|it| Token ! [::](tokens_helper(f, &it.spans))), - tree: f.fold_use_tree(node.tree), -- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)), -+ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)), - } - } - #[cfg(feature = "full")] -@@ -2165,7 +2146,7 @@ where - { - Label { - name: f.fold_lifetime(node.name), -- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)), -+ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)), - } - } - pub fn fold_lifetime<F>(f: &mut F, node: Lifetime) -> Lifetime -@@ -2185,11 +2166,10 @@ where - LifetimeDef { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - lifetime: f.fold_lifetime(node.lifetime), -- colon_token: (node.colon_token).map(|it| Token ! [ : ](tokens_helper(f, &it.spans))), -+ colon_token: (node.colon_token).map(|it| Token ! [:](tokens_helper(f, &it.spans))), - bounds: FoldHelper::lift(node.bounds, |it| f.fold_lifetime(it)), - } - } --#[cfg(any(feature = "derive", feature = "full"))] - pub fn fold_lit<F>(f: &mut F, node: Lit) -> Lit - where - F: Fold + ?Sized, -@@ -2205,7 +2185,6 @@ where - Lit::Verbatim(_binding_0) => Lit::Verbatim(_binding_0), - } - } --#[cfg(any(feature = "derive", feature = "full"))] - pub fn fold_lit_bool<F>(f: &mut F, node: LitBool) -> LitBool - where - F: Fold + ?Sized, -@@ -2215,7 +2194,6 @@ where - span: f.fold_span(node.span), - } - } --#[cfg(any(feature = "derive", feature = "full"))] - pub fn fold_lit_byte<F>(f: &mut F, node: LitByte) -> LitByte - where - F: Fold + ?Sized, -@@ -2225,7 +2203,6 @@ where - node.set_span(span); - node - } --#[cfg(any(feature = "derive", feature = "full"))] - pub fn fold_lit_byte_str<F>(f: &mut F, node: LitByteStr) -> LitByteStr - where - F: Fold + ?Sized, -@@ -2235,7 +2212,6 @@ where - node.set_span(span); - node - } --#[cfg(any(feature = "derive", feature = "full"))] - pub fn fold_lit_char<F>(f: &mut F, node: LitChar) -> LitChar - where - F: Fold + ?Sized, -@@ -2245,7 +2221,6 @@ where - node.set_span(span); - node - } --#[cfg(any(feature = "derive", feature = "full"))] - pub fn fold_lit_float<F>(f: &mut F, node: LitFloat) -> LitFloat - where - F: Fold + ?Sized, -@@ -2255,7 +2230,6 @@ where - node.set_span(span); - node - } --#[cfg(any(feature = "derive", feature = "full"))] - pub fn fold_lit_int<F>(f: &mut F, node: LitInt) -> LitInt - where - F: Fold + ?Sized, -@@ -2265,7 +2239,6 @@ where - node.set_span(span); - node - } --#[cfg(any(feature = "derive", feature = "full"))] - pub fn fold_lit_str<F>(f: &mut F, node: LitStr) -> LitStr - where - F: Fold + ?Sized, -@@ -2286,11 +2259,11 @@ where - pat: f.fold_pat(node.pat), - init: (node.init).map(|it| { - ( -- Token ! [ = ](tokens_helper(f, &(it).0.spans)), -+ Token ! [=](tokens_helper(f, &(it).0.spans)), - Box::new(f.fold_expr(*(it).1)), - ) - }), -- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)), -+ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)), - } - } - #[cfg(any(feature = "derive", feature = "full"))] -@@ -2361,7 +2334,7 @@ where - { - MetaNameValue { - path: f.fold_path(node.path), -- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)), -+ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)), - lit: f.fold_lit(node.lit), - } - } -@@ -2371,10 +2344,10 @@ where - F: Fold + ?Sized, - { - MethodTurbofish { -- colon2_token: Token ! [ :: ](tokens_helper(f, &node.colon2_token.spans)), -- lt_token: Token ! [ < ](tokens_helper(f, &node.lt_token.spans)), -+ colon2_token: Token ! [::](tokens_helper(f, &node.colon2_token.spans)), -+ lt_token: Token ! [<](tokens_helper(f, &node.lt_token.spans)), - args: FoldHelper::lift(node.args, |it| f.fold_generic_method_argument(it)), -- gt_token: Token ! [ > ](tokens_helper(f, &node.gt_token.spans)), -+ gt_token: Token ! [>](tokens_helper(f, &node.gt_token.spans)), - } - } - #[cfg(any(feature = "derive", feature = "full"))] -@@ -2449,7 +2422,7 @@ where - ident: f.fold_ident(node.ident), - subpat: (node.subpat).map(|it| { - ( -- Token ! [ @ ](tokens_helper(f, &(it).0.spans)), -+ Token ! [@](tokens_helper(f, &(it).0.spans)), - Box::new(f.fold_pat(*(it).1)), - ) - }), -@@ -2482,7 +2455,7 @@ where - { - PatOr { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), -- leading_vert: (node.leading_vert).map(|it| Token ! [ | ](tokens_helper(f, &it.spans))), -+ leading_vert: (node.leading_vert).map(|it| Token ! [|](tokens_helper(f, &it.spans))), - cases: FoldHelper::lift(node.cases, |it| f.fold_pat(it)), - } - } -@@ -2516,7 +2489,7 @@ where - { - PatReference { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), -- and_token: Token ! [ & ](tokens_helper(f, &node.and_token.spans)), -+ and_token: Token ! [&](tokens_helper(f, &node.and_token.spans)), - mutability: (node.mutability).map(|it| Token)), - pat: Box::new(f.fold_pat(*node.pat)), - } -@@ -2585,7 +2558,7 @@ where - PatType { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - pat: Box::new(f.fold_pat(*node.pat)), -- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)), -+ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)), - ty: Box::new(f.fold_type(*node.ty)), - } - } -@@ -2605,7 +2578,7 @@ where - F: Fold + ?Sized, - { - Path { -- leading_colon: (node.leading_colon).map(|it| Token ! [ :: ](tokens_helper(f, &it.spans))), -+ leading_colon: (node.leading_colon).map(|it| Token ! [::](tokens_helper(f, &it.spans))), - segments: FoldHelper::lift(node.segments, |it| f.fold_path_segment(it)), - } - } -@@ -2641,7 +2614,7 @@ where - { - PredicateEq { - lhs_ty: f.fold_type(node.lhs_ty), -- eq_token: Token ! [ = ](tokens_helper(f, &node.eq_token.spans)), -+ eq_token: Token ! [=](tokens_helper(f, &node.eq_token.spans)), - rhs_ty: f.fold_type(node.rhs_ty), - } - } -@@ -2652,7 +2625,7 @@ where - { - PredicateLifetime { - lifetime: f.fold_lifetime(node.lifetime), -- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)), -+ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)), - bounds: FoldHelper::lift(node.bounds, |it| f.fold_lifetime(it)), - } - } -@@ -2664,7 +2637,7 @@ where - PredicateType { - lifetimes: (node.lifetimes).map(|it| f.fold_bound_lifetimes(it)), - bounded_ty: f.fold_type(node.bounded_ty), -- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)), -+ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)), - bounds: FoldHelper::lift(node.bounds, |it| f.fold_type_param_bound(it)), - } - } -@@ -2674,11 +2647,11 @@ where - F: Fold + ?Sized, - { - QSelf { -- lt_token: Token ! [ < ](tokens_helper(f, &node.lt_token.spans)), -+ lt_token: Token ! [<](tokens_helper(f, &node.lt_token.spans)), - ty: Box::new(f.fold_type(*node.ty)), - position: node.position, - as_token: (node.as_token).map(|it| Token)), -- gt_token: Token ! [ > ](tokens_helper(f, &node.gt_token.spans)), -+ gt_token: Token ! [>](tokens_helper(f, &node.gt_token.spans)), - } - } - #[cfg(feature = "full")] -@@ -2691,7 +2664,7 @@ where - RangeLimits::HalfOpen(Token)) - } - RangeLimits::Closed(_binding_0) => { -- RangeLimits::Closed(Token ! [ ..= ](tokens_helper(f, &_binding_0.spans))) -+ RangeLimits::Closed(Token ! [..=](tokens_helper(f, &_binding_0.spans))) - } - } - } -@@ -2704,7 +2677,7 @@ where - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - reference: (node.reference).map(|it| { - ( -- Token ! [ & ](tokens_helper(f, &(it).0.spans)), -+ Token ! [&](tokens_helper(f, &(it).0.spans)), - ((it).1).map(|it| f.fold_lifetime(it)), - ) - }), -@@ -2720,7 +2693,7 @@ where - match node { - ReturnType::Default => ReturnType::Default, - ReturnType::Type(_binding_0, _binding_1) => ReturnType::Type( -- Token ! [ -> ](tokens_helper(f, &_binding_0.spans)), -+ Token ! [->](tokens_helper(f, &_binding_0.spans)), - Box::new(f.fold_type(*_binding_1)), - ), - } -@@ -2761,7 +2734,7 @@ where - Stmt::Expr(_binding_0) => Stmt::Expr(f.fold_expr(_binding_0)), - Stmt::Semi(_binding_0, _binding_1) => Stmt::Semi( - f.fold_expr(_binding_0), -- Token ! [ ; ](tokens_helper(f, &_binding_1.spans)), -+ Token ! [;](tokens_helper(f, &_binding_1.spans)), - ), - } - } -@@ -2785,7 +2758,7 @@ where - match node { - TraitBoundModifier::None => TraitBoundModifier::None, - TraitBoundModifier::Maybe(_binding_0) => { -- TraitBoundModifier::Maybe(Token ! [ ? ](tokens_helper(f, &_binding_0.spans))) -+ TraitBoundModifier::Maybe(Token ! [?](tokens_helper(f, &_binding_0.spans))) - } - } - } -@@ -2812,15 +2785,15 @@ where - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - const_token: Token), - ident: f.fold_ident(node.ident), -- colon_token: Token ! [ : ](tokens_helper(f, &node.colon_token.spans)), -+ colon_token: Token ! [:](tokens_helper(f, &node.colon_token.spans)), - ty: f.fold_type(node.ty), - default: (node.default).map(|it| { - ( -- Token ! [ = ](tokens_helper(f, &(it).0.spans)), -+ Token ! [=](tokens_helper(f, &(it).0.spans)), - f.fold_expr((it).1), - ) - }), -- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)), -+ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)), - } - } - #[cfg(feature = "full")] -@@ -2831,7 +2804,7 @@ where - TraitItemMacro { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - mac: f.fold_macro(node.mac), -- semi_token: (node.semi_token).map(|it| Token ! [ ; ](tokens_helper(f, &it.spans))), -+ semi_token: (node.semi_token).map(|it| Token ! [;](tokens_helper(f, &it.spans))), - } - } - #[cfg(feature = "full")] -@@ -2843,7 +2816,7 @@ where - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - sig: f.fold_signature(node.sig), - default: (node.default).map(|it| f.fold_block(it)), -- semi_token: (node.semi_token).map(|it| Token ! [ ; ](tokens_helper(f, &it.spans))), -+ semi_token: (node.semi_token).map(|it| Token ! [;](tokens_helper(f, &it.spans))), - } - } - #[cfg(feature = "full")] -@@ -2856,15 +2829,15 @@ where - type_token: Token), - ident: f.fold_ident(node.ident), - generics: f.fold_generics(node.generics), -- colon_token: (node.colon_token).map(|it| Token ! [ : ](tokens_helper(f, &it.spans))), -+ colon_token: (node.colon_token).map(|it| Token ! [:](tokens_helper(f, &it.spans))), - bounds: FoldHelper::lift(node.bounds, |it| f.fold_type_param_bound(it)), - default: (node.default).map(|it| { - ( -- Token ! [ = ](tokens_helper(f, &(it).0.spans)), -+ Token ! [=](tokens_helper(f, &(it).0.spans)), - f.fold_type((it).1), - ) - }), -- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)), -+ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)), - } - } - #[cfg(any(feature = "derive", feature = "full"))] -@@ -2899,7 +2872,7 @@ where - TypeArray { - bracket_token: Bracket(tokens_helper(f, &node.bracket_token.span)), - elem: Box::new(f.fold_type(*node.elem)), -- semi_token: Token ! [ ; ](tokens_helper(f, &node.semi_token.spans)), -+ semi_token: Token ! [;](tokens_helper(f, &node.semi_token.spans)), - len: f.fold_expr(node.len), - } - } -@@ -2974,9 +2947,9 @@ where - TypeParam { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), - ident: f.fold_ident(node.ident), -- colon_token: (node.colon_token).map(|it| Token ! [ : ](tokens_helper(f, &it.spans))), -+ colon_token: (node.colon_token).map(|it| Token ! [:](tokens_helper(f, &it.spans))), - bounds: FoldHelper::lift(node.bounds, |it| f.fold_type_param_bound(it)), -- eq_token: (node.eq_token).map(|it| Token ! [ = ](tokens_helper(f, &it.spans))), -+ eq_token: (node.eq_token).map(|it| Token ! [=](tokens_helper(f, &it.spans))), - default: (node.default).map(|it| f.fold_type(it)), - } - } -@@ -3018,7 +2991,7 @@ where - F: Fold + ?Sized, - { - TypePtr { -- star_token: Token ! [ * ](tokens_helper(f, &node.star_token.spans)), -+ star_token: Token ! [*](tokens_helper(f, &node.star_token.spans)), - const_token: (node.const_token).map(|it| Token)), - mutability: (node.mutability).map(|it| Token)), - elem: Box::new(f.fold_type(*node.elem)), -@@ -3030,7 +3003,7 @@ where - F: Fold + ?Sized, - { - TypeReference { -- and_token: Token ! [ & ](tokens_helper(f, &node.and_token.spans)), -+ and_token: Token ! [&](tokens_helper(f, &node.and_token.spans)), - lifetime: (node.lifetime).map(|it| f.fold_lifetime(it)), - mutability: (node.mutability).map(|it| Token)), - elem: Box::new(f.fold_type(*node.elem)), -@@ -3072,9 +3045,9 @@ where - F: Fold + ?Sized, - { - match node { -- UnOp::Deref(_binding_0) => UnOp::Deref(Token ! [ * ](tokens_helper(f, &_binding_0.spans))), -+ UnOp::Deref(_binding_0) => UnOp::Deref(Token ! [*](tokens_helper(f, &_binding_0.spans))), - UnOp::Not(_binding_0) => UnOp::Not(Token)), -- UnOp::Neg(_binding_0) => UnOp::Neg(Token ! [ - ](tokens_helper(f, &_binding_0.spans))), -+ UnOp::Neg(_binding_0) => UnOp::Neg(Token ! [-](tokens_helper(f, &_binding_0.spans))), - } - } - #[cfg(feature = "full")] -@@ -3083,7 +3056,7 @@ where - F: Fold + ?Sized, - { - UseGlob { -- star_token: Token ! [ * ](tokens_helper(f, &node.star_token.spans)), -+ star_token: Token ! [*](tokens_helper(f, &node.star_token.spans)), - } - } - #[cfg(feature = "full")] -@@ -3112,7 +3085,7 @@ where - { - UsePath { - ident: f.fold_ident(node.ident), -- colon2_token: Token ! [ :: ](tokens_helper(f, &node.colon2_token.spans)), -+ colon2_token: Token ! [::](tokens_helper(f, &node.colon2_token.spans)), - tree: Box::new(f.fold_use_tree(*node.tree)), - } - } -@@ -3147,7 +3120,7 @@ where - { - Variadic { - attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)), -- dots: Token ! [ ... ](tokens_helper(f, &node.dots.spans)), -+ dots: Token ! [...](tokens_helper(f, &node.dots.spans)), - } - } - #[cfg(any(feature = "derive", feature = "full"))] -@@ -3161,7 +3134,7 @@ where - fields: f.fold_fields(node.fields), - discriminant: (node.discriminant).map(|it| { - ( -- Token ! [ = ](tokens_helper(f, &(it).0.spans)), -+ Token ! [=](tokens_helper(f, &(it).0.spans)), - f.fold_expr((it).1), - ) - }), -diff --git a/third_party/rust/syn/src/gen/hash.rs b/third_party/rust/syn/src/gen/hash.rs -new file mode 100644 -index 0000000000..9e9e84a7af ---- /dev/null -+++ b/third_party/rust/syn/src/gen/hash.rs -@@ -0,0 +1,2691 @@ -+// This file is @generated by syn-internal-codegen. -+// It is not intended for manual editing. -+ -+#[cfg(any(feature = "derive", feature = "full"))] -+use crate::tt::TokenStreamHelper; -+use crate::*; -+use std::hash::{Hash, Hasher}; -+#[cfg(any(feature = "derive", feature = "full"))] |