Index: Mk/Uses/cargo.mk =================================================================== --- Mk/Uses/cargo.mk +++ Mk/Uses/cargo.mk @@ -45,7 +45,7 @@ CARGO_BUILDDEP?= yes .if ${CARGO_BUILDDEP:tl} == "yes" -BUILD_DEPENDS+= ${RUST_DEFAULT}>=1.46.0:lang/${RUST_DEFAULT} +BUILD_DEPENDS+= ${RUST_DEFAULT}>=1.47.0:lang/${RUST_DEFAULT} .endif # Location of cargo binary (default to lang/rust's Cargo binary) Index: audio/ncspot/Makefile =================================================================== --- audio/ncspot/Makefile +++ audio/ncspot/Makefile @@ -3,6 +3,7 @@ PORTNAME= ncspot DISTVERSIONPREFIX= v DISTVERSION= 0.2.2 +PORTREVISION= 1 CATEGORIES= audio MAINTAINER= ports@FreeBSD.org Index: audio/spotify-tui/Makefile =================================================================== --- audio/spotify-tui/Makefile +++ audio/spotify-tui/Makefile @@ -3,6 +3,7 @@ PORTNAME= spotify-tui DISTVERSIONPREFIX= v DISTVERSION= 0.22.0 +PORTREVISION= 1 CATEGORIES= audio MAINTAINER= vulcan@wired.sh Index: audio/spotifyd/Makefile =================================================================== --- audio/spotifyd/Makefile +++ audio/spotifyd/Makefile @@ -3,7 +3,7 @@ PORTNAME= spotifyd DISTVERSIONPREFIX= v DISTVERSION= 0.2.24 -PORTREVISION= 9 +PORTREVISION= 10 CATEGORIES= audio MAINTAINER= ports@FreeBSD.org Index: benchmarks/hyperfine/Makefile =================================================================== --- benchmarks/hyperfine/Makefile +++ benchmarks/hyperfine/Makefile @@ -3,7 +3,7 @@ PORTNAME= hyperfine DISTVERSIONPREFIX= v DISTVERSION= 1.10.0 -PORTREVISION= 4 +PORTREVISION= 5 CATEGORIES= benchmarks MAINTAINER= pizzamig@FreeBSD.org Index: deskutils/just/Makefile =================================================================== --- deskutils/just/Makefile +++ deskutils/just/Makefile @@ -3,6 +3,7 @@ PORTNAME= just DISTVERSIONPREFIX= v DISTVERSION= 0.7.3 +PORTREVISION= 1 CATEGORIES= deskutils MAINTAINER= yuri@FreeBSD.org Index: devel/bingrep/Makefile =================================================================== --- devel/bingrep/Makefile +++ devel/bingrep/Makefile @@ -2,7 +2,7 @@ PORTNAME= bingrep PORTVERSION= 0.8.2 -PORTREVISION= 9 +PORTREVISION= 10 CATEGORIES= devel MASTER_SITES= CRATESIO DISTFILES= ${DISTNAME}${EXTRACT_SUFX} Index: devel/cargo-c/Makefile =================================================================== --- devel/cargo-c/Makefile +++ devel/cargo-c/Makefile @@ -2,6 +2,7 @@ PORTNAME= cargo-c DISTVERSION= 0.6.13 +PORTREVISION= 1 CATEGORIES= devel MASTER_SITES= CRATESIO # XXX Teach USES=cargo to have proper default Index: devel/cargo-generate/Makefile =================================================================== --- devel/cargo-generate/Makefile +++ devel/cargo-generate/Makefile @@ -3,6 +3,7 @@ PORTNAME= cargo-generate DISTVERSIONPREFIX= v DISTVERSION= 0.5.1 +PORTREVISION= 1 CATEGORIES= devel MAINTAINER= vulcan@wired.sh Index: devel/desed/Makefile =================================================================== --- devel/desed/Makefile +++ devel/desed/Makefile @@ -2,7 +2,7 @@ PORTNAME= desed DISTVERSION= 1.2.0 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= devel MASTER_SITES= CRATESIO DISTFILES= ${CARGO_DIST_SUBDIR}/${DISTNAME}${EXTRACT_SUFX} Index: devel/dtool/Makefile =================================================================== --- devel/dtool/Makefile +++ devel/dtool/Makefile @@ -3,6 +3,7 @@ PORTNAME= dtool DISTVERSIONPREFIX= v DISTVERSION= 0.10.1 +PORTREVISION= 1 CATEGORIES= devel MAINTAINER= vulcan@wired.sh Index: devel/gbump/Makefile =================================================================== --- devel/gbump/Makefile +++ devel/gbump/Makefile @@ -2,7 +2,7 @@ PORTNAME= gbump PORTVERSION= 1.0.1 -PORTREVISION= 5 +PORTREVISION= 6 CATEGORIES= devel MASTER_SITES= CRATESIO DISTFILES= ${CARGO_DIST_SUBDIR}/${DISTNAME}${EXTRACT_SUFX} Index: devel/git-absorb/Makefile =================================================================== --- devel/git-absorb/Makefile +++ devel/git-absorb/Makefile @@ -2,7 +2,7 @@ PORTNAME= git-absorb DISTVERSION= 0.5.0 -PORTREVISION= 15 +PORTREVISION= 16 CATEGORIES= devel MAINTAINER= greg@unrelenting.technology Index: devel/git-delta/Makefile =================================================================== --- devel/git-delta/Makefile +++ devel/git-delta/Makefile @@ -2,7 +2,7 @@ PORTNAME= delta DISTVERSION= 0.0.16 -PORTREVISION= 8 +PORTREVISION= 9 CATEGORIES= devel PKGNAMEPREFIX= git- Index: devel/gitui/Makefile =================================================================== --- devel/gitui/Makefile +++ devel/gitui/Makefile @@ -3,6 +3,7 @@ PORTNAME= gitui DISTVERSIONPREFIX= v DISTVERSION= 0.10.1 +PORTREVISION= 1 CATEGORIES= devel MAINTAINER= yuri@FreeBSD.org Index: devel/interactive_rebase_tool/Makefile =================================================================== --- devel/interactive_rebase_tool/Makefile +++ devel/interactive_rebase_tool/Makefile @@ -2,7 +2,7 @@ PORTNAME= interactive_rebase_tool DISTVERSION= 1.2.1 -PORTREVISION= 10 +PORTREVISION= 11 CATEGORIES= devel MAINTAINER= petteri.valkonen@iki.fi Index: devel/pijul/Makefile =================================================================== --- devel/pijul/Makefile +++ devel/pijul/Makefile @@ -3,7 +3,7 @@ PORTNAME= pijul PORTVERSION= 0.12.0 -PORTREVISION= 19 +PORTREVISION= 20 CATEGORIES= devel MASTER_SITES= https://pijul.org/releases/ DISTFILES= ${DISTNAME}${EXTRACT_SUFX} Index: devel/racer/Makefile =================================================================== --- devel/racer/Makefile +++ devel/racer/Makefile @@ -2,8 +2,7 @@ # $FreeBSD$ PORTNAME= racer -DISTVERSION= 2.1.35 -PORTREVISION= 3 +DISTVERSION= 2.1.36 CATEGORIES= devel MASTER_SITES= CRATESIO DISTFILES= ${CARGO_DIST_SUBDIR}/${DISTNAME}${EXTRACT_SUFX} @@ -16,7 +15,6 @@ USES= cargo CARGO_CRATES= aho-corasick-0.7.10 \ - annotate-snippets-0.6.1 \ annotate-snippets-0.8.0 \ ansi_term-0.11.0 \ atty-0.2.14 \ @@ -73,7 +71,7 @@ psm-0.1.8 \ quick-error-1.2.3 \ quote-1.0.3 \ - racer-2.1.34 \ + racer-2.1.35 \ racer-cargo-metadata-0.1.1 \ racer-interner-0.1.0 \ racer-testutils-0.1.0 \ @@ -86,38 +84,38 @@ regex-syntax-0.6.17 \ remove_dir_all-0.5.2 \ rls-span-0.5.2 \ - rustc-ap-arena-659.0.0 \ - rustc-ap-graphviz-659.0.0 \ rustc-ap-rustc_arena-664.0.0 \ - rustc-ap-rustc_ast-659.0.0 \ + rustc-ap-rustc_arena-669.0.0 \ rustc-ap-rustc_ast-664.0.0 \ - rustc-ap-rustc_ast_pretty-659.0.0 \ + rustc-ap-rustc_ast-669.0.0 \ rustc-ap-rustc_ast_pretty-664.0.0 \ - rustc-ap-rustc_data_structures-659.0.0 \ + rustc-ap-rustc_ast_pretty-669.0.0 \ rustc-ap-rustc_data_structures-664.0.0 \ - rustc-ap-rustc_errors-659.0.0 \ + rustc-ap-rustc_data_structures-669.0.0 \ rustc-ap-rustc_errors-664.0.0 \ - rustc-ap-rustc_feature-659.0.0 \ + rustc-ap-rustc_errors-669.0.0 \ rustc-ap-rustc_feature-664.0.0 \ - rustc-ap-rustc_fs_util-659.0.0 \ + rustc-ap-rustc_feature-669.0.0 \ rustc-ap-rustc_fs_util-664.0.0 \ + rustc-ap-rustc_fs_util-669.0.0 \ rustc-ap-rustc_graphviz-664.0.0 \ - rustc-ap-rustc_index-659.0.0 \ + rustc-ap-rustc_graphviz-669.0.0 \ rustc-ap-rustc_index-664.0.0 \ - rustc-ap-rustc_lexer-659.0.0 \ + rustc-ap-rustc_index-669.0.0 \ rustc-ap-rustc_lexer-664.0.0 \ - rustc-ap-rustc_macros-659.0.0 \ + rustc-ap-rustc_lexer-669.0.0 \ rustc-ap-rustc_macros-664.0.0 \ - rustc-ap-rustc_parse-659.0.0 \ + rustc-ap-rustc_macros-669.0.0 \ rustc-ap-rustc_parse-664.0.0 \ + rustc-ap-rustc_parse-669.0.0 \ rustc-ap-rustc_serialize-664.0.0 \ - rustc-ap-rustc_session-659.0.0 \ + rustc-ap-rustc_serialize-669.0.0 \ rustc-ap-rustc_session-664.0.0 \ - rustc-ap-rustc_span-659.0.0 \ + rustc-ap-rustc_session-669.0.0 \ rustc-ap-rustc_span-664.0.0 \ - rustc-ap-rustc_target-659.0.0 \ + rustc-ap-rustc_span-669.0.0 \ rustc-ap-rustc_target-664.0.0 \ - rustc-ap-serialize-659.0.0 \ + rustc-ap-rustc_target-669.0.0 \ rustc-hash-1.1.0 \ rustc-rayon-0.3.0 \ rustc-rayon-core-0.3.0 \ Index: devel/racer/distinfo =================================================================== --- devel/racer/distinfo +++ devel/racer/distinfo @@ -1,10 +1,8 @@ -TIMESTAMP = 1594701867 -SHA256 (rust/crates/racer-2.1.35.tar.gz) = 421174f19211ba9e5fda34aa0cbc292188aae8e0cfbff4aebbae23f1a416bfb3 -SIZE (rust/crates/racer-2.1.35.tar.gz) = 186355 +TIMESTAMP = 1602245176 +SHA256 (rust/crates/racer-2.1.36.tar.gz) = 09ba6cca9fcd8ae086b842b1bd9e3f19f104a4c30e0e8927b2befc06d375e7e0 +SIZE (rust/crates/racer-2.1.36.tar.gz) = 186258 SHA256 (rust/crates/aho-corasick-0.7.10.tar.gz) = 8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada SIZE (rust/crates/aho-corasick-0.7.10.tar.gz) = 111039 -SHA256 (rust/crates/annotate-snippets-0.6.1.tar.gz) = c7021ce4924a3f25f802b2cccd1af585e39ea1a363a1aa2e72afe54b67a3a7a7 -SIZE (rust/crates/annotate-snippets-0.6.1.tar.gz) = 21894 SHA256 (rust/crates/annotate-snippets-0.8.0.tar.gz) = d78ea013094e5ea606b1c05fe35f1dd7ea1eb1ea259908d040b25bd5ec677ee5 SIZE (rust/crates/annotate-snippets-0.8.0.tar.gz) = 28829 SHA256 (rust/crates/ansi_term-0.11.0.tar.gz) = ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b @@ -117,8 +115,8 @@ SIZE (rust/crates/quick-error-1.2.3.tar.gz) = 15066 SHA256 (rust/crates/quote-1.0.3.tar.gz) = 2bdc6c187c65bca4260c9011c9e3132efe4909da44726bad24cf7572ae338d7f SIZE (rust/crates/quote-1.0.3.tar.gz) = 22939 -SHA256 (rust/crates/racer-2.1.34.tar.gz) = cc9caecf1286a3ed28d3ae35207a178ba12e58de95540781e5c6cba05e0f0833 -SIZE (rust/crates/racer-2.1.34.tar.gz) = 186222 +SHA256 (rust/crates/racer-2.1.35.tar.gz) = 421174f19211ba9e5fda34aa0cbc292188aae8e0cfbff4aebbae23f1a416bfb3 +SIZE (rust/crates/racer-2.1.35.tar.gz) = 186355 SHA256 (rust/crates/racer-cargo-metadata-0.1.1.tar.gz) = 2b60cd72291a641dbaa649e9e328df552186dda1fea834c55cf28594a25b7c6f SIZE (rust/crates/racer-cargo-metadata-0.1.1.tar.gz) = 10768 SHA256 (rust/crates/racer-interner-0.1.0.tar.gz) = 206a244afd319767bdf97cf4e94c0d5d3b1de9cb23fd25434e7992cca4d4fa4c @@ -143,70 +141,70 @@ SIZE (rust/crates/remove_dir_all-0.5.2.tar.gz) = 8907 SHA256 (rust/crates/rls-span-0.5.2.tar.gz) = f2e9bed56f6272bd85d9d06d1aaeef80c5fddc78a82199eb36dceb5f94e7d934 SIZE (rust/crates/rls-span-0.5.2.tar.gz) = 9628 -SHA256 (rust/crates/rustc-ap-arena-659.0.0.tar.gz) = fdaf0295fc40b10ec1091aad1a1760b4bb3b4e7c4f77d543d1a2e9d50a01e6b1 -SIZE (rust/crates/rustc-ap-arena-659.0.0.tar.gz) = 7492 -SHA256 (rust/crates/rustc-ap-graphviz-659.0.0.tar.gz) = 8028e8cdb4eb71810d0c22a5a5e1e3106c81123be63ce7f044b6d4ac100d8941 -SIZE (rust/crates/rustc-ap-graphviz-659.0.0.tar.gz) = 9952 SHA256 (rust/crates/rustc-ap-rustc_arena-664.0.0.tar.gz) = 0c6683b49209f8b132bec33dc6b6c8f9958c8c94eb3586d4cb495e092b61c1da SIZE (rust/crates/rustc-ap-rustc_arena-664.0.0.tar.gz) = 7465 -SHA256 (rust/crates/rustc-ap-rustc_ast-659.0.0.tar.gz) = 16e9e502bb3a5568433db1cf2fb1f1e1074934636069cf744ad7c77b58e1428e -SIZE (rust/crates/rustc-ap-rustc_ast-659.0.0.tar.gz) = 68426 +SHA256 (rust/crates/rustc-ap-rustc_arena-669.0.0.tar.gz) = c9cdd301e9dcb15ead384fc07196c850fd22829fae81d296b2ed6b4b10bf3278 +SIZE (rust/crates/rustc-ap-rustc_arena-669.0.0.tar.gz) = 7827 SHA256 (rust/crates/rustc-ap-rustc_ast-664.0.0.tar.gz) = 5b21784d92fb2d584800f528866f00fe814f73abda794f406bfd1fbb2f1ca7f7 SIZE (rust/crates/rustc-ap-rustc_ast-664.0.0.tar.gz) = 70480 -SHA256 (rust/crates/rustc-ap-rustc_ast_pretty-659.0.0.tar.gz) = 3684ed43dc552f1e030e3f7a5a300a7a834bdda4e9e00ab80284be4220d8c603 -SIZE (rust/crates/rustc-ap-rustc_ast_pretty-659.0.0.tar.gz) = 26015 +SHA256 (rust/crates/rustc-ap-rustc_ast-669.0.0.tar.gz) = 3f7c0d0537ca69dfe4a49212035295dfb37a235b5df01aa877d50b247f4775b8 +SIZE (rust/crates/rustc-ap-rustc_ast-669.0.0.tar.gz) = 71015 SHA256 (rust/crates/rustc-ap-rustc_ast_pretty-664.0.0.tar.gz) = 013db7dd198fe95962d2cefa5bd0b350cf2028af77c169b17b4baa9c3bbf77d1 SIZE (rust/crates/rustc-ap-rustc_ast_pretty-664.0.0.tar.gz) = 26843 -SHA256 (rust/crates/rustc-ap-rustc_data_structures-659.0.0.tar.gz) = 4b1c6069e5c522657f1c6f5ab33074e097092f48e804cc896d337e319aacbd60 -SIZE (rust/crates/rustc-ap-rustc_data_structures-659.0.0.tar.gz) = 86345 +SHA256 (rust/crates/rustc-ap-rustc_ast_pretty-669.0.0.tar.gz) = 202bd2886d0cfa48baa3711042c14843f1b4852555b7ee7e5376bf66b276cb8d +SIZE (rust/crates/rustc-ap-rustc_ast_pretty-669.0.0.tar.gz) = 26913 SHA256 (rust/crates/rustc-ap-rustc_data_structures-664.0.0.tar.gz) = b92e4c6cb6c43ee9031a71709dc12853b358253c2b41d12a26379994fab625e0 SIZE (rust/crates/rustc-ap-rustc_data_structures-664.0.0.tar.gz) = 85634 -SHA256 (rust/crates/rustc-ap-rustc_errors-659.0.0.tar.gz) = 0c374e89b3c9714869ef86076942155383804ba6778c26be2169d324563c31f9 -SIZE (rust/crates/rustc-ap-rustc_errors-659.0.0.tar.gz) = 44399 +SHA256 (rust/crates/rustc-ap-rustc_data_structures-669.0.0.tar.gz) = 7a45d43b974d4cb9e32e5a15119c5eb7672c306ef09b064f2125b6a0399f6656 +SIZE (rust/crates/rustc-ap-rustc_data_structures-669.0.0.tar.gz) = 85649 SHA256 (rust/crates/rustc-ap-rustc_errors-664.0.0.tar.gz) = 6b0aa79423260c1b9e2f856e144e040f606b0f5d43644408375becf9d7bcdf86 SIZE (rust/crates/rustc-ap-rustc_errors-664.0.0.tar.gz) = 44296 -SHA256 (rust/crates/rustc-ap-rustc_feature-659.0.0.tar.gz) = c0296fbc29b629d5ae2ebee1bbf0407bb22de04d26d87216c20899b79579ccb3 -SIZE (rust/crates/rustc-ap-rustc_feature-659.0.0.tar.gz) = 18880 +SHA256 (rust/crates/rustc-ap-rustc_errors-669.0.0.tar.gz) = 8cd895d440820aaa04e6dc5486105494920a1e9779b9b051e8dba4ca5c182f94 +SIZE (rust/crates/rustc-ap-rustc_errors-669.0.0.tar.gz) = 44574 SHA256 (rust/crates/rustc-ap-rustc_feature-664.0.0.tar.gz) = 1bbd625705c1db42a0c7503736292813d7b76ada5da20578fb55c63228c80ab5 SIZE (rust/crates/rustc-ap-rustc_feature-664.0.0.tar.gz) = 18982 -SHA256 (rust/crates/rustc-ap-rustc_fs_util-659.0.0.tar.gz) = 34734f6cc681399630acd836a14207c6b5b9671a290cc7cad0354b0a4d71b3c9 -SIZE (rust/crates/rustc-ap-rustc_fs_util-659.0.0.tar.gz) = 2167 +SHA256 (rust/crates/rustc-ap-rustc_feature-669.0.0.tar.gz) = 5473d5106401aa46f881eb91772f0a41fd5f28ae6134cf4b450eb1370ea6af22 +SIZE (rust/crates/rustc-ap-rustc_feature-669.0.0.tar.gz) = 19254 SHA256 (rust/crates/rustc-ap-rustc_fs_util-664.0.0.tar.gz) = 34cca6e2942fa0b059c582437ead666d5bcf20fa7c242599e2bbea9b609f29ae SIZE (rust/crates/rustc-ap-rustc_fs_util-664.0.0.tar.gz) = 2167 +SHA256 (rust/crates/rustc-ap-rustc_fs_util-669.0.0.tar.gz) = 8da1d57ee7a7ef55f31a97d99c7f919f02fc9a60ab96faa8cf45a7ae3ab1ccbf +SIZE (rust/crates/rustc-ap-rustc_fs_util-669.0.0.tar.gz) = 2167 SHA256 (rust/crates/rustc-ap-rustc_graphviz-664.0.0.tar.gz) = 13d6a029b81f5e02da85763f82c135507f278a4a0c776432c728520563059529 SIZE (rust/crates/rustc-ap-rustc_graphviz-664.0.0.tar.gz) = 9957 -SHA256 (rust/crates/rustc-ap-rustc_index-659.0.0.tar.gz) = d1e4508753d71d3523209c2ca5086db15a1413e71ebf17ad5412bb7ced5e44c2 -SIZE (rust/crates/rustc-ap-rustc_index-659.0.0.tar.gz) = 15073 +SHA256 (rust/crates/rustc-ap-rustc_graphviz-669.0.0.tar.gz) = e3af62b20460908378cd1d354917acd9553376c5363bbb4e465f949bd82bdef9 +SIZE (rust/crates/rustc-ap-rustc_graphviz-669.0.0.tar.gz) = 9962 SHA256 (rust/crates/rustc-ap-rustc_index-664.0.0.tar.gz) = bae50852d303e230b2781c994513788136dc6c2fe4ebe032959f0b990a425767 SIZE (rust/crates/rustc-ap-rustc_index-664.0.0.tar.gz) = 15120 -SHA256 (rust/crates/rustc-ap-rustc_lexer-659.0.0.tar.gz) = 42b9fcd8407e322908a721262fbc0b35b5f3c35bb173a26dd1e0070bde336e33 -SIZE (rust/crates/rustc-ap-rustc_lexer-659.0.0.tar.gz) = 13069 +SHA256 (rust/crates/rustc-ap-rustc_index-669.0.0.tar.gz) = 3af7d4c456fe7647453d3fcd58335c9d512d1ff9a239a370b7ebdd353d69f66f +SIZE (rust/crates/rustc-ap-rustc_index-669.0.0.tar.gz) = 15351 SHA256 (rust/crates/rustc-ap-rustc_lexer-664.0.0.tar.gz) = b7186e74aa2d31bf0e2454325fefcdf0a3da77d9344134592144b9e40d45b15d SIZE (rust/crates/rustc-ap-rustc_lexer-664.0.0.tar.gz) = 13083 -SHA256 (rust/crates/rustc-ap-rustc_macros-659.0.0.tar.gz) = 3d104115a689367d2e0bcd99f37e0ebd6b9c8c78bab0d9cbea5bae86323601b5 -SIZE (rust/crates/rustc-ap-rustc_macros-659.0.0.tar.gz) = 7562 +SHA256 (rust/crates/rustc-ap-rustc_lexer-669.0.0.tar.gz) = 456af5f09c006cf6c22c1a433ee0232c4bb74bdc6c647a010166a47c94ed2a63 +SIZE (rust/crates/rustc-ap-rustc_lexer-669.0.0.tar.gz) = 13122 SHA256 (rust/crates/rustc-ap-rustc_macros-664.0.0.tar.gz) = 4fc1add04e9d2301164118660ee0bc3266e9a7b1973fc2303fdbe002a12e5401 SIZE (rust/crates/rustc-ap-rustc_macros-664.0.0.tar.gz) = 7556 -SHA256 (rust/crates/rustc-ap-rustc_parse-659.0.0.tar.gz) = afaaab91853fc5a3916785ccae727a4433359d9787c260d42b96a2265fe5b287 -SIZE (rust/crates/rustc-ap-rustc_parse-659.0.0.tar.gz) = 113515 +SHA256 (rust/crates/rustc-ap-rustc_macros-669.0.0.tar.gz) = 64f6acd192f313047759a346b892998b626466b93fe04f415da5f38906bb3b4c +SIZE (rust/crates/rustc-ap-rustc_macros-669.0.0.tar.gz) = 7542 SHA256 (rust/crates/rustc-ap-rustc_parse-664.0.0.tar.gz) = 9cd7fc4968bd60084f2fa4f280fa450b0cf98660a7983d6b93a7ae41b6d1d322 SIZE (rust/crates/rustc-ap-rustc_parse-664.0.0.tar.gz) = 114922 +SHA256 (rust/crates/rustc-ap-rustc_parse-669.0.0.tar.gz) = c006e8117c1c55e42bb56386c86ce6f7e4b47349e0bec7888c1d24784272e61b +SIZE (rust/crates/rustc-ap-rustc_parse-669.0.0.tar.gz) = 116240 SHA256 (rust/crates/rustc-ap-rustc_serialize-664.0.0.tar.gz) = 00bf4c110271d9a2b7dfd2c6eb82e56fd80606a8bad6c102e158c54e44044046 SIZE (rust/crates/rustc-ap-rustc_serialize-664.0.0.tar.gz) = 32824 -SHA256 (rust/crates/rustc-ap-rustc_session-659.0.0.tar.gz) = 86e756a57ce6ce1b868e35e64a7e10ab28d49ece80d7c661b07aff5afc6e5d2d -SIZE (rust/crates/rustc-ap-rustc_session-659.0.0.tar.gz) = 62055 +SHA256 (rust/crates/rustc-ap-rustc_serialize-669.0.0.tar.gz) = 306ced69beaeebe4de9552ee751eb54ea25b5f34a73fe80f5f9cbbe15ccebc48 +SIZE (rust/crates/rustc-ap-rustc_serialize-669.0.0.tar.gz) = 32806 SHA256 (rust/crates/rustc-ap-rustc_session-664.0.0.tar.gz) = 431cf962de71d4c03fb877d54f331ec36eca77350b0539017abc40a4410d6501 SIZE (rust/crates/rustc-ap-rustc_session-664.0.0.tar.gz) = 63031 -SHA256 (rust/crates/rustc-ap-rustc_span-659.0.0.tar.gz) = 21031c3396ee452f4c6e994b67513a633055c57c86d00336afd9d63149518f34 -SIZE (rust/crates/rustc-ap-rustc_span-659.0.0.tar.gz) = 53894 +SHA256 (rust/crates/rustc-ap-rustc_session-669.0.0.tar.gz) = dbff48435f5a476365e3ab5f49e07f98715cecb2d8c5bbcafeaf3aec638407be +SIZE (rust/crates/rustc-ap-rustc_session-669.0.0.tar.gz) = 63778 SHA256 (rust/crates/rustc-ap-rustc_span-664.0.0.tar.gz) = b912039640597624f4bcb75f1e1fcfa5710267d715a7f73a6336baef341b23d1 SIZE (rust/crates/rustc-ap-rustc_span-664.0.0.tar.gz) = 55566 -SHA256 (rust/crates/rustc-ap-rustc_target-659.0.0.tar.gz) = ff21badfbead5b0050391eaad8840f2e4fcb03b6b0fc6006f447443529e9ae6e -SIZE (rust/crates/rustc-ap-rustc_target-659.0.0.tar.gz) = 81197 +SHA256 (rust/crates/rustc-ap-rustc_span-669.0.0.tar.gz) = ec4273af0abbe78fc4585316ab193445c848c555e9203ddc28af02330918bf30 +SIZE (rust/crates/rustc-ap-rustc_span-669.0.0.tar.gz) = 56951 SHA256 (rust/crates/rustc-ap-rustc_target-664.0.0.tar.gz) = 51347a9dadc5ad0b5916cc12d42624b31955285ad13745dbe72f0140038b84e9 SIZE (rust/crates/rustc-ap-rustc_target-664.0.0.tar.gz) = 93766 -SHA256 (rust/crates/rustc-ap-serialize-659.0.0.tar.gz) = 768b5a305669d934522712bc13502962edfde5128ea63b9e7db4000410be1dc6 -SIZE (rust/crates/rustc-ap-serialize-659.0.0.tar.gz) = 32880 +SHA256 (rust/crates/rustc-ap-rustc_target-669.0.0.tar.gz) = 6f9a2d6004ce6ad492a8eeacc2569b1c008169434b8828996d8dade4e5c6b6ee +SIZE (rust/crates/rustc-ap-rustc_target-669.0.0.tar.gz) = 95791 SHA256 (rust/crates/rustc-hash-1.1.0.tar.gz) = 08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2 SIZE (rust/crates/rustc-hash-1.1.0.tar.gz) = 9331 SHA256 (rust/crates/rustc-rayon-0.3.0.tar.gz) = f32767f90d938f1b7199a174ef249ae1924f6e5bbdb9d112fea141e016f25b3a Index: devel/rust-analyzer/Makefile =================================================================== --- devel/rust-analyzer/Makefile +++ devel/rust-analyzer/Makefile @@ -2,6 +2,7 @@ PORTNAME= rust-analyzer DISTVERSION= 2020-09-28 +PORTREVISION= 1 CATEGORIES= devel MAINTAINER= rust@FreeBSD.org Index: devel/rust-bindgen/Makefile =================================================================== --- devel/rust-bindgen/Makefile +++ devel/rust-bindgen/Makefile @@ -2,7 +2,7 @@ PORTNAME= bindgen DISTVERSION= 0.54.1 -PORTREVISION= 4 +PORTREVISION= 5 CATEGORIES= devel MASTER_SITES= CRATESIO PKGNAMEPREFIX= rust- Index: devel/rust-cbindgen/Makefile =================================================================== --- devel/rust-cbindgen/Makefile +++ devel/rust-cbindgen/Makefile @@ -2,6 +2,7 @@ PORTNAME= cbindgen DISTVERSION= 0.15.0 +PORTREVISION= 1 CATEGORIES= devel MASTER_SITES= CRATESIO PKGNAMEPREFIX= rust- Index: devel/sccache/Makefile =================================================================== --- devel/sccache/Makefile +++ devel/sccache/Makefile @@ -2,7 +2,7 @@ PORTNAME= sccache DISTVERSION= 0.2.13 -PORTREVISION= 6 +PORTREVISION= 7 PORTEPOCH= 1 CATEGORIES= devel Index: devel/sentry-cli/Makefile =================================================================== --- devel/sentry-cli/Makefile +++ devel/sentry-cli/Makefile @@ -2,6 +2,7 @@ PORTNAME= sentry-cli DISTVERSION= 1.58.0 +PORTREVISION= 1 CATEGORIES= devel MAINTAINER= vulcan@wired.sh Index: devel/tokei/Makefile =================================================================== --- devel/tokei/Makefile +++ devel/tokei/Makefile @@ -3,7 +3,7 @@ PORTNAME= tokei DISTVERSIONPREFIX= v DISTVERSION= 12.0.4 -PORTREVISION= 4 +PORTREVISION= 5 CATEGORIES= devel MAINTAINER= ports@FreeBSD.org Index: dns/doh-proxy/Makefile =================================================================== --- dns/doh-proxy/Makefile +++ dns/doh-proxy/Makefile @@ -3,7 +3,7 @@ PORTNAME= doh-proxy DISTVERSION= 0.3.3 -PORTREVISION= 5 +PORTREVISION= 6 CATEGORIES= dns MASTER_SITES= CRATESIO DISTFILES= ${DISTNAME}${EXTRACT_SUFX} Index: editors/kak-lsp/Makefile =================================================================== --- editors/kak-lsp/Makefile +++ editors/kak-lsp/Makefile @@ -3,7 +3,7 @@ PORTNAME= kak-lsp DISTVERSIONPREFIX= v DISTVERSION= 8.0.0 -PORTREVISION= 7 +PORTREVISION= 8 CATEGORIES= editors MAINTAINER= ports@FreeBSD.org Index: editors/kibi/Makefile =================================================================== --- editors/kibi/Makefile +++ editors/kibi/Makefile @@ -3,6 +3,7 @@ PORTNAME= kibi DISTVERSIONPREFIX= v DISTVERSION= 0.2.1 +PORTREVISION= 1 CATEGORIES= editors MAINTAINER= vulcan@wired.sh Index: editors/parinfer-rust/Makefile =================================================================== --- editors/parinfer-rust/Makefile +++ editors/parinfer-rust/Makefile @@ -3,7 +3,7 @@ PORTNAME= parinfer-rust DISTVERSIONPREFIX= v DISTVERSION= 0.4.3 -PORTREVISION= 7 +PORTREVISION= 8 CATEGORIES= editors MAINTAINER= ports@FreeBSD.org Index: editors/xi-core/Makefile =================================================================== --- editors/xi-core/Makefile +++ editors/xi-core/Makefile @@ -3,7 +3,7 @@ PORTNAME= xi-core DISTVERSIONPREFIX= v DISTVERSION= 0.3.0 -PORTREVISION= 8 +PORTREVISION= 9 CATEGORIES= editors MAINTAINER= ed.arrakis@gmail.com Index: editors/xi-term/Makefile =================================================================== --- editors/xi-term/Makefile +++ editors/xi-term/Makefile @@ -2,7 +2,7 @@ PORTNAME= xi-term DISTVERSION= g20190328 -PORTREVISION= 16 +PORTREVISION= 17 CATEGORIES= editors MAINTAINER= ed.arrakis@gmail.com Index: games/abstreet/Makefile =================================================================== --- games/abstreet/Makefile +++ games/abstreet/Makefile @@ -3,6 +3,7 @@ PORTNAME= abstreet DISTVERSIONPREFIX= v DISTVERSION= 0.2.9-49 +PORTREVISION= 1 DISTVERSIONSUFFIX= -g74aca40c0 CATEGORIES= games MASTER_SITES= LOCAL/yuri:data Index: games/dose-response/Makefile =================================================================== --- games/dose-response/Makefile +++ games/dose-response/Makefile @@ -3,7 +3,7 @@ PORTNAME= dose-response DISTVERSIONPREFIX= v DISTVERSION= 1.0.0 -PORTREVISION= 9 +PORTREVISION= 10 CATEGORIES= games MAINTAINER= greg@unrelenting.technology Index: games/genact/Makefile =================================================================== --- games/genact/Makefile +++ games/genact/Makefile @@ -3,6 +3,7 @@ PORTNAME= genact DISTVERSIONPREFIX= v DISTVERSION= 0.10.0 +PORTREVISION= 1 CATEGORIES= games MAINTAINER= 0mp@FreeBSD.org Index: games/jaggedalliance2/Makefile =================================================================== --- games/jaggedalliance2/Makefile +++ games/jaggedalliance2/Makefile @@ -4,7 +4,7 @@ PORTNAME= ja2 DISTVERSIONPREFIX= v DISTVERSION= 0.17.0 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= games MAINTAINER= ports@FreeBSD.org Index: games/veloren/Makefile =================================================================== --- games/veloren/Makefile +++ games/veloren/Makefile @@ -3,7 +3,7 @@ PORTNAME= veloren DISTVERSIONPREFIX= v DISTVERSION= 0.7.0 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= games MASTER_SITES= https://veloren.net/icons/favicon/:icon \ LOCAL/jbeich:assets Index: graphics/dssim/Makefile =================================================================== --- graphics/dssim/Makefile +++ graphics/dssim/Makefile @@ -2,6 +2,7 @@ PORTNAME= dssim DISTVERSION= 2.11.3 +PORTREVISION= 1 CATEGORIES= graphics MASTER_SITES= CRATESIO # XXX Teach USES=cargo to have proper default Index: graphics/ikona/Makefile =================================================================== --- graphics/ikona/Makefile +++ graphics/ikona/Makefile @@ -2,7 +2,7 @@ PORTNAME= ikona DISTVERSION= 1.0 -PORTREVISION= 6 +PORTREVISION= 7 CATEGORIES= graphics kde MASTER_SITES= KDE/stable/${PORTNAME}/${DISTVERSION}/ DISTFILES= ${DISTNAME}${EXTRACT_SUFX} \ Index: graphics/librsvg2-rust/Makefile =================================================================== --- graphics/librsvg2-rust/Makefile +++ graphics/librsvg2-rust/Makefile @@ -3,6 +3,7 @@ PORTNAME= librsvg PORTVERSION= 2.50.0 +PORTREVISION= 1 CATEGORIES= graphics gnome MASTER_SITES= GNOME PKGNAMESUFFIX= 2-rust Index: graphics/pastel/Makefile =================================================================== --- graphics/pastel/Makefile +++ graphics/pastel/Makefile @@ -3,7 +3,7 @@ PORTNAME= pastel DISTVERSIONPREFIX= v DISTVERSION= 0.8.0 -PORTREVISION= 5 +PORTREVISION= 6 CATEGORIES= graphics MAINTAINER= vulcan@wired.sh Index: graphics/rx/Makefile =================================================================== --- graphics/rx/Makefile +++ graphics/rx/Makefile @@ -3,7 +3,7 @@ PORTNAME= rx DISTVERSIONPREFIX= v DISTVERSION= 0.4.0 -PORTREVISION= 8 +PORTREVISION= 9 CATEGORIES= graphics PKGNAMESUFFIX= -editor Index: graphics/svgbob/Makefile =================================================================== --- graphics/svgbob/Makefile +++ graphics/svgbob/Makefile @@ -2,7 +2,7 @@ PORTNAME= svgbob DISTVERSION= g20190412 -PORTREVISION= 13 +PORTREVISION= 14 CATEGORIES= graphics MAINTAINER= ports@FreeBSD.org Index: graphics/viu/Makefile =================================================================== --- graphics/viu/Makefile +++ graphics/viu/Makefile @@ -3,6 +3,7 @@ PORTNAME= viu DISTVERSIONPREFIX= v DISTVERSION= 1.1 +PORTREVISION= 1 CATEGORIES= graphics MAINTAINER= vulcan@wired.sh Index: java/icedtea-web/Makefile =================================================================== --- java/icedtea-web/Makefile +++ java/icedtea-web/Makefile @@ -3,7 +3,7 @@ PORTNAME= icedtea-web PORTVERSION= 1.8.4 DISTVERSIONPREFIX= icedtea-web- -PORTREVISION= 4 +PORTREVISION= 5 CATEGORIES= java www DISTFILES= ${DISTNAME}${EXTRACT_SUFX} Index: lang/rust-bootstrap/Makefile =================================================================== --- lang/rust-bootstrap/Makefile +++ lang/rust-bootstrap/Makefile @@ -6,6 +6,7 @@ MASTER_SITES= https://static.rust-lang.org/dist/:rust \ LOCAL/tobik:armbase \ LOCAL/tobik:base \ + LOCAL/bdragon:ppc64lebase \ https://download.freebsd.org/ftp/${_RUST_FBSD_SUBDIR_${FLAVOR}}/:base \ LOCAL/tobik:powerpc64_gcc # http://pkg.freebsd.org/FreeBSD:12:powerpc64/quarterly/All/gcc9-9.2.0.txz?dummy=/:powerpc64_gcc @@ -29,7 +30,7 @@ gmake:devel/gmake \ rust>=${PORTVERSION}:lang/rust -FLAVORS= aarch64 amd64 armv6 armv7 i386 powerpc64_elfv1 powerpc64_elfv2 +FLAVORS= aarch64 amd64 armv6 armv7 i386 powerpc64_elfv1 powerpc64_elfv2 powerpc64le FLAVOR?= ${FLAVORS:[1]} aarch64_PKGNAMEPREFIX= aarch64- @@ -40,6 +41,7 @@ powerpc64_elfv1_PKGNAMEPREFIX= powerpc64-elfv1- powerpc64_elfv1_BUILD_DEPENDS= powerpc64-gcc9>0:devel/freebsd-gcc9@powerpc64 powerpc64_elfv2_PKGNAMEPREFIX= powerpc64-elfv2- +powerpc64le_PKGNAMEPREFIX= powerpc64le- USES= perl5 python:3.3+,build tar:xz .if ${FLAVOR} == powerpc64_elfv1 @@ -61,21 +63,25 @@ _RUST_FBSD_DIST_powerpc64_elfv1= FreeBSD-${_RUST_FBSD_VER}-powerpc64-elfv1${EXTRACT_SUFX}:base \ FreeBSD-${_RUST_FBSD_VER}-powerpc64-elfv1-gcc9-9.2.0${EXTRACT_SUFX}:powerpc64_gcc _RUST_FBSD_DIST_powerpc64_elfv2= FreeBSD-${_RUST_FBSD_VER}-powerpc64-elfv2-r356261${EXTRACT_SUFX}:base +_RUST_FBSD_DIST_powerpc64le= FreeBSD-${_RUST_FBSD_VER}-powerpc64le-r366300${EXTRACT_SUFX}:ppc64lebase _RUST_FBSD_VER= ${_RUST_FBSD_VER_${FLAVOR}:U11.3-RELEASE} _RUST_FBSD_VER_armv7= 12.1-RELEASE _RUST_FBSD_VER_powerpc64_elfv1= 12.1-RELEASE _RUST_FBSD_VER_powerpc64_elfv2= 13.0-CURRENT +_RUST_FBSD_VER_powerpc64le= 13.0-CURRENT _RUST_FBSD_SUBDIR_aarch64= releases/arm64/${_RUST_FBSD_VER}/base.txz?dummy= _RUST_FBSD_SUBDIR_amd64= releases/amd64/${_RUST_FBSD_VER}/base.txz?dummy= _RUST_FBSD_SUBDIR_i386= releases/i386/${_RUST_FBSD_VER}/base.txz?dummy= _RUST_FBSD_SUBDIR_powerpc64_elfv1= releases/powerpc/powerpc64/${_RUST_FBSD_VER}/base.txz?dummy= _RUST_FBSD_SUBDIR_powerpc64_elfv2= snapshots/powerpc/powerpc64/${_RUST_FBSD_VER}/base.txz?dummy= +_RUST_FBSD_SUBDIR_powerpc64le= snapshots/powerpc/powerpc64le/${_RUST_FBSD_VER}/base.txz?dummy= _CARGO_VENDOR_DIR= ${WRKSRC}/vendor _RUST_ARCH_amd64= x86_64 _RUST_ARCH_i386= i686 _RUST_ARCH_powerpc64_elfv1= powerpc64 _RUST_ARCH_powerpc64_elfv2= powerpc64 +_RUST_ARCH_powerpc64le= powerpc64le _RUST_HOST= ${_RUST_ARCH_${ARCH}:U${ARCH}}-unknown-${OPSYS:tl} _RUST_TARGET= ${_RUST_ARCH_${FLAVOR}:U${FLAVOR}}-unknown-${OPSYS:tl} _RUST_LLVM_TARGET= ${_RUST_LLVM_TARGET_${FLAVOR}} @@ -86,6 +92,7 @@ _RUST_LLVM_TARGET_i386= X86 _RUST_LLVM_TARGET_powerpc64_elfv1= PowerPC _RUST_LLVM_TARGET_powerpc64_elfv2= PowerPC +_RUST_LLVM_TARGET_powerpc64le= PowerPC _RUST_LLVM_TRIPLE= ${_RUST_LLVM_TRIPLE_${FLAVOR}:U${_RUST_TARGET}} _RUST_LLVM_TRIPLE_armv6= armv6-gnueabihf-freebsd _RUST_LLVM_TRIPLE_armv7= armv7-gnueabihf-freebsd Index: lang/rust-bootstrap/distinfo =================================================================== --- lang/rust-bootstrap/distinfo +++ lang/rust-bootstrap/distinfo @@ -17,3 +17,5 @@ SIZE (FreeBSD-12.1-RELEASE-powerpc64-elfv1-gcc9-9.2.0.tar.xz) = 38150240 SHA256 (FreeBSD-13.0-CURRENT-powerpc64-elfv2-r356261.tar.xz) = db762f136e41dd3c6676d6dc104282be6d6d6684afb348506fc44ceccd43ce17 SIZE (FreeBSD-13.0-CURRENT-powerpc64-elfv2-r356261.tar.xz) = 150455928 +SHA256 (FreeBSD-13.0-CURRENT-powerpc64le-r366300.tar.xz) = a828a3a968c9911655148fa080587ecd7673aa3d58588ed3dafa55a5c2e12dd3 +SIZE (FreeBSD-13.0-CURRENT-powerpc64le-r366300.tar.xz) = 167748612 Index: lang/rust/Makefile =================================================================== --- lang/rust/Makefile +++ lang/rust/Makefile @@ -2,11 +2,13 @@ # $FreeBSD$ PORTNAME= rust -PORTVERSION?= 1.46.0 +PORTVERSION?= 1.47.0 PORTREVISION?= 0 CATEGORIES= lang MASTER_SITES= https://static.rust-lang.org/dist/:src \ https://dev-static.rust-lang.org/dist/:src \ + LOCAL/bdragon/rust:bootstrap \ + LOCAL/mikael/rust:bootstrap \ LOCAL/tobik/rust:bootstrap \ https://static.rust-lang.org/dist/:bootstrap DISTNAME?= ${PORTNAME}c-${PORTVERSION}-src @@ -25,7 +27,7 @@ LICENSE_FILE_MIT= ${WRKSRC}/LICENSE-MIT IGNORE_FreeBSD_11_powerpc64= is missing a bootstrap for FreeBSD 11.x powerpc64 -ONLY_FOR_ARCHS?= aarch64 amd64 armv6 armv7 i386 powerpc64 +ONLY_FOR_ARCHS?= aarch64 amd64 armv6 armv7 i386 powerpc64 powerpc64le ONLY_FOR_ARCHS_REASON?= requires prebuilt bootstrap compiler BUILD_DEPENDS= cmake:devel/cmake \ @@ -49,6 +51,7 @@ OPTIONS_DEFINE= DOCS GDB SOURCES WASM OPTIONS_DEFAULT= SOURCES WASM +OPTIONS_EXCLUDE= DOCS # https://github.com/rust-lang/rust/issues/76526 GDB_DESC= Install ports gdb (necessary for debugging rust programs) SOURCES_DESC= Install source files @@ -63,9 +66,9 @@ WASM_VARS_OFF= _RUST_BUILD_WASM=false # See WRKSRC/src/stage0.txt for the date and version values. -BOOTSTRAPS_DATE?= 2020-08-03 -RUST_BOOTSTRAP_VERSION?= 1.45.2 -CARGO_BOOTSTRAP_VERSION?= 0.46.1 +BOOTSTRAPS_DATE?= 2020-08-27 +RUST_BOOTSTRAP_VERSION?= 1.46.0 +CARGO_BOOTSTRAP_VERSION?= 0.47.0 BOOTSTRAPS_SUFFIX?= ${BOOTSTRAPS_SUFFIX_${ARCH}} BOOTSTRAPS_SUFFIX_powerpc64?= -${PPC_ABI:tl} Index: lang/rust/distinfo =================================================================== --- lang/rust/distinfo +++ lang/rust/distinfo @@ -1,45 +1,51 @@ -TIMESTAMP = 1598307595 -SHA256 (rust/rustc-1.46.0-src.tar.xz) = 865dae1290a205f16ded8818c6a0254cc32862985fc250a602a70285b7d92b82 -SIZE (rust/rustc-1.46.0-src.tar.xz) = 101868452 -SHA256 (rust/2020-08-03/rustc-1.45.2-aarch64-unknown-freebsd.tar.xz) = 4a9eb073ad13ab260acfa93dc07fe95978fabbfe1180727b342079eb95221215 -SIZE (rust/2020-08-03/rustc-1.45.2-aarch64-unknown-freebsd.tar.xz) = 30800808 -SHA256 (rust/2020-08-03/rust-std-1.45.2-aarch64-unknown-freebsd.tar.xz) = fd16c5d7be637fc0a621e47f7bf89f92e1fa894f3ef32a5727d0aad8c76b2f9f -SIZE (rust/2020-08-03/rust-std-1.45.2-aarch64-unknown-freebsd.tar.xz) = 12310440 -SHA256 (rust/2020-08-03/cargo-0.46.1-aarch64-unknown-freebsd.tar.xz) = b42d415c69c13afc89eaa6c5cd3ae07bf5825b5226b1e42169c4b67eb705f1d3 -SIZE (rust/2020-08-03/cargo-0.46.1-aarch64-unknown-freebsd.tar.xz) = 3946548 -SHA256 (rust/2020-08-03/rustc-1.45.2-x86_64-unknown-freebsd.tar.xz) = 1e4e9087f16be263d85c020e2c56ee1779b29bfa7717a0c71d4c233daaecf4ea -SIZE (rust/2020-08-03/rustc-1.45.2-x86_64-unknown-freebsd.tar.xz) = 33083584 -SHA256 (rust/2020-08-03/rust-std-1.45.2-x86_64-unknown-freebsd.tar.xz) = 3e527a49f076074155db48b23cd16a4aedf172f1cb37484c816df71001e63b94 -SIZE (rust/2020-08-03/rust-std-1.45.2-x86_64-unknown-freebsd.tar.xz) = 12938052 -SHA256 (rust/2020-08-03/cargo-0.46.1-x86_64-unknown-freebsd.tar.xz) = 7b6238a71db2937e2aa7105d59e025160028665cd29c5a110384c19c8531504e -SIZE (rust/2020-08-03/cargo-0.46.1-x86_64-unknown-freebsd.tar.xz) = 4673872 -SHA256 (rust/2020-08-03/rustc-1.45.2-armv6-unknown-freebsd.tar.xz) = 791c165814903e4d6a898e23b0486cc066582e81645eade29e8b6f9e2080bb4c -SIZE (rust/2020-08-03/rustc-1.45.2-armv6-unknown-freebsd.tar.xz) = 31745892 -SHA256 (rust/2020-08-03/rust-std-1.45.2-armv6-unknown-freebsd.tar.xz) = 95e9134d3c9d22650df62ba5f2e3c0f9460d7c5d517f74d4695f380bf4d0955e -SIZE (rust/2020-08-03/rust-std-1.45.2-armv6-unknown-freebsd.tar.xz) = 12264212 -SHA256 (rust/2020-08-03/cargo-0.46.1-armv6-unknown-freebsd.tar.xz) = 734e35b8eb69296113c009f20c7af5e3a6580e26940d3878b937405216b329a0 -SIZE (rust/2020-08-03/cargo-0.46.1-armv6-unknown-freebsd.tar.xz) = 4068112 -SHA256 (rust/2020-08-03/rustc-1.45.2-armv7-unknown-freebsd.tar.xz) = 87947861b38af004eef01e36eb37dd7fe8b4e8d2a0e1f93656ec6bf44d7a7ced -SIZE (rust/2020-08-03/rustc-1.45.2-armv7-unknown-freebsd.tar.xz) = 32189244 -SHA256 (rust/2020-08-03/rust-std-1.45.2-armv7-unknown-freebsd.tar.xz) = 38024abb8331e8cbe1f57d73f995f6c7db2c0289b0d04741bb4b328734cbff7a -SIZE (rust/2020-08-03/rust-std-1.45.2-armv7-unknown-freebsd.tar.xz) = 12189004 -SHA256 (rust/2020-08-03/cargo-0.46.1-armv7-unknown-freebsd.tar.xz) = 9f87ae190174190d17ce7e8669b1182ab043438d1dd8262cf879a07f5a2d6b7c -SIZE (rust/2020-08-03/cargo-0.46.1-armv7-unknown-freebsd.tar.xz) = 4054892 -SHA256 (rust/2020-08-03/rustc-1.45.2-i686-unknown-freebsd.tar.xz) = 54db1b27243b152245ba2339127baf0ce0c9da97a8e0bbd5bfb427b1fa7a7b42 -SIZE (rust/2020-08-03/rustc-1.45.2-i686-unknown-freebsd.tar.xz) = 34092656 -SHA256 (rust/2020-08-03/rust-std-1.45.2-i686-unknown-freebsd.tar.xz) = 2e85ad6fb361b48f93b3b18008034dcd2b1f2aa05d72fd7f4cd06ba12dfd5a6d -SIZE (rust/2020-08-03/rust-std-1.45.2-i686-unknown-freebsd.tar.xz) = 12865768 -SHA256 (rust/2020-08-03/cargo-0.46.1-i686-unknown-freebsd.tar.xz) = 472db73f921a8bd1668e1d7ce338b8c7369215dd6ffe2cfc9d77f65f94db9a29 -SIZE (rust/2020-08-03/cargo-0.46.1-i686-unknown-freebsd.tar.xz) = 4605600 -SHA256 (rust/2020-08-03/rustc-1.45.2-powerpc64-unknown-freebsd-elfv1.tar.xz) = dce4298fcfde04ce35d86acbf97c57334304ce379efb78f6254bdc040e61795c -SIZE (rust/2020-08-03/rustc-1.45.2-powerpc64-unknown-freebsd-elfv1.tar.xz) = 37171624 -SHA256 (rust/2020-08-03/rust-std-1.45.2-powerpc64-unknown-freebsd-elfv1.tar.xz) = 236d119752df7ee16de2e2a5042a0db06ace2971d3a624f6aaf48dde3d56fb18 -SIZE (rust/2020-08-03/rust-std-1.45.2-powerpc64-unknown-freebsd-elfv1.tar.xz) = 12276312 -SHA256 (rust/2020-08-03/cargo-0.46.1-powerpc64-unknown-freebsd-elfv1.tar.xz) = b859a1320ddcbebab1fd234353290b0c6290e02563eb93346467a4aca0c36712 -SIZE (rust/2020-08-03/cargo-0.46.1-powerpc64-unknown-freebsd-elfv1.tar.xz) = 4523696 -SHA256 (rust/2020-08-03/rustc-1.45.2-powerpc64-unknown-freebsd-elfv2.tar.xz) = a56eaa8acd84e081ee0195126774c8e0c832cc2d0ca6a38e06d964dca0098f41 -SIZE (rust/2020-08-03/rustc-1.45.2-powerpc64-unknown-freebsd-elfv2.tar.xz) = 30953660 -SHA256 (rust/2020-08-03/rust-std-1.45.2-powerpc64-unknown-freebsd-elfv2.tar.xz) = 1f3e44d1cfd260fc9533f1fa46dbc317b2c09251bd47f084402f2d22301418fd -SIZE (rust/2020-08-03/rust-std-1.45.2-powerpc64-unknown-freebsd-elfv2.tar.xz) = 12223976 -SHA256 (rust/2020-08-03/cargo-0.46.1-powerpc64-unknown-freebsd-elfv2.tar.xz) = afb179eb04eb06f946f875aa243c2f3723ea5bc8a7cd2a027cc33ea97808d87f -SIZE (rust/2020-08-03/cargo-0.46.1-powerpc64-unknown-freebsd-elfv2.tar.xz) = 4213368 +TIMESTAMP = 1602225332 +SHA256 (rust/rustc-1.47.0-src.tar.xz) = ec2c81d2d34890486094a6407589be96161e4e301c238332d32c6dbae4f38ea2 +SIZE (rust/rustc-1.47.0-src.tar.xz) = 104143736 +SHA256 (rust/2020-08-27/rustc-1.46.0-aarch64-unknown-freebsd.tar.xz) = 77d1cad786ca38ad3fb17bb13eb98ee7adeffcbb6925e8aeb3b084b726fffa1a +SIZE (rust/2020-08-27/rustc-1.46.0-aarch64-unknown-freebsd.tar.xz) = 46123756 +SHA256 (rust/2020-08-27/rust-std-1.46.0-aarch64-unknown-freebsd.tar.xz) = 10c3896a1b10ec0b99351c5c479f2c053923136165befafa39c18eeeb738973b +SIZE (rust/2020-08-27/rust-std-1.46.0-aarch64-unknown-freebsd.tar.xz) = 12424080 +SHA256 (rust/2020-08-27/cargo-0.47.0-aarch64-unknown-freebsd.tar.xz) = 463dd5338a8600758cac0f7e5c2a62c0068e20e59a3bc7bcfab4efa6da58e99b +SIZE (rust/2020-08-27/cargo-0.47.0-aarch64-unknown-freebsd.tar.xz) = 3124348 +SHA256 (rust/2020-08-27/rustc-1.46.0-x86_64-unknown-freebsd.tar.xz) = 05f78c027c8fea8b19927b1af84c96959896d96d9692d432ea64210f2540947d +SIZE (rust/2020-08-27/rustc-1.46.0-x86_64-unknown-freebsd.tar.xz) = 34583796 +SHA256 (rust/2020-08-27/rust-std-1.46.0-x86_64-unknown-freebsd.tar.xz) = 24d011a0f1b48bdffa5577cbc8298758f7f2ac091f647b93442c8251de31e493 +SIZE (rust/2020-08-27/rust-std-1.46.0-x86_64-unknown-freebsd.tar.xz) = 13078008 +SHA256 (rust/2020-08-27/cargo-0.47.0-x86_64-unknown-freebsd.tar.xz) = 5e5fbda34ea2cc3e2ed57090edfbf1b32948ebd8550b4e25bbc64b96b6ef72c0 +SIZE (rust/2020-08-27/cargo-0.47.0-x86_64-unknown-freebsd.tar.xz) = 4635900 +SHA256 (rust/2020-08-27/rustc-1.46.0-armv6-unknown-freebsd.tar.xz) = 8d5f1c519fde1b47062ed63721db43d7edff2483cc33490b4d84a3dd9c41d94a +SIZE (rust/2020-08-27/rustc-1.46.0-armv6-unknown-freebsd.tar.xz) = 32934396 +SHA256 (rust/2020-08-27/rust-std-1.46.0-armv6-unknown-freebsd.tar.xz) = 744019b69dd9146d024bcbbf3c75edd64b9e2bd21d5e8164cc43b192ea74fada +SIZE (rust/2020-08-27/rust-std-1.46.0-armv6-unknown-freebsd.tar.xz) = 12370772 +SHA256 (rust/2020-08-27/cargo-0.47.0-armv6-unknown-freebsd.tar.xz) = 8c42654cbda2efd4ffd156f566a1e289052b9d743389e1c668c73235d91a3442 +SIZE (rust/2020-08-27/cargo-0.47.0-armv6-unknown-freebsd.tar.xz) = 4081880 +SHA256 (rust/2020-08-27/rustc-1.46.0-armv7-unknown-freebsd.tar.xz) = d82bd2e50339ca0749812e8f4078ed466217cba7e3f68886d7d2baaf74257c3c +SIZE (rust/2020-08-27/rustc-1.46.0-armv7-unknown-freebsd.tar.xz) = 33430540 +SHA256 (rust/2020-08-27/rust-std-1.46.0-armv7-unknown-freebsd.tar.xz) = c1417394efb65c264000842eb5dbbd9a00061cdc02415b5f3a5e416753bb3d5f +SIZE (rust/2020-08-27/rust-std-1.46.0-armv7-unknown-freebsd.tar.xz) = 12358112 +SHA256 (rust/2020-08-27/cargo-0.47.0-armv7-unknown-freebsd.tar.xz) = 32268a102117cf4c51c260945c0627c7f00769fa6d2cb387b05d0148b4a2e48e +SIZE (rust/2020-08-27/cargo-0.47.0-armv7-unknown-freebsd.tar.xz) = 4070860 +SHA256 (rust/2020-08-27/rustc-1.46.0-i686-unknown-freebsd.tar.xz) = 24a95b887e2a66980052d39a04a02662593b9b57b4d0dc1339c60549208b389e +SIZE (rust/2020-08-27/rustc-1.46.0-i686-unknown-freebsd.tar.xz) = 35015008 +SHA256 (rust/2020-08-27/rust-std-1.46.0-i686-unknown-freebsd.tar.xz) = 885a0bb88d044b29b07ba31e5acbf18db175eb0dbb4187c8c0f88c4e7115a615 +SIZE (rust/2020-08-27/rust-std-1.46.0-i686-unknown-freebsd.tar.xz) = 12964928 +SHA256 (rust/2020-08-27/cargo-0.47.0-i686-unknown-freebsd.tar.xz) = d04245ea7183d733c03e4f93ed487e1450bcec3fbad0f2bd12d98471d76966f5 +SIZE (rust/2020-08-27/cargo-0.47.0-i686-unknown-freebsd.tar.xz) = 4651612 +SHA256 (rust/2020-08-27/rustc-1.46.0-powerpc64-unknown-freebsd-elfv1.tar.xz) = 466790a920feae2932f578d70c01735ddd5bafa7ea6236e4ceac0c5146fa520b +SIZE (rust/2020-08-27/rustc-1.46.0-powerpc64-unknown-freebsd-elfv1.tar.xz) = 38373788 +SHA256 (rust/2020-08-27/rust-std-1.46.0-powerpc64-unknown-freebsd-elfv1.tar.xz) = 45e52a1d3a176ad5a47f87dc031b9c1f8c6e85c22c71ce99b186059ebceaf811 +SIZE (rust/2020-08-27/rust-std-1.46.0-powerpc64-unknown-freebsd-elfv1.tar.xz) = 12300552 +SHA256 (rust/2020-08-27/cargo-0.47.0-powerpc64-unknown-freebsd-elfv1.tar.xz) = a176b017c751316d90247c8779db7624741f706b4868cb670822e24dbdacb3af +SIZE (rust/2020-08-27/cargo-0.47.0-powerpc64-unknown-freebsd-elfv1.tar.xz) = 4521544 +SHA256 (rust/2020-08-27/rustc-1.46.0-powerpc64-unknown-freebsd-elfv2.tar.xz) = 376c921c989182973c1336ee1d3ecb9b90b75ab479fd6632e83cf0391f038b66 +SIZE (rust/2020-08-27/rustc-1.46.0-powerpc64-unknown-freebsd-elfv2.tar.xz) = 32563056 +SHA256 (rust/2020-08-27/rust-std-1.46.0-powerpc64-unknown-freebsd-elfv2.tar.xz) = 1b67251c2a97ef25e566231baffc38c32689ab7be8d165a6688979ec25858afb +SIZE (rust/2020-08-27/rust-std-1.46.0-powerpc64-unknown-freebsd-elfv2.tar.xz) = 12255592 +SHA256 (rust/2020-08-27/cargo-0.47.0-powerpc64-unknown-freebsd-elfv2.tar.xz) = 312c8502aaa49aa339fb8252cec94de7f2f29220d237ddc144c6b19de90334ef +SIZE (rust/2020-08-27/cargo-0.47.0-powerpc64-unknown-freebsd-elfv2.tar.xz) = 4254320 +SHA256 (rust/2020-08-27/cargo-0.47.0-powerpc64le-unknown-freebsd.tar.xz) = 5391388fce390adaa10bb2ab7de9cbdeda8307ab95a64d53d501ced257f99ff2 +SIZE (rust/2020-08-27/cargo-0.47.0-powerpc64le-unknown-freebsd.tar.xz) = 4493584 +SHA256 (rust/2020-08-27/rust-std-1.46.0-powerpc64le-unknown-freebsd.tar.xz) = aa207e73c88f12d512aaa42c704145eb84ce04e48d027dffb0363965e74a8820 +SIZE (rust/2020-08-27/rust-std-1.46.0-powerpc64le-unknown-freebsd.tar.xz) = 12494160 +SHA256 (rust/2020-08-27/rustc-1.46.0-powerpc64le-unknown-freebsd.tar.xz) = 559ee2c55f3614351ca5618166a3bbe8ebcda7bddf0074c5e2c5917734c1d279 +SIZE (rust/2020-08-27/rustc-1.46.0-powerpc64le-unknown-freebsd.tar.xz) = 33672276 Index: lang/rust/files/patch-src_bootstrap_native.rs =================================================================== --- lang/rust/files/patch-src_bootstrap_native.rs +++ lang/rust/files/patch-src_bootstrap_native.rs @@ -13,18 +13,6 @@ --- src/bootstrap/native.rs.orig 2020-08-24 15:00:49 UTC +++ src/bootstrap/native.rs -@@ -347,6 +347,11 @@ fn configure_cmake( - // LLVM and LLD builds can produce a lot of those and hit CI limits on log size. - cfg.define("CMAKE_INSTALL_MESSAGE", "LAZY"); - -+ // Do not allow the user's value of DESTDIR to influence where -+ // LLVM will install itself. LLVM must always be installed in our -+ // own build directories. -+ cfg.env("DESTDIR", ""); -+ - if builder.config.ninja { - cfg.generator("Ninja"); - } @@ -517,26 +522,9 @@ impl Step for Lld { let mut cfg = cmake::Config::new(builder.src.join("src/llvm-project/lld")); configure_cmake(builder, target, &mut cfg, true); Index: lang/rust/files/patch-vendor_openssl-sys_build_main.rs =================================================================== --- lang/rust/files/patch-vendor_openssl-sys_build_main.rs +++ lang/rust/files/patch-vendor_openssl-sys_build_main.rs @@ -1,21 +0,0 @@ ---- vendor/openssl-sys/build/main.rs.orig 2020-06-01 17:45:25 UTC -+++ vendor/openssl-sys/build/main.rs -@@ -204,6 +204,9 @@ See rust-openssl README for more information: - (3, 0, 0) => ('3', '0', '0'), - (3, 0, 1) => ('3', '0', '1'), - (3, 0, _) => ('3', '0', 'x'), -+ (3, 1, 0) => ('3', '1', '0'), -+ (3, 1, _) => ('3', '1', 'x'), -+ (3, 2, 0) => ('3', '2', '0'), - _ => version_error(), - }; - -@@ -244,7 +247,7 @@ fn version_error() -> ! { - " - - This crate is only compatible with OpenSSL 1.0.1 through 1.1.1, or LibreSSL 2.5 --through 3.0.x, but a different version of OpenSSL was found. The build is now aborting -+through 3.2.0, but a different version of OpenSSL was found. The build is now aborting - due to this version mismatch. - - " Index: lang/rust/files/powerpc64le/patch-src_librustc__target_spec_mod.rs =================================================================== --- lang/rust/files/powerpc64le/patch-src_librustc__target_spec_mod.rs +++ lang/rust/files/powerpc64le/patch-src_librustc__target_spec_mod.rs @@ -0,0 +1,10 @@ +--- src/librustc_target/spec/mod.rs.orig 2020-09-30 18:06:16.613040000 -0500 ++++ src/librustc_target/spec/mod.rs 2020-09-30 18:06:47.040460000 -0500 +@@ -553,6 +553,7 @@ supported_targets! { + ("armv7-unknown-freebsd", armv7_unknown_freebsd), + ("i686-unknown-freebsd", i686_unknown_freebsd), + ("powerpc64-unknown-freebsd", powerpc64_unknown_freebsd), ++ ("powerpc64le-unknown-freebsd", powerpc64le_unknown_freebsd), + ("x86_64-unknown-freebsd", x86_64_unknown_freebsd), + + ("x86_64-unknown-dragonfly", x86_64_unknown_dragonfly), Index: lang/rust/files/powerpc64le/patch-src_librustc__target_spec_powerpc64le__unknown__freebsd.rs =================================================================== --- lang/rust/files/powerpc64le/patch-src_librustc__target_spec_powerpc64le__unknown__freebsd.rs +++ lang/rust/files/powerpc64le/patch-src_librustc__target_spec_powerpc64le__unknown__freebsd.rs @@ -0,0 +1,25 @@ +--- /dev/null 2020-09-30 18:09:21.093949000 -0500 ++++ src/librustc_target/spec/powerpc64le_unknown_freebsd.rs 2020-09-30 18:08:47.737833000 -0500 +@@ -0,0 +1,22 @@ ++use crate::spec::{LinkerFlavor, Target, TargetOptions, TargetResult}; ++ ++pub fn target() -> TargetResult { ++ let mut base = super::freebsd_base::opts(); ++ base.cpu = "ppc64le".to_string(); ++ base.pre_link_args.get_mut(&LinkerFlavor::Gcc).unwrap().push("-m64".to_string()); ++ base.max_atomic_width = Some(64); ++ ++ Ok(Target { ++ llvm_target: "powerpc64le-unknown-freebsd".to_string(), ++ target_endian: "little".to_string(), ++ target_pointer_width: "64".to_string(), ++ target_c_int_width: "32".to_string(), ++ data_layout: "e-m:e-i64:64-n32:64".to_string(), ++ arch: "powerpc64".to_string(), ++ target_os: "freebsd".to_string(), ++ target_env: String::new(), ++ target_vendor: "unknown".to_string(), ++ linker_flavor: LinkerFlavor::Gcc, ++ options: TargetOptions { target_mcount: "_mcount".to_string(), ..base }, ++ }) ++} Index: lang/rust/files/powerpc64le/patch-src_llvm-project_clang_lib_Basic_Targets.cpp =================================================================== --- lang/rust/files/powerpc64le/patch-src_llvm-project_clang_lib_Basic_Targets.cpp +++ lang/rust/files/powerpc64le/patch-src_llvm-project_clang_lib_Basic_Targets.cpp @@ -0,0 +1,11 @@ +--- src/llvm-project/clang/lib/Basic/Targets.cpp.orig 2020-07-07 01:39:17.000000000 -0500 ++++ src/llvm-project/clang/lib/Basic/Targets.cpp 2020-09-30 18:13:54.521751000 -0500 +@@ -352,6 +352,8 @@ TargetInfo *AllocateTarget(const llvm::Triple &Triple, + switch (os) { + case llvm::Triple::Linux: + return new LinuxTargetInfo(Triple, Opts); ++ case llvm::Triple::FreeBSD: ++ return new FreeBSDTargetInfo(Triple, Opts); + case llvm::Triple::NetBSD: + return new NetBSDTargetInfo(Triple, Opts); + default: Index: lang/rust/files/powerpc64le/patch-vendor_openssl-src_src_lib.rs =================================================================== --- lang/rust/files/powerpc64le/patch-vendor_openssl-src_src_lib.rs +++ lang/rust/files/powerpc64le/patch-vendor_openssl-src_src_lib.rs @@ -0,0 +1,10 @@ +--- vendor/openssl-src/src/lib.rs.orig 2020-09-30 18:01:13.855023000 -0500 ++++ vendor/openssl-src/src/lib.rs 2020-09-30 18:02:06.365292000 -0500 +@@ -173,6 +173,7 @@ impl Build { + "powerpc-unknown-linux-gnu" => "linux-ppc", + "powerpc64-unknown-freebsd" => "BSD-generic64", + "powerpc64-unknown-linux-gnu" => "linux-ppc64", ++ "powerpc64le-unknown-freebsd" => "BSD-generic64", + "powerpc64le-unknown-linux-gnu" => "linux-ppc64le", + "riscv64gc-unknown-linux-gnu" => "linux-generic64", + "s390x-unknown-linux-gnu" => "linux64-s390x", Index: lang/spidermonkey78/Makefile =================================================================== --- lang/spidermonkey78/Makefile +++ lang/spidermonkey78/Makefile @@ -2,6 +2,7 @@ PORTNAME= spidermonkey DISTVERSION= 78.3.1 +PORTREVISION= 1 CATEGORIES= lang MASTER_SITES= MOZILLA/firefox/releases/${DISTVERSION}esr/source PKGNAMESUFFIX= ${SP_VER} Index: mail/thunderbird/Makefile =================================================================== --- mail/thunderbird/Makefile +++ mail/thunderbird/Makefile @@ -3,7 +3,7 @@ PORTNAME= thunderbird DISTVERSION= 78.3.2 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= mail news net-im MASTER_SITES= MOZILLA/${PORTNAME}/releases/${DISTVERSION}/source \ MOZILLA/${PORTNAME}/candidates/${DISTVERSION}-candidates/build1/source Index: mail/thunderbird/files/patch-bug1663715 =================================================================== --- mail/thunderbird/files/patch-bug1663715 +++ mail/thunderbird/files/patch-bug1663715 @@ -0,0 +1,31087 @@ +From 63678ae69e03325d65255d29f1af4a6ea3dd354a Mon Sep 17 00:00:00 2001 +From: Thomas Deutschmann +Date: Sat, 10 Oct 2020 16:07:49 +0200 +Subject: [PATCH 36/38] bmo#1643201: Cherry-pick some servo changes to + derive_common + +Link: https://bugzilla.mozilla.org/show_bug.cgi?id=1663715#c7 +Signed-off-by: Thomas Deutschmann +--- + servo/components/derive_common/cg.rs | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/servo/components/derive_common/cg.rs b/servo/components/derive_common/cg.rs +index 55a75398c7..c51c0d7750 100644 +--- servo/components/derive_common/cg.rs ++++ servo/components/derive_common/cg.rs +@@ -7,7 +7,7 @@ use proc_macro2::{Span, TokenStream}; + use quote::TokenStreamExt; + use syn::{self, AngleBracketedGenericArguments, Binding, DeriveInput, Field}; + use syn::{GenericArgument, GenericParam, Ident, Path}; +-use syn::{PathArguments, PathSegment, QSelf, Type, TypeArray}; ++use syn::{PathArguments, PathSegment, QSelf, Type, TypeArray, TypeGroup}; + use syn::{TypeParam, TypeParen, TypePath, TypeSlice, TypeTuple}; + use syn::{Variant, WherePredicate}; + use synstructure::{self, BindStyle, BindingInfo, VariantAst, VariantInfo}; +@@ -208,6 +208,10 @@ where + elem: Box::new(map_type_params(&inner.elem, params, f)), + ..inner.clone() + }), ++ Type::Group(ref inner) => Type::from(TypeGroup { ++ elem: Box::new(map_type_params(&inner.elem, params, f)), ++ ..inner.clone() ++ }), + ref ty => panic!("type {:?} cannot be mapped yet", ty), + } + } +-- +2.28.0 + +From 23f22e9de6cc2236d58cc03997a1040e62c532e1 Mon Sep 17 00:00:00 2001 +From: Thomas Deutschmann +Date: Sat, 10 Oct 2020 16:09:04 +0200 +Subject: [PATCH 37/38] bmo#1653339: Teach style_derive's map_type_params about + mapping self correctly + +Link: https://bugzilla.mozilla.org/show_bug.cgi?id=1663715#c7 +Signed-off-by: Thomas Deutschmann +--- + servo/components/derive_common/cg.rs | 30 +++++++++++-------- + .../style_derive/to_computed_value.rs | 4 ++- + 2 files changed, 21 insertions(+), 13 deletions(-) + +diff --git a/servo/components/derive_common/cg.rs b/servo/components/derive_common/cg.rs +index c51c0d7750..8abfd87149 100644 +--- servo/components/derive_common/cg.rs ++++ servo/components/derive_common/cg.rs +@@ -154,19 +154,19 @@ pub fn fmap_trait_output(input: &DeriveInput, trait_path: &Path, trait_output: & + segment.into() + } + +-pub fn map_type_params(ty: &Type, params: &[&TypeParam], f: &mut F) -> Type ++pub fn map_type_params(ty: &Type, params: &[&TypeParam], self_type: &Path, f: &mut F) -> Type + where + F: FnMut(&Ident) -> Type, + { + match *ty { + Type::Slice(ref inner) => Type::from(TypeSlice { +- elem: Box::new(map_type_params(&inner.elem, params, f)), ++ elem: Box::new(map_type_params(&inner.elem, params, self_type, f)), + ..inner.clone() + }), + Type::Array(ref inner) => { + //ref ty, ref expr) => { + Type::from(TypeArray { +- elem: Box::new(map_type_params(&inner.elem, params, f)), ++ elem: Box::new(map_type_params(&inner.elem, params, self_type, f)), + ..inner.clone() + }) + }, +@@ -175,7 +175,7 @@ where + elems: inner + .elems + .iter() +- .map(|ty| map_type_params(&ty, params, f)) ++ .map(|ty| map_type_params(&ty, params, self_type, f)) + .collect(), + ..inner.clone() + }), +@@ -187,10 +187,16 @@ where + if params.iter().any(|ref param| ¶m.ident == ident) { + return f(ident); + } ++ if ident == "Self" { ++ return Type::from(TypePath { ++ qself: None, ++ path: self_type.clone(), ++ }); ++ } + } + Type::from(TypePath { + qself: None, +- path: map_type_params_in_path(path, params, f), ++ path: map_type_params_in_path(path, params, self_type, f), + }) + }, + Type::Path(TypePath { +@@ -198,25 +204,25 @@ where + ref path, + }) => Type::from(TypePath { + qself: qself.as_ref().map(|qself| QSelf { +- ty: Box::new(map_type_params(&qself.ty, params, f)), ++ ty: Box::new(map_type_params(&qself.ty, params, self_type, f)), + position: qself.position, + ..qself.clone() + }), +- path: map_type_params_in_path(path, params, f), ++ path: map_type_params_in_path(path, params, self_type, f), + }), + Type::Paren(ref inner) => Type::from(TypeParen { +- elem: Box::new(map_type_params(&inner.elem, params, f)), ++ elem: Box::new(map_type_params(&inner.elem, params, self_type, f)), + ..inner.clone() + }), + Type::Group(ref inner) => Type::from(TypeGroup { +- elem: Box::new(map_type_params(&inner.elem, params, f)), ++ elem: Box::new(map_type_params(&inner.elem, params, self_type, f)), + ..inner.clone() + }), + ref ty => panic!("type {:?} cannot be mapped yet", ty), + } + } + +-fn map_type_params_in_path(path: &Path, params: &[&TypeParam], f: &mut F) -> Path ++fn map_type_params_in_path(path: &Path, params: &[&TypeParam], self_type: &Path, f: &mut F) -> Path + where + F: FnMut(&Ident) -> Type, + { +@@ -236,11 +242,11 @@ where + .map(|arg| match arg { + ty @ &GenericArgument::Lifetime(_) => ty.clone(), + &GenericArgument::Type(ref data) => { +- GenericArgument::Type(map_type_params(data, params, f)) ++ GenericArgument::Type(map_type_params(data, params, self_type, f)) + }, + &GenericArgument::Binding(ref data) => { + GenericArgument::Binding(Binding { +- ty: map_type_params(&data.ty, params, f), ++ ty: map_type_params(&data.ty, params, self_type, f), + ..data.clone() + }) + }, +diff --git a/servo/components/style_derive/to_computed_value.rs b/servo/components/style_derive/to_computed_value.rs +index fe6bddb7ed..1dc422e2dd 100644 +--- servo/components/style_derive/to_computed_value.rs ++++ servo/components/style_derive/to_computed_value.rs +@@ -47,12 +47,15 @@ pub fn derive_to_value( + cg::add_predicate(&mut where_clause, parse_quote!(#param: #trait_path)); + } + ++ let computed_value_type = cg::fmap_trait_output(&input, &trait_path, &output_type_name); ++ + let mut add_field_bound = |binding: &BindingInfo| { + let ty = &binding.ast().ty; + + let output_type = cg::map_type_params( + ty, + ¶ms, ++ &computed_value_type, + &mut |ident| parse_quote!(<#ident as #trait_path>::#output_type_name), + ); + +@@ -142,7 +145,6 @@ pub fn derive_to_value( + + input.generics.where_clause = where_clause; + let (impl_generics, ty_generics, where_clause) = input.generics.split_for_impl(); +- let computed_value_type = cg::fmap_trait_output(&input, &trait_path, &output_type_name); + + let impl_ = trait_impl(from_body, to_body); + +-- +2.28.0 + +From 300e01e71c9dc536d499d80563968c5fc7f7e34a Mon Sep 17 00:00:00 2001 +From: Thomas Deutschmann +Date: Sat, 10 Oct 2020 16:10:20 +0200 +Subject: [PATCH 38/38] bmo#1663715: Update syn and proc-macro2 so that Firefox + can build on Rust nightly again + +Link: https://bugzilla.mozilla.org/show_bug.cgi?id=1663715#c7 +Signed-off-by: Thomas Deutschmann +--- + Cargo.lock | 8 +- + .../rust/lucet-wasi/.cargo-checksum.json | 2 +- + .../rust/packed_simd/.cargo-checksum.json | 2 +- + .../rust/proc-macro2/.cargo-checksum.json | 2 +- + third_party/rust/proc-macro2/Cargo.toml | 15 +- + third_party/rust/proc-macro2/README.md | 2 +- + third_party/rust/proc-macro2/build.rs | 20 + + third_party/rust/proc-macro2/src/detection.rs | 67 + + third_party/rust/proc-macro2/src/fallback.rs | 1010 ++---- + third_party/rust/proc-macro2/src/lib.rs | 225 +- + third_party/rust/proc-macro2/src/marker.rs | 18 + + third_party/rust/proc-macro2/src/parse.rs | 849 +++++ + third_party/rust/proc-macro2/src/strnom.rs | 391 --- + third_party/rust/proc-macro2/src/wrapper.rs | 258 +- + .../rust/proc-macro2/tests/comments.rs | 103 + + third_party/rust/proc-macro2/tests/marker.rs | 33 + + third_party/rust/proc-macro2/tests/test.rs | 240 +- + .../rust/proc-macro2/tests/test_fmt.rs | 26 + + .../spirv-cross-internal/.cargo-checksum.json | 2 +- + third_party/rust/syn/.cargo-checksum.json | 2 +- + third_party/rust/syn/Cargo.toml | 35 +- + third_party/rust/syn/README.md | 16 +- + third_party/rust/syn/benches/file.rs | 7 + + third_party/rust/syn/benches/rust.rs | 45 +- + third_party/rust/syn/build.rs | 38 +- + third_party/rust/syn/src/attr.rs | 126 +- + third_party/rust/syn/src/buffer.rs | 56 +- + third_party/rust/syn/src/custom_keyword.rs | 12 +- + .../rust/syn/src/custom_punctuation.rs | 50 +- + third_party/rust/syn/src/data.rs | 96 +- + third_party/rust/syn/src/derive.rs | 10 +- + third_party/rust/syn/src/discouraged.rs | 27 +- + third_party/rust/syn/src/error.rs | 33 +- + third_party/rust/syn/src/expr.rs | 826 +++-- + third_party/rust/syn/src/ext.rs | 12 +- + third_party/rust/syn/src/file.rs | 4 +- + third_party/rust/syn/src/gen/clone.rs | 2051 ++++++++++++ + third_party/rust/syn/src/gen/debug.rs | 2857 +++++++++++++++++ + third_party/rust/syn/src/gen/eq.rs | 1930 +++++++++++ + third_party/rust/syn/src/gen/fold.rs | 287 +- + third_party/rust/syn/src/gen/hash.rs | 2691 ++++++++++++++++ + third_party/rust/syn/src/gen/visit.rs | 19 +- + third_party/rust/syn/src/gen/visit_mut.rs | 19 +- + third_party/rust/syn/src/generics.rs | 255 +- + third_party/rust/syn/src/item.rs | 1515 +++++---- + third_party/rust/syn/src/keyword.rs | 0 + third_party/rust/syn/src/lib.rs | 109 +- + third_party/rust/syn/src/lifetime.rs | 13 +- + third_party/rust/syn/src/lit.rs | 581 ++-- + third_party/rust/syn/src/mac.rs | 55 +- + third_party/rust/syn/src/macros.rs | 61 +- + third_party/rust/syn/src/op.rs | 6 +- + third_party/rust/syn/src/parse.rs | 211 +- + third_party/rust/syn/src/parse_macro_input.rs | 32 +- + third_party/rust/syn/src/parse_quote.rs | 15 +- + third_party/rust/syn/src/pat.rs | 313 +- + third_party/rust/syn/src/path.rs | 33 +- + third_party/rust/syn/src/punctuated.rs | 123 +- + third_party/rust/syn/src/reserved.rs | 42 + + third_party/rust/syn/src/spanned.rs | 4 +- + third_party/rust/syn/src/stmt.rs | 141 +- + third_party/rust/syn/src/token.rs | 99 +- + third_party/rust/syn/src/tt.rs | 6 +- + third_party/rust/syn/src/ty.rs | 364 ++- + third_party/rust/syn/src/verbatim.rs | 15 + + third_party/rust/syn/src/whitespace.rs | 65 + + third_party/rust/syn/tests/clone.sh | 16 - + third_party/rust/syn/tests/common/eq.rs | 247 +- + third_party/rust/syn/tests/common/mod.rs | 13 + + third_party/rust/syn/tests/common/parse.rs | 24 +- + third_party/rust/syn/tests/debug/gen.rs | 50 +- + third_party/rust/syn/tests/debug/mod.rs | 17 +- + third_party/rust/syn/tests/features/error.rs | 1 - + third_party/rust/syn/tests/features/mod.rs | 22 - + third_party/rust/syn/tests/macros/mod.rs | 8 +- + third_party/rust/syn/tests/repo/mod.rs | 137 +- + third_party/rust/syn/tests/repo/progress.rs | 37 + + third_party/rust/syn/tests/test_asyncness.rs | 38 +- + third_party/rust/syn/tests/test_attribute.rs | 452 +-- + .../rust/syn/tests/test_derive_input.rs | 1321 ++++---- + third_party/rust/syn/tests/test_expr.rs | 314 +- + third_party/rust/syn/tests/test_generics.rs | 371 ++- + third_party/rust/syn/tests/test_grouping.rs | 53 +- + third_party/rust/syn/tests/test_ident.rs | 5 - + third_party/rust/syn/tests/test_item.rs | 45 + + third_party/rust/syn/tests/test_iterators.rs | 7 +- + third_party/rust/syn/tests/test_lit.rs | 75 +- + third_party/rust/syn/tests/test_meta.rs | 498 ++- + .../rust/syn/tests/test_parse_buffer.rs | 41 +- + .../rust/syn/tests/test_parse_stream.rs | 12 + + third_party/rust/syn/tests/test_pat.rs | 27 +- + third_party/rust/syn/tests/test_path.rs | 52 + + third_party/rust/syn/tests/test_precedence.rs | 196 +- + third_party/rust/syn/tests/test_receiver.rs | 127 + + third_party/rust/syn/tests/test_round_trip.rs | 41 +- + third_party/rust/syn/tests/test_shebang.rs | 59 + + .../rust/syn/tests/test_should_parse.rs | 4 - + third_party/rust/syn/tests/test_size.rs | 2 - + third_party/rust/syn/tests/test_stmt.rs | 44 + + .../rust/syn/tests/test_token_trees.rs | 12 +- + third_party/rust/syn/tests/test_ty.rs | 53 + + third_party/rust/syn/tests/test_visibility.rs | 145 + + third_party/rust/syn/tests/zzz_stable.rs | 4 +- + 103 files changed, 17319 insertions(+), 5831 deletions(-) + create mode 100644 third_party/rust/proc-macro2/src/detection.rs + create mode 100644 third_party/rust/proc-macro2/src/marker.rs + create mode 100644 third_party/rust/proc-macro2/src/parse.rs + delete mode 100644 third_party/rust/proc-macro2/src/strnom.rs + create mode 100644 third_party/rust/proc-macro2/tests/comments.rs + create mode 100644 third_party/rust/proc-macro2/tests/test_fmt.rs + create mode 100644 third_party/rust/syn/src/gen/clone.rs + create mode 100644 third_party/rust/syn/src/gen/debug.rs + create mode 100644 third_party/rust/syn/src/gen/eq.rs + create mode 100644 third_party/rust/syn/src/gen/hash.rs + delete mode 100644 third_party/rust/syn/src/keyword.rs + create mode 100644 third_party/rust/syn/src/reserved.rs + create mode 100644 third_party/rust/syn/src/verbatim.rs + create mode 100644 third_party/rust/syn/src/whitespace.rs + delete mode 100755 third_party/rust/syn/tests/clone.sh + delete mode 100644 third_party/rust/syn/tests/features/error.rs + delete mode 100644 third_party/rust/syn/tests/features/mod.rs + create mode 100644 third_party/rust/syn/tests/repo/progress.rs + create mode 100644 third_party/rust/syn/tests/test_item.rs + create mode 100644 third_party/rust/syn/tests/test_parse_stream.rs + create mode 100644 third_party/rust/syn/tests/test_path.rs + create mode 100644 third_party/rust/syn/tests/test_receiver.rs + create mode 100644 third_party/rust/syn/tests/test_shebang.rs + create mode 100644 third_party/rust/syn/tests/test_stmt.rs + create mode 100644 third_party/rust/syn/tests/test_ty.rs + create mode 100644 third_party/rust/syn/tests/test_visibility.rs + +diff --git a/Cargo.lock b/Cargo.lock +index 19117e8368..d5fe0f6457 100644 +--- Cargo.lock ++++ 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 +--- third_party/rust/lucet-wasi/.cargo-checksum.json ++++ 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 +--- third_party/rust/packed_simd/.cargo-checksum.json ++++ 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 +--- third_party/rust/proc-macro2/.cargo-checksum.json ++++ 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 +--- third_party/rust/proc-macro2/Cargo.toml ++++ third_party/rust/proc-macro2/Cargo.toml +@@ -13,21 +13,22 @@ + [package] + edition = "2018" + name = "proc-macro2" +-version = "1.0.5" +-authors = ["Alex Crichton "] +-description = "A stable implementation of the upcoming new `proc_macro` API. Comes with an\noption, off by default, to also reimplement itself in terms of the upstream\nunstable API.\n" +-homepage = "https://github.com/alexcrichton/proc-macro2" ++version = "1.0.24" ++authors = ["Alex Crichton ", "David Tolnay "] ++description = "A substitute implementation of the compiler's `proc_macro` API to decouple\ntoken-based libraries from the procedural macro use case.\n" + documentation = "https://docs.rs/proc-macro2" + readme = "README.md" + keywords = ["macros"] ++categories = ["development-tools::procedural-macro-helpers"] + license = "MIT OR Apache-2.0" + repository = "https://github.com/alexcrichton/proc-macro2" + [package.metadata.docs.rs] + rustc-args = ["--cfg", "procmacro2_semver_exempt"] + rustdoc-args = ["--cfg", "procmacro2_semver_exempt"] ++targets = ["x86_64-unknown-linux-gnu"] + +-[lib] +-name = "proc_macro2" ++[package.metadata.playground] ++features = ["span-locations"] + [dependencies.unicode-xid] + version = "0.2" + [dev-dependencies.quote] +@@ -39,5 +40,3 @@ default = ["proc-macro"] + nightly = [] + proc-macro = [] + span-locations = [] +-[badges.travis-ci] +-repository = "alexcrichton/proc-macro2" +diff --git a/third_party/rust/proc-macro2/README.md b/third_party/rust/proc-macro2/README.md +index 19b0c3b5f8..3d05e871a7 100644 +--- third_party/rust/proc-macro2/README.md ++++ third_party/rust/proc-macro2/README.md +@@ -1,6 +1,6 @@ + # proc-macro2 + +-[![Build Status](https://api.travis-ci.com/alexcrichton/proc-macro2.svg?branch=master)](https://travis-ci.com/alexcrichton/proc-macro2) ++[![Build Status](https://img.shields.io/github/workflow/status/alexcrichton/proc-macro2/build%20and%20test)](https://github.com/alexcrichton/proc-macro2/actions) + [![Latest Version](https://img.shields.io/crates/v/proc-macro2.svg)](https://crates.io/crates/proc-macro2) + [![Rust Documentation](https://img.shields.io/badge/api-rustdoc-blue.svg)](https://docs.rs/proc-macro2) + +diff --git a/third_party/rust/proc-macro2/build.rs b/third_party/rust/proc-macro2/build.rs +index deb9b92719..b247d874f6 100644 +--- third_party/rust/proc-macro2/build.rs ++++ 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 ++++ third_party/rust/proc-macro2/src/detection.rs +@@ -0,0 +1,67 @@ ++use std::panic::{self, PanicInfo}; ++use std::sync::atomic::*; ++use std::sync::Once; ++ ++static WORKS: AtomicUsize = AtomicUsize::new(0); ++static INIT: Once = Once::new(); ++ ++pub(crate) fn inside_proc_macro() -> bool { ++ match WORKS.load(Ordering::SeqCst) { ++ 1 => return false, ++ 2 => return true, ++ _ => {} ++ } ++ ++ INIT.call_once(initialize); ++ inside_proc_macro() ++} ++ ++pub(crate) fn force_fallback() { ++ WORKS.store(1, Ordering::SeqCst); ++} ++ ++pub(crate) fn unforce_fallback() { ++ initialize(); ++} ++ ++// Swap in a null panic hook to avoid printing "thread panicked" to stderr, ++// then use catch_unwind to determine whether the compiler's proc_macro is ++// working. When proc-macro2 is used from outside of a procedural macro all ++// of the proc_macro crate's APIs currently panic. ++// ++// The Once is to prevent the possibility of this ordering: ++// ++// thread 1 calls take_hook, gets the user's original hook ++// thread 1 calls set_hook with the null hook ++// thread 2 calls take_hook, thinks null hook is the original hook ++// thread 2 calls set_hook with the null hook ++// thread 1 calls set_hook with the actual original hook ++// thread 2 calls set_hook with what it thinks is the original hook ++// ++// in which the user's hook has been lost. ++// ++// There is still a race condition where a panic in a different thread can ++// happen during the interval that the user's original panic hook is ++// unregistered such that their hook is incorrectly not called. This is ++// sufficiently unlikely and less bad than printing panic messages to stderr ++// on correct use of this crate. Maybe there is a libstd feature request ++// here. For now, if a user needs to guarantee that this failure mode does ++// not occur, they need to call e.g. `proc_macro2::Span::call_site()` from ++// the main thread before launching any other threads. ++fn initialize() { ++ type PanicHook = dyn Fn(&PanicInfo) + Sync + Send + 'static; ++ ++ let null_hook: Box = Box::new(|_panic_info| { /* ignore */ }); ++ let sanity_check = &*null_hook as *const PanicHook; ++ let original_hook = panic::take_hook(); ++ panic::set_hook(null_hook); ++ ++ let works = panic::catch_unwind(proc_macro::Span::call_site).is_ok(); ++ WORKS.store(works as usize + 1, Ordering::SeqCst); ++ ++ let hopefully_null_hook = panic::take_hook(); ++ panic::set_hook(original_hook); ++ if sanity_check != &*hopefully_null_hook { ++ panic!("observed race condition in proc_macro2::inside_proc_macro"); ++ } ++} +diff --git a/third_party/rust/proc-macro2/src/fallback.rs b/third_party/rust/proc-macro2/src/fallback.rs +index fe582b3b5f..8900c5ff0f 100644 +--- third_party/rust/proc-macro2/src/fallback.rs ++++ third_party/rust/proc-macro2/src/fallback.rs +@@ -1,27 +1,41 @@ ++use crate::parse::{token_stream, Cursor}; ++use crate::{Delimiter, Spacing, TokenTree}; + #[cfg(span_locations)] + use std::cell::RefCell; + #[cfg(span_locations)] + use std::cmp; +-use std::fmt; +-use std::iter; ++use std::fmt::{self, Debug, Display}; ++use std::iter::FromIterator; ++use std::mem; + use std::ops::RangeBounds; + #[cfg(procmacro2_semver_exempt)] + use std::path::Path; + use std::path::PathBuf; + use std::str::FromStr; + use std::vec; +- +-use crate::strnom::{block_comment, skip_whitespace, whitespace, word_break, Cursor, PResult}; +-use crate::{Delimiter, Punct, Spacing, TokenTree}; + use unicode_xid::UnicodeXID; + ++/// Force use of proc-macro2's fallback implementation of the API for now, even ++/// if the compiler's implementation is available. ++pub fn force() { ++ #[cfg(wrap_proc_macro)] ++ crate::detection::force_fallback(); ++} ++ ++/// Resume using the compiler's implementation of the proc macro API if it is ++/// available. ++pub fn unforce() { ++ #[cfg(wrap_proc_macro)] ++ crate::detection::unforce_fallback(); ++} ++ + #[derive(Clone)] +-pub struct TokenStream { +- inner: Vec, ++pub(crate) struct TokenStream { ++ pub(crate) inner: Vec, + } + + #[derive(Debug)] +-pub struct LexError; ++pub(crate) struct LexError; + + impl TokenStream { + pub fn new() -> TokenStream { +@@ -31,6 +45,72 @@ impl TokenStream { + pub fn is_empty(&self) -> bool { + self.inner.len() == 0 + } ++ ++ fn take_inner(&mut self) -> Vec { ++ mem::replace(&mut self.inner, Vec::new()) ++ } ++ ++ fn push_token(&mut self, token: TokenTree) { ++ // https://github.com/alexcrichton/proc-macro2/issues/235 ++ match token { ++ #[cfg(not(no_bind_by_move_pattern_guard))] ++ TokenTree::Literal(crate::Literal { ++ #[cfg(wrap_proc_macro)] ++ inner: crate::imp::Literal::Fallback(literal), ++ #[cfg(not(wrap_proc_macro))] ++ inner: literal, ++ .. ++ }) if literal.text.starts_with('-') => { ++ push_negative_literal(self, literal); ++ } ++ #[cfg(no_bind_by_move_pattern_guard)] ++ TokenTree::Literal(crate::Literal { ++ #[cfg(wrap_proc_macro)] ++ inner: crate::imp::Literal::Fallback(literal), ++ #[cfg(not(wrap_proc_macro))] ++ inner: literal, ++ .. ++ }) => { ++ if literal.text.starts_with('-') { ++ push_negative_literal(self, literal); ++ } else { ++ self.inner ++ .push(TokenTree::Literal(crate::Literal::_new_stable(literal))); ++ } ++ } ++ _ => self.inner.push(token), ++ } ++ ++ #[cold] ++ fn push_negative_literal(stream: &mut TokenStream, mut literal: Literal) { ++ literal.text.remove(0); ++ let mut punct = crate::Punct::new('-', Spacing::Alone); ++ punct.set_span(crate::Span::_new_stable(literal.span)); ++ stream.inner.push(TokenTree::Punct(punct)); ++ stream ++ .inner ++ .push(TokenTree::Literal(crate::Literal::_new_stable(literal))); ++ } ++ } ++} ++ ++// Nonrecursive to prevent stack overflow. ++impl Drop for TokenStream { ++ fn drop(&mut self) { ++ while let Some(token) = self.inner.pop() { ++ let group = match token { ++ TokenTree::Group(group) => group.inner, ++ _ => continue, ++ }; ++ #[cfg(wrap_proc_macro)] ++ let group = match group { ++ crate::imp::Group::Fallback(group) => group, ++ _ => continue, ++ }; ++ let mut group = group; ++ self.inner.extend(group.stream.take_inner()); ++ } ++ } + } + + #[cfg(span_locations)] +@@ -59,20 +139,22 @@ impl FromStr for TokenStream { + // Create a dummy file & add it to the source map + let cursor = get_cursor(src); + +- match token_stream(cursor) { +- Ok((input, output)) => { +- if skip_whitespace(input).len() != 0 { +- Err(LexError) +- } else { +- Ok(output) +- } +- } +- Err(LexError) => Err(LexError), ++ let (rest, tokens) = token_stream(cursor)?; ++ if rest.is_empty() { ++ Ok(tokens) ++ } else { ++ Err(LexError) + } + } + } + +-impl fmt::Display for TokenStream { ++impl Display for LexError { ++ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { ++ f.write_str("cannot parse string into token stream") ++ } ++} ++ ++impl Display for TokenStream { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let mut joint = false; + for (i, tt) in self.inner.iter().enumerate() { +@@ -80,37 +162,22 @@ impl fmt::Display for TokenStream { + write!(f, " ")?; + } + joint = false; +- match *tt { +- TokenTree::Group(ref tt) => { +- let (start, end) = match tt.delimiter() { +- Delimiter::Parenthesis => ("(", ")"), +- Delimiter::Brace => ("{", "}"), +- Delimiter::Bracket => ("[", "]"), +- Delimiter::None => ("", ""), +- }; +- if tt.stream().into_iter().next().is_none() { +- write!(f, "{} {}", start, end)? +- } else { +- write!(f, "{} {} {}", start, tt.stream(), end)? +- } +- } +- TokenTree::Ident(ref tt) => write!(f, "{}", tt)?, +- TokenTree::Punct(ref tt) => { +- write!(f, "{}", tt.as_char())?; +- match tt.spacing() { +- Spacing::Alone => {} +- Spacing::Joint => joint = true, +- } ++ match tt { ++ TokenTree::Group(tt) => Display::fmt(tt, f), ++ TokenTree::Ident(tt) => Display::fmt(tt, f), ++ TokenTree::Punct(tt) => { ++ joint = tt.spacing() == Spacing::Joint; ++ Display::fmt(tt, f) + } +- TokenTree::Literal(ref tt) => write!(f, "{}", tt)?, +- } ++ TokenTree::Literal(tt) => Display::fmt(tt, f), ++ }? + } + + Ok(()) + } + } + +-impl fmt::Debug for TokenStream { ++impl Debug for TokenStream { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.write_str("TokenStream ")?; + f.debug_list().entries(self.clone()).finish() +@@ -139,28 +206,26 @@ impl From for proc_macro::TokenStream { + + impl From for TokenStream { + fn from(tree: TokenTree) -> TokenStream { +- TokenStream { inner: vec![tree] } ++ let mut stream = TokenStream::new(); ++ stream.push_token(tree); ++ stream + } + } + +-impl iter::FromIterator for TokenStream { +- fn from_iter>(streams: I) -> Self { +- let mut v = Vec::new(); +- +- for token in streams.into_iter() { +- v.push(token); +- } +- +- TokenStream { inner: v } ++impl FromIterator for TokenStream { ++ fn from_iter>(tokens: I) -> Self { ++ let mut stream = TokenStream::new(); ++ stream.extend(tokens); ++ stream + } + } + +-impl iter::FromIterator for TokenStream { ++impl FromIterator for TokenStream { + fn from_iter>(streams: I) -> Self { + let mut v = Vec::new(); + +- for stream in streams.into_iter() { +- v.extend(stream.inner); ++ for mut stream in streams { ++ v.extend(stream.take_inner()); + } + + TokenStream { inner: v } +@@ -168,31 +233,30 @@ impl iter::FromIterator for TokenStream { + } + + impl Extend for TokenStream { +- fn extend>(&mut self, streams: I) { +- self.inner.extend(streams); ++ fn extend>(&mut self, tokens: I) { ++ tokens.into_iter().for_each(|token| self.push_token(token)); + } + } + + impl Extend for TokenStream { + fn extend>(&mut self, streams: I) { +- self.inner +- .extend(streams.into_iter().flat_map(|stream| stream)); ++ self.inner.extend(streams.into_iter().flatten()); + } + } + +-pub type TokenTreeIter = vec::IntoIter; ++pub(crate) type TokenTreeIter = vec::IntoIter; + + impl IntoIterator for TokenStream { + type Item = TokenTree; + type IntoIter = TokenTreeIter; + +- fn into_iter(self) -> TokenTreeIter { +- self.inner.into_iter() ++ fn into_iter(mut self) -> TokenTreeIter { ++ self.take_inner().into_iter() + } + } + + #[derive(Clone, PartialEq, Eq)] +-pub struct SourceFile { ++pub(crate) struct SourceFile { + path: PathBuf, + } + +@@ -208,7 +272,7 @@ impl SourceFile { + } + } + +-impl fmt::Debug for SourceFile { ++impl Debug for SourceFile { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_struct("SourceFile") + .field("path", &self.path()) +@@ -218,7 +282,7 @@ impl fmt::Debug for SourceFile { + } + + #[derive(Clone, Copy, Debug, PartialEq, Eq)] +-pub struct LineColumn { ++pub(crate) struct LineColumn { + pub line: usize, + pub column: usize, + } +@@ -228,23 +292,11 @@ thread_local! { + static SOURCE_MAP: RefCell = RefCell::new(SourceMap { + // NOTE: We start with a single dummy file which all call_site() and + // def_site() spans reference. +- files: vec![{ ++ files: vec![FileInfo { + #[cfg(procmacro2_semver_exempt)] +- { +- FileInfo { +- name: "".to_owned(), +- span: Span { lo: 0, hi: 0 }, +- lines: vec![0], +- } +- } +- +- #[cfg(not(procmacro2_semver_exempt))] +- { +- FileInfo { +- span: Span { lo: 0, hi: 0 }, +- lines: vec![0], +- } +- } ++ name: "".to_owned(), ++ span: Span { lo: 0, hi: 0 }, ++ lines: vec![0], + }], + }); + } +@@ -282,16 +334,21 @@ impl FileInfo { + } + } + +-/// Computesthe offsets of each line in the given source string. ++/// Computes the offsets of each line in the given source string ++/// and the total number of characters + #[cfg(span_locations)] +-fn lines_offsets(s: &str) -> Vec { ++fn lines_offsets(s: &str) -> (usize, Vec) { + let mut lines = vec![0]; +- let mut prev = 0; +- while let Some(len) = s[prev..].find('\n') { +- prev += len + 1; +- lines.push(prev); ++ let mut total = 0; ++ ++ for ch in s.chars() { ++ total += 1; ++ if ch == '\n' { ++ lines.push(total); ++ } + } +- lines ++ ++ (total, lines) + } + + #[cfg(span_locations)] +@@ -310,23 +367,22 @@ impl SourceMap { + } + + fn add_file(&mut self, name: &str, src: &str) -> Span { +- let lines = lines_offsets(src); ++ let (len, lines) = lines_offsets(src); + let lo = self.next_start_pos(); + // XXX(nika): Shouild we bother doing a checked cast or checked add here? + let span = Span { + lo, +- hi: lo + (src.len() as u32), ++ hi: lo + (len as u32), + }; + +- #[cfg(procmacro2_semver_exempt)] + self.files.push(FileInfo { ++ #[cfg(procmacro2_semver_exempt)] + name: name.to_owned(), + span, + lines, + }); + + #[cfg(not(procmacro2_semver_exempt))] +- self.files.push(FileInfo { span, lines }); + let _ = name; + + span +@@ -343,11 +399,11 @@ impl SourceMap { + } + + #[derive(Clone, Copy, PartialEq, Eq)] +-pub struct Span { ++pub(crate) struct Span { + #[cfg(span_locations)] +- lo: u32, ++ pub(crate) lo: u32, + #[cfg(span_locations)] +- hi: u32, ++ pub(crate) hi: u32, + } + + impl Span { +@@ -361,12 +417,16 @@ impl Span { + Span { lo: 0, hi: 0 } + } + ++ #[cfg(hygiene)] ++ pub fn mixed_site() -> Span { ++ Span::call_site() ++ } ++ + #[cfg(procmacro2_semver_exempt)] + pub fn def_site() -> Span { + Span::call_site() + } + +- #[cfg(procmacro2_semver_exempt)] + pub fn resolved_at(&self, _other: Span) -> Span { + // Stable spans consist only of line/column information, so + // `resolved_at` and `located_at` only select which span the +@@ -374,7 +434,6 @@ impl Span { + *self + } + +- #[cfg(procmacro2_semver_exempt)] + pub fn located_at(&self, other: Span) -> Span { + other + } +@@ -427,26 +486,59 @@ impl Span { + }) + }) + } ++ ++ #[cfg(not(span_locations))] ++ fn first_byte(self) -> Self { ++ self ++ } ++ ++ #[cfg(span_locations)] ++ fn first_byte(self) -> Self { ++ Span { ++ lo: self.lo, ++ hi: cmp::min(self.lo.saturating_add(1), self.hi), ++ } ++ } ++ ++ #[cfg(not(span_locations))] ++ fn last_byte(self) -> Self { ++ self ++ } ++ ++ #[cfg(span_locations)] ++ fn last_byte(self) -> Self { ++ Span { ++ lo: cmp::max(self.hi.saturating_sub(1), self.lo), ++ hi: self.hi, ++ } ++ } + } + +-impl fmt::Debug for Span { ++impl Debug for Span { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +- #[cfg(procmacro2_semver_exempt)] ++ #[cfg(span_locations)] + return write!(f, "bytes({}..{})", self.lo, self.hi); + +- #[cfg(not(procmacro2_semver_exempt))] ++ #[cfg(not(span_locations))] + write!(f, "Span") + } + } + +-pub fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) { +- if cfg!(procmacro2_semver_exempt) { ++pub(crate) fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) { ++ #[cfg(span_locations)] ++ { ++ if span.lo == 0 && span.hi == 0 { ++ return; ++ } ++ } ++ ++ if cfg!(span_locations) { + debug.field("span", &span); + } + } + + #[derive(Clone)] +-pub struct Group { ++pub(crate) struct Group { + delimiter: Delimiter, + stream: TokenStream, + span: Span, +@@ -474,11 +566,11 @@ impl Group { + } + + pub fn span_open(&self) -> Span { +- self.span ++ self.span.first_byte() + } + + pub fn span_close(&self) -> Span { +- self.span ++ self.span.last_byte() + } + + pub fn set_span(&mut self, span: Span) { +@@ -486,36 +578,45 @@ impl Group { + } + } + +-impl fmt::Display for Group { ++impl Display for Group { ++ // We attempt to match libproc_macro's formatting. ++ // Empty parens: () ++ // Nonempty parens: (...) ++ // Empty brackets: [] ++ // Nonempty brackets: [...] ++ // Empty braces: { } ++ // Nonempty braces: { ... } + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +- let (left, right) = match self.delimiter { ++ let (open, close) = match self.delimiter { + Delimiter::Parenthesis => ("(", ")"), +- Delimiter::Brace => ("{", "}"), ++ Delimiter::Brace => ("{ ", "}"), + Delimiter::Bracket => ("[", "]"), + Delimiter::None => ("", ""), + }; + +- f.write_str(left)?; +- self.stream.fmt(f)?; +- f.write_str(right)?; ++ f.write_str(open)?; ++ Display::fmt(&self.stream, f)?; ++ if self.delimiter == Delimiter::Brace && !self.stream.inner.is_empty() { ++ f.write_str(" ")?; ++ } ++ f.write_str(close)?; + + Ok(()) + } + } + +-impl fmt::Debug for Group { ++impl Debug for Group { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + let mut debug = fmt.debug_struct("Group"); + debug.field("delimiter", &self.delimiter); + debug.field("stream", &self.stream); +- #[cfg(procmacro2_semver_exempt)] +- debug.field("span", &self.span); ++ debug_span_field_if_nontrivial(&mut debug, self.span); + debug.finish() + } + } + + #[derive(Clone)] +-pub struct Ident { ++pub(crate) struct Ident { + sym: String, + span: Span, + raw: bool, +@@ -549,16 +650,14 @@ impl Ident { + } + } + +-#[inline] +-fn is_ident_start(c: char) -> bool { ++pub(crate) fn is_ident_start(c: char) -> bool { + ('a' <= c && c <= 'z') + || ('A' <= c && c <= 'Z') + || c == '_' + || (c > '\x7f' && UnicodeXID::is_xid_start(c)) + } + +-#[inline] +-fn is_ident_continue(c: char) -> bool { ++pub(crate) fn is_ident_continue(c: char) -> bool { + ('a' <= c && c <= 'z') + || ('A' <= c && c <= 'Z') + || c == '_' +@@ -615,18 +714,18 @@ where + } + } + +-impl fmt::Display for Ident { ++impl Display for Ident { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + if self.raw { +- "r#".fmt(f)?; ++ f.write_str("r#")?; + } +- self.sym.fmt(f) ++ Display::fmt(&self.sym, f) + } + } + +-impl fmt::Debug for Ident { ++impl Debug for Ident { + // Ident(proc_macro), Ident(r#union) +- #[cfg(not(procmacro2_semver_exempt))] ++ #[cfg(not(span_locations))] + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let mut debug = f.debug_tuple("Ident"); + debug.field(&format_args!("{}", self)); +@@ -637,17 +736,17 @@ impl fmt::Debug for Ident { + // sym: proc_macro, + // span: bytes(128..138) + // } +- #[cfg(procmacro2_semver_exempt)] ++ #[cfg(span_locations)] + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + let mut debug = f.debug_struct("Ident"); + debug.field("sym", &format_args!("{}", self)); +- debug.field("span", &self.span); ++ debug_span_field_if_nontrivial(&mut debug, self.span); + debug.finish() + } + } + + #[derive(Clone)] +-pub struct Literal { ++pub(crate) struct Literal { + text: String, + span: Span, + } +@@ -669,7 +768,7 @@ macro_rules! unsuffixed_numbers { + } + + impl Literal { +- fn _new(text: String) -> Literal { ++ pub(crate) fn _new(text: String) -> Literal { + Literal { + text, + span: Span::call_site(), +@@ -711,7 +810,7 @@ impl Literal { + + pub fn f32_unsuffixed(f: f32) -> Literal { + let mut s = f.to_string(); +- if !s.contains(".") { ++ if !s.contains('.') { + s.push_str(".0"); + } + Literal::_new(s) +@@ -719,7 +818,7 @@ impl Literal { + + pub fn f64_unsuffixed(f: f64) -> Literal { + let mut s = f.to_string(); +- if !s.contains(".") { ++ if !s.contains('.') { + s.push_str(".0"); + } + Literal::_new(s) +@@ -730,10 +829,10 @@ impl Literal { + text.push('"'); + for c in t.chars() { + if c == '\'' { +- // escape_default turns this into "\'" which is unnecessary. ++ // escape_debug turns this into "\'" which is unnecessary. + text.push(c); + } else { +- text.extend(c.escape_default()); ++ text.extend(c.escape_debug()); + } + } + text.push('"'); +@@ -744,10 +843,10 @@ impl Literal { + let mut text = String::new(); + text.push('\''); + if t == '"' { +- // escape_default turns this into '\"' which is unnecessary. ++ // escape_debug turns this into '\"' which is unnecessary. + text.push(t); + } else { +- text.extend(t.escape_default()); ++ text.extend(t.escape_debug()); + } + text.push('\''); + Literal::_new(text) +@@ -756,6 +855,7 @@ impl Literal { + pub fn byte_string(bytes: &[u8]) -> Literal { + let mut escaped = "b\"".to_string(); + for b in bytes { ++ #[allow(clippy::match_overlapping_arm)] + match *b { + b'\0' => escaped.push_str(r"\0"), + b'\t' => escaped.push_str(r"\t"), +@@ -784,651 +884,17 @@ impl Literal { + } + } + +-impl fmt::Display for Literal { ++impl Display for Literal { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +- self.text.fmt(f) ++ Display::fmt(&self.text, f) + } + } + +-impl fmt::Debug for Literal { ++impl Debug for Literal { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + let mut debug = fmt.debug_struct("Literal"); + debug.field("lit", &format_args!("{}", self.text)); +- #[cfg(procmacro2_semver_exempt)] +- debug.field("span", &self.span); ++ debug_span_field_if_nontrivial(&mut debug, self.span); + debug.finish() + } + } +- +-fn token_stream(mut input: Cursor) -> PResult { +- let mut trees = Vec::new(); +- loop { +- let input_no_ws = skip_whitespace(input); +- if input_no_ws.rest.len() == 0 { +- break; +- } +- if let Ok((a, tokens)) = doc_comment(input_no_ws) { +- input = a; +- trees.extend(tokens); +- continue; +- } +- +- let (a, tt) = match token_tree(input_no_ws) { +- Ok(p) => p, +- Err(_) => break, +- }; +- trees.push(tt); +- input = a; +- } +- Ok((input, TokenStream { inner: trees })) +-} +- +-#[cfg(not(span_locations))] +-fn spanned<'a, T>( +- input: Cursor<'a>, +- f: fn(Cursor<'a>) -> PResult<'a, T>, +-) -> PResult<'a, (T, crate::Span)> { +- let (a, b) = f(skip_whitespace(input))?; +- Ok((a, ((b, crate::Span::_new_stable(Span::call_site()))))) +-} +- +-#[cfg(span_locations)] +-fn spanned<'a, T>( +- input: Cursor<'a>, +- f: fn(Cursor<'a>) -> PResult<'a, T>, +-) -> PResult<'a, (T, crate::Span)> { +- let input = skip_whitespace(input); +- let lo = input.off; +- let (a, b) = f(input)?; +- let hi = a.off; +- let span = crate::Span::_new_stable(Span { lo, hi }); +- Ok((a, (b, span))) +-} +- +-fn token_tree(input: Cursor) -> PResult { +- let (rest, (mut tt, span)) = spanned(input, token_kind)?; +- tt.set_span(span); +- Ok((rest, tt)) +-} +- +-named!(token_kind -> TokenTree, alt!( +- map!(group, |g| TokenTree::Group(crate::Group::_new_stable(g))) +- | +- map!(literal, |l| TokenTree::Literal(crate::Literal::_new_stable(l))) // must be before symbol +- | +- map!(op, TokenTree::Punct) +- | +- symbol_leading_ws +-)); +- +-named!(group -> Group, alt!( +- delimited!( +- punct!("("), +- token_stream, +- punct!(")") +- ) => { |ts| Group::new(Delimiter::Parenthesis, ts) } +- | +- delimited!( +- punct!("["), +- token_stream, +- punct!("]") +- ) => { |ts| Group::new(Delimiter::Bracket, ts) } +- | +- delimited!( +- punct!("{"), +- token_stream, +- punct!("}") +- ) => { |ts| Group::new(Delimiter::Brace, ts) } +-)); +- +-fn symbol_leading_ws(input: Cursor) -> PResult { +- symbol(skip_whitespace(input)) +-} +- +-fn symbol(input: Cursor) -> PResult { +- let raw = input.starts_with("r#"); +- let rest = input.advance((raw as usize) << 1); +- +- let (rest, sym) = symbol_not_raw(rest)?; +- +- if !raw { +- let ident = crate::Ident::new(sym, crate::Span::call_site()); +- return Ok((rest, ident.into())); +- } +- +- if sym == "_" { +- return Err(LexError); +- } +- +- let ident = crate::Ident::_new_raw(sym, crate::Span::call_site()); +- Ok((rest, ident.into())) +-} +- +-fn symbol_not_raw(input: Cursor) -> PResult<&str> { +- let mut chars = input.char_indices(); +- +- match chars.next() { +- Some((_, ch)) if is_ident_start(ch) => {} +- _ => return Err(LexError), +- } +- +- let mut end = input.len(); +- for (i, ch) in chars { +- if !is_ident_continue(ch) { +- end = i; +- break; +- } +- } +- +- Ok((input.advance(end), &input.rest[..end])) +-} +- +-fn literal(input: Cursor) -> PResult { +- let input_no_ws = skip_whitespace(input); +- +- match literal_nocapture(input_no_ws) { +- Ok((a, ())) => { +- let start = input.len() - input_no_ws.len(); +- let len = input_no_ws.len() - a.len(); +- let end = start + len; +- Ok((a, Literal::_new(input.rest[start..end].to_string()))) +- } +- Err(LexError) => Err(LexError), +- } +-} +- +-named!(literal_nocapture -> (), alt!( +- string +- | +- byte_string +- | +- byte +- | +- character +- | +- float +- | +- int +-)); +- +-named!(string -> (), alt!( +- quoted_string +- | +- preceded!( +- punct!("r"), +- raw_string +- ) => { |_| () } +-)); +- +-named!(quoted_string -> (), do_parse!( +- punct!("\"") >> +- cooked_string >> +- tag!("\"") >> +- option!(symbol_not_raw) >> +- (()) +-)); +- +-fn cooked_string(input: Cursor) -> PResult<()> { +- let mut chars = input.char_indices().peekable(); +- while let Some((byte_offset, ch)) = chars.next() { +- match ch { +- '"' => { +- return Ok((input.advance(byte_offset), ())); +- } +- '\r' => { +- if let Some((_, '\n')) = chars.next() { +- // ... +- } else { +- break; +- } +- } +- '\\' => match chars.next() { +- Some((_, 'x')) => { +- if !backslash_x_char(&mut chars) { +- break; +- } +- } +- Some((_, 'n')) | Some((_, 'r')) | Some((_, 't')) | Some((_, '\\')) +- | Some((_, '\'')) | Some((_, '"')) | Some((_, '0')) => {} +- Some((_, 'u')) => { +- if !backslash_u(&mut chars) { +- break; +- } +- } +- Some((_, '\n')) | Some((_, '\r')) => { +- while let Some(&(_, ch)) = chars.peek() { +- if ch.is_whitespace() { +- chars.next(); +- } else { +- break; +- } +- } +- } +- _ => break, +- }, +- _ch => {} +- } +- } +- Err(LexError) +-} +- +-named!(byte_string -> (), alt!( +- delimited!( +- punct!("b\""), +- cooked_byte_string, +- tag!("\"") +- ) => { |_| () } +- | +- preceded!( +- punct!("br"), +- raw_string +- ) => { |_| () } +-)); +- +-fn cooked_byte_string(mut input: Cursor) -> PResult<()> { +- let mut bytes = input.bytes().enumerate(); +- 'outer: while let Some((offset, b)) = bytes.next() { +- match b { +- b'"' => { +- return Ok((input.advance(offset), ())); +- } +- b'\r' => { +- if let Some((_, b'\n')) = bytes.next() { +- // ... +- } else { +- break; +- } +- } +- b'\\' => match bytes.next() { +- Some((_, b'x')) => { +- if !backslash_x_byte(&mut bytes) { +- break; +- } +- } +- Some((_, b'n')) | Some((_, b'r')) | Some((_, b't')) | Some((_, b'\\')) +- | Some((_, b'0')) | Some((_, b'\'')) | Some((_, b'"')) => {} +- Some((newline, b'\n')) | Some((newline, b'\r')) => { +- let rest = input.advance(newline + 1); +- for (offset, ch) in rest.char_indices() { +- if !ch.is_whitespace() { +- input = rest.advance(offset); +- bytes = input.bytes().enumerate(); +- continue 'outer; +- } +- } +- break; +- } +- _ => break, +- }, +- b if b < 0x80 => {} +- _ => break, +- } +- } +- Err(LexError) +-} +- +-fn raw_string(input: Cursor) -> PResult<()> { +- let mut chars = input.char_indices(); +- let mut n = 0; +- while let Some((byte_offset, ch)) = chars.next() { +- match ch { +- '"' => { +- n = byte_offset; +- break; +- } +- '#' => {} +- _ => return Err(LexError), +- } +- } +- for (byte_offset, ch) in chars { +- match ch { +- '"' if input.advance(byte_offset + 1).starts_with(&input.rest[..n]) => { +- let rest = input.advance(byte_offset + 1 + n); +- return Ok((rest, ())); +- } +- '\r' => {} +- _ => {} +- } +- } +- Err(LexError) +-} +- +-named!(byte -> (), do_parse!( +- punct!("b") >> +- tag!("'") >> +- cooked_byte >> +- tag!("'") >> +- (()) +-)); +- +-fn cooked_byte(input: Cursor) -> PResult<()> { +- let mut bytes = input.bytes().enumerate(); +- let ok = match bytes.next().map(|(_, b)| b) { +- Some(b'\\') => match bytes.next().map(|(_, b)| b) { +- Some(b'x') => backslash_x_byte(&mut bytes), +- Some(b'n') | Some(b'r') | Some(b't') | Some(b'\\') | Some(b'0') | Some(b'\'') +- | Some(b'"') => true, +- _ => false, +- }, +- b => b.is_some(), +- }; +- if ok { +- match bytes.next() { +- Some((offset, _)) => { +- if input.chars().as_str().is_char_boundary(offset) { +- Ok((input.advance(offset), ())) +- } else { +- Err(LexError) +- } +- } +- None => Ok((input.advance(input.len()), ())), +- } +- } else { +- Err(LexError) +- } +-} +- +-named!(character -> (), do_parse!( +- punct!("'") >> +- cooked_char >> +- tag!("'") >> +- (()) +-)); +- +-fn cooked_char(input: Cursor) -> PResult<()> { +- let mut chars = input.char_indices(); +- let ok = match chars.next().map(|(_, ch)| ch) { +- Some('\\') => match chars.next().map(|(_, ch)| ch) { +- Some('x') => backslash_x_char(&mut chars), +- Some('u') => backslash_u(&mut chars), +- Some('n') | Some('r') | Some('t') | Some('\\') | Some('0') | Some('\'') | Some('"') => { +- true +- } +- _ => false, +- }, +- ch => ch.is_some(), +- }; +- if ok { +- match chars.next() { +- Some((idx, _)) => Ok((input.advance(idx), ())), +- None => Ok((input.advance(input.len()), ())), +- } +- } else { +- Err(LexError) +- } +-} +- +-macro_rules! next_ch { +- ($chars:ident @ $pat:pat $(| $rest:pat)*) => { +- match $chars.next() { +- Some((_, ch)) => match ch { +- $pat $(| $rest)* => ch, +- _ => return false, +- }, +- None => return false +- } +- }; +-} +- +-fn backslash_x_char(chars: &mut I) -> bool +-where +- I: Iterator, +-{ +- next_ch!(chars @ '0'..='7'); +- next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F'); +- true +-} +- +-fn backslash_x_byte(chars: &mut I) -> bool +-where +- I: Iterator, +-{ +- next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F'); +- next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F'); +- true +-} +- +-fn backslash_u(chars: &mut I) -> bool +-where +- I: Iterator, +-{ +- next_ch!(chars @ '{'); +- next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F'); +- loop { +- let c = next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F' | '_' | '}'); +- if c == '}' { +- return true; +- } +- } +-} +- +-fn float(input: Cursor) -> PResult<()> { +- let (mut rest, ()) = float_digits(input)?; +- if let Some(ch) = rest.chars().next() { +- if is_ident_start(ch) { +- rest = symbol_not_raw(rest)?.0; +- } +- } +- word_break(rest) +-} +- +-fn float_digits(input: Cursor) -> PResult<()> { +- let mut chars = input.chars().peekable(); +- match chars.next() { +- Some(ch) if ch >= '0' && ch <= '9' => {} +- _ => return Err(LexError), +- } +- +- let mut len = 1; +- let mut has_dot = false; +- let mut has_exp = false; +- while let Some(&ch) = chars.peek() { +- match ch { +- '0'..='9' | '_' => { +- chars.next(); +- len += 1; +- } +- '.' => { +- if has_dot { +- break; +- } +- chars.next(); +- if chars +- .peek() +- .map(|&ch| ch == '.' || is_ident_start(ch)) +- .unwrap_or(false) +- { +- return Err(LexError); +- } +- len += 1; +- has_dot = true; +- } +- 'e' | 'E' => { +- chars.next(); +- len += 1; +- has_exp = true; +- break; +- } +- _ => break, +- } +- } +- +- let rest = input.advance(len); +- if !(has_dot || has_exp || rest.starts_with("f32") || rest.starts_with("f64")) { +- return Err(LexError); +- } +- +- if has_exp { +- let mut has_exp_value = false; +- while let Some(&ch) = chars.peek() { +- match ch { +- '+' | '-' => { +- if has_exp_value { +- break; +- } +- chars.next(); +- len += 1; +- } +- '0'..='9' => { +- chars.next(); +- len += 1; +- has_exp_value = true; +- } +- '_' => { +- chars.next(); +- len += 1; +- } +- _ => break, +- } +- } +- if !has_exp_value { +- return Err(LexError); +- } +- } +- +- Ok((input.advance(len), ())) +-} +- +-fn int(input: Cursor) -> PResult<()> { +- let (mut rest, ()) = digits(input)?; +- if let Some(ch) = rest.chars().next() { +- if is_ident_start(ch) { +- rest = symbol_not_raw(rest)?.0; +- } +- } +- word_break(rest) +-} +- +-fn digits(mut input: Cursor) -> PResult<()> { +- let base = if input.starts_with("0x") { +- input = input.advance(2); +- 16 +- } else if input.starts_with("0o") { +- input = input.advance(2); +- 8 +- } else if input.starts_with("0b") { +- input = input.advance(2); +- 2 +- } else { +- 10 +- }; +- +- let mut len = 0; +- let mut empty = true; +- for b in input.bytes() { +- let digit = match b { +- b'0'..=b'9' => (b - b'0') as u64, +- b'a'..=b'f' => 10 + (b - b'a') as u64, +- b'A'..=b'F' => 10 + (b - b'A') as u64, +- b'_' => { +- if empty && base == 10 { +- return Err(LexError); +- } +- len += 1; +- continue; +- } +- _ => break, +- }; +- if digit >= base { +- return Err(LexError); +- } +- len += 1; +- empty = false; +- } +- if empty { +- Err(LexError) +- } else { +- Ok((input.advance(len), ())) +- } +-} +- +-fn op(input: Cursor) -> PResult { +- let input = skip_whitespace(input); +- match op_char(input) { +- Ok((rest, '\'')) => { +- symbol(rest)?; +- Ok((rest, Punct::new('\'', Spacing::Joint))) +- } +- Ok((rest, ch)) => { +- let kind = match op_char(rest) { +- Ok(_) => Spacing::Joint, +- Err(LexError) => Spacing::Alone, +- }; +- Ok((rest, Punct::new(ch, kind))) +- } +- Err(LexError) => Err(LexError), +- } +-} +- +-fn op_char(input: Cursor) -> PResult { +- if input.starts_with("//") || input.starts_with("/*") { +- // Do not accept `/` of a comment as an op. +- return Err(LexError); +- } +- +- let mut chars = input.chars(); +- let first = match chars.next() { +- Some(ch) => ch, +- None => { +- return Err(LexError); +- } +- }; +- let recognized = "~!@#$%^&*-=+|;:,<.>/?'"; +- if recognized.contains(first) { +- Ok((input.advance(first.len_utf8()), first)) +- } else { +- Err(LexError) +- } +-} +- +-fn doc_comment(input: Cursor) -> PResult> { +- let mut trees = Vec::new(); +- let (rest, ((comment, inner), span)) = spanned(input, doc_comment_contents)?; +- trees.push(TokenTree::Punct(Punct::new('#', Spacing::Alone))); +- if inner { +- trees.push(Punct::new('!', Spacing::Alone).into()); +- } +- let mut stream = vec![ +- TokenTree::Ident(crate::Ident::new("doc", span)), +- TokenTree::Punct(Punct::new('=', Spacing::Alone)), +- TokenTree::Literal(crate::Literal::string(comment)), +- ]; +- for tt in stream.iter_mut() { +- tt.set_span(span); +- } +- let group = Group::new(Delimiter::Bracket, stream.into_iter().collect()); +- trees.push(crate::Group::_new_stable(group).into()); +- for tt in trees.iter_mut() { +- tt.set_span(span); +- } +- Ok((rest, trees)) +-} +- +-named!(doc_comment_contents -> (&str, bool), alt!( +- do_parse!( +- punct!("//!") >> +- s: take_until_newline_or_eof!() >> +- ((s, true)) +- ) +- | +- do_parse!( +- option!(whitespace) >> +- peek!(tag!("/*!")) >> +- s: block_comment >> +- ((s, true)) +- ) +- | +- do_parse!( +- punct!("///") >> +- not!(tag!("/")) >> +- s: take_until_newline_or_eof!() >> +- ((s, false)) +- ) +- | +- do_parse!( +- option!(whitespace) >> +- peek!(tuple!(tag!("/**"), not!(tag!("*")))) >> +- s: block_comment >> +- ((s, false)) +- ) +-)); +diff --git a/third_party/rust/proc-macro2/src/lib.rs b/third_party/rust/proc-macro2/src/lib.rs +index a08be3e815..c20fb50d4a 100644 +--- third_party/rust/proc-macro2/src/lib.rs ++++ third_party/rust/proc-macro2/src/lib.rs +@@ -78,27 +78,24 @@ + //! a different thread. + + // Proc-macro2 types in rustdoc of other crates get linked to here. +-#![doc(html_root_url = "https://docs.rs/proc-macro2/1.0.5")] ++#![doc(html_root_url = "https://docs.rs/proc-macro2/1.0.24")] + #![cfg_attr(any(proc_macro_span, super_unstable), feature(proc_macro_span))] + #![cfg_attr(super_unstable, feature(proc_macro_raw_ident, proc_macro_def_site))] ++#![allow(clippy::needless_doctest_main)] + + #[cfg(use_proc_macro)] + extern crate proc_macro; + +-use std::cmp::Ordering; +-use std::fmt; +-use std::hash::{Hash, Hasher}; +-use std::iter::FromIterator; +-use std::marker; +-use std::ops::RangeBounds; +-#[cfg(procmacro2_semver_exempt)] +-use std::path::PathBuf; +-use std::rc::Rc; +-use std::str::FromStr; ++mod marker; ++mod parse; ++ ++#[cfg(wrap_proc_macro)] ++mod detection; + +-#[macro_use] +-mod strnom; +-mod fallback; ++// Public for proc_macro2::fallback::force() and unforce(), but those are quite ++// a niche use case so we omit it from rustdoc. ++#[doc(hidden)] ++pub mod fallback; + + #[cfg(not(wrap_proc_macro))] + use crate::fallback as imp; +@@ -106,6 +103,17 @@ use crate::fallback as imp; + #[cfg(wrap_proc_macro)] + mod imp; + ++use crate::marker::Marker; ++use std::cmp::Ordering; ++use std::error::Error; ++use std::fmt::{self, Debug, Display}; ++use std::hash::{Hash, Hasher}; ++use std::iter::FromIterator; ++use std::ops::RangeBounds; ++#[cfg(procmacro2_semver_exempt)] ++use std::path::PathBuf; ++use std::str::FromStr; ++ + /// An abstract stream of tokens, or more concretely a sequence of token trees. + /// + /// This type provides interfaces for iterating over token trees and for +@@ -116,27 +124,27 @@ mod imp; + #[derive(Clone)] + pub struct TokenStream { + inner: imp::TokenStream, +- _marker: marker::PhantomData>, ++ _marker: Marker, + } + + /// Error returned from `TokenStream::from_str`. + pub struct LexError { + inner: imp::LexError, +- _marker: marker::PhantomData>, ++ _marker: Marker, + } + + impl TokenStream { + fn _new(inner: imp::TokenStream) -> TokenStream { + TokenStream { + inner, +- _marker: marker::PhantomData, ++ _marker: Marker, + } + } + + fn _new_stable(inner: fallback::TokenStream) -> TokenStream { + TokenStream { + inner: inner.into(), +- _marker: marker::PhantomData, ++ _marker: Marker, + } + } + +@@ -173,7 +181,7 @@ impl FromStr for TokenStream { + fn from_str(src: &str) -> Result { + let e = src.parse().map_err(|e| LexError { + inner: e, +- _marker: marker::PhantomData, ++ _marker: Marker, + })?; + Ok(TokenStream::_new(e)) + } +@@ -228,25 +236,33 @@ impl FromIterator for TokenStream { + /// convertible back into the same token stream (modulo spans), except for + /// possibly `TokenTree::Group`s with `Delimiter::None` delimiters and negative + /// numeric literals. +-impl fmt::Display for TokenStream { ++impl Display for TokenStream { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +- self.inner.fmt(f) ++ Display::fmt(&self.inner, f) + } + } + + /// Prints token in a form convenient for debugging. +-impl fmt::Debug for TokenStream { ++impl Debug for TokenStream { ++ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { ++ Debug::fmt(&self.inner, f) ++ } ++} ++ ++impl Debug for LexError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +- self.inner.fmt(f) ++ Debug::fmt(&self.inner, f) + } + } + +-impl fmt::Debug for LexError { ++impl Display for LexError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +- self.inner.fmt(f) ++ Display::fmt(&self.inner, f) + } + } + ++impl Error for LexError {} ++ + /// The source file of a given `Span`. + /// + /// This type is semver exempt and not exposed by default. +@@ -254,7 +270,7 @@ impl fmt::Debug for LexError { + #[derive(Clone, PartialEq, Eq)] + pub struct SourceFile { + inner: imp::SourceFile, +- _marker: marker::PhantomData>, ++ _marker: Marker, + } + + #[cfg(procmacro2_semver_exempt)] +@@ -262,7 +278,7 @@ impl SourceFile { + fn _new(inner: imp::SourceFile) -> Self { + SourceFile { + inner, +- _marker: marker::PhantomData, ++ _marker: Marker, + } + } + +@@ -291,9 +307,9 @@ impl SourceFile { + } + + #[cfg(procmacro2_semver_exempt)] +-impl fmt::Debug for SourceFile { ++impl Debug for SourceFile { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +- self.inner.fmt(f) ++ Debug::fmt(&self.inner, f) + } + } + +@@ -311,25 +327,41 @@ pub struct LineColumn { + pub column: usize, + } + ++#[cfg(span_locations)] ++impl Ord for LineColumn { ++ fn cmp(&self, other: &Self) -> Ordering { ++ self.line ++ .cmp(&other.line) ++ .then(self.column.cmp(&other.column)) ++ } ++} ++ ++#[cfg(span_locations)] ++impl PartialOrd for LineColumn { ++ fn partial_cmp(&self, other: &Self) -> Option { ++ Some(self.cmp(other)) ++ } ++} ++ + /// A region of source code, along with macro expansion information. + #[derive(Copy, Clone)] + pub struct Span { + inner: imp::Span, +- _marker: marker::PhantomData>, ++ _marker: Marker, + } + + impl Span { + fn _new(inner: imp::Span) -> Span { + Span { + inner, +- _marker: marker::PhantomData, ++ _marker: Marker, + } + } + + fn _new_stable(inner: fallback::Span) -> Span { + Span { + inner: inner.into(), +- _marker: marker::PhantomData, ++ _marker: Marker, + } + } + +@@ -342,6 +374,16 @@ impl Span { + Span::_new(imp::Span::call_site()) + } + ++ /// The span located at the invocation of the procedural macro, but with ++ /// local variables, labels, and `$crate` resolved at the definition site ++ /// of the macro. This is the same hygiene behavior as `macro_rules`. ++ /// ++ /// This function requires Rust 1.45 or later. ++ #[cfg(hygiene)] ++ pub fn mixed_site() -> Span { ++ Span::_new(imp::Span::mixed_site()) ++ } ++ + /// A span that resolves at the macro definition site. + /// + /// This method is semver exempt and not exposed by default. +@@ -352,18 +394,12 @@ impl Span { + + /// Creates a new span with the same line/column information as `self` but + /// that resolves symbols as though it were at `other`. +- /// +- /// This method is semver exempt and not exposed by default. +- #[cfg(procmacro2_semver_exempt)] + pub fn resolved_at(&self, other: Span) -> Span { + Span::_new(self.inner.resolved_at(other.inner)) + } + + /// Creates a new span with the same name resolution behavior as `self` but + /// with the line/column information of `other`. +- /// +- /// This method is semver exempt and not exposed by default. +- #[cfg(procmacro2_semver_exempt)] + pub fn located_at(&self, other: Span) -> Span { + Span::_new(self.inner.located_at(other.inner)) + } +@@ -439,9 +475,9 @@ impl Span { + } + + /// Prints a span in a form convenient for debugging. +-impl fmt::Debug for Span { ++impl Debug for Span { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +- self.inner.fmt(f) ++ Debug::fmt(&self.inner, f) + } + } + +@@ -462,11 +498,11 @@ impl TokenTree { + /// Returns the span of this tree, delegating to the `span` method of + /// the contained token or a delimited stream. + pub fn span(&self) -> Span { +- match *self { +- TokenTree::Group(ref t) => t.span(), +- TokenTree::Ident(ref t) => t.span(), +- TokenTree::Punct(ref t) => t.span(), +- TokenTree::Literal(ref t) => t.span(), ++ match self { ++ TokenTree::Group(t) => t.span(), ++ TokenTree::Ident(t) => t.span(), ++ TokenTree::Punct(t) => t.span(), ++ TokenTree::Literal(t) => t.span(), + } + } + +@@ -476,11 +512,11 @@ impl TokenTree { + /// the span of each of the internal tokens, this will simply delegate to + /// the `set_span` method of each variant. + pub fn set_span(&mut self, span: Span) { +- match *self { +- TokenTree::Group(ref mut t) => t.set_span(span), +- TokenTree::Ident(ref mut t) => t.set_span(span), +- TokenTree::Punct(ref mut t) => t.set_span(span), +- TokenTree::Literal(ref mut t) => t.set_span(span), ++ match self { ++ TokenTree::Group(t) => t.set_span(span), ++ TokenTree::Ident(t) => t.set_span(span), ++ TokenTree::Punct(t) => t.set_span(span), ++ TokenTree::Literal(t) => t.set_span(span), + } + } + } +@@ -513,32 +549,32 @@ impl From for TokenTree { + /// convertible back into the same token tree (modulo spans), except for + /// possibly `TokenTree::Group`s with `Delimiter::None` delimiters and negative + /// numeric literals. +-impl fmt::Display for TokenTree { ++impl Display for TokenTree { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +- match *self { +- TokenTree::Group(ref t) => t.fmt(f), +- TokenTree::Ident(ref t) => t.fmt(f), +- TokenTree::Punct(ref t) => t.fmt(f), +- TokenTree::Literal(ref t) => t.fmt(f), ++ match self { ++ TokenTree::Group(t) => Display::fmt(t, f), ++ TokenTree::Ident(t) => Display::fmt(t, f), ++ TokenTree::Punct(t) => Display::fmt(t, f), ++ TokenTree::Literal(t) => Display::fmt(t, f), + } + } + } + + /// Prints token tree in a form convenient for debugging. +-impl fmt::Debug for TokenTree { ++impl Debug for TokenTree { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + // Each of these has the name in the struct type in the derived debug, + // so don't bother with an extra layer of indirection +- match *self { +- TokenTree::Group(ref t) => t.fmt(f), +- TokenTree::Ident(ref t) => { ++ match self { ++ TokenTree::Group(t) => Debug::fmt(t, f), ++ TokenTree::Ident(t) => { + let mut debug = f.debug_struct("Ident"); + debug.field("sym", &format_args!("{}", t)); + imp::debug_span_field_if_nontrivial(&mut debug, t.span().inner); + debug.finish() + } +- TokenTree::Punct(ref t) => t.fmt(f), +- TokenTree::Literal(ref t) => t.fmt(f), ++ TokenTree::Punct(t) => Debug::fmt(t, f), ++ TokenTree::Literal(t) => Debug::fmt(t, f), + } + } + } +@@ -651,15 +687,15 @@ impl Group { + /// Prints the group as a string that should be losslessly convertible back + /// into the same group (modulo spans), except for possibly `TokenTree::Group`s + /// with `Delimiter::None` delimiters. +-impl fmt::Display for Group { ++impl Display for Group { + fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { +- fmt::Display::fmt(&self.inner, formatter) ++ Display::fmt(&self.inner, formatter) + } + } + +-impl fmt::Debug for Group { ++impl Debug for Group { + fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { +- fmt::Debug::fmt(&self.inner, formatter) ++ Debug::fmt(&self.inner, formatter) + } + } + +@@ -669,7 +705,7 @@ impl fmt::Debug for Group { + /// `Punct` with different forms of `Spacing` returned. + #[derive(Clone)] + pub struct Punct { +- op: char, ++ ch: char, + spacing: Spacing, + span: Span, + } +@@ -695,9 +731,9 @@ impl Punct { + /// + /// The returned `Punct` will have the default span of `Span::call_site()` + /// which can be further configured with the `set_span` method below. +- pub fn new(op: char, spacing: Spacing) -> Punct { ++ pub fn new(ch: char, spacing: Spacing) -> Punct { + Punct { +- op, ++ ch, + spacing, + span: Span::call_site(), + } +@@ -705,7 +741,7 @@ impl Punct { + + /// Returns the value of this punctuation character as `char`. + pub fn as_char(&self) -> char { +- self.op ++ self.ch + } + + /// Returns the spacing of this punctuation character, indicating whether +@@ -730,16 +766,16 @@ impl Punct { + + /// Prints the punctuation character as a string that should be losslessly + /// convertible back into the same character. +-impl fmt::Display for Punct { ++impl Display for Punct { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +- self.op.fmt(f) ++ Display::fmt(&self.ch, f) + } + } + +-impl fmt::Debug for Punct { ++impl Debug for Punct { + fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { + let mut debug = fmt.debug_struct("Punct"); +- debug.field("op", &self.op); ++ debug.field("char", &self.ch); + debug.field("spacing", &self.spacing); + imp::debug_span_field_if_nontrivial(&mut debug, self.span.inner); + debug.finish() +@@ -813,14 +849,14 @@ impl fmt::Debug for Punct { + #[derive(Clone)] + pub struct Ident { + inner: imp::Ident, +- _marker: marker::PhantomData>, ++ _marker: Marker, + } + + impl Ident { + fn _new(inner: imp::Ident) -> Ident { + Ident { + inner, +- _marker: marker::PhantomData, ++ _marker: Marker, + } + } + +@@ -920,15 +956,15 @@ impl Hash for Ident { + + /// Prints the identifier as a string that should be losslessly convertible back + /// into the same identifier. +-impl fmt::Display for Ident { ++impl Display for Ident { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +- self.inner.fmt(f) ++ Display::fmt(&self.inner, f) + } + } + +-impl fmt::Debug for Ident { ++impl Debug for Ident { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +- self.inner.fmt(f) ++ Debug::fmt(&self.inner, f) + } + } + +@@ -941,7 +977,7 @@ impl fmt::Debug for Ident { + #[derive(Clone)] + pub struct Literal { + inner: imp::Literal, +- _marker: marker::PhantomData>, ++ _marker: Marker, + } + + macro_rules! suffixed_int_literals { +@@ -988,14 +1024,14 @@ impl Literal { + fn _new(inner: imp::Literal) -> Literal { + Literal { + inner, +- _marker: marker::PhantomData, ++ _marker: Marker, + } + } + + fn _new_stable(inner: fallback::Literal) -> Literal { + Literal { + inner: inner.into(), +- _marker: marker::PhantomData, ++ _marker: Marker, + } + } + +@@ -1140,26 +1176,25 @@ impl Literal { + } + } + +-impl fmt::Debug for Literal { ++impl Debug for Literal { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +- self.inner.fmt(f) ++ Debug::fmt(&self.inner, f) + } + } + +-impl fmt::Display for Literal { ++impl Display for Literal { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +- self.inner.fmt(f) ++ Display::fmt(&self.inner, f) + } + } + + /// Public implementation details for the `TokenStream` type, such as iterators. + pub mod token_stream { +- use std::fmt; +- use std::marker; +- use std::rc::Rc; ++ use crate::marker::Marker; ++ use crate::{imp, TokenTree}; ++ use std::fmt::{self, Debug}; + + pub use crate::TokenStream; +- use crate::{imp, TokenTree}; + + /// An iterator over `TokenStream`'s `TokenTree`s. + /// +@@ -1168,7 +1203,7 @@ pub mod token_stream { + #[derive(Clone)] + pub struct IntoIter { + inner: imp::TokenTreeIter, +- _marker: marker::PhantomData>, ++ _marker: Marker, + } + + impl Iterator for IntoIter { +@@ -1179,9 +1214,9 @@ pub mod token_stream { + } + } + +- impl fmt::Debug for IntoIter { ++ impl Debug for IntoIter { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { +- self.inner.fmt(f) ++ Debug::fmt(&self.inner, f) + } + } + +@@ -1192,7 +1227,7 @@ pub mod token_stream { + fn into_iter(self) -> IntoIter { + IntoIter { + inner: self.inner.into_iter(), +- _marker: marker::PhantomData, ++ _marker: Marker, + } + } + } +diff --git a/third_party/rust/proc-macro2/src/marker.rs b/third_party/rust/proc-macro2/src/marker.rs +new file mode 100644 +index 0000000000..58729baf4a +--- /dev/null ++++ third_party/rust/proc-macro2/src/marker.rs +@@ -0,0 +1,18 @@ ++use std::marker::PhantomData; ++use std::panic::{RefUnwindSafe, UnwindSafe}; ++use std::rc::Rc; ++ ++// Zero sized marker with the correct set of autotrait impls we want all proc ++// macro types to have. ++pub(crate) type Marker = PhantomData; ++ ++pub(crate) use self::value::*; ++ ++mod value { ++ pub(crate) use std::marker::PhantomData as Marker; ++} ++ ++pub(crate) struct ProcMacroAutoTraits(Rc<()>); ++ ++impl UnwindSafe for ProcMacroAutoTraits {} ++impl RefUnwindSafe for ProcMacroAutoTraits {} +diff --git a/third_party/rust/proc-macro2/src/parse.rs b/third_party/rust/proc-macro2/src/parse.rs +new file mode 100644 +index 0000000000..365fe0484d +--- /dev/null ++++ third_party/rust/proc-macro2/src/parse.rs +@@ -0,0 +1,849 @@ ++use crate::fallback::{ ++ is_ident_continue, is_ident_start, Group, LexError, Literal, Span, TokenStream, ++}; ++use crate::{Delimiter, Punct, Spacing, TokenTree}; ++use std::char; ++use std::str::{Bytes, CharIndices, Chars}; ++ ++#[derive(Copy, Clone, Eq, PartialEq)] ++pub(crate) struct Cursor<'a> { ++ pub rest: &'a str, ++ #[cfg(span_locations)] ++ pub off: u32, ++} ++ ++impl<'a> Cursor<'a> { ++ fn advance(&self, bytes: usize) -> Cursor<'a> { ++ let (_front, rest) = self.rest.split_at(bytes); ++ Cursor { ++ rest, ++ #[cfg(span_locations)] ++ off: self.off + _front.chars().count() as u32, ++ } ++ } ++ ++ fn starts_with(&self, s: &str) -> bool { ++ self.rest.starts_with(s) ++ } ++ ++ pub(crate) fn is_empty(&self) -> bool { ++ self.rest.is_empty() ++ } ++ ++ fn len(&self) -> usize { ++ self.rest.len() ++ } ++ ++ fn as_bytes(&self) -> &'a [u8] { ++ self.rest.as_bytes() ++ } ++ ++ fn bytes(&self) -> Bytes<'a> { ++ self.rest.bytes() ++ } ++ ++ fn chars(&self) -> Chars<'a> { ++ self.rest.chars() ++ } ++ ++ fn char_indices(&self) -> CharIndices<'a> { ++ self.rest.char_indices() ++ } ++ ++ fn parse(&self, tag: &str) -> Result, LexError> { ++ if self.starts_with(tag) { ++ Ok(self.advance(tag.len())) ++ } else { ++ Err(LexError) ++ } ++ } ++} ++ ++type PResult<'a, O> = Result<(Cursor<'a>, O), LexError>; ++ ++fn skip_whitespace(input: Cursor) -> Cursor { ++ let mut s = input; ++ ++ while !s.is_empty() { ++ let byte = s.as_bytes()[0]; ++ if byte == b'/' { ++ if s.starts_with("//") ++ && (!s.starts_with("///") || s.starts_with("////")) ++ && !s.starts_with("//!") ++ { ++ let (cursor, _) = take_until_newline_or_eof(s); ++ s = cursor; ++ continue; ++ } else if s.starts_with("/**/") { ++ s = s.advance(4); ++ continue; ++ } else if s.starts_with("/*") ++ && (!s.starts_with("/**") || s.starts_with("/***")) ++ && !s.starts_with("/*!") ++ { ++ match block_comment(s) { ++ Ok((rest, _)) => { ++ s = rest; ++ continue; ++ } ++ Err(LexError) => return s, ++ } ++ } ++ } ++ match byte { ++ b' ' | 0x09..=0x0d => { ++ s = s.advance(1); ++ continue; ++ } ++ b if b <= 0x7f => {} ++ _ => { ++ let ch = s.chars().next().unwrap(); ++ if is_whitespace(ch) { ++ s = s.advance(ch.len_utf8()); ++ continue; ++ } ++ } ++ } ++ return s; ++ } ++ s ++} ++ ++fn block_comment(input: Cursor) -> PResult<&str> { ++ if !input.starts_with("/*") { ++ return Err(LexError); ++ } ++ ++ let mut depth = 0; ++ let bytes = input.as_bytes(); ++ let mut i = 0; ++ let upper = bytes.len() - 1; ++ ++ while i < upper { ++ if bytes[i] == b'/' && bytes[i + 1] == b'*' { ++ depth += 1; ++ i += 1; // eat '*' ++ } else if bytes[i] == b'*' && bytes[i + 1] == b'/' { ++ depth -= 1; ++ if depth == 0 { ++ return Ok((input.advance(i + 2), &input.rest[..i + 2])); ++ } ++ i += 1; // eat '/' ++ } ++ i += 1; ++ } ++ ++ Err(LexError) ++} ++ ++fn is_whitespace(ch: char) -> bool { ++ // Rust treats left-to-right mark and right-to-left mark as whitespace ++ ch.is_whitespace() || ch == '\u{200e}' || ch == '\u{200f}' ++} ++ ++fn word_break(input: Cursor) -> Result { ++ match input.chars().next() { ++ Some(ch) if is_ident_continue(ch) => Err(LexError), ++ Some(_) | None => Ok(input), ++ } ++} ++ ++pub(crate) fn token_stream(mut input: Cursor) -> PResult { ++ let mut trees = Vec::new(); ++ let mut stack = Vec::new(); ++ ++ loop { ++ input = skip_whitespace(input); ++ ++ if let Ok((rest, tt)) = doc_comment(input) { ++ trees.extend(tt); ++ input = rest; ++ continue; ++ } ++ ++ #[cfg(span_locations)] ++ let lo = input.off; ++ ++ let first = match input.bytes().next() { ++ Some(first) => first, ++ None => break, ++ }; ++ ++ if let Some(open_delimiter) = match first { ++ b'(' => Some(Delimiter::Parenthesis), ++ b'[' => Some(Delimiter::Bracket), ++ b'{' => Some(Delimiter::Brace), ++ _ => None, ++ } { ++ input = input.advance(1); ++ let frame = (open_delimiter, trees); ++ #[cfg(span_locations)] ++ let frame = (lo, frame); ++ stack.push(frame); ++ trees = Vec::new(); ++ } else if let Some(close_delimiter) = match first { ++ b')' => Some(Delimiter::Parenthesis), ++ b']' => Some(Delimiter::Bracket), ++ b'}' => Some(Delimiter::Brace), ++ _ => None, ++ } { ++ input = input.advance(1); ++ let frame = stack.pop().ok_or(LexError)?; ++ #[cfg(span_locations)] ++ let (lo, frame) = frame; ++ let (open_delimiter, outer) = frame; ++ if open_delimiter != close_delimiter { ++ return Err(LexError); ++ } ++ let mut g = Group::new(open_delimiter, TokenStream { inner: trees }); ++ g.set_span(Span { ++ #[cfg(span_locations)] ++ lo, ++ #[cfg(span_locations)] ++ hi: input.off, ++ }); ++ trees = outer; ++ trees.push(TokenTree::Group(crate::Group::_new_stable(g))); ++ } else { ++ let (rest, mut tt) = leaf_token(input)?; ++ tt.set_span(crate::Span::_new_stable(Span { ++ #[cfg(span_locations)] ++ lo, ++ #[cfg(span_locations)] ++ hi: rest.off, ++ })); ++ trees.push(tt); ++ input = rest; ++ } ++ } ++ ++ if stack.is_empty() { ++ Ok((input, TokenStream { inner: trees })) ++ } else { ++ Err(LexError) ++ } ++} ++ ++fn leaf_token(input: Cursor) -> PResult { ++ if let Ok((input, l)) = literal(input) { ++ // must be parsed before ident ++ Ok((input, TokenTree::Literal(crate::Literal::_new_stable(l)))) ++ } else if let Ok((input, p)) = punct(input) { ++ Ok((input, TokenTree::Punct(p))) ++ } else if let Ok((input, i)) = ident(input) { ++ Ok((input, TokenTree::Ident(i))) ++ } else { ++ Err(LexError) ++ } ++} ++ ++fn ident(input: Cursor) -> PResult { ++ if ["r\"", "r#\"", "r##", "b\"", "b\'", "br\"", "br#"] ++ .iter() ++ .any(|prefix| input.starts_with(prefix)) ++ { ++ Err(LexError) ++ } else { ++ ident_any(input) ++ } ++} ++ ++fn ident_any(input: Cursor) -> PResult { ++ let raw = input.starts_with("r#"); ++ let rest = input.advance((raw as usize) << 1); ++ ++ let (rest, sym) = ident_not_raw(rest)?; ++ ++ if !raw { ++ let ident = crate::Ident::new(sym, crate::Span::call_site()); ++ return Ok((rest, ident)); ++ } ++ ++ if sym == "_" { ++ return Err(LexError); ++ } ++ ++ let ident = crate::Ident::_new_raw(sym, crate::Span::call_site()); ++ Ok((rest, ident)) ++} ++ ++fn ident_not_raw(input: Cursor) -> PResult<&str> { ++ let mut chars = input.char_indices(); ++ ++ match chars.next() { ++ Some((_, ch)) if is_ident_start(ch) => {} ++ _ => return Err(LexError), ++ } ++ ++ let mut end = input.len(); ++ for (i, ch) in chars { ++ if !is_ident_continue(ch) { ++ end = i; ++ break; ++ } ++ } ++ ++ Ok((input.advance(end), &input.rest[..end])) ++} ++ ++fn literal(input: Cursor) -> PResult { ++ match literal_nocapture(input) { ++ Ok(a) => { ++ let end = input.len() - a.len(); ++ Ok((a, Literal::_new(input.rest[..end].to_string()))) ++ } ++ Err(LexError) => Err(LexError), ++ } ++} ++ ++fn literal_nocapture(input: Cursor) -> Result { ++ if let Ok(ok) = string(input) { ++ Ok(ok) ++ } else if let Ok(ok) = byte_string(input) { ++ Ok(ok) ++ } else if let Ok(ok) = byte(input) { ++ Ok(ok) ++ } else if let Ok(ok) = character(input) { ++ Ok(ok) ++ } else if let Ok(ok) = float(input) { ++ Ok(ok) ++ } else if let Ok(ok) = int(input) { ++ Ok(ok) ++ } else { ++ Err(LexError) ++ } ++} ++ ++fn literal_suffix(input: Cursor) -> Cursor { ++ match ident_not_raw(input) { ++ Ok((input, _)) => input, ++ Err(LexError) => input, ++ } ++} ++ ++fn string(input: Cursor) -> Result { ++ if let Ok(input) = input.parse("\"") { ++ cooked_string(input) ++ } else if let Ok(input) = input.parse("r") { ++ raw_string(input) ++ } else { ++ Err(LexError) ++ } ++} ++ ++fn cooked_string(input: Cursor) -> Result { ++ let mut chars = input.char_indices().peekable(); ++ ++ while let Some((i, ch)) = chars.next() { ++ match ch { ++ '"' => { ++ let input = input.advance(i + 1); ++ return Ok(literal_suffix(input)); ++ } ++ '\r' => match chars.next() { ++ Some((_, '\n')) => {} ++ _ => break, ++ }, ++ '\\' => match chars.next() { ++ Some((_, 'x')) => { ++ if !backslash_x_char(&mut chars) { ++ break; ++ } ++ } ++ Some((_, 'n')) | Some((_, 'r')) | Some((_, 't')) | Some((_, '\\')) ++ | Some((_, '\'')) | Some((_, '"')) | Some((_, '0')) => {} ++ Some((_, 'u')) => { ++ if !backslash_u(&mut chars) { ++ break; ++ } ++ } ++ Some((_, ch @ '\n')) | Some((_, ch @ '\r')) => { ++ let mut last = ch; ++ loop { ++ if last == '\r' && chars.next().map_or(true, |(_, ch)| ch != '\n') { ++ return Err(LexError); ++ } ++ match chars.peek() { ++ Some((_, ch)) if ch.is_whitespace() => { ++ last = *ch; ++ chars.next(); ++ } ++ _ => break, ++ } ++ } ++ } ++ _ => break, ++ }, ++ _ch => {} ++ } ++ } ++ Err(LexError) ++} ++ ++fn byte_string(input: Cursor) -> Result { ++ if let Ok(input) = input.parse("b\"") { ++ cooked_byte_string(input) ++ } else if let Ok(input) = input.parse("br") { ++ raw_string(input) ++ } else { ++ Err(LexError) ++ } ++} ++ ++fn cooked_byte_string(mut input: Cursor) -> Result { ++ let mut bytes = input.bytes().enumerate(); ++ while let Some((offset, b)) = bytes.next() { ++ match b { ++ b'"' => { ++ let input = input.advance(offset + 1); ++ return Ok(literal_suffix(input)); ++ } ++ b'\r' => match bytes.next() { ++ Some((_, b'\n')) => {} ++ _ => break, ++ }, ++ b'\\' => match bytes.next() { ++ Some((_, b'x')) => { ++ if !backslash_x_byte(&mut bytes) { ++ break; ++ } ++ } ++ Some((_, b'n')) | Some((_, b'r')) | Some((_, b't')) | Some((_, b'\\')) ++ | Some((_, b'0')) | Some((_, b'\'')) | Some((_, b'"')) => {} ++ Some((newline, b @ b'\n')) | Some((newline, b @ b'\r')) => { ++ let mut last = b as char; ++ let rest = input.advance(newline + 1); ++ let mut chars = rest.char_indices(); ++ loop { ++ if last == '\r' && chars.next().map_or(true, |(_, ch)| ch != '\n') { ++ return Err(LexError); ++ } ++ match chars.next() { ++ Some((_, ch)) if ch.is_whitespace() => last = ch, ++ Some((offset, _)) => { ++ input = rest.advance(offset); ++ bytes = input.bytes().enumerate(); ++ break; ++ } ++ None => return Err(LexError), ++ } ++ } ++ } ++ _ => break, ++ }, ++ b if b < 0x80 => {} ++ _ => break, ++ } ++ } ++ Err(LexError) ++} ++ ++fn raw_string(input: Cursor) -> Result { ++ let mut chars = input.char_indices(); ++ let mut n = 0; ++ while let Some((i, ch)) = chars.next() { ++ match ch { ++ '"' => { ++ n = i; ++ break; ++ } ++ '#' => {} ++ _ => return Err(LexError), ++ } ++ } ++ while let Some((i, ch)) = chars.next() { ++ match ch { ++ '"' if input.rest[i + 1..].starts_with(&input.rest[..n]) => { ++ let rest = input.advance(i + 1 + n); ++ return Ok(literal_suffix(rest)); ++ } ++ '\r' => match chars.next() { ++ Some((_, '\n')) => {} ++ _ => break, ++ }, ++ _ => {} ++ } ++ } ++ Err(LexError) ++} ++ ++fn byte(input: Cursor) -> Result { ++ let input = input.parse("b'")?; ++ let mut bytes = input.bytes().enumerate(); ++ let ok = match bytes.next().map(|(_, b)| b) { ++ Some(b'\\') => match bytes.next().map(|(_, b)| b) { ++ Some(b'x') => backslash_x_byte(&mut bytes), ++ Some(b'n') | Some(b'r') | Some(b't') | Some(b'\\') | Some(b'0') | Some(b'\'') ++ | Some(b'"') => true, ++ _ => false, ++ }, ++ b => b.is_some(), ++ }; ++ if !ok { ++ return Err(LexError); ++ } ++ let (offset, _) = bytes.next().ok_or(LexError)?; ++ if !input.chars().as_str().is_char_boundary(offset) { ++ return Err(LexError); ++ } ++ let input = input.advance(offset).parse("'")?; ++ Ok(literal_suffix(input)) ++} ++ ++fn character(input: Cursor) -> Result { ++ let input = input.parse("'")?; ++ let mut chars = input.char_indices(); ++ let ok = match chars.next().map(|(_, ch)| ch) { ++ Some('\\') => match chars.next().map(|(_, ch)| ch) { ++ Some('x') => backslash_x_char(&mut chars), ++ Some('u') => backslash_u(&mut chars), ++ Some('n') | Some('r') | Some('t') | Some('\\') | Some('0') | Some('\'') | Some('"') => { ++ true ++ } ++ _ => false, ++ }, ++ ch => ch.is_some(), ++ }; ++ if !ok { ++ return Err(LexError); ++ } ++ let (idx, _) = chars.next().ok_or(LexError)?; ++ let input = input.advance(idx).parse("'")?; ++ Ok(literal_suffix(input)) ++} ++ ++macro_rules! next_ch { ++ ($chars:ident @ $pat:pat $(| $rest:pat)*) => { ++ match $chars.next() { ++ Some((_, ch)) => match ch { ++ $pat $(| $rest)* => ch, ++ _ => return false, ++ }, ++ None => return false, ++ } ++ }; ++} ++ ++fn backslash_x_char(chars: &mut I) -> bool ++where ++ I: Iterator, ++{ ++ next_ch!(chars @ '0'..='7'); ++ next_ch!(chars @ '0'..='9' | 'a'..='f' | 'A'..='F'); ++ true ++} ++ ++fn backslash_x_byte(chars: &mut I) -> bool ++where ++ I: Iterator, ++{ ++ next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F'); ++ next_ch!(chars @ b'0'..=b'9' | b'a'..=b'f' | b'A'..=b'F'); ++ true ++} ++ ++fn backslash_u(chars: &mut I) -> bool ++where ++ I: Iterator, ++{ ++ next_ch!(chars @ '{'); ++ let mut value = 0; ++ let mut len = 0; ++ while let Some((_, ch)) = chars.next() { ++ let digit = match ch { ++ '0'..='9' => ch as u8 - b'0', ++ 'a'..='f' => 10 + ch as u8 - b'a', ++ 'A'..='F' => 10 + ch as u8 - b'A', ++ '_' if len > 0 => continue, ++ '}' if len > 0 => return char::from_u32(value).is_some(), ++ _ => return false, ++ }; ++ if len == 6 { ++ return false; ++ } ++ value *= 0x10; ++ value += u32::from(digit); ++ len += 1; ++ } ++ false ++} ++ ++fn float(input: Cursor) -> Result { ++ let mut rest = float_digits(input)?; ++ if let Some(ch) = rest.chars().next() { ++ if is_ident_start(ch) { ++ rest = ident_not_raw(rest)?.0; ++ } ++ } ++ word_break(rest) ++} ++ ++fn float_digits(input: Cursor) -> Result { ++ let mut chars = input.chars().peekable(); ++ match chars.next() { ++ Some(ch) if ch >= '0' && ch <= '9' => {} ++ _ => return Err(LexError), ++ } ++ ++ let mut len = 1; ++ let mut has_dot = false; ++ let mut has_exp = false; ++ while let Some(&ch) = chars.peek() { ++ match ch { ++ '0'..='9' | '_' => { ++ chars.next(); ++ len += 1; ++ } ++ '.' => { ++ if has_dot { ++ break; ++ } ++ chars.next(); ++ if chars ++ .peek() ++ .map(|&ch| ch == '.' || is_ident_start(ch)) ++ .unwrap_or(false) ++ { ++ return Err(LexError); ++ } ++ len += 1; ++ has_dot = true; ++ } ++ 'e' | 'E' => { ++ chars.next(); ++ len += 1; ++ has_exp = true; ++ break; ++ } ++ _ => break, ++ } ++ } ++ ++ if !(has_dot || has_exp) { ++ return Err(LexError); ++ } ++ ++ if has_exp { ++ let token_before_exp = if has_dot { ++ Ok(input.advance(len - 1)) ++ } else { ++ Err(LexError) ++ }; ++ let mut has_sign = false; ++ let mut has_exp_value = false; ++ while let Some(&ch) = chars.peek() { ++ match ch { ++ '+' | '-' => { ++ if has_exp_value { ++ break; ++ } ++ if has_sign { ++ return token_before_exp; ++ } ++ chars.next(); ++ len += 1; ++ has_sign = true; ++ } ++ '0'..='9' => { ++ chars.next(); ++ len += 1; ++ has_exp_value = true; ++ } ++ '_' => { ++ chars.next(); ++ len += 1; ++ } ++ _ => break, ++ } ++ } ++ if !has_exp_value { ++ return token_before_exp; ++ } ++ } ++ ++ Ok(input.advance(len)) ++} ++ ++fn int(input: Cursor) -> Result { ++ let mut rest = digits(input)?; ++ if let Some(ch) = rest.chars().next() { ++ if is_ident_start(ch) { ++ rest = ident_not_raw(rest)?.0; ++ } ++ } ++ word_break(rest) ++} ++ ++fn digits(mut input: Cursor) -> Result { ++ let base = if input.starts_with("0x") { ++ input = input.advance(2); ++ 16 ++ } else if input.starts_with("0o") { ++ input = input.advance(2); ++ 8 ++ } else if input.starts_with("0b") { ++ input = input.advance(2); ++ 2 ++ } else { ++ 10 ++ }; ++ ++ let mut len = 0; ++ let mut empty = true; ++ for b in input.bytes() { ++ match b { ++ b'0'..=b'9' => { ++ let digit = (b - b'0') as u64; ++ if digit >= base { ++ return Err(LexError); ++ } ++ } ++ b'a'..=b'f' => { ++ let digit = 10 + (b - b'a') as u64; ++ if digit >= base { ++ break; ++ } ++ } ++ b'A'..=b'F' => { ++ let digit = 10 + (b - b'A') as u64; ++ if digit >= base { ++ break; ++ } ++ } ++ b'_' => { ++ if empty && base == 10 { ++ return Err(LexError); ++ } ++ len += 1; ++ continue; ++ } ++ _ => break, ++ }; ++ len += 1; ++ empty = false; ++ } ++ if empty { ++ Err(LexError) ++ } else { ++ Ok(input.advance(len)) ++ } ++} ++ ++fn punct(input: Cursor) -> PResult { ++ match punct_char(input) { ++ Ok((rest, '\'')) => { ++ if ident_any(rest)?.0.starts_with("'") { ++ Err(LexError) ++ } else { ++ Ok((rest, Punct::new('\'', Spacing::Joint))) ++ } ++ } ++ Ok((rest, ch)) => { ++ let kind = match punct_char(rest) { ++ Ok(_) => Spacing::Joint, ++ Err(LexError) => Spacing::Alone, ++ }; ++ Ok((rest, Punct::new(ch, kind))) ++ } ++ Err(LexError) => Err(LexError), ++ } ++} ++ ++fn punct_char(input: Cursor) -> PResult { ++ if input.starts_with("//") || input.starts_with("/*") { ++ // Do not accept `/` of a comment as a punct. ++ return Err(LexError); ++ } ++ ++ let mut chars = input.chars(); ++ let first = match chars.next() { ++ Some(ch) => ch, ++ None => { ++ return Err(LexError); ++ } ++ }; ++ let recognized = "~!@#$%^&*-=+|;:,<.>/?'"; ++ if recognized.contains(first) { ++ Ok((input.advance(first.len_utf8()), first)) ++ } else { ++ Err(LexError) ++ } ++} ++ ++fn doc_comment(input: Cursor) -> PResult> { ++ #[cfg(span_locations)] ++ let lo = input.off; ++ let (rest, (comment, inner)) = doc_comment_contents(input)?; ++ let span = crate::Span::_new_stable(Span { ++ #[cfg(span_locations)] ++ lo, ++ #[cfg(span_locations)] ++ hi: rest.off, ++ }); ++ ++ let mut scan_for_bare_cr = comment; ++ while let Some(cr) = scan_for_bare_cr.find('\r') { ++ let rest = &scan_for_bare_cr[cr + 1..]; ++ if !rest.starts_with('\n') { ++ return Err(LexError); ++ } ++ scan_for_bare_cr = rest; ++ } ++ ++ let mut trees = Vec::new(); ++ trees.push(TokenTree::Punct(Punct::new('#', Spacing::Alone))); ++ if inner { ++ trees.push(Punct::new('!', Spacing::Alone).into()); ++ } ++ let mut stream = vec![ ++ TokenTree::Ident(crate::Ident::new("doc", span)), ++ TokenTree::Punct(Punct::new('=', Spacing::Alone)), ++ TokenTree::Literal(crate::Literal::string(comment)), ++ ]; ++ for tt in stream.iter_mut() { ++ tt.set_span(span); ++ } ++ let group = Group::new(Delimiter::Bracket, stream.into_iter().collect()); ++ trees.push(crate::Group::_new_stable(group).into()); ++ for tt in trees.iter_mut() { ++ tt.set_span(span); ++ } ++ Ok((rest, trees)) ++} ++ ++fn doc_comment_contents(input: Cursor) -> PResult<(&str, bool)> { ++ if input.starts_with("//!") { ++ let input = input.advance(3); ++ let (input, s) = take_until_newline_or_eof(input); ++ Ok((input, (s, true))) ++ } else if input.starts_with("/*!") { ++ let (input, s) = block_comment(input)?; ++ Ok((input, (&s[3..s.len() - 2], true))) ++ } else if input.starts_with("///") { ++ let input = input.advance(3); ++ if input.starts_with("/") { ++ return Err(LexError); ++ } ++ let (input, s) = take_until_newline_or_eof(input); ++ Ok((input, (s, false))) ++ } else if input.starts_with("/**") && !input.rest[3..].starts_with('*') { ++ let (input, s) = block_comment(input)?; ++ Ok((input, (&s[3..s.len() - 2], false))) ++ } else { ++ Err(LexError) ++ } ++} ++ ++fn take_until_newline_or_eof(input: Cursor) -> (Cursor, &str) { ++ let chars = input.char_indices(); ++ ++ for (i, ch) in chars { ++ if ch == '\n' { ++ return (input.advance(i), &input.rest[..i]); ++ } else if ch == '\r' && input.rest[i + 1..].starts_with('\n') { ++ return (input.advance(i + 1), &input.rest[..i]); ++ } ++ } ++ ++ (input.advance(input.len()), input.rest) ++} +diff --git a/third_party/rust/proc-macro2/src/strnom.rs b/third_party/rust/proc-macro2/src/strnom.rs +deleted file mode 100644 +index eb7d0b8a8e..0000000000 +--- third_party/rust/proc-macro2/src/strnom.rs ++++ /dev/null +@@ -1,391 +0,0 @@ +-//! Adapted from [`nom`](https://github.com/Geal/nom). +- +-use crate::fallback::LexError; +-use std::str::{Bytes, CharIndices, Chars}; +-use unicode_xid::UnicodeXID; +- +-#[derive(Copy, Clone, Eq, PartialEq)] +-pub struct Cursor<'a> { +- pub rest: &'a str, +- #[cfg(span_locations)] +- pub off: u32, +-} +- +-impl<'a> Cursor<'a> { +- #[cfg(not(span_locations))] +- pub fn advance(&self, amt: usize) -> Cursor<'a> { +- Cursor { +- rest: &self.rest[amt..], +- } +- } +- #[cfg(span_locations)] +- pub fn advance(&self, amt: usize) -> Cursor<'a> { +- Cursor { +- rest: &self.rest[amt..], +- off: self.off + (amt as u32), +- } +- } +- +- pub fn find(&self, p: char) -> Option { +- self.rest.find(p) +- } +- +- pub fn starts_with(&self, s: &str) -> bool { +- self.rest.starts_with(s) +- } +- +- pub fn is_empty(&self) -> bool { +- self.rest.is_empty() +- } +- +- pub fn len(&self) -> usize { +- self.rest.len() +- } +- +- pub fn as_bytes(&self) -> &'a [u8] { +- self.rest.as_bytes() +- } +- +- pub fn bytes(&self) -> Bytes<'a> { +- self.rest.bytes() +- } +- +- pub fn chars(&self) -> Chars<'a> { +- self.rest.chars() +- } +- +- pub fn char_indices(&self) -> CharIndices<'a> { +- self.rest.char_indices() +- } +-} +- +-pub type PResult<'a, O> = Result<(Cursor<'a>, O), LexError>; +- +-pub fn whitespace(input: Cursor) -> PResult<()> { +- if input.is_empty() { +- return Err(LexError); +- } +- +- let bytes = input.as_bytes(); +- let mut i = 0; +- while i < bytes.len() { +- let s = input.advance(i); +- if bytes[i] == b'/' { +- if s.starts_with("//") +- && (!s.starts_with("///") || s.starts_with("////")) +- && !s.starts_with("//!") +- { +- if let Some(len) = s.find('\n') { +- i += len + 1; +- continue; +- } +- break; +- } else if s.starts_with("/**/") { +- i += 4; +- continue; +- } else if s.starts_with("/*") +- && (!s.starts_with("/**") || s.starts_with("/***")) +- && !s.starts_with("/*!") +- { +- let (_, com) = block_comment(s)?; +- i += com.len(); +- continue; +- } +- } +- match bytes[i] { +- b' ' | 0x09..=0x0d => { +- i += 1; +- continue; +- } +- b if b <= 0x7f => {} +- _ => { +- let ch = s.chars().next().unwrap(); +- if is_whitespace(ch) { +- i += ch.len_utf8(); +- continue; +- } +- } +- } +- return if i > 0 { Ok((s, ())) } else { Err(LexError) }; +- } +- Ok((input.advance(input.len()), ())) +-} +- +-pub fn block_comment(input: Cursor) -> PResult<&str> { +- if !input.starts_with("/*") { +- return Err(LexError); +- } +- +- let mut depth = 0; +- let bytes = input.as_bytes(); +- let mut i = 0; +- let upper = bytes.len() - 1; +- while i < upper { +- if bytes[i] == b'/' && bytes[i + 1] == b'*' { +- depth += 1; +- i += 1; // eat '*' +- } else if bytes[i] == b'*' && bytes[i + 1] == b'/' { +- depth -= 1; +- if depth == 0 { +- return Ok((input.advance(i + 2), &input.rest[..i + 2])); +- } +- i += 1; // eat '/' +- } +- i += 1; +- } +- Err(LexError) +-} +- +-pub fn skip_whitespace(input: Cursor) -> Cursor { +- match whitespace(input) { +- Ok((rest, _)) => rest, +- Err(LexError) => input, +- } +-} +- +-fn is_whitespace(ch: char) -> bool { +- // Rust treats left-to-right mark and right-to-left mark as whitespace +- ch.is_whitespace() || ch == '\u{200e}' || ch == '\u{200f}' +-} +- +-pub fn word_break(input: Cursor) -> PResult<()> { +- match input.chars().next() { +- Some(ch) if UnicodeXID::is_xid_continue(ch) => Err(LexError), +- Some(_) | None => Ok((input, ())), +- } +-} +- +-macro_rules! named { +- ($name:ident -> $o:ty, $submac:ident!( $($args:tt)* )) => { +- fn $name<'a>(i: Cursor<'a>) -> $crate::strnom::PResult<'a, $o> { +- $submac!(i, $($args)*) +- } +- }; +-} +- +-macro_rules! alt { +- ($i:expr, $e:ident | $($rest:tt)*) => { +- alt!($i, call!($e) | $($rest)*) +- }; +- +- ($i:expr, $subrule:ident!( $($args:tt)*) | $($rest:tt)*) => { +- match $subrule!($i, $($args)*) { +- res @ Ok(_) => res, +- _ => alt!($i, $($rest)*) +- } +- }; +- +- ($i:expr, $subrule:ident!( $($args:tt)* ) => { $gen:expr } | $($rest:tt)+) => { +- match $subrule!($i, $($args)*) { +- Ok((i, o)) => Ok((i, $gen(o))), +- Err(LexError) => alt!($i, $($rest)*) +- } +- }; +- +- ($i:expr, $e:ident => { $gen:expr } | $($rest:tt)*) => { +- alt!($i, call!($e) => { $gen } | $($rest)*) +- }; +- +- ($i:expr, $e:ident => { $gen:expr }) => { +- alt!($i, call!($e) => { $gen }) +- }; +- +- ($i:expr, $subrule:ident!( $($args:tt)* ) => { $gen:expr }) => { +- match $subrule!($i, $($args)*) { +- Ok((i, o)) => Ok((i, $gen(o))), +- Err(LexError) => Err(LexError), +- } +- }; +- +- ($i:expr, $e:ident) => { +- alt!($i, call!($e)) +- }; +- +- ($i:expr, $subrule:ident!( $($args:tt)*)) => { +- $subrule!($i, $($args)*) +- }; +-} +- +-macro_rules! do_parse { +- ($i:expr, ( $($rest:expr),* )) => { +- Ok(($i, ( $($rest),* ))) +- }; +- +- ($i:expr, $e:ident >> $($rest:tt)*) => { +- do_parse!($i, call!($e) >> $($rest)*) +- }; +- +- ($i:expr, $submac:ident!( $($args:tt)* ) >> $($rest:tt)*) => { +- match $submac!($i, $($args)*) { +- Err(LexError) => Err(LexError), +- Ok((i, _)) => do_parse!(i, $($rest)*), +- } +- }; +- +- ($i:expr, $field:ident : $e:ident >> $($rest:tt)*) => { +- do_parse!($i, $field: call!($e) >> $($rest)*) +- }; +- +- ($i:expr, $field:ident : $submac:ident!( $($args:tt)* ) >> $($rest:tt)*) => { +- match $submac!($i, $($args)*) { +- Err(LexError) => Err(LexError), +- Ok((i, o)) => { +- let $field = o; +- do_parse!(i, $($rest)*) +- }, +- } +- }; +-} +- +-macro_rules! peek { +- ($i:expr, $submac:ident!( $($args:tt)* )) => { +- match $submac!($i, $($args)*) { +- Ok((_, o)) => Ok(($i, o)), +- Err(LexError) => Err(LexError), +- } +- }; +-} +- +-macro_rules! call { +- ($i:expr, $fun:expr $(, $args:expr)*) => { +- $fun($i $(, $args)*) +- }; +-} +- +-macro_rules! option { +- ($i:expr, $f:expr) => { +- match $f($i) { +- Ok((i, o)) => Ok((i, Some(o))), +- Err(LexError) => Ok(($i, None)), +- } +- }; +-} +- +-macro_rules! take_until_newline_or_eof { +- ($i:expr,) => {{ +- if $i.len() == 0 { +- Ok(($i, "")) +- } else { +- match $i.find('\n') { +- Some(i) => Ok(($i.advance(i), &$i.rest[..i])), +- None => Ok(($i.advance($i.len()), &$i.rest[..$i.len()])), +- } +- } +- }}; +-} +- +-macro_rules! tuple { +- ($i:expr, $($rest:tt)*) => { +- tuple_parser!($i, (), $($rest)*) +- }; +-} +- +-/// Do not use directly. Use `tuple!`. +-macro_rules! tuple_parser { +- ($i:expr, ($($parsed:tt),*), $e:ident, $($rest:tt)*) => { +- tuple_parser!($i, ($($parsed),*), call!($e), $($rest)*) +- }; +- +- ($i:expr, (), $submac:ident!( $($args:tt)* ), $($rest:tt)*) => { +- match $submac!($i, $($args)*) { +- Err(LexError) => Err(LexError), +- Ok((i, o)) => tuple_parser!(i, (o), $($rest)*), +- } +- }; +- +- ($i:expr, ($($parsed:tt)*), $submac:ident!( $($args:tt)* ), $($rest:tt)*) => { +- match $submac!($i, $($args)*) { +- Err(LexError) => Err(LexError), +- Ok((i, o)) => tuple_parser!(i, ($($parsed)* , o), $($rest)*), +- } +- }; +- +- ($i:expr, ($($parsed:tt),*), $e:ident) => { +- tuple_parser!($i, ($($parsed),*), call!($e)) +- }; +- +- ($i:expr, (), $submac:ident!( $($args:tt)* )) => { +- $submac!($i, $($args)*) +- }; +- +- ($i:expr, ($($parsed:expr),*), $submac:ident!( $($args:tt)* )) => { +- match $submac!($i, $($args)*) { +- Err(LexError) => Err(LexError), +- Ok((i, o)) => Ok((i, ($($parsed),*, o))) +- } +- }; +- +- ($i:expr, ($($parsed:expr),*)) => { +- Ok(($i, ($($parsed),*))) +- }; +-} +- +-macro_rules! not { +- ($i:expr, $submac:ident!( $($args:tt)* )) => { +- match $submac!($i, $($args)*) { +- Ok((_, _)) => Err(LexError), +- Err(LexError) => Ok(($i, ())), +- } +- }; +-} +- +-macro_rules! tag { +- ($i:expr, $tag:expr) => { +- if $i.starts_with($tag) { +- Ok(($i.advance($tag.len()), &$i.rest[..$tag.len()])) +- } else { +- Err(LexError) +- } +- }; +-} +- +-macro_rules! punct { +- ($i:expr, $punct:expr) => { +- $crate::strnom::punct($i, $punct) +- }; +-} +- +-/// Do not use directly. Use `punct!`. +-pub fn punct<'a>(input: Cursor<'a>, token: &'static str) -> PResult<'a, &'a str> { +- let input = skip_whitespace(input); +- if input.starts_with(token) { +- Ok((input.advance(token.len()), token)) +- } else { +- Err(LexError) +- } +-} +- +-macro_rules! preceded { +- ($i:expr, $submac:ident!( $($args:tt)* ), $submac2:ident!( $($args2:tt)* )) => { +- match tuple!($i, $submac!($($args)*), $submac2!($($args2)*)) { +- Ok((remaining, (_, o))) => Ok((remaining, o)), +- Err(LexError) => Err(LexError), +- } +- }; +- +- ($i:expr, $submac:ident!( $($args:tt)* ), $g:expr) => { +- preceded!($i, $submac!($($args)*), call!($g)) +- }; +-} +- +-macro_rules! delimited { +- ($i:expr, $submac:ident!( $($args:tt)* ), $($rest:tt)+) => { +- match tuple_parser!($i, (), $submac!($($args)*), $($rest)*) { +- Err(LexError) => Err(LexError), +- Ok((i1, (_, o, _))) => Ok((i1, o)) +- } +- }; +-} +- +-macro_rules! map { +- ($i:expr, $submac:ident!( $($args:tt)* ), $g:expr) => { +- match $submac!($i, $($args)*) { +- Err(LexError) => Err(LexError), +- Ok((i, o)) => Ok((i, call!(o, $g))) +- } +- }; +- +- ($i:expr, $f:expr, $g:expr) => { +- map!($i, call!($f), $g) +- }; +-} +diff --git a/third_party/rust/proc-macro2/src/wrapper.rs b/third_party/rust/proc-macro2/src/wrapper.rs +index 552b9381cf..3df044af17 100644 +--- third_party/rust/proc-macro2/src/wrapper.rs ++++ third_party/rust/proc-macro2/src/wrapper.rs +@@ -1,15 +1,15 @@ +-use std::fmt; +-use std::iter; ++use crate::detection::inside_proc_macro; ++use crate::{fallback, Delimiter, Punct, Spacing, TokenTree}; ++use std::fmt::{self, Debug, Display}; ++use std::iter::FromIterator; + use std::ops::RangeBounds; +-use std::panic::{self, PanicInfo}; ++use std::panic; + #[cfg(super_unstable)] + use std::path::PathBuf; + use std::str::FromStr; + +-use crate::{fallback, Delimiter, Punct, Spacing, TokenTree}; +- + #[derive(Clone)] +-pub enum TokenStream { ++pub(crate) enum TokenStream { + Compiler(DeferredTokenStream), + Fallback(fallback::TokenStream), + } +@@ -19,73 +19,16 @@ pub enum TokenStream { + // we hold on to the appended tokens and do proc_macro::TokenStream::extend as + // late as possible to batch together consecutive uses of the Extend impl. + #[derive(Clone)] +-pub struct DeferredTokenStream { ++pub(crate) struct DeferredTokenStream { + stream: proc_macro::TokenStream, + extra: Vec, + } + +-pub enum LexError { ++pub(crate) enum LexError { + Compiler(proc_macro::LexError), + Fallback(fallback::LexError), + } + +-fn nightly_works() -> bool { +- use std::sync::atomic::*; +- use std::sync::Once; +- +- static WORKS: AtomicUsize = AtomicUsize::new(0); +- static INIT: Once = Once::new(); +- +- match WORKS.load(Ordering::SeqCst) { +- 1 => return false, +- 2 => return true, +- _ => {} +- } +- +- // Swap in a null panic hook to avoid printing "thread panicked" to stderr, +- // then use catch_unwind to determine whether the compiler's proc_macro is +- // working. When proc-macro2 is used from outside of a procedural macro all +- // of the proc_macro crate's APIs currently panic. +- // +- // The Once is to prevent the possibility of this ordering: +- // +- // thread 1 calls take_hook, gets the user's original hook +- // thread 1 calls set_hook with the null hook +- // thread 2 calls take_hook, thinks null hook is the original hook +- // thread 2 calls set_hook with the null hook +- // thread 1 calls set_hook with the actual original hook +- // thread 2 calls set_hook with what it thinks is the original hook +- // +- // in which the user's hook has been lost. +- // +- // There is still a race condition where a panic in a different thread can +- // happen during the interval that the user's original panic hook is +- // unregistered such that their hook is incorrectly not called. This is +- // sufficiently unlikely and less bad than printing panic messages to stderr +- // on correct use of this crate. Maybe there is a libstd feature request +- // here. For now, if a user needs to guarantee that this failure mode does +- // not occur, they need to call e.g. `proc_macro2::Span::call_site()` from +- // the main thread before launching any other threads. +- INIT.call_once(|| { +- type PanicHook = dyn Fn(&PanicInfo) + Sync + Send + 'static; +- +- let null_hook: Box = Box::new(|_panic_info| { /* ignore */ }); +- let sanity_check = &*null_hook as *const PanicHook; +- let original_hook = panic::take_hook(); +- panic::set_hook(null_hook); +- +- let works = panic::catch_unwind(|| proc_macro::Span::call_site()).is_ok(); +- WORKS.store(works as usize + 1, Ordering::SeqCst); +- +- let hopefully_null_hook = panic::take_hook(); +- panic::set_hook(original_hook); +- if sanity_check != &*hopefully_null_hook { +- panic!("observed race condition in proc_macro2::nightly_works"); +- } +- }); +- nightly_works() +-} +- + fn mismatch() -> ! { + panic!("stable/nightly mismatch") + } +@@ -103,7 +46,12 @@ impl DeferredTokenStream { + } + + fn evaluate_now(&mut self) { +- self.stream.extend(self.extra.drain(..)); ++ // If-check provides a fast short circuit for the common case of `extra` ++ // being empty, which saves a round trip over the proc macro bridge. ++ // Improves macro expansion time in winrt by 6% in debug mode. ++ if !self.extra.is_empty() { ++ self.stream.extend(self.extra.drain(..)); ++ } + } + + fn into_token_stream(mut self) -> proc_macro::TokenStream { +@@ -114,7 +62,7 @@ impl DeferredTokenStream { + + impl TokenStream { + pub fn new() -> TokenStream { +- if nightly_works() { ++ if inside_proc_macro() { + TokenStream::Compiler(DeferredTokenStream::new(proc_macro::TokenStream::new())) + } else { + TokenStream::Fallback(fallback::TokenStream::new()) +@@ -147,9 +95,9 @@ impl FromStr for TokenStream { + type Err = LexError; + + fn from_str(src: &str) -> Result { +- if nightly_works() { ++ if inside_proc_macro() { + Ok(TokenStream::Compiler(DeferredTokenStream::new( +- src.parse()?, ++ proc_macro_parse(src)?, + ))) + } else { + Ok(TokenStream::Fallback(src.parse()?)) +@@ -157,11 +105,17 @@ impl FromStr for TokenStream { + } + } + +-impl fmt::Display for TokenStream { ++// Work around https://github.com/rust-lang/rust/issues/58736. ++fn proc_macro_parse(src: &str) -> Result { ++ panic::catch_unwind(|| src.parse().map_err(LexError::Compiler)) ++ .unwrap_or(Err(LexError::Fallback(fallback::LexError))) ++} ++ ++impl Display for TokenStream { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { +- TokenStream::Compiler(tts) => tts.clone().into_token_stream().fmt(f), +- TokenStream::Fallback(tts) => tts.fmt(f), ++ TokenStream::Compiler(tts) => Display::fmt(&tts.clone().into_token_stream(), f), ++ TokenStream::Fallback(tts) => Display::fmt(tts, f), + } + } + } +@@ -187,7 +141,7 @@ impl From for TokenStream { + } + } + +-// Assumes nightly_works(). ++// Assumes inside_proc_macro(). + fn into_compiler_token(token: TokenTree) -> proc_macro::TokenTree { + match token { + TokenTree::Group(tt) => tt.inner.unwrap_nightly().into(), +@@ -196,9 +150,9 @@ fn into_compiler_token(token: TokenTree) -> proc_macro::TokenTree { + Spacing::Joint => proc_macro::Spacing::Joint, + Spacing::Alone => proc_macro::Spacing::Alone, + }; +- let mut op = proc_macro::Punct::new(tt.as_char(), spacing); +- op.set_span(tt.span().inner.unwrap_nightly()); +- op.into() ++ let mut punct = proc_macro::Punct::new(tt.as_char(), spacing); ++ punct.set_span(tt.span().inner.unwrap_nightly()); ++ punct.into() + } + TokenTree::Ident(tt) => tt.inner.unwrap_nightly().into(), + TokenTree::Literal(tt) => tt.inner.unwrap_nightly().into(), +@@ -207,7 +161,7 @@ fn into_compiler_token(token: TokenTree) -> proc_macro::TokenTree { + + impl From for TokenStream { + fn from(token: TokenTree) -> TokenStream { +- if nightly_works() { ++ if inside_proc_macro() { + TokenStream::Compiler(DeferredTokenStream::new(into_compiler_token(token).into())) + } else { + TokenStream::Fallback(token.into()) +@@ -215,9 +169,9 @@ impl From for TokenStream { + } + } + +-impl iter::FromIterator for TokenStream { ++impl FromIterator for TokenStream { + fn from_iter>(trees: I) -> Self { +- if nightly_works() { ++ if inside_proc_macro() { + TokenStream::Compiler(DeferredTokenStream::new( + trees.into_iter().map(into_compiler_token).collect(), + )) +@@ -227,7 +181,7 @@ impl iter::FromIterator for TokenStream { + } + } + +-impl iter::FromIterator for TokenStream { ++impl FromIterator for TokenStream { + fn from_iter>(streams: I) -> Self { + let mut streams = streams.into_iter(); + match streams.next() { +@@ -252,14 +206,15 @@ impl iter::FromIterator for TokenStream { + } + + impl Extend for TokenStream { +- fn extend>(&mut self, streams: I) { ++ fn extend>(&mut self, stream: I) { + match self { + TokenStream::Compiler(tts) => { + // Here is the reason for DeferredTokenStream. +- tts.extra +- .extend(streams.into_iter().map(into_compiler_token)); ++ for token in stream { ++ tts.extra.push(into_compiler_token(token)); ++ } + } +- TokenStream::Fallback(tts) => tts.extend(streams), ++ TokenStream::Fallback(tts) => tts.extend(stream), + } + } + } +@@ -270,20 +225,20 @@ impl Extend for TokenStream { + TokenStream::Compiler(tts) => { + tts.evaluate_now(); + tts.stream +- .extend(streams.into_iter().map(|stream| stream.unwrap_nightly())); ++ .extend(streams.into_iter().map(TokenStream::unwrap_nightly)); + } + TokenStream::Fallback(tts) => { +- tts.extend(streams.into_iter().map(|stream| stream.unwrap_stable())); ++ tts.extend(streams.into_iter().map(TokenStream::unwrap_stable)); + } + } + } + } + +-impl fmt::Debug for TokenStream { ++impl Debug for TokenStream { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { +- TokenStream::Compiler(tts) => tts.clone().into_token_stream().fmt(f), +- TokenStream::Fallback(tts) => tts.fmt(f), ++ TokenStream::Compiler(tts) => Debug::fmt(&tts.clone().into_token_stream(), f), ++ TokenStream::Fallback(tts) => Debug::fmt(tts, f), + } + } + } +@@ -300,17 +255,29 @@ impl From for LexError { + } + } + +-impl fmt::Debug for LexError { ++impl Debug for LexError { ++ fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { ++ match self { ++ LexError::Compiler(e) => Debug::fmt(e, f), ++ LexError::Fallback(e) => Debug::fmt(e, f), ++ } ++ } ++} ++ ++impl Display for LexError { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { +- LexError::Compiler(e) => e.fmt(f), +- LexError::Fallback(e) => e.fmt(f), ++ #[cfg(lexerror_display)] ++ LexError::Compiler(e) => Display::fmt(e, f), ++ #[cfg(not(lexerror_display))] ++ LexError::Compiler(_e) => Display::fmt(&fallback::LexError, f), ++ LexError::Fallback(e) => Display::fmt(e, f), + } + } + } + + #[derive(Clone)] +-pub enum TokenTreeIter { ++pub(crate) enum TokenTreeIter { + Compiler(proc_macro::token_stream::IntoIter), + Fallback(fallback::TokenTreeIter), + } +@@ -361,7 +328,7 @@ impl Iterator for TokenTreeIter { + } + } + +-impl fmt::Debug for TokenTreeIter { ++impl Debug for TokenTreeIter { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.debug_struct("TokenTreeIter").finish() + } +@@ -369,7 +336,7 @@ impl fmt::Debug for TokenTreeIter { + + #[derive(Clone, PartialEq, Eq)] + #[cfg(super_unstable)] +-pub enum SourceFile { ++pub(crate) enum SourceFile { + Compiler(proc_macro::SourceFile), + Fallback(fallback::SourceFile), + } +@@ -397,58 +364,77 @@ impl SourceFile { + } + + #[cfg(super_unstable)] +-impl fmt::Debug for SourceFile { ++impl Debug for SourceFile { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { +- SourceFile::Compiler(a) => a.fmt(f), +- SourceFile::Fallback(a) => a.fmt(f), ++ SourceFile::Compiler(a) => Debug::fmt(a, f), ++ SourceFile::Fallback(a) => Debug::fmt(a, f), + } + } + } + + #[cfg(any(super_unstable, feature = "span-locations"))] +-pub struct LineColumn { ++pub(crate) struct LineColumn { + pub line: usize, + pub column: usize, + } + + #[derive(Copy, Clone)] +-pub enum Span { ++pub(crate) enum Span { + Compiler(proc_macro::Span), + Fallback(fallback::Span), + } + + impl Span { + pub fn call_site() -> Span { +- if nightly_works() { ++ if inside_proc_macro() { + Span::Compiler(proc_macro::Span::call_site()) + } else { + Span::Fallback(fallback::Span::call_site()) + } + } + ++ #[cfg(hygiene)] ++ pub fn mixed_site() -> Span { ++ if inside_proc_macro() { ++ Span::Compiler(proc_macro::Span::mixed_site()) ++ } else { ++ Span::Fallback(fallback::Span::mixed_site()) ++ } ++ } ++ + #[cfg(super_unstable)] + pub fn def_site() -> Span { +- if nightly_works() { ++ if inside_proc_macro() { + Span::Compiler(proc_macro::Span::def_site()) + } else { + Span::Fallback(fallback::Span::def_site()) + } + } + +- #[cfg(super_unstable)] + pub fn resolved_at(&self, other: Span) -> Span { + match (self, other) { ++ #[cfg(hygiene)] + (Span::Compiler(a), Span::Compiler(b)) => Span::Compiler(a.resolved_at(b)), ++ ++ // Name resolution affects semantics, but location is only cosmetic ++ #[cfg(not(hygiene))] ++ (Span::Compiler(_), Span::Compiler(_)) => other, ++ + (Span::Fallback(a), Span::Fallback(b)) => Span::Fallback(a.resolved_at(b)), + _ => mismatch(), + } + } + +- #[cfg(super_unstable)] + pub fn located_at(&self, other: Span) -> Span { + match (self, other) { ++ #[cfg(hygiene)] + (Span::Compiler(a), Span::Compiler(b)) => Span::Compiler(a.located_at(b)), ++ ++ // Name resolution affects semantics, but location is only cosmetic ++ #[cfg(not(hygiene))] ++ (Span::Compiler(_), Span::Compiler(_)) => *self, ++ + (Span::Fallback(a), Span::Fallback(b)) => Span::Fallback(a.located_at(b)), + _ => mismatch(), + } +@@ -542,16 +528,16 @@ impl From for Span { + } + } + +-impl fmt::Debug for Span { ++impl Debug for Span { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { +- Span::Compiler(s) => s.fmt(f), +- Span::Fallback(s) => s.fmt(f), ++ Span::Compiler(s) => Debug::fmt(s, f), ++ Span::Fallback(s) => Debug::fmt(s, f), + } + } + } + +-pub fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) { ++pub(crate) fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) { + match span { + Span::Compiler(s) => { + debug.field("span", &s); +@@ -561,7 +547,7 @@ pub fn debug_span_field_if_nontrivial(debug: &mut fmt::DebugStruct, span: Span) + } + + #[derive(Clone)] +-pub enum Group { ++pub(crate) enum Group { + Compiler(proc_macro::Group), + Fallback(fallback::Group), + } +@@ -652,26 +638,26 @@ impl From for Group { + } + } + +-impl fmt::Display for Group { ++impl Display for Group { + fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + match self { +- Group::Compiler(group) => group.fmt(formatter), +- Group::Fallback(group) => group.fmt(formatter), ++ Group::Compiler(group) => Display::fmt(group, formatter), ++ Group::Fallback(group) => Display::fmt(group, formatter), + } + } + } + +-impl fmt::Debug for Group { ++impl Debug for Group { + fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + match self { +- Group::Compiler(group) => group.fmt(formatter), +- Group::Fallback(group) => group.fmt(formatter), ++ Group::Compiler(group) => Debug::fmt(group, formatter), ++ Group::Fallback(group) => Debug::fmt(group, formatter), + } + } + } + + #[derive(Clone)] +-pub enum Ident { ++pub(crate) enum Ident { + Compiler(proc_macro::Ident), + Fallback(fallback::Ident), + } +@@ -747,26 +733,26 @@ where + } + } + +-impl fmt::Display for Ident { ++impl Display for Ident { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { +- Ident::Compiler(t) => t.fmt(f), +- Ident::Fallback(t) => t.fmt(f), ++ Ident::Compiler(t) => Display::fmt(t, f), ++ Ident::Fallback(t) => Display::fmt(t, f), + } + } + } + +-impl fmt::Debug for Ident { ++impl Debug for Ident { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { +- Ident::Compiler(t) => t.fmt(f), +- Ident::Fallback(t) => t.fmt(f), ++ Ident::Compiler(t) => Debug::fmt(t, f), ++ Ident::Fallback(t) => Debug::fmt(t, f), + } + } + } + + #[derive(Clone)] +-pub enum Literal { ++pub(crate) enum Literal { + Compiler(proc_macro::Literal), + Fallback(fallback::Literal), + } +@@ -774,7 +760,7 @@ pub enum Literal { + macro_rules! suffixed_numbers { + ($($name:ident => $kind:ident,)*) => ($( + pub fn $name(n: $kind) -> Literal { +- if nightly_works() { ++ if inside_proc_macro() { + Literal::Compiler(proc_macro::Literal::$name(n)) + } else { + Literal::Fallback(fallback::Literal::$name(n)) +@@ -786,7 +772,7 @@ macro_rules! suffixed_numbers { + macro_rules! unsuffixed_integers { + ($($name:ident => $kind:ident,)*) => ($( + pub fn $name(n: $kind) -> Literal { +- if nightly_works() { ++ if inside_proc_macro() { + Literal::Compiler(proc_macro::Literal::$name(n)) + } else { + Literal::Fallback(fallback::Literal::$name(n)) +@@ -830,7 +816,7 @@ impl Literal { + } + + pub fn f32_unsuffixed(f: f32) -> Literal { +- if nightly_works() { ++ if inside_proc_macro() { + Literal::Compiler(proc_macro::Literal::f32_unsuffixed(f)) + } else { + Literal::Fallback(fallback::Literal::f32_unsuffixed(f)) +@@ -838,7 +824,7 @@ impl Literal { + } + + pub fn f64_unsuffixed(f: f64) -> Literal { +- if nightly_works() { ++ if inside_proc_macro() { + Literal::Compiler(proc_macro::Literal::f64_unsuffixed(f)) + } else { + Literal::Fallback(fallback::Literal::f64_unsuffixed(f)) +@@ -846,7 +832,7 @@ impl Literal { + } + + pub fn string(t: &str) -> Literal { +- if nightly_works() { ++ if inside_proc_macro() { + Literal::Compiler(proc_macro::Literal::string(t)) + } else { + Literal::Fallback(fallback::Literal::string(t)) +@@ -854,7 +840,7 @@ impl Literal { + } + + pub fn character(t: char) -> Literal { +- if nightly_works() { ++ if inside_proc_macro() { + Literal::Compiler(proc_macro::Literal::character(t)) + } else { + Literal::Fallback(fallback::Literal::character(t)) +@@ -862,7 +848,7 @@ impl Literal { + } + + pub fn byte_string(bytes: &[u8]) -> Literal { +- if nightly_works() { ++ if inside_proc_macro() { + Literal::Compiler(proc_macro::Literal::byte_string(bytes)) + } else { + Literal::Fallback(fallback::Literal::byte_string(bytes)) +@@ -908,20 +894,20 @@ impl From for Literal { + } + } + +-impl fmt::Display for Literal { ++impl Display for Literal { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { +- Literal::Compiler(t) => t.fmt(f), +- Literal::Fallback(t) => t.fmt(f), ++ Literal::Compiler(t) => Display::fmt(t, f), ++ Literal::Fallback(t) => Display::fmt(t, f), + } + } + } + +-impl fmt::Debug for Literal { ++impl Debug for Literal { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self { +- Literal::Compiler(t) => t.fmt(f), +- Literal::Fallback(t) => t.fmt(f), ++ Literal::Compiler(t) => Debug::fmt(t, f), ++ Literal::Fallback(t) => Debug::fmt(t, f), + } + } + } +diff --git a/third_party/rust/proc-macro2/tests/comments.rs b/third_party/rust/proc-macro2/tests/comments.rs +new file mode 100644 +index 0000000000..708cccb880 +--- /dev/null ++++ third_party/rust/proc-macro2/tests/comments.rs +@@ -0,0 +1,103 @@ ++use proc_macro2::{Delimiter, Literal, Spacing, TokenStream, TokenTree}; ++ ++// #[doc = "..."] -> "..." ++fn lit_of_outer_doc_comment(tokens: TokenStream) -> Literal { ++ lit_of_doc_comment(tokens, false) ++} ++ ++// #![doc = "..."] -> "..." ++fn lit_of_inner_doc_comment(tokens: TokenStream) -> Literal { ++ lit_of_doc_comment(tokens, true) ++} ++ ++fn lit_of_doc_comment(tokens: TokenStream, inner: bool) -> Literal { ++ let mut iter = tokens.clone().into_iter(); ++ match iter.next().unwrap() { ++ TokenTree::Punct(punct) => { ++ assert_eq!(punct.as_char(), '#'); ++ assert_eq!(punct.spacing(), Spacing::Alone); ++ } ++ _ => panic!("wrong token {:?}", tokens), ++ } ++ if inner { ++ match iter.next().unwrap() { ++ TokenTree::Punct(punct) => { ++ assert_eq!(punct.as_char(), '!'); ++ assert_eq!(punct.spacing(), Spacing::Alone); ++ } ++ _ => panic!("wrong token {:?}", tokens), ++ } ++ } ++ iter = match iter.next().unwrap() { ++ TokenTree::Group(group) => { ++ assert_eq!(group.delimiter(), Delimiter::Bracket); ++ assert!(iter.next().is_none(), "unexpected token {:?}", tokens); ++ group.stream().into_iter() ++ } ++ _ => panic!("wrong token {:?}", tokens), ++ }; ++ match iter.next().unwrap() { ++ TokenTree::Ident(ident) => assert_eq!(ident.to_string(), "doc"), ++ _ => panic!("wrong token {:?}", tokens), ++ } ++ match iter.next().unwrap() { ++ TokenTree::Punct(punct) => { ++ assert_eq!(punct.as_char(), '='); ++ assert_eq!(punct.spacing(), Spacing::Alone); ++ } ++ _ => panic!("wrong token {:?}", tokens), ++ } ++ match iter.next().unwrap() { ++ TokenTree::Literal(literal) => { ++ assert!(iter.next().is_none(), "unexpected token {:?}", tokens); ++ literal ++ } ++ _ => panic!("wrong token {:?}", tokens), ++ } ++} ++ ++#[test] ++fn closed_immediately() { ++ let stream = "/**/".parse::().unwrap(); ++ let tokens = stream.into_iter().collect::>(); ++ assert!(tokens.is_empty(), "not empty -- {:?}", tokens); ++} ++ ++#[test] ++fn incomplete() { ++ assert!("/*/".parse::().is_err()); ++} ++ ++#[test] ++fn lit() { ++ let stream = "/// doc".parse::().unwrap(); ++ let lit = lit_of_outer_doc_comment(stream); ++ assert_eq!(lit.to_string(), "\" doc\""); ++ ++ let stream = "//! doc".parse::().unwrap(); ++ let lit = lit_of_inner_doc_comment(stream); ++ assert_eq!(lit.to_string(), "\" doc\""); ++ ++ let stream = "/** doc */".parse::().unwrap(); ++ let lit = lit_of_outer_doc_comment(stream); ++ assert_eq!(lit.to_string(), "\" doc \""); ++ ++ let stream = "/*! doc */".parse::().unwrap(); ++ let lit = lit_of_inner_doc_comment(stream); ++ assert_eq!(lit.to_string(), "\" doc \""); ++} ++ ++#[test] ++fn carriage_return() { ++ let stream = "///\r\n".parse::().unwrap(); ++ let lit = lit_of_outer_doc_comment(stream); ++ assert_eq!(lit.to_string(), "\"\""); ++ ++ let stream = "/**\r\n*/".parse::().unwrap(); ++ let lit = lit_of_outer_doc_comment(stream); ++ assert_eq!(lit.to_string(), "\"\\r\\n\""); ++ ++ "///\r".parse::().unwrap_err(); ++ "///\r \n".parse::().unwrap_err(); ++ "/**\r \n*/".parse::().unwrap_err(); ++} +diff --git a/third_party/rust/proc-macro2/tests/marker.rs b/third_party/rust/proc-macro2/tests/marker.rs +index 7af2539c1a..70e57677cd 100644 +--- third_party/rust/proc-macro2/tests/marker.rs ++++ 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 +--- third_party/rust/proc-macro2/tests/test.rs ++++ third_party/rust/proc-macro2/tests/test.rs +@@ -1,7 +1,6 @@ ++use proc_macro2::{Ident, Literal, Punct, Spacing, Span, TokenStream, TokenTree}; + use std::str::{self, FromStr}; + +-use proc_macro2::{Ident, Literal, Spacing, Span, TokenStream, TokenTree}; +- + #[test] + fn idents() { + assert_eq!( +@@ -84,6 +83,11 @@ fn literal_string() { + assert_eq!(Literal::string("didn't").to_string(), "\"didn't\""); + } + ++#[test] ++fn literal_raw_string() { ++ "r\"\r\n\"".parse::().unwrap(); ++} ++ + #[test] + fn literal_character() { + assert_eq!(Literal::character('x').to_string(), "'x'"); +@@ -110,6 +114,37 @@ fn literal_suffix() { + assert_eq!(token_count("1._0"), 3); + assert_eq!(token_count("1._m"), 3); + assert_eq!(token_count("\"\"s"), 1); ++ assert_eq!(token_count("r\"\"r"), 1); ++ assert_eq!(token_count("b\"\"b"), 1); ++ assert_eq!(token_count("br\"\"br"), 1); ++ assert_eq!(token_count("r#\"\"#r"), 1); ++ assert_eq!(token_count("'c'c"), 1); ++ assert_eq!(token_count("b'b'b"), 1); ++ assert_eq!(token_count("0E"), 1); ++ assert_eq!(token_count("0o0A"), 1); ++ assert_eq!(token_count("0E--0"), 4); ++ assert_eq!(token_count("0.0ECMA"), 1); ++} ++ ++#[test] ++fn literal_iter_negative() { ++ let negative_literal = Literal::i32_suffixed(-3); ++ let tokens = TokenStream::from(TokenTree::Literal(negative_literal)); ++ let mut iter = tokens.into_iter(); ++ match iter.next().unwrap() { ++ TokenTree::Punct(punct) => { ++ assert_eq!(punct.as_char(), '-'); ++ assert_eq!(punct.spacing(), Spacing::Alone); ++ } ++ unexpected => panic!("unexpected token {:?}", unexpected), ++ } ++ match iter.next().unwrap() { ++ TokenTree::Literal(literal) => { ++ assert_eq!(literal.to_string(), "3i32"); ++ } ++ unexpected => panic!("unexpected token {:?}", unexpected), ++ } ++ assert!(iter.next().is_none()); + } + + #[test] +@@ -161,41 +196,21 @@ fn fail() { + fail("' static"); + fail("r#1"); + fail("r#_"); ++ fail("\"\\u{0000000}\""); // overlong unicode escape (rust allows at most 6 hex digits) ++ fail("\"\\u{999999}\""); // outside of valid range of char ++ fail("\"\\u{_0}\""); // leading underscore ++ fail("\"\\u{}\""); // empty ++ fail("b\"\r\""); // bare carriage return in byte string ++ fail("r\"\r\""); // bare carriage return in raw string ++ fail("\"\\\r \""); // backslash carriage return ++ fail("'aa'aa"); ++ fail("br##\"\"#"); ++ fail("\"\\\n\u{85}\r\""); + } + + #[cfg(span_locations)] + #[test] + fn span_test() { +- use proc_macro2::TokenTree; +- +- fn check_spans(p: &str, mut lines: &[(usize, usize, usize, usize)]) { +- let ts = p.parse::().unwrap(); +- check_spans_internal(ts, &mut lines); +- } +- +- fn check_spans_internal(ts: TokenStream, lines: &mut &[(usize, usize, usize, usize)]) { +- for i in ts { +- if let Some((&(sline, scol, eline, ecol), rest)) = lines.split_first() { +- *lines = rest; +- +- let start = i.span().start(); +- assert_eq!(start.line, sline, "sline did not match for {}", i); +- assert_eq!(start.column, scol, "scol did not match for {}", i); +- +- let end = i.span().end(); +- assert_eq!(end.line, eline, "eline did not match for {}", i); +- assert_eq!(end.column, ecol, "ecol did not match for {}", i); +- +- match i { +- TokenTree::Group(ref g) => { +- check_spans_internal(g.stream().clone(), lines); +- } +- _ => {} +- } +- } +- } +- } +- + check_spans( + "\ + /// This is a document comment +@@ -274,53 +289,11 @@ fn span_join() { + #[test] + fn no_panic() { + let s = str::from_utf8(b"b\'\xc2\x86 \x00\x00\x00^\"").unwrap(); +- assert!(s.parse::().is_err()); ++ assert!(s.parse::().is_err()); + } + + #[test] +-fn tricky_doc_comment() { +- let stream = "/**/".parse::().unwrap(); +- let tokens = stream.into_iter().collect::>(); +- assert!(tokens.is_empty(), "not empty -- {:?}", tokens); +- +- let stream = "/// doc".parse::().unwrap(); +- let tokens = stream.into_iter().collect::>(); +- assert!(tokens.len() == 2, "not length 2 -- {:?}", tokens); +- match tokens[0] { +- proc_macro2::TokenTree::Punct(ref tt) => assert_eq!(tt.as_char(), '#'), +- _ => panic!("wrong token {:?}", tokens[0]), +- } +- let mut tokens = match tokens[1] { +- proc_macro2::TokenTree::Group(ref tt) => { +- assert_eq!(tt.delimiter(), proc_macro2::Delimiter::Bracket); +- tt.stream().into_iter() +- } +- _ => panic!("wrong token {:?}", tokens[0]), +- }; +- +- match tokens.next().unwrap() { +- proc_macro2::TokenTree::Ident(ref tt) => assert_eq!(tt.to_string(), "doc"), +- t => panic!("wrong token {:?}", t), +- } +- match tokens.next().unwrap() { +- proc_macro2::TokenTree::Punct(ref tt) => assert_eq!(tt.as_char(), '='), +- t => panic!("wrong token {:?}", t), +- } +- match tokens.next().unwrap() { +- proc_macro2::TokenTree::Literal(ref tt) => { +- assert_eq!(tt.to_string(), "\" doc\""); +- } +- t => panic!("wrong token {:?}", t), +- } +- assert!(tokens.next().is_none()); +- +- let stream = "//! doc".parse::().unwrap(); +- let tokens = stream.into_iter().collect::>(); +- assert!(tokens.len() == 3, "not length 3 -- {:?}", tokens); +-} +- +-#[test] +-fn op_before_comment() { ++fn punct_before_comment() { + let mut tts = TokenStream::from_str("~// comment").unwrap().into_iter(); + match tts.next().unwrap() { + TokenTree::Punct(tt) => { +@@ -331,6 +304,22 @@ fn op_before_comment() { + } + } + ++#[test] ++fn joint_last_token() { ++ // This test verifies that we match the behavior of libproc_macro *not* in ++ // the range nightly-2020-09-06 through nightly-2020-09-10, in which this ++ // behavior was temporarily broken. ++ // See https://github.com/rust-lang/rust/issues/76399 ++ ++ let joint_punct = Punct::new(':', Spacing::Joint); ++ let stream = TokenStream::from(TokenTree::Punct(joint_punct)); ++ let punct = match stream.into_iter().next().unwrap() { ++ TokenTree::Punct(punct) => punct, ++ _ => unreachable!(), ++ }; ++ assert_eq!(punct.spacing(), Spacing::Joint); ++} ++ + #[test] + fn raw_identifier() { + let mut tts = TokenStream::from_str("r#dyn").unwrap().into_iter(); +@@ -345,11 +334,11 @@ fn raw_identifier() { + fn test_debug_ident() { + let ident = Ident::new("proc_macro", Span::call_site()); + +- #[cfg(not(procmacro2_semver_exempt))] ++ #[cfg(not(span_locations))] + let expected = "Ident(proc_macro)"; + +- #[cfg(procmacro2_semver_exempt)] +- let expected = "Ident { sym: proc_macro, span: bytes(0..0) }"; ++ #[cfg(span_locations)] ++ let expected = "Ident { sym: proc_macro }"; + + assert_eq!(expected, format!("{:?}", ident)); + } +@@ -358,7 +347,7 @@ fn test_debug_ident() { + fn test_debug_tokenstream() { + let tts = TokenStream::from_str("[a + 1]").unwrap(); + +- #[cfg(not(procmacro2_semver_exempt))] ++ #[cfg(not(span_locations))] + let expected = "\ + TokenStream [ + Group { +@@ -368,7 +357,7 @@ TokenStream [ + sym: a, + }, + Punct { +- op: '+', ++ char: '+', + spacing: Alone, + }, + Literal { +@@ -379,7 +368,7 @@ TokenStream [ + ]\ + "; + +- #[cfg(not(procmacro2_semver_exempt))] ++ #[cfg(not(span_locations))] + let expected_before_trailing_commas = "\ + TokenStream [ + Group { +@@ -389,7 +378,7 @@ TokenStream [ + sym: a + }, + Punct { +- op: '+', ++ char: '+', + spacing: Alone + }, + Literal { +@@ -400,7 +389,7 @@ TokenStream [ + ]\ + "; + +- #[cfg(procmacro2_semver_exempt)] ++ #[cfg(span_locations)] + let expected = "\ + TokenStream [ + Group { +@@ -411,7 +400,7 @@ TokenStream [ + span: bytes(2..3), + }, + Punct { +- op: '+', ++ char: '+', + spacing: Alone, + span: bytes(4..5), + }, +@@ -425,7 +414,7 @@ TokenStream [ + ]\ + "; + +- #[cfg(procmacro2_semver_exempt)] ++ #[cfg(span_locations)] + let expected_before_trailing_commas = "\ + TokenStream [ + Group { +@@ -436,7 +425,7 @@ TokenStream [ + span: bytes(2..3) + }, + Punct { +- op: '+', ++ char: '+', + spacing: Alone, + span: bytes(4..5) + }, +@@ -464,3 +453,80 @@ fn default_tokenstream_is_empty() { + + assert!(default_token_stream.is_empty()); + } ++ ++#[test] ++fn tuple_indexing() { ++ // This behavior may change depending on https://github.com/rust-lang/rust/pull/71322 ++ let mut tokens = "tuple.0.0".parse::().unwrap().into_iter(); ++ assert_eq!("tuple", tokens.next().unwrap().to_string()); ++ assert_eq!(".", tokens.next().unwrap().to_string()); ++ assert_eq!("0.0", tokens.next().unwrap().to_string()); ++ assert!(tokens.next().is_none()); ++} ++ ++#[cfg(span_locations)] ++#[test] ++fn non_ascii_tokens() { ++ check_spans("// abc", &[]); ++ check_spans("// ábc", &[]); ++ check_spans("// abc x", &[]); ++ check_spans("// ábc x", &[]); ++ check_spans("/* abc */ x", &[(1, 10, 1, 11)]); ++ check_spans("/* ábc */ x", &[(1, 10, 1, 11)]); ++ check_spans("/* ab\nc */ x", &[(2, 5, 2, 6)]); ++ check_spans("/* áb\nc */ x", &[(2, 5, 2, 6)]); ++ check_spans("/*** abc */ x", &[(1, 12, 1, 13)]); ++ check_spans("/*** ábc */ x", &[(1, 12, 1, 13)]); ++ check_spans(r#""abc""#, &[(1, 0, 1, 5)]); ++ check_spans(r#""ábc""#, &[(1, 0, 1, 5)]); ++ check_spans(r###"r#"abc"#"###, &[(1, 0, 1, 8)]); ++ check_spans(r###"r#"ábc"#"###, &[(1, 0, 1, 8)]); ++ check_spans("r#\"a\nc\"#", &[(1, 0, 2, 3)]); ++ check_spans("r#\"á\nc\"#", &[(1, 0, 2, 3)]); ++ check_spans("'a'", &[(1, 0, 1, 3)]); ++ check_spans("'á'", &[(1, 0, 1, 3)]); ++ check_spans("//! abc", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]); ++ check_spans("//! ábc", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]); ++ check_spans("//! abc\n", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]); ++ check_spans("//! ábc\n", &[(1, 0, 1, 7), (1, 0, 1, 7), (1, 0, 1, 7)]); ++ check_spans("/*! abc */", &[(1, 0, 1, 10), (1, 0, 1, 10), (1, 0, 1, 10)]); ++ check_spans("/*! ábc */", &[(1, 0, 1, 10), (1, 0, 1, 10), (1, 0, 1, 10)]); ++ check_spans("/*! a\nc */", &[(1, 0, 2, 4), (1, 0, 2, 4), (1, 0, 2, 4)]); ++ check_spans("/*! á\nc */", &[(1, 0, 2, 4), (1, 0, 2, 4), (1, 0, 2, 4)]); ++ check_spans("abc", &[(1, 0, 1, 3)]); ++ check_spans("ábc", &[(1, 0, 1, 3)]); ++ check_spans("ábć", &[(1, 0, 1, 3)]); ++ check_spans("abc// foo", &[(1, 0, 1, 3)]); ++ check_spans("ábc// foo", &[(1, 0, 1, 3)]); ++ check_spans("ábć// foo", &[(1, 0, 1, 3)]); ++ check_spans("b\"a\\\n c\"", &[(1, 0, 2, 3)]); ++ check_spans("b\"a\\\n\u{00a0}c\"", &[(1, 0, 2, 3)]); ++} ++ ++#[cfg(span_locations)] ++fn check_spans(p: &str, mut lines: &[(usize, usize, usize, usize)]) { ++ let ts = p.parse::().unwrap(); ++ check_spans_internal(ts, &mut lines); ++ assert!(lines.is_empty(), "leftover ranges: {:?}", lines); ++} ++ ++#[cfg(span_locations)] ++fn check_spans_internal(ts: TokenStream, lines: &mut &[(usize, usize, usize, usize)]) { ++ for i in ts { ++ if let Some((&(sline, scol, eline, ecol), rest)) = lines.split_first() { ++ *lines = rest; ++ ++ let start = i.span().start(); ++ assert_eq!(start.line, sline, "sline did not match for {}", i); ++ assert_eq!(start.column, scol, "scol did not match for {}", i); ++ ++ let end = i.span().end(); ++ assert_eq!(end.line, eline, "eline did not match for {}", i); ++ assert_eq!(end.column, ecol, "ecol did not match for {}", i); ++ ++ if let TokenTree::Group(g) = i { ++ check_spans_internal(g.stream().clone(), lines); ++ } ++ } ++ } ++} +diff --git a/third_party/rust/proc-macro2/tests/test_fmt.rs b/third_party/rust/proc-macro2/tests/test_fmt.rs +new file mode 100644 +index 0000000000..99a0aee5c8 +--- /dev/null ++++ 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 +--- third_party/rust/spirv-cross-internal/.cargo-checksum.json ++++ 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 +--- third_party/rust/syn/.cargo-checksum.json ++++ 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 +--- third_party/rust/syn/Cargo.toml ++++ third_party/rust/syn/Cargo.toml +@@ -13,7 +13,7 @@ + [package] + edition = "2018" + name = "syn" +-version = "1.0.5" ++version = "1.0.40" + authors = ["David Tolnay "] + include = ["/benches/**", "/build.rs", "/Cargo.toml", "/LICENSE-APACHE", "/LICENSE-MIT", "/README.md", "/src/**", "/tests/**"] + description = "Parser for Rust source code" +@@ -24,25 +24,21 @@ license = "MIT OR Apache-2.0" + repository = "https://github.com/dtolnay/syn" + [package.metadata.docs.rs] + all-features = true ++targets = ["x86_64-unknown-linux-gnu"] + + [package.metadata.playground] +-all-features = true +- +-[lib] +-name = "syn" ++features = ["full", "visit", "visit-mut", "fold", "extra-traits"] + + [[bench]] + name = "rust" + harness = false + required-features = ["full", "parsing"] +-edition = "2018" + + [[bench]] + name = "file" + required-features = ["full", "parsing"] +-edition = "2018" + [dependencies.proc-macro2] +-version = "1.0" ++version = "1.0.13" + default-features = false + + [dependencies.quote] +@@ -52,18 +48,34 @@ default-features = false + + [dependencies.unicode-xid] + version = "0.2" ++[dev-dependencies.anyhow] ++version = "1.0" ++ ++[dev-dependencies.flate2] ++version = "1.0" ++ + [dev-dependencies.insta] +-version = "0.9" ++version = "0.16" + + [dev-dependencies.rayon] + version = "1.0" + + [dev-dependencies.ref-cast] +-version = "0.2" ++version = "1.0" + + [dev-dependencies.regex] + version = "1.0" + ++[dev-dependencies.reqwest] ++version = "0.10" ++features = ["blocking"] ++ ++[dev-dependencies.syn-test-suite] ++version = "0" ++ ++[dev-dependencies.tar] ++version = "0.4" ++ + [dev-dependencies.termcolor] + version = "1.0" + +@@ -80,7 +92,6 @@ full = [] + parsing = [] + printing = ["quote"] + proc-macro = ["proc-macro2/proc-macro", "quote/proc-macro"] ++test = ["syn-test-suite/all-features"] + visit = [] + visit-mut = [] +-[badges.travis-ci] +-repository = "dtolnay/syn" +diff --git a/third_party/rust/syn/README.md b/third_party/rust/syn/README.md +index 29a7f32a46..12b5f45b3d 100644 +--- third_party/rust/syn/README.md ++++ third_party/rust/syn/README.md +@@ -1,10 +1,10 @@ + Parser for Rust source code + =========================== + +-[![Build Status](https://api.travis-ci.org/dtolnay/syn.svg?branch=master)](https://travis-ci.org/dtolnay/syn) +-[![Latest Version](https://img.shields.io/crates/v/syn.svg)](https://crates.io/crates/syn) +-[![Rust Documentation](https://img.shields.io/badge/api-rustdoc-blue.svg)](https://docs.rs/syn/1.0/syn/) +-[![Rustc Version 1.31+](https://img.shields.io/badge/rustc-1.31+-lightgray.svg)](https://blog.rust-lang.org/2018/12/06/Rust-1.31-and-rust-2018.html) ++[github](https://github.com/dtolnay/syn) ++[crates.io](https://crates.io/crates/syn) ++[docs.rs](https://docs.rs/syn) ++[build status](https://github.com/dtolnay/syn/actions?query=branch%3Amaster) + + Syn is a parsing library for parsing a stream of Rust tokens into a syntax tree + of Rust source code. +@@ -46,10 +46,6 @@ contains some APIs that may be useful more generally. + [`syn::DeriveInput`]: https://docs.rs/syn/1.0/syn/struct.DeriveInput.html + [parser functions]: https://docs.rs/syn/1.0/syn/parse/index.html + +-If you get stuck with anything involving procedural macros in Rust I am happy to +-provide help even if the issue is not related to Syn. Please file a ticket in +-this repo. +- + *Version requirement: Syn supports rustc 1.31 and up.* + + [*Release notes*](https://github.com/dtolnay/syn/releases) +@@ -88,8 +84,6 @@ proc-macro = true + ``` + + ```rust +-extern crate proc_macro; +- + use proc_macro::TokenStream; + use quote::quote; + use syn::{parse_macro_input, DeriveInput}; +@@ -271,7 +265,7 @@ points, which are required by the language to use `proc_macro::TokenStream`. + The proc-macro2 crate will automatically detect and use the compiler's data + structures when a procedural macro is active. + +-[proc-macro2]: https://docs.rs/proc-macro2/1.0.0/proc_macro2/ ++[proc-macro2]: https://docs.rs/proc-macro2/1.0/proc_macro2/ + +
+ +diff --git a/third_party/rust/syn/benches/file.rs b/third_party/rust/syn/benches/file.rs +index 08ecd90960..58ab8df297 100644 +--- third_party/rust/syn/benches/file.rs ++++ 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 +--- third_party/rust/syn/benches/rust.rs ++++ third_party/rust/syn/benches/rust.rs +@@ -4,7 +4,14 @@ + // $ RUSTFLAGS='--cfg syn_only' cargo build --release --features full --bench rust + + #![cfg_attr(not(syn_only), feature(rustc_private))] ++#![recursion_limit = "1024"] + ++#[macro_use] ++#[path = "../tests/macros/mod.rs"] ++mod macros; ++ ++#[path = "../tests/common/mod.rs"] ++mod common; + #[path = "../tests/repo/mod.rs"] + mod repo; + +@@ -28,31 +35,35 @@ mod syn_parse { + } + + #[cfg(not(syn_only))] +-mod libsyntax_parse { ++mod librustc_parse { + extern crate rustc_data_structures; +- extern crate syntax; +- extern crate syntax_pos; ++ extern crate rustc_errors; ++ extern crate rustc_parse; ++ extern crate rustc_session; ++ extern crate rustc_span; + + use rustc_data_structures::sync::Lrc; +- use syntax::edition::Edition; +- use syntax::errors::{emitter::Emitter, DiagnosticBuilder, Handler}; +- use syntax::parse::ParseSess; +- use syntax::source_map::{FilePathMapping, SourceMap}; +- use syntax_pos::FileName; ++ use rustc_errors::{emitter::Emitter, Diagnostic, Handler}; ++ use rustc_session::parse::ParseSess; ++ use rustc_span::source_map::{FilePathMapping, SourceMap}; ++ use rustc_span::{edition::Edition, FileName}; + + pub fn bench(content: &str) -> Result<(), ()> { + struct SilentEmitter; + + impl Emitter for SilentEmitter { +- fn emit_diagnostic(&mut self, _db: &DiagnosticBuilder) {} ++ fn emit_diagnostic(&mut self, _diag: &Diagnostic) {} ++ fn source_map(&self) -> Option<&Lrc> { ++ None ++ } + } + +- syntax::with_globals(Edition::Edition2018, || { ++ rustc_span::with_session_globals(Edition::Edition2018, || { + let cm = Lrc::new(SourceMap::new(FilePathMapping::empty())); + let emitter = Box::new(SilentEmitter); + let handler = Handler::with_emitter(false, None, emitter); + let sess = ParseSess::with_span_handler(handler, cm); +- if let Err(mut diagnostic) = syntax::parse::parse_crate_from_source_str( ++ if let Err(mut diagnostic) = rustc_parse::parse_crate_from_source_str( + FileName::Custom("bench".to_owned()), + content.to_owned(), + &sess, +@@ -104,11 +115,11 @@ fn main() { + repo::clone_rust(); + + macro_rules! testcases { +- ($($(#[$cfg:meta])* $name:path,)*) => { ++ ($($(#[$cfg:meta])* $name:ident,)*) => { + vec![ + $( + $(#[$cfg])* +- (stringify!($name), $name as fn(&str) -> Result<(), ()>), ++ (stringify!($name), $name::bench as fn(&str) -> Result<(), ()>), + )* + ] + }; +@@ -128,12 +139,12 @@ fn main() { + + for (name, f) in testcases!( + #[cfg(not(syn_only))] +- read_from_disk::bench, ++ read_from_disk, + #[cfg(not(syn_only))] +- tokenstream_parse::bench, +- syn_parse::bench, ++ tokenstream_parse, ++ syn_parse, + #[cfg(not(syn_only))] +- libsyntax_parse::bench, ++ librustc_parse, + ) { + eprint!("{:20}", format!("{}:", name)); + let elapsed = exec(f); +diff --git a/third_party/rust/syn/build.rs b/third_party/rust/syn/build.rs +index c0f9ed3406..cf7681c3f9 100644 +--- third_party/rust/syn/build.rs ++++ third_party/rust/syn/build.rs +@@ -1,6 +1,6 @@ + use std::env; + use std::process::Command; +-use std::str::{self, FromStr}; ++use std::str; + + // The rustc-cfg strings below are *not* public API. Please let us know by + // opening a GitHub issue if your build environment requires some way to enable +@@ -26,38 +26,14 @@ struct Compiler { + } + + fn rustc_version() -> Option { +- let rustc = match env::var_os("RUSTC") { +- Some(rustc) => rustc, +- None => return None, +- }; +- +- let output = match Command::new(rustc).arg("--version").output() { +- Ok(output) => output, +- Err(_) => return None, +- }; +- +- let version = match str::from_utf8(&output.stdout) { +- Ok(version) => version, +- Err(_) => return None, +- }; +- ++ let rustc = env::var_os("RUSTC")?; ++ let output = Command::new(rustc).arg("--version").output().ok()?; ++ let version = str::from_utf8(&output.stdout).ok()?; + let mut pieces = version.split('.'); + if pieces.next() != Some("rustc 1") { + return None; + } +- +- let next = match pieces.next() { +- Some(next) => next, +- None => return None, +- }; +- +- let minor = match u32::from_str(next) { +- Ok(minor) => minor, +- Err(_) => return None, +- }; +- +- Some(Compiler { +- minor: minor, +- nightly: version.contains("nightly"), +- }) ++ let minor = pieces.next()?.parse().ok()?; ++ let nightly = version.contains("nightly"); ++ Some(Compiler { minor, nightly }) + } +diff --git a/third_party/rust/syn/src/attr.rs b/third_party/rust/syn/src/attr.rs +index 34009deabc..fa4f1cb2a3 100644 +--- third_party/rust/syn/src/attr.rs ++++ third_party/rust/syn/src/attr.rs +@@ -9,15 +9,11 @@ use proc_macro2::TokenStream; + use crate::parse::{Parse, ParseBuffer, ParseStream, Parser, Result}; + #[cfg(feature = "parsing")] + use crate::punctuated::Pair; +-#[cfg(feature = "extra-traits")] +-use crate::tt::TokenStreamHelper; +-#[cfg(feature = "extra-traits")] +-use std::hash::{Hash, Hasher}; + + ast_struct! { + /// An attribute like `#[repr(transparent)]`. + /// +- /// *This type is available if Syn is built with the `"derive"` or `"full"` ++ /// *This type is available only if Syn is built with the `"derive"` or `"full"` + /// feature.* + /// + ///
+@@ -111,7 +107,46 @@ ast_struct! { + /// + /// [`parse_meta()`]: Attribute::parse_meta + /// [`parse_args()`]: Attribute::parse_args +- pub struct Attribute #manual_extra_traits { ++ /// ++ ///


++ /// ++ /// # Doc comments ++ /// ++ /// The compiler transforms doc comments, such as `/// comment` and `/*! ++ /// comment */`, into attributes before macros are expanded. Each comment is ++ /// expanded into an attribute of the form `#[doc = r"comment"]`. ++ /// ++ /// As an example, the following `mod` items are expanded identically: ++ /// ++ /// ``` ++ /// # use syn::{ItemMod, parse_quote}; ++ /// let doc: ItemMod = parse_quote! { ++ /// /// Single line doc comments ++ /// /// We write so many! ++ /// /** ++ /// * Multi-line comments... ++ /// * May span many lines ++ /// */ ++ /// mod example { ++ /// //! Of course, they can be inner too ++ /// /*! And fit in a single line */ ++ /// } ++ /// }; ++ /// let attr: ItemMod = parse_quote! { ++ /// #[doc = r" Single line doc comments"] ++ /// #[doc = r" We write so many!"] ++ /// #[doc = r" ++ /// * Multi-line comments... ++ /// * May span many lines ++ /// "] ++ /// mod example { ++ /// #![doc = r" Of course, they can be inner too"] ++ /// #![doc = r" And fit in a single line "] ++ /// } ++ /// }; ++ /// assert_eq!(doc, attr); ++ /// ``` ++ pub struct Attribute { + pub pound_token: Token![#], + pub style: AttrStyle, + pub bracket_token: token::Bracket, +@@ -120,39 +155,11 @@ ast_struct! { + } + } + +-#[cfg(feature = "extra-traits")] +-impl Eq for Attribute {} +- +-#[cfg(feature = "extra-traits")] +-impl PartialEq for Attribute { +- fn eq(&self, other: &Self) -> bool { +- self.style == other.style +- && self.pound_token == other.pound_token +- && self.bracket_token == other.bracket_token +- && self.path == other.path +- && TokenStreamHelper(&self.tokens) == TokenStreamHelper(&other.tokens) +- } +-} +- +-#[cfg(feature = "extra-traits")] +-impl Hash for Attribute { +- fn hash(&self, state: &mut H) +- where +- H: Hasher, +- { +- self.style.hash(state); +- self.pound_token.hash(state); +- self.bracket_token.hash(state); +- self.path.hash(state); +- TokenStreamHelper(&self.tokens).hash(state); +- } +-} +- + impl Attribute { + /// Parses the content of the attribute, consisting of the path and tokens, + /// as a [`Meta`] if possible. + /// +- /// *This function is available if Syn is built with the `"parsing"` ++ /// *This function is available only if Syn is built with the `"parsing"` + /// feature.* + #[cfg(feature = "parsing")] + pub fn parse_meta(&self) -> Result { +@@ -199,7 +206,7 @@ impl Attribute { + /// ^^^^^^^^^ what gets parsed + /// ``` + /// +- /// *This function is available if Syn is built with the `"parsing"` ++ /// *This function is available only if Syn is built with the `"parsing"` + /// feature.* + #[cfg(feature = "parsing")] + pub fn parse_args(&self) -> Result { +@@ -208,7 +215,7 @@ impl Attribute { + + /// Parse the arguments to the attribute using the given parser. + /// +- /// *This function is available if Syn is built with the `"parsing"` ++ /// *This function is available only if Syn is built with the `"parsing"` + /// feature.* + #[cfg(feature = "parsing")] + pub fn parse_args_with(&self, parser: F) -> Result { +@@ -221,7 +228,7 @@ impl Attribute { + + /// Parses zero or more outer attributes from the stream. + /// +- /// *This function is available if Syn is built with the `"parsing"` ++ /// *This function is available only if Syn is built with the `"parsing"` + /// feature.* + #[cfg(feature = "parsing")] + pub fn parse_outer(input: ParseStream) -> Result> { +@@ -234,7 +241,7 @@ impl Attribute { + + /// Parses zero or more inner attributes from the stream. + /// +- /// *This function is available if Syn is built with the `"parsing"` ++ /// *This function is available only if Syn is built with the `"parsing"` + /// feature.* + #[cfg(feature = "parsing")] + pub fn parse_inner(input: ParseStream) -> Result> { +@@ -247,7 +254,7 @@ impl Attribute { + } + + #[cfg(feature = "parsing")] +-fn error_expected_args(attr: &Attribute) -> Error { ++fn expected_parentheses(attr: &Attribute) -> String { + let style = match attr.style { + AttrStyle::Outer => "#", + AttrStyle::Inner(_) => "#!", +@@ -261,19 +268,23 @@ fn error_expected_args(attr: &Attribute) -> Error { + path += &segment.ident.to_string(); + } + +- let msg = format!("expected attribute arguments: {}[{}(...)]", style, path); +- +- #[cfg(feature = "printing")] +- return Error::new_spanned(attr, msg); +- +- #[cfg(not(feature = "printing"))] +- return Error::new(attr.bracket_token.span, msg); ++ format!("{}[{}(...)]", style, path) + } + + #[cfg(feature = "parsing")] + fn enter_args<'a>(attr: &Attribute, input: ParseStream<'a>) -> Result> { + if input.is_empty() { +- return Err(error_expected_args(attr)); ++ let expected = expected_parentheses(attr); ++ let msg = format!("expected attribute arguments in parentheses: {}", expected); ++ return Err(crate::error::new2( ++ attr.pound_token.span, ++ attr.bracket_token.span, ++ msg, ++ )); ++ } else if input.peek(Token![=]) { ++ let expected = expected_parentheses(attr); ++ let msg = format!("expected parentheses: {}", expected); ++ return Err(input.error(msg)); + }; + + let content; +@@ -298,7 +309,7 @@ ast_enum! { + /// Distinguishes between attributes that decorate an item and attributes + /// that are contained within an item. + /// +- /// *This type is available if Syn is built with the `"derive"` or `"full"` ++ /// *This type is available only if Syn is built with the `"derive"` or `"full"` + /// feature.* + /// + /// # Outer attributes +@@ -312,7 +323,6 @@ ast_enum! { + /// - `#![feature(proc_macro)]` + /// - `//! # Example` + /// - `/*! Please file an issue */` +- #[cfg_attr(feature = "clone-impls", derive(Copy))] + pub enum AttrStyle { + Outer, + Inner(Token![!]), +@@ -322,7 +332,7 @@ ast_enum! { + ast_enum_of_structs! { + /// Content of a compile-time structured attribute. + /// +- /// *This type is available if Syn is built with the `"derive"` or `"full"` ++ /// *This type is available only if Syn is built with the `"derive"` or `"full"` + /// feature.* + /// + /// ## Path +@@ -360,7 +370,7 @@ ast_enum_of_structs! { + ast_struct! { + /// A structured list within an attribute, like `derive(Copy, Clone)`. + /// +- /// *This type is available if Syn is built with the `"derive"` or ++ /// *This type is available only if Syn is built with the `"derive"` or + /// `"full"` feature.* + pub struct MetaList { + pub path: Path, +@@ -372,7 +382,7 @@ ast_struct! { + ast_struct! { + /// A name-value pair within an attribute, like `feature = "nightly"`. + /// +- /// *This type is available if Syn is built with the `"derive"` or ++ /// *This type is available only if Syn is built with the `"derive"` or + /// `"full"` feature.* + pub struct MetaNameValue { + pub path: Path, +@@ -398,7 +408,7 @@ impl Meta { + ast_enum_of_structs! { + /// Element of a compile-time attribute list. + /// +- /// *This type is available if Syn is built with the `"derive"` or `"full"` ++ /// *This type is available only if Syn is built with the `"derive"` or `"full"` + /// feature.* + pub enum NestedMeta { + /// A structured meta item, like the `Copy` in `#[derive(Copy)]` which +@@ -429,8 +439,8 @@ ast_enum_of_structs! { + /// as type `AttributeArgs`. + /// + /// ``` +-/// extern crate proc_macro; +-/// ++/// # extern crate proc_macro; ++/// # + /// use proc_macro::TokenStream; + /// use syn::{parse_macro_input, AttributeArgs, ItemFn}; + /// +@@ -464,7 +474,7 @@ where + fn is_outer(attr: &&Attribute) -> bool { + match attr.style { + AttrStyle::Outer => true, +- _ => false, ++ AttrStyle::Inner(_) => false, + } + } + self.into_iter().filter(is_outer) +@@ -474,7 +484,7 @@ where + fn is_inner(attr: &&Attribute) -> bool { + match attr.style { + AttrStyle::Inner(_) => true, +- _ => false, ++ AttrStyle::Outer => false, + } + } + self.into_iter().filter(is_inner) +diff --git a/third_party/rust/syn/src/buffer.rs b/third_party/rust/syn/src/buffer.rs +index 551a5ac816..a461cc49ea 100644 +--- third_party/rust/syn/src/buffer.rs ++++ third_party/rust/syn/src/buffer.rs +@@ -1,7 +1,7 @@ + //! A stably addressed token buffer supporting efficient traversal based on a + //! cheaply copyable cursor. + //! +-//! *This module is available if Syn is built with the `"parsing"` feature.* ++//! *This module is available only if Syn is built with the `"parsing"` feature.* + + // This module is heavily commented as it contains most of the unsafe code in + // Syn, and caution should be used when editing it. The public-facing interface +@@ -36,7 +36,7 @@ enum Entry { + /// `TokenStream` which requires a deep copy in order to traverse more than + /// once. + /// +-/// *This type is available if Syn is built with the `"parsing"` feature.* ++/// *This type is available only if Syn is built with the `"parsing"` feature.* + pub struct TokenBuffer { + // NOTE: Do not derive clone on this - there are raw pointers inside which + // will be messed up. Moving the `TokenBuffer` itself is safe as the actual +@@ -98,7 +98,7 @@ impl TokenBuffer { + /// Creates a `TokenBuffer` containing all the tokens from the input + /// `TokenStream`. + /// +- /// *This method is available if Syn is built with both the `"parsing"` and ++ /// *This method is available only if Syn is built with both the `"parsing"` and + /// `"proc-macro"` features.* + #[cfg(all( + not(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "wasi"))), +@@ -133,8 +133,7 @@ impl TokenBuffer { + /// Two cursors are equal if they have the same location in the same input + /// stream, and have the same scope. + /// +-/// *This type is available if Syn is built with the `"parsing"` feature.* +-#[derive(Copy, Clone, Eq, PartialEq)] ++/// *This type is available only if Syn is built with the `"parsing"` feature.* + pub struct Cursor<'a> { + // The current entry which the `Cursor` is pointing at. + ptr: *const Entry, +@@ -201,13 +200,13 @@ impl<'a> Cursor<'a> { + Cursor::create(self.ptr.offset(1), self.scope) + } + +- /// If the cursor is looking at a `None`-delimited group, move it to look at +- /// the first token inside instead. If the group is empty, this will move ++ /// While the cursor is looking at a `None`-delimited group, move it to look ++ /// at the first token inside instead. If the group is empty, this will move + /// the cursor past the `None`-delimited group. + /// + /// WARNING: This mutates its argument. + fn ignore_none(&mut self) { +- if let Entry::Group(group, buf) = self.entry() { ++ while let Entry::Group(group, buf) = self.entry() { + if group.delimiter() == Delimiter::None { + // NOTE: We call `Cursor::create` here to make sure that + // situations where we should immediately exit the span after +@@ -215,13 +214,14 @@ impl<'a> Cursor<'a> { + unsafe { + *self = Cursor::create(&buf.data[0], self.scope); + } ++ } else { ++ break; + } + } + } + + /// Checks whether the cursor is currently pointing at the end of its valid + /// scope. +- #[inline] + pub fn eof(self) -> bool { + // We're at eof if we're at the end of our scope. + self.ptr == self.scope +@@ -342,6 +342,44 @@ impl<'a> Cursor<'a> { + Entry::End(..) => Span::call_site(), + } + } ++ ++ /// Skip over the next token without cloning it. Returns `None` if this ++ /// cursor points to eof. ++ /// ++ /// This method treats `'lifetimes` as a single token. ++ pub(crate) fn skip(self) -> Option> { ++ match self.entry() { ++ Entry::End(..) => None, ++ ++ // Treat lifetimes as a single tt for the purposes of 'skip'. ++ Entry::Punct(op) if op.as_char() == '\'' && op.spacing() == Spacing::Joint => { ++ let next = unsafe { self.bump() }; ++ match next.entry() { ++ Entry::Ident(_) => Some(unsafe { next.bump() }), ++ _ => Some(next), ++ } ++ } ++ _ => Some(unsafe { self.bump() }), ++ } ++ } ++} ++ ++impl<'a> Copy for Cursor<'a> {} ++ ++impl<'a> Clone for Cursor<'a> { ++ fn clone(&self) -> Self { ++ *self ++ } ++} ++ ++impl<'a> Eq for Cursor<'a> {} ++ ++impl<'a> PartialEq for Cursor<'a> { ++ fn eq(&self, other: &Self) -> bool { ++ let Cursor { ptr, scope, marker } = self; ++ let _ = marker; ++ *ptr == other.ptr && *scope == other.scope ++ } + } + + pub(crate) fn same_scope(a: Cursor, b: Cursor) -> bool { +diff --git a/third_party/rust/syn/src/custom_keyword.rs b/third_party/rust/syn/src/custom_keyword.rs +index 200e8478ef..a33044a564 100644 +--- third_party/rust/syn/src/custom_keyword.rs ++++ 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 +--- third_party/rust/syn/src/custom_punctuation.rs ++++ third_party/rust/syn/src/custom_punctuation.rs +@@ -74,19 +74,19 @@ + /// let _: PathSegments = syn::parse_str(input).unwrap(); + /// } + /// ``` +-#[macro_export(local_inner_macros)] ++#[macro_export] + macro_rules! custom_punctuation { + ($ident:ident, $($tt:tt)+) => { + pub struct $ident { +- pub spans: custom_punctuation_repr!($($tt)+), ++ pub spans: $crate::custom_punctuation_repr!($($tt)+), + } + + #[doc(hidden)] +- #[allow(non_snake_case)] +- pub fn $ident<__S: $crate::export::IntoSpans>( ++ #[allow(dead_code, non_snake_case)] ++ pub fn $ident<__S: $crate::export::IntoSpans<$crate::custom_punctuation_repr!($($tt)+)>>( + spans: __S, + ) -> $ident { +- let _validate_len = 0 $(+ custom_punctuation_len!(strict, $tt))*; ++ let _validate_len = 0 $(+ $crate::custom_punctuation_len!(strict, $tt))*; + $ident { + spans: $crate::export::IntoSpans::into_spans(spans) + } +@@ -98,33 +98,33 @@ macro_rules! custom_punctuation { + } + } + +- impl_parse_for_custom_punctuation!($ident, $($tt)+); +- impl_to_tokens_for_custom_punctuation!($ident, $($tt)+); +- impl_clone_for_custom_punctuation!($ident, $($tt)+); +- impl_extra_traits_for_custom_punctuation!($ident, $($tt)+); ++ $crate::impl_parse_for_custom_punctuation!($ident, $($tt)+); ++ $crate::impl_to_tokens_for_custom_punctuation!($ident, $($tt)+); ++ $crate::impl_clone_for_custom_punctuation!($ident, $($tt)+); ++ $crate::impl_extra_traits_for_custom_punctuation!($ident, $($tt)+); + }; + } + + // Not public API. + #[cfg(feature = "parsing")] + #[doc(hidden)] +-#[macro_export(local_inner_macros)] ++#[macro_export] + macro_rules! impl_parse_for_custom_punctuation { + ($ident:ident, $($tt:tt)+) => { + impl $crate::token::CustomToken for $ident { + fn peek(cursor: $crate::buffer::Cursor) -> bool { +- $crate::token::parsing::peek_punct(cursor, stringify_punct!($($tt)+)) ++ $crate::token::parsing::peek_punct(cursor, $crate::stringify_punct!($($tt)+)) + } + + fn display() -> &'static $crate::export::str { +- custom_punctuation_concat!("`", stringify_punct!($($tt)+), "`") ++ concat!("`", $crate::stringify_punct!($($tt)+), "`") + } + } + + impl $crate::parse::Parse for $ident { + fn parse(input: $crate::parse::ParseStream) -> $crate::parse::Result<$ident> { +- let spans: custom_punctuation_repr!($($tt)+) = +- $crate::token::parsing::punct(input, stringify_punct!($($tt)+))?; ++ let spans: $crate::custom_punctuation_repr!($($tt)+) = ++ $crate::token::parsing::punct(input, $crate::stringify_punct!($($tt)+))?; + Ok($ident(spans)) + } + } +@@ -142,12 +142,12 @@ macro_rules! impl_parse_for_custom_punctuation { + // Not public API. + #[cfg(feature = "printing")] + #[doc(hidden)] +-#[macro_export(local_inner_macros)] ++#[macro_export] + macro_rules! impl_to_tokens_for_custom_punctuation { + ($ident:ident, $($tt:tt)+) => { + impl $crate::export::ToTokens for $ident { + fn to_tokens(&self, tokens: &mut $crate::export::TokenStream2) { +- $crate::token::printing::punct(stringify_punct!($($tt)+), &self.spans, tokens) ++ $crate::token::printing::punct($crate::stringify_punct!($($tt)+), &self.spans, tokens) + } + } + }; +@@ -221,16 +221,16 @@ macro_rules! impl_extra_traits_for_custom_punctuation { + + // Not public API. + #[doc(hidden)] +-#[macro_export(local_inner_macros)] ++#[macro_export] + macro_rules! custom_punctuation_repr { + ($($tt:tt)+) => { +- [$crate::export::Span; 0 $(+ custom_punctuation_len!(lenient, $tt))+] ++ [$crate::export::Span; 0 $(+ $crate::custom_punctuation_len!(lenient, $tt))+] + }; + } + + // Not public API. + #[doc(hidden)] +-#[macro_export(local_inner_macros)] ++#[macro_export] + #[rustfmt::skip] + macro_rules! custom_punctuation_len { + ($mode:ident, +) => { 1 }; +@@ -279,7 +279,7 @@ macro_rules! custom_punctuation_len { + ($mode:ident, -=) => { 2 }; + ($mode:ident, ~) => { 1 }; + (lenient, $tt:tt) => { 0 }; +- (strict, $tt:tt) => {{ custom_punctuation_unexpected!($tt); 0 }}; ++ (strict, $tt:tt) => {{ $crate::custom_punctuation_unexpected!($tt); 0 }}; + } + + // Not public API. +@@ -297,13 +297,3 @@ macro_rules! stringify_punct { + concat!($(stringify!($tt)),+) + }; + } +- +-// Not public API. +-// Without this, local_inner_macros breaks when looking for concat! +-#[doc(hidden)] +-#[macro_export] +-macro_rules! custom_punctuation_concat { +- ($($tt:tt)*) => { +- concat!($($tt)*) +- }; +-} +diff --git a/third_party/rust/syn/src/data.rs b/third_party/rust/syn/src/data.rs +index be43679874..b217b8ca6f 100644 +--- third_party/rust/syn/src/data.rs ++++ third_party/rust/syn/src/data.rs +@@ -4,7 +4,7 @@ use crate::punctuated::Punctuated; + ast_struct! { + /// An enum variant. + /// +- /// *This type is available if Syn is built with the `"derive"` or `"full"` ++ /// *This type is available only if Syn is built with the `"derive"` or `"full"` + /// feature.* + pub struct Variant { + /// Attributes tagged on the variant. +@@ -24,7 +24,7 @@ ast_struct! { + ast_enum_of_structs! { + /// Data stored within an enum variant or struct. + /// +- /// *This type is available if Syn is built with the `"derive"` or `"full"` ++ /// *This type is available only if Syn is built with the `"derive"` or `"full"` + /// feature.* + /// + /// # Syntax tree enum +@@ -52,7 +52,7 @@ ast_struct! { + /// Named fields of a struct or struct variant such as `Point { x: f64, + /// y: f64 }`. + /// +- /// *This type is available if Syn is built with the `"derive"` or ++ /// *This type is available only if Syn is built with the `"derive"` or + /// `"full"` feature.* + pub struct FieldsNamed { + pub brace_token: token::Brace, +@@ -63,7 +63,7 @@ ast_struct! { + ast_struct! { + /// Unnamed fields of a tuple struct or tuple variant such as `Some(T)`. + /// +- /// *This type is available if Syn is built with the `"derive"` or ++ /// *This type is available only if Syn is built with the `"derive"` or + /// `"full"` feature.* + pub struct FieldsUnnamed { + pub paren_token: token::Paren, +@@ -93,6 +93,24 @@ impl Fields { + Fields::Unnamed(f) => f.unnamed.iter_mut(), + } + } ++ ++ /// Returns the number of fields. ++ pub fn len(&self) -> usize { ++ match self { ++ Fields::Unit => 0, ++ Fields::Named(f) => f.named.len(), ++ Fields::Unnamed(f) => f.unnamed.len(), ++ } ++ } ++ ++ /// Returns `true` if there are zero fields. ++ pub fn is_empty(&self) -> bool { ++ match self { ++ Fields::Unit => true, ++ Fields::Named(f) => f.named.is_empty(), ++ Fields::Unnamed(f) => f.unnamed.is_empty(), ++ } ++ } + } + + impl IntoIterator for Fields { +@@ -129,7 +147,7 @@ impl<'a> IntoIterator for &'a mut Fields { + ast_struct! { + /// A field of a struct or enum variant. + /// +- /// *This type is available if Syn is built with the `"derive"` or `"full"` ++ /// *This type is available only if Syn is built with the `"derive"` or `"full"` + /// feature.* + pub struct Field { + /// Attributes tagged on the field. +@@ -154,7 +172,7 @@ ast_enum_of_structs! { + /// The visibility level of an item: inherited or `pub` or + /// `pub(restricted)`. + /// +- /// *This type is available if Syn is built with the `"derive"` or `"full"` ++ /// *This type is available only if Syn is built with the `"derive"` or `"full"` + /// feature.* + /// + /// # Syntax tree enum +@@ -184,7 +202,7 @@ ast_enum_of_structs! { + ast_struct! { + /// A public visibility level: `pub`. + /// +- /// *This type is available if Syn is built with the `"derive"` or ++ /// *This type is available only if Syn is built with the `"derive"` or + /// `"full"` feature.* + pub struct VisPublic { + pub pub_token: Token![pub], +@@ -194,7 +212,7 @@ ast_struct! { + ast_struct! { + /// A crate-level visibility: `crate`. + /// +- /// *This type is available if Syn is built with the `"derive"` or ++ /// *This type is available only if Syn is built with the `"derive"` or + /// `"full"` feature.* + pub struct VisCrate { + pub crate_token: Token![crate], +@@ -205,7 +223,7 @@ ast_struct! { + /// A visibility level restricted to some path: `pub(self)` or + /// `pub(super)` or `pub(crate)` or `pub(in some::module)`. + /// +- /// *This type is available if Syn is built with the `"derive"` or ++ /// *This type is available only if Syn is built with the `"derive"` or + /// `"full"` feature.* + pub struct VisRestricted { + pub pub_token: Token![pub], +@@ -220,12 +238,15 @@ pub mod parsing { + use super::*; + + use crate::ext::IdentExt; ++ use crate::parse::discouraged::Speculative; + use crate::parse::{Parse, ParseStream, Result}; + + impl Parse for Variant { + fn parse(input: ParseStream) -> Result { ++ let attrs = input.call(Attribute::parse_outer)?; ++ let _visibility: Visibility = input.parse()?; + Ok(Variant { +- attrs: input.call(Attribute::parse_outer)?, ++ attrs, + ident: input.parse()?, + fields: { + if input.peek(token::Brace) { +@@ -295,6 +316,17 @@ pub mod parsing { + + impl Parse for Visibility { + fn parse(input: ParseStream) -> Result { ++ // Recognize an empty None-delimited group, as produced by a $:vis ++ // matcher that matched no tokens. ++ if input.peek(token::Group) { ++ let ahead = input.fork(); ++ let group = crate::group::parse_group(&ahead)?; ++ if group.content.is_empty() { ++ input.advance_to(&ahead); ++ return Ok(Visibility::Inherited); ++ } ++ } ++ + if input.peek(Token![pub]) { + Self::parse_pub(input) + } else if input.peek(Token![crate]) { +@@ -310,27 +342,39 @@ pub mod parsing { + let pub_token = input.parse::()?; + + if input.peek(token::Paren) { +- // TODO: optimize using advance_to + let ahead = input.fork(); +- let mut content; +- parenthesized!(content in ahead); + ++ let content; ++ let paren_token = parenthesized!(content in ahead); + if content.peek(Token![crate]) + || content.peek(Token![self]) + || content.peek(Token![super]) + { +- return Ok(Visibility::Restricted(VisRestricted { +- pub_token, +- paren_token: parenthesized!(content in input), +- in_token: None, +- path: Box::new(Path::from(content.call(Ident::parse_any)?)), +- })); ++ let path = content.call(Ident::parse_any)?; ++ ++ // Ensure there are no additional tokens within `content`. ++ // Without explicitly checking, we may misinterpret a tuple ++ // field as a restricted visibility, causing a parse error. ++ // e.g. `pub (crate::A, crate::B)` (Issue #720). ++ if content.is_empty() { ++ input.advance_to(&ahead); ++ return Ok(Visibility::Restricted(VisRestricted { ++ pub_token, ++ paren_token, ++ in_token: None, ++ path: Box::new(Path::from(path)), ++ })); ++ } + } else if content.peek(Token![in]) { ++ let in_token: Token![in] = content.parse()?; ++ let path = content.call(Path::parse_mod_style)?; ++ ++ input.advance_to(&ahead); + return Ok(Visibility::Restricted(VisRestricted { + pub_token, +- paren_token: parenthesized!(content in input), +- in_token: Some(content.parse()?), +- path: Box::new(content.call(Path::parse_mod_style)?), ++ paren_token, ++ in_token: Some(in_token), ++ path: Box::new(path), + })); + } + } +@@ -347,6 +391,14 @@ pub mod parsing { + })) + } + } ++ ++ #[cfg(feature = "full")] ++ pub(crate) fn is_some(&self) -> bool { ++ match self { ++ Visibility::Inherited => false, ++ _ => true, ++ } ++ } + } + } + +diff --git a/third_party/rust/syn/src/derive.rs b/third_party/rust/syn/src/derive.rs +index 8cb9cf7b6d..3fa9d89a93 100644 +--- third_party/rust/syn/src/derive.rs ++++ third_party/rust/syn/src/derive.rs +@@ -4,7 +4,7 @@ use crate::punctuated::Punctuated; + ast_struct! { + /// Data structure sent to a `proc_macro_derive` macro. + /// +- /// *This type is available if Syn is built with the `"derive"` feature.* ++ /// *This type is available only if Syn is built with the `"derive"` feature.* + pub struct DeriveInput { + /// Attributes tagged on the whole struct or enum. + pub attrs: Vec, +@@ -26,7 +26,7 @@ ast_struct! { + ast_enum_of_structs! { + /// The storage of a struct, enum or union data structure. + /// +- /// *This type is available if Syn is built with the `"derive"` feature.* ++ /// *This type is available only if Syn is built with the `"derive"` feature.* + /// + /// # Syntax tree enum + /// +@@ -53,7 +53,7 @@ ast_enum_of_structs! { + ast_struct! { + /// A struct input to a `proc_macro_derive` macro. + /// +- /// *This type is available if Syn is built with the `"derive"` ++ /// *This type is available only if Syn is built with the `"derive"` + /// feature.* + pub struct DataStruct { + pub struct_token: Token![struct], +@@ -65,7 +65,7 @@ ast_struct! { + ast_struct! { + /// An enum input to a `proc_macro_derive` macro. + /// +- /// *This type is available if Syn is built with the `"derive"` ++ /// *This type is available only if Syn is built with the `"derive"` + /// feature.* + pub struct DataEnum { + pub enum_token: Token![enum], +@@ -77,7 +77,7 @@ ast_struct! { + ast_struct! { + /// An untagged union input to a `proc_macro_derive` macro. + /// +- /// *This type is available if Syn is built with the `"derive"` ++ /// *This type is available only if Syn is built with the `"derive"` + /// feature.* + pub struct DataUnion { + pub union_token: Token![union], +diff --git a/third_party/rust/syn/src/discouraged.rs b/third_party/rust/syn/src/discouraged.rs +index 4d9ff93728..76c9fce6f8 100644 +--- third_party/rust/syn/src/discouraged.rs ++++ third_party/rust/syn/src/discouraged.rs +@@ -16,7 +16,7 @@ pub trait Speculative { + /// syntax of the form `A* B*` for arbitrary syntax `A` and `B`. The problem + /// is that when the fork fails to parse an `A`, it's impossible to tell + /// whether that was because of a syntax error and the user meant to provide +- /// an `A`, or that the `A`s are finished and its time to start parsing ++ /// an `A`, or that the `A`s are finished and it's time to start parsing + /// `B`s. Use with care. + /// + /// Also note that if `A` is a subset of `B`, `A* B*` can be parsed by +@@ -72,7 +72,6 @@ pub trait Speculative { + /// || input.peek(Token![self]) + /// || input.peek(Token![Self]) + /// || input.peek(Token![crate]) +- /// || input.peek(Token![extern]) + /// { + /// let ident = input.call(Ident::parse_any)?; + /// return Ok(PathSegment::from(ident)); +@@ -164,6 +163,30 @@ impl<'a> Speculative for ParseBuffer<'a> { + panic!("Fork was not derived from the advancing parse stream"); + } + ++ let (self_unexp, self_sp) = inner_unexpected(self); ++ let (fork_unexp, fork_sp) = inner_unexpected(fork); ++ if !Rc::ptr_eq(&self_unexp, &fork_unexp) { ++ match (fork_sp, self_sp) { ++ // Unexpected set on the fork, but not on `self`, copy it over. ++ (Some(span), None) => { ++ self_unexp.set(Unexpected::Some(span)); ++ } ++ // Unexpected unset. Use chain to propagate errors from fork. ++ (None, None) => { ++ fork_unexp.set(Unexpected::Chain(self_unexp)); ++ ++ // Ensure toplevel 'unexpected' tokens from the fork don't ++ // bubble up the chain by replacing the root `unexpected` ++ // pointer, only 'unexpected' tokens from existing group ++ // parsers should bubble. ++ fork.unexpected ++ .set(Some(Rc::new(Cell::new(Unexpected::None)))); ++ } ++ // Unexpected has been set on `self`. No changes needed. ++ (_, Some(_)) => {} ++ } ++ } ++ + // See comment on `cell` in the struct definition. + self.cell + .set(unsafe { mem::transmute::>(fork.cursor()) }) +diff --git a/third_party/rust/syn/src/error.rs b/third_party/rust/syn/src/error.rs +index 146d652299..dba34f9254 100644 +--- third_party/rust/syn/src/error.rs ++++ third_party/rust/syn/src/error.rs +@@ -1,4 +1,3 @@ +-use std; + use std::fmt::{self, Debug, Display}; + use std::iter::FromIterator; + use std::slice; +@@ -32,8 +31,8 @@ pub type Result = std::result::Result; + /// conversion to `compile_error!` automatically. + /// + /// ``` +-/// extern crate proc_macro; +-/// ++/// # extern crate proc_macro; ++/// # + /// use proc_macro::TokenStream; + /// use syn::{parse_macro_input, AttributeArgs, ItemFn}; + /// +@@ -82,7 +81,6 @@ pub type Result = std::result::Result; + /// # } + /// # } + /// ``` +-#[derive(Clone)] + pub struct Error { + messages: Vec, + } +@@ -250,6 +248,17 @@ pub fn new_at(scope: Span, cursor: Cursor, message: T) -> Error { + } + } + ++#[cfg(all(feature = "parsing", any(feature = "full", feature = "derive")))] ++pub fn new2(start: Span, end: Span, message: T) -> Error { ++ Error { ++ messages: vec![ErrorMessage { ++ start_span: ThreadBound::new(start), ++ end_span: ThreadBound::new(end), ++ message: message.to_string(), ++ }], ++ } ++} ++ + impl Debug for Error { + fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { + if self.messages.len() == 1 { +@@ -278,6 +287,14 @@ impl Display for Error { + } + } + ++impl Clone for Error { ++ fn clone(&self) -> Self { ++ Error { ++ messages: self.messages.clone(), ++ } ++ } ++} ++ + impl Clone for ErrorMessage { + fn clone(&self) -> Self { + let start = self +@@ -355,3 +372,11 @@ impl<'a> Iterator for Iter<'a> { + }) + } + } ++ ++impl Extend for Error { ++ fn extend>(&mut self, iter: T) { ++ for err in iter { ++ self.combine(err); ++ } ++ } ++} +diff --git a/third_party/rust/syn/src/expr.rs b/third_party/rust/syn/src/expr.rs +index 2874a463aa..2fe0e0b5d8 100644 +--- third_party/rust/syn/src/expr.rs ++++ third_party/rust/syn/src/expr.rs +@@ -1,18 +1,21 @@ + use super::*; + use crate::punctuated::Punctuated; +-#[cfg(feature = "extra-traits")] +-use crate::tt::TokenStreamHelper; ++#[cfg(feature = "full")] ++use crate::reserved::Reserved; + use proc_macro2::{Span, TokenStream}; +-#[cfg(feature = "extra-traits")] ++#[cfg(feature = "printing")] ++use quote::IdentFragment; ++#[cfg(feature = "printing")] ++use std::fmt::{self, Display}; + use std::hash::{Hash, Hasher}; +-#[cfg(all(feature = "parsing", feature = "full"))] ++#[cfg(feature = "parsing")] + use std::mem; + + ast_enum_of_structs! { + /// A Rust expression. + /// +- /// *This type is available if Syn is built with the `"derive"` or `"full"` +- /// feature.* ++ /// *This type is available only if Syn is built with the `"derive"` or `"full"` ++ /// feature, but most of the variants are not available unless "full" is enabled.* + /// + /// # Syntax tree enums + /// +@@ -83,7 +86,7 @@ ast_enum_of_structs! { + /// A sign that you may not be choosing the right variable names is if you + /// see names getting repeated in your code, like accessing + /// `receiver.receiver` or `pat.pat` or `cond.cond`. +- pub enum Expr #manual_extra_traits { ++ pub enum Expr { + /// A slice literal expression: `[a, b, c, d]`. + Array(ExprArray), + +@@ -228,7 +231,7 @@ ast_enum_of_structs! { + ast_struct! { + /// A slice literal expression: `[a, b, c, d]`. + /// +- /// *This type is available if Syn is built with the `"full"` feature.* ++ /// *This type is available only if Syn is built with the `"full"` feature.* + pub struct ExprArray #full { + pub attrs: Vec, + pub bracket_token: token::Bracket, +@@ -239,7 +242,7 @@ ast_struct! { + ast_struct! { + /// An assignment expression: `a = compute()`. + /// +- /// *This type is available if Syn is built with the `"full"` feature.* ++ /// *This type is available only if Syn is built with the `"full"` feature.* + pub struct ExprAssign #full { + pub attrs: Vec, + pub left: Box, +@@ -251,7 +254,7 @@ ast_struct! { + ast_struct! { + /// A compound assignment expression: `counter += 1`. + /// +- /// *This type is available if Syn is built with the `"full"` feature.* ++ /// *This type is available only if Syn is built with the `"full"` feature.* + pub struct ExprAssignOp #full { + pub attrs: Vec, + pub left: Box, +@@ -263,7 +266,7 @@ ast_struct! { + ast_struct! { + /// An async block: `async { ... }`. + /// +- /// *This type is available if Syn is built with the `"full"` feature.* ++ /// *This type is available only if Syn is built with the `"full"` feature.* + pub struct ExprAsync #full { + pub attrs: Vec, + pub async_token: Token![async], +@@ -275,7 +278,7 @@ ast_struct! { + ast_struct! { + /// An await expression: `fut.await`. + /// +- /// *This type is available if Syn is built with the `"full"` feature.* ++ /// *This type is available only if Syn is built with the `"full"` feature.* + pub struct ExprAwait #full { + pub attrs: Vec, + pub base: Box, +@@ -287,7 +290,7 @@ ast_struct! { + ast_struct! { + /// A binary operation: `a + b`, `a * b`. + /// +- /// *This type is available if Syn is built with the `"derive"` or ++ /// *This type is available only if Syn is built with the `"derive"` or + /// `"full"` feature.* + pub struct ExprBinary { + pub attrs: Vec, +@@ -300,7 +303,7 @@ ast_struct! { + ast_struct! { + /// A blocked scope: `{ ... }`. + /// +- /// *This type is available if Syn is built with the `"full"` feature.* ++ /// *This type is available only if Syn is built with the `"full"` feature.* + pub struct ExprBlock #full { + pub attrs: Vec, + pub label: Option