crux-commits
Threads by month
- ----- 2025 -----
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
October 2022
- 1 participants
- 654 discussions
commit 4cc4cd53f04e88e39c9f8988011ea85b4b90388b
Author: Tim Biermann <tbier(a)posteo.de>
Date: Sat Oct 29 21:49:05 2022 +0000
sip: 6.7.2 -> 6.7.3
diff --git a/sip/.footprint b/sip/.footprint
index 173ec9801..8997fd502 100644
--- a/sip/.footprint
+++ b/sip/.footprint
@@ -9,13 +9,13 @@ drwxr-xr-x root/root usr/bin/
drwxr-xr-x root/root usr/lib/
drwxr-xr-x root/root usr/lib/python3.10/
drwxr-xr-x root/root usr/lib/python3.10/site-packages/
-drwxr-xr-x root/root usr/lib/python3.10/site-packages/sip-6.7.2-py3.10.egg-info/
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sip-6.7.2-py3.10.egg-info/PKG-INFO
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sip-6.7.2-py3.10.egg-info/SOURCES.txt
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sip-6.7.2-py3.10.egg-info/dependency_links.txt
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sip-6.7.2-py3.10.egg-info/entry_points.txt
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sip-6.7.2-py3.10.egg-info/requires.txt
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sip-6.7.2-py3.10.egg-info/top_level.txt
+drwxr-xr-x root/root usr/lib/python3.10/site-packages/sip-6.7.3-py3.10.egg-info/
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sip-6.7.3-py3.10.egg-info/PKG-INFO
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sip-6.7.3-py3.10.egg-info/SOURCES.txt
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sip-6.7.3-py3.10.egg-info/dependency_links.txt
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sip-6.7.3-py3.10.egg-info/entry_points.txt
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sip-6.7.3-py3.10.egg-info/requires.txt
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sip-6.7.3-py3.10.egg-info/top_level.txt
drwxr-xr-x root/root usr/lib/python3.10/site-packages/sipbuild/
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/__init__.py
drwxr-xr-x root/root usr/lib/python3.10/site-packages/sipbuild/__pycache__/
@@ -95,49 +95,9 @@ drwxr-xr-x root/root usr/lib/python3.10/site-packages/sipbuild/generator/__pycac
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/__pycache__/specification.cpython-310.pyc
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/__pycache__/templates.cpython-310.opt-1.pyc
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/__pycache__/templates.cpython-310.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/__pycache__/type_hints.cpython-310.opt-1.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/__pycache__/type_hints.cpython-310.pyc
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/__pycache__/utils.cpython-310.opt-1.pyc
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/__pycache__/utils.cpython-310.pyc
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/error_log.py
-drwxr-xr-x root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__init__.py
-drwxr-xr-x root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/__init__.cpython-310.opt-1.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/__init__.cpython-310.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/argument.cpython-310.opt-1.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/argument.cpython-310.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/base_formatter.cpython-310.opt-1.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/base_formatter.cpython-310.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/enum.cpython-310.opt-1.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/enum.cpython-310.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/klass.cpython-310.opt-1.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/klass.cpython-310.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/overload.cpython-310.opt-1.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/overload.cpython-310.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/scoped.cpython-310.opt-1.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/scoped.cpython-310.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/signature.cpython-310.opt-1.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/signature.cpython-310.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/template.cpython-310.opt-1.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/template.cpython-310.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/utils.cpython-310.opt-1.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/utils.cpython-310.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/value_list.cpython-310.opt-1.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/value_list.cpython-310.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/variable.cpython-310.opt-1.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/__pycache__/variable.cpython-310.pyc
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/argument.py
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/base_formatter.py
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/enum.py
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/klass.py
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/overload.py
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/scoped.py
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/signature.py
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/template.py
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/utils.py
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/value_list.py
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/formatters/variable.py
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/instantiations.py
drwxr-xr-x root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/__init__.py
@@ -148,8 +108,55 @@ drwxr-xr-x root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/__pycache__/api.cpython-310.pyc
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/__pycache__/extracts.cpython-310.opt-1.pyc
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/__pycache__/extracts.cpython-310.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/__pycache__/pyi.cpython-310.opt-1.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/__pycache__/pyi.cpython-310.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/__pycache__/type_hints.cpython-310.opt-1.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/__pycache__/type_hints.cpython-310.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/__pycache__/xml.cpython-310.opt-1.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/__pycache__/xml.cpython-310.pyc
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/api.py
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/extracts.py
+drwxr-xr-x root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__init__.py
+drwxr-xr-x root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/__init__.cpython-310.opt-1.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/__init__.cpython-310.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/argument.cpython-310.opt-1.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/argument.cpython-310.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/base_formatter.cpython-310.opt-1.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/base_formatter.cpython-310.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/enum.cpython-310.opt-1.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/enum.cpython-310.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/klass.cpython-310.opt-1.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/klass.cpython-310.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/overload.cpython-310.opt-1.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/overload.cpython-310.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/scoped.cpython-310.opt-1.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/scoped.cpython-310.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/signature.cpython-310.opt-1.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/signature.cpython-310.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/template.cpython-310.opt-1.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/template.cpython-310.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/utils.cpython-310.opt-1.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/utils.cpython-310.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/value_list.cpython-310.opt-1.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/value_list.cpython-310.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/variable.cpython-310.opt-1.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/__pycache__/variable.cpython-310.pyc
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/argument.py
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/base_formatter.py
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/enum.py
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/klass.py
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/overload.py
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/scoped.py
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/signature.py
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/template.py
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/utils.py
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/value_list.py
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/formatters/variable.py
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/pyi.py
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/type_hints.py
+-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/outputs/xml.py
drwxr-xr-x root/root usr/lib/python3.10/site-packages/sipbuild/generator/parser/
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/parser/__init__.py
drwxr-xr-x root/root usr/lib/python3.10/site-packages/sipbuild/generator/parser/__pycache__/
@@ -188,7 +195,6 @@ drwxr-xr-x root/root usr/lib/python3.10/site-packages/sipbuild/generator/resolve
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/scoped_name.py
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/specification.py
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/templates.py
--rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/type_hints.py
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/generator/utils.py
-rw-r--r-- root/root usr/lib/python3.10/site-packages/sipbuild/installable.py
drwxr-xr-x root/root usr/lib/python3.10/site-packages/sipbuild/module/
diff --git a/sip/.signature b/sip/.signature
index 85a8c6aae..69bce3070 100644
--- a/sip/.signature
+++ b/sip/.signature
@@ -1,5 +1,5 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF31UmGh99OlyYR7v1rXIizBGDFUjkBCbwz4AiyAsCtTa2G4qaiPPR+Y77WB0j19pOZ/xsEqkeRbg64o1Aj1bBmw8=
-SHA256 (Pkgfile) = cc1c535eb0b236de76da02f18037f1935c5d31468d1c4f53f533a1200e7dcf9c
-SHA256 (.footprint) = 9b3e2afd6d0f66c19b4e1ef63a57a76ce4443344894e2cb85f92c672228dd146
-SHA256 (sip-6.7.2.tar.gz) = 325016c787d0bff20999c420339ad816fbfd39a7c49b2c4dcda12b63c379dbda
+RWSagIOpLGJF39ohRH706ZqwLAY6HrYA+BB7poJ/hoKJO7BOcUtk5GHoo1l0OaPpfQvCw0IiJ3gH51nhGspG8Lrv480OKswK5gA=
+SHA256 (Pkgfile) = 7707e12b0f64a5b76d386f5ccf59b59aa0fd121a7605e5cc0cb4860e2f37e7f0
+SHA256 (.footprint) = 0789cfacafb6a3d4e5b11e605a40bba9ee75b609c7e7792271eff16c2ad48226
+SHA256 (sip-6.7.3.tar.gz) = 564a7a8c5c1a42f1b69e9258af2b43ea31fbbab206d2e182e75c173caf7d83f8
diff --git a/sip/Pkgfile b/sip/Pkgfile
index f83cd5831..fa216b882 100644
--- a/sip/Pkgfile
+++ b/sip/Pkgfile
@@ -4,7 +4,7 @@
# Depends on: python3-toml
name=sip
-version=6.7.2
+version=6.7.3
release=1
source=(https://pypi.python.org/packages/source/s/sip/sip-$version.tar.gz)
1
0
commit eababadb756f0a542f7c1d46457e1653ba396f51
Author: Tim Biermann <tbier(a)posteo.de>
Date: Sat Oct 29 21:45:40 2022 +0000
thunderbird: 102.2.2 -> 102.4.1
diff --git a/thunderbird/.signature b/thunderbird/.signature
index 373cb94ad..619220523 100644
--- a/thunderbird/.signature
+++ b/thunderbird/.signature
@@ -1,9 +1,6 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF38HbEpaIOWMVTtUXV6SoCQKuhiqYZXi6vhNI3OjRMbGVT3gfHxjX/Rh8EKOqaFRj2PU0bpdkJ+YdJk5Byz5ORwo=
-SHA256 (Pkgfile) = efea3318e264663e6f4ff2671507dc2883bdce8515dbb84ecade8ff94d6d25e5
+RWSagIOpLGJF3/0bKpTOVJJcyM5QKYjYtTntiMaD+vgK2xhAvkDXyQLOSszsz05t6+YDzGmVF8pHffXnBWSCWRKy6yuWACfAwQg=
+SHA256 (Pkgfile) = 1c43b21168863cf9feb8c638494d133b89427712d749ca20f3d13741fcbcb8e4
SHA256 (.footprint) = b4b411c70602919b2afe6fbf140755bd53ad1f77d2ff5013a899e0a3cf4543d2
-SHA256 (thunderbird-102.2.2.source.tar.xz) = 5d5f327ea450572ef2a135e5c849b3f38f7d54e897f41a1dec5223e184558f2b
+SHA256 (thunderbird-102.4.1.source.tar.xz) = d3766bf809f9083c0da0a1ae035509a43a10f79c614563b3e4278ae3eb6974a0
SHA256 (thunderbird.desktop) = c6bc6a66f16951c4f7560d019dad48968169aef6587cef4e98380a300078299a
-SHA256 (cbindgen-0.24.patch) = 4628d136c3beada292e83cd8e89502cac4aa3836851b34259a665582a7713978
-SHA256 (rustc_version-0.4.0.patch) = 4e7bb6d1205d9b0ed226f5636f6270afefc3e60eee1d8a2f6ede41e874728dc6
-SHA256 (packed_simd_2-0.3.8.patch) = 8a5654094f17358acf166a185e037a2a008ca47d63ee0130c797a079e437ae42
diff --git a/thunderbird/0038-bmo-1667736-Update-packed_simd-to-compile-on-Rust-1.patch b/thunderbird/0038-bmo-1667736-Update-packed_simd-to-compile-on-Rust-1.patch
deleted file mode 100644
index eac8bf745..000000000
--- a/thunderbird/0038-bmo-1667736-Update-packed_simd-to-compile-on-Rust-1.patch
+++ /dev/null
@@ -1,3213 +0,0 @@
-From 5183a31a28c400f60914572ee3f9646ba313036f Mon Sep 17 00:00:00 2001
-From: Thomas Deutschmann <whissi(a)gentoo.org>
-Date: Tue, 24 Nov 2020 18:56:40 +0100
-Subject: [PATCH 38/39] bmo#1667736: Update packed_simd to compile on Rust 1.48
-
-Bug: https://bugs.gentoo.org/756334
-Signed-off-by: Thomas Deutschmann <whissi(a)gentoo.org>
----
- .cargo/config.in | 2 +-
- Cargo.lock | 4 +-
- Cargo.toml | 2 +-
- .../rust/packed_simd/.cargo-checksum.json | 2 +-
- third_party/rust/packed_simd/.travis.yml | 237 ++++-------
- third_party/rust/packed_simd/Cargo.toml | 14 +-
- .../rust/packed_simd/{readme.md => README.md} | 111 ++----
- third_party/rust/packed_simd/build.rs | 2 +-
- third_party/rust/packed_simd/ci/all.sh | 2 +-
- .../aarch64-unknown-linux-gnu/Dockerfile | 2 +-
- .../arm-unknown-linux-gnueabi/Dockerfile | 2 +-
- .../arm-unknown-linux-gnueabihf/Dockerfile | 2 +-
- .../armv7-unknown-linux-gnueabihf/Dockerfile | 2 +-
- .../docker/i586-unknown-linux-gnu/Dockerfile | 2 +-
- .../docker/i686-unknown-linux-gnu/Dockerfile | 2 +-
- .../docker/mips-unknown-linux-gnu/Dockerfile | 2 +-
- .../mips64-unknown-linux-gnuabi64/Dockerfile | 2 +-
- .../Dockerfile | 2 +-
- .../mipsel-unknown-linux-musl/Dockerfile | 4 +-
- .../powerpc-unknown-linux-gnu/Dockerfile | 3 +-
- .../powerpc64-unknown-linux-gnu/Dockerfile | 2 +-
- .../powerpc64le-unknown-linux-gnu/Dockerfile | 2 +-
- .../Dockerfile | 2 +-
- .../x86_64-unknown-linux-gnu/Dockerfile | 2 +-
- third_party/rust/packed_simd/ci/dox.sh | 7 +-
- third_party/rust/packed_simd/ci/run.sh | 6 +-
- .../rust/packed_simd/ci/setup_benchmarks.sh | 3 -
- third_party/rust/packed_simd/src/api.rs | 13 +-
- .../rust/packed_simd/src/api/bit_manip.rs | 1 +
- .../rust/packed_simd/src/api/bitmask.rs | 82 ++++
- .../rust/packed_simd/src/api/cast/v128.rs | 2 +-
- .../rust/packed_simd/src/api/cast/v16.rs | 2 +-
- .../rust/packed_simd/src/api/cast/v256.rs | 2 +-
- .../rust/packed_simd/src/api/cast/v32.rs | 2 +-
- .../rust/packed_simd/src/api/cast/v512.rs | 2 +-
- .../rust/packed_simd/src/api/cast/v64.rs | 2 +-
- .../rust/packed_simd/src/api/default.rs | 2 +
- .../packed_simd/src/api/from/from_array.rs | 2 +
- third_party/rust/packed_simd/src/api/hash.rs | 2 +
- .../src/api/into_bits/arch_specific.rs | 3 +-
- .../packed_simd/src/api/into_bits/v128.rs | 2 +-
- .../rust/packed_simd/src/api/into_bits/v16.rs | 2 +-
- .../packed_simd/src/api/into_bits/v256.rs | 2 +-
- .../rust/packed_simd/src/api/into_bits/v32.rs | 2 +-
- .../packed_simd/src/api/into_bits/v512.rs | 2 +-
- .../rust/packed_simd/src/api/into_bits/v64.rs | 2 +-
- .../rust/packed_simd/src/api/minimal/iuf.rs | 6 +-
- .../rust/packed_simd/src/api/minimal/mask.rs | 6 +-
- .../rust/packed_simd/src/api/minimal/ptr.rs | 28 +-
- .../src/api/ops/vector_float_min_max.rs | 5 +
- .../packed_simd/src/api/ptr/gather_scatter.rs | 36 +-
- .../src/api/reductions/float_arithmetic.rs | 13 +-
- .../packed_simd/src/api/reductions/min_max.rs | 4 +
- .../packed_simd/src/api/slice/from_slice.rs | 6 +-
- .../src/api/slice/write_to_slice.rs | 6 +-
- third_party/rust/packed_simd/src/codegen.rs | 3 +
- .../rust/packed_simd/src/codegen/bit_manip.rs | 2 +-
- .../rust/packed_simd/src/codegen/llvm.rs | 8 +
- .../src/codegen/reductions/mask/x86.rs | 8 +-
- .../src/codegen/reductions/mask/x86/sse.rs | 32 --
- .../rust/packed_simd/src/codegen/shuffle.rs | 370 ++++++------------
- .../packed_simd/src/codegen/shuffle1_dyn.rs | 35 +-
- .../rust/packed_simd/src/codegen/vPtr.rs | 2 +
- third_party/rust/packed_simd/src/lib.rs | 29 +-
- third_party/rust/packed_simd/src/masks.rs | 2 +
- third_party/rust/packed_simd/src/sealed.rs | 15 +-
- .../rust/packed_simd/src/testing/utils.rs | 25 +-
- third_party/rust/packed_simd/src/v128.rs | 32 +-
- third_party/rust/packed_simd/src/v16.rs | 6 +-
- third_party/rust/packed_simd/src/v256.rs | 32 +-
- third_party/rust/packed_simd/src/v32.rs | 12 +-
- third_party/rust/packed_simd/src/v512.rs | 32 +-
- third_party/rust/packed_simd/src/v64.rs | 26 +-
- third_party/rust/packed_simd/src/vPtr.rs | 2 +-
- third_party/rust/packed_simd/src/vSize.rs | 20 +-
- .../rust/packed_simd/tests/endianness.rs | 62 +--
- 76 files changed, 618 insertions(+), 801 deletions(-)
- rename third_party/rust/packed_simd/{readme.md => README.md} (54%)
- create mode 100644 third_party/rust/packed_simd/src/api/bitmask.rs
-
-diff --git a/.cargo/config.in b/.cargo/config.in
-index b1a1b35f77..1accd1ef72 100644
---- a/.cargo/config.in
-+++ b/.cargo/config.in
-@@ -50,7 +50,7 @@ tag = "v0.3.0"
- [source."https://github.com/hsivonen/packed_simd"]
- git = "https://github.com/hsivonen/packed_simd"
- replace-with = "vendored-sources"
--rev = "3541e3818fdc7c2a24f87e3459151a4ce955a67a"
-+rev = "0917fe780032a6bbb23d71be545f9c1834128d75"
-
- [source."https://github.com/djg/cubeb-pulse-rs"]
- git = "https://github.com/djg/cubeb-pulse-rs"
-diff --git a/Cargo.lock b/Cargo.lock
-index 9f2b63582e..e7b0247088 100644
---- a/Cargo.lock
-+++ b/Cargo.lock
-@@ -3425,8 +3425,8 @@ dependencies = [
-
- [[package]]
- name = "packed_simd"
--version = "0.3.3"
--source = "git+https://github.com/hsivonen/packed_simd?rev=3541e3818fdc7c2a24f87e34591…"
-+version = "0.3.4"
-+source = "git+https://github.com/hsivonen/packed_simd?rev=0917fe780032a6bbb23d71be545…"
- dependencies = [
- "cfg-if",
- ]
-diff --git a/Cargo.toml b/Cargo.toml
-index b723c1da2d..3173ef840c 100644
---- a/Cargo.toml
-+++ b/Cargo.toml
-@@ -66,7 +66,7 @@ panic = "abort"
-
- [patch.crates-io]
- libudev-sys = { path = "dom/webauthn/libudev-sys" }
--packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="3541e3818fdc7c2a24f87e3459151a4ce955a67a" }
-+packed_simd = { git = "https://github.com/hsivonen/packed_simd", rev="0917fe780032a6bbb23d71be545f9c1834128d75" }
- rlbox_lucet_sandbox = { git = "https://github.com/PLSysSec/rlbox_lucet_sandbox/", rev="d510da5999a744c563b0acd18056069d1698273f" }
- nix = { git = "https://github.com/shravanrn/nix/", rev="4af6c367603869a30fddb5ffb0aba2b9477ba92e" }
- spirv_cross = { git = "https://github.com/kvark/spirv_cross", branch = "wgpu3" }
-diff --git a/third_party/rust/packed_simd/.cargo-checksum.json b/third_party/rust/packed_simd/.cargo-checksum.json
-index 01afcc1efd..1512803e57 100644
---- a/third_party/rust/packed_simd/.cargo-checksum.json
-+++ b/third_party/rust/packed_simd/.cargo-checksum.json
-@@ -1 +1 @@
--{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"e9258d9a54fdaf4cbc12405fe5993ac4497eb2b29021691dbc91b19cb9b52227","Cargo.toml":"089941ba3c89ea111cbea3cc3abdcdcf2b9d0ae0db268d7269ee38226db950e5","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"f3baefc5e5bb9b250e762a1466371b922fd7ee4243c217b2d014307603c2f57a","ci/all.sh":"a23d14e10cb26a0eb719e389c30eb955fa53cddcd436890646df09af640bd2eb","ci/android-install-ndk.sh":"0f1746108cc30bf9b9ba45bcde7b19fc1a8bdf5b0258035b4eb8dc69b75efac4","ci/android-install-sdk.sh":"3490432022c5c8f5a115c084f7a9aca1626f96c0c87ffb62019228c4346b47e4","ci/android-sysimage.sh":"ebf4e5daa1f0fe1b2092b79f0f3f161c4c4275cb744e52352c4d81ab451e4c5a","ci/benchmark.sh":"b61d19ef6b90deba8fb79dee74c8b062d94844676293da346da87bb78a9a49a4","ci/deploy_and_run_on_ios_simulator.rs":"ec8ecf82d92072676aa47f0d1a3d021b60a7ae3531153ef12d2ff4541fc294dc","ci/docker/aarch64-linux-android/Dockerfile":"ace2e7d33c87bc0f6d3962a4a3408c04557646f7f51ab99cfbf574906796b016","ci/docker/aarch64-unknown-linux-gnu/Dockerfile":"1ecdac757101d951794fb2ab0deaa278199cf25f2e08a15c7d40ff31a8556184","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"e25d88f6c0c94aada3d2e3f08243f755feb7e869dc5dc505b3799719cb1af591","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"f126f4c7bae8c11ab8b16df06ad997863f0838825a9c08c9899a3eedb6d570bd","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"b647545c158ee480a4c581dbdc1f57833aef056c8d498acc04b573e842bf803c","ci/docker/i586-unknown-linux-gnu/Dockerfile":"0d492759017307ccf74dc2aa4a8cf6623daf3dc728c708dc2b18fa7940800cba","ci/docker/i686-unknown-linux-gnu/Dockerfile":"0d492759017307ccf74dc2aa4a8cf6623daf3dc728c708dc2b18fa7940800cba","ci/docker/mips-unknown-linux-gnu/Dockerfile":"323776469bb7b160385f3621d66e3ee14c75242f8180f916e65af048a29d4ea0","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"c647f6948a9a43b0be695cbed4eac752120d0faf28e5e69c718cb10406921dab","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"77bfd00cc8639509be381b394f077e39b45a00158ad61b4e1656714c714665d1","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"ec5bea6c98a3b626731fdb95f9ff2d1182639c76e8fb16d3271d0fc884901524","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"4f2b662de66e83d1354f650b7077692309637f786c2ea5516c31b5c2ee10af2d","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"a9595402b772bc365982e22a0096a8988825d90b09b5faa97ab192e76072f71d","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"df3c381c157439695ae8cd10ab71664702c061e3b4ab22906a5ad6c2680acfed","ci/docker/s390x-unknown-linux-gnu/Dockerfile":"93fb44df3d7fd31ead158570667c97b5076a05c3d968af4a84bc13819a8f2db8","ci/docker/sparc64-unknown-linux-gnu/Dockerfile":"da1c39a3ff1fe22e41395fa7c8934e90b4c1788e551b9aec6e38bfd94effc437","ci/docker/thumbv7neon-linux-androideabi/Dockerfile":"c2decd5591bd7a09378901bef629cd944acf052eb55e4f35b79eb9cb4d62246a","ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile":"75c0c56161c7382b439de74c00de1c0e3dc9d59560cd6720976a751034b78714","ci/docker/wasm32-unknown-unknown/Dockerfile":"3e5f294bc1e004aa599086c2af49d6f3e7459fa250f5fbdd60cf67d53db78758","ci/docker/x86_64-linux-android/Dockerfile":"685040273cf350d5509e580ac451555efa19790c8723ca2af066adadc6880ad2","ci/docker/x86_64-unknown-linux-gnu-emulated/Dockerfile":"44b6203d9290bfdc53d81219f0937e1110847a23dd982ec8c4de388354f01536","ci/docker/x86_64-unknown-linux-gnu/Dockerfile":"d253c86803b22da428fa9cc671a05f18d3318eca7733b8dccb4f7be1ddf524c5","ci/dox.sh":"5b61711be47a4e3dde0ddd15ba73d256ea95fd75af3897732c24db1dc7e66366","ci/linux-s390x.sh":"d6b732d7795b4ba131326aff893bca6228a7d2eb0e9402f135705413dbbe0dce","ci/linux-sparc64.sh":"c92966838b1ab7ad3b7a344833ee726aba6b647cf5952e56f0ad1ba420b13325","ci/lld-shim.rs":"3d7f71ec23a49e2b67f694a0168786f9a954dda15f5a138815d966643fd3fcc3","ci/max_line_width.sh":"0a1518bba4c9ecaa55694cb2e9930d0e19c265baabf73143f17f9cf285aaa5bb","ci/run-docker.sh":"92e036390ad9b0d16f109579df1b5ced2e72e9afea40c7d011400ebd3a2a90de","ci/run.sh":"63259e22a96ba539f53c06b1b39f53e3a78a71171652e7afc170836110ccd913","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"73fb981a8fdb1dcd54409d3c0fbbfb8f77a3ceabf8626a6b9bf9d21d6bc8ce72","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2cc8c9c560ae17867e69b06d09b758dbf7bc39eb774ada50a743724b10acc0a2","perf-guide/.gitignore":"fe82c7da551079d832cf74200b0b359b4df9828cb4a0416fa7384f07a2ae6a13","perf-guide/book.toml":"115a98284126c6b180178b44713314cc494f08a71662ee2ce15cf67f17a51064","perf-guide/src/SUMMARY.md":"3e03bffc991fdc2050f3d51842d72d9d21ea6abab56a3baf3b2d5973a78b89e1","perf-guide/src/ascii.css":"29afb08833b2fe2250f0412e1fa1161a2432a0820a14953c87124407417c741a","perf-guide/src/bound_checks.md":"5e4991ff58a183ef0cd9fdc1feb4cd12d083b44bdf87393bbb0927808ef3ce7d","perf-guide/src/float-math/approx.md":"8c09032fa2d795a0c5db1775826c850d28eb2627846d0965c60ee72de63735ad","perf-guide/src/float-math/fma.md":"311076ba4b741d604a82e74b83a8d7e8c318fcbd7f64c4392d1cf5af95c60243","perf-guide/src/float-math/fp.md":"04153e775ab6e4f0d7837bcc515230d327b04edfa34c84ce9c9e10ebaeef2be8","perf-guide/src/float-math/svml.md":"0798873b8eedaeda5fed62dc91645b57c20775a02d3cd74d8bd06958f1516506","perf-guide/src/introduction.md":"9f5a19e9e6751f25d2daad39891a0cc600974527ec4c8305843f9618910671bd","perf-guide/src/prof/linux.md":"447731eb5de7d69166728fdbc5ecb0c0c9db678ea493b45a592d67dd002184c0","perf-guide/src/prof/mca.md":"f56d54f3d20e7aa4d32052186e8237b03d65971eb5d112802b442570ff11d344","perf-guide/src/prof/profiling.md":"8a650c0fd6ede0964789bb6577557eeef1d8226a896788602ce61528e260e43c","perf-guide/src/target-feature/attribute.md":"615f88dca0a707b6c416fa605435dd6e1fb5361cc639429cbf68cd87624bd78b","perf-guide/src/target-feature/features.md":"17077760ff24c006b606dd21889c53d87228f4311f3ba3a574f9afdeacd86165","perf-guide/src/target-feature/inlining.md":"7ed1d7068d8173a00d84c16cfe5871cd68b9f04f8d0cca2d01ebc84957ebf2f6","perf-guide/src/target-feature/practice.md":"c4b371842e0086df178488fec97f20def8f0c62ee588bcd25fd948b9b1fa227e","perf-guide/src/target-feature/runtime.md":"835425f5ee597fb3e51d36e725a81ebee29f4561231d19563cd4da81dbb1cfcb","perf-guide/src/target-feature/rustflags.md":"ab49712e9293a65d74d540ba4784fcb57ff1119ec05a575d895c071f1a620f64","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","readme.md":"585a8f0e16877fb9abb00cd17a175fcb9d7857840c6c61209f1827ffab095070","rustfmt.toml":"de6101d0670bad65fb3b337d56957d2a024e017e5ab146ec784d77312daaf8ff","src/api.rs":"331a3a4abb19cee2df5f2df4ad7c3e88b45e62cf23fdacfc9bbaa633dc5cf788","src/api/bit_manip.rs":"e68290ee679cc5abc9c73afbe635c1035f8cbfe849e5c751a1680e459244c39e","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"63e28c6a3edf1a7a635f51b8d3c6adbb1d46f884d92a196b3d4a6e743d809416","src/api/cast/v16.rs":"2a584eeb57fd47baad6f3533764301b04aaaac23702b7a8db12598ac02899262","src/api/cast/v256.rs":"b91c15ed8d1536ecd97b4eb79ff9d5aba0552cd9b6f0ea6435b05f2273e23b3a","src/api/cast/v32.rs":"62ec89fcce7fa7f28497ee5770adc8f81d2d3a6b2925b02f7dc06504c40e8f38","src/api/cast/v512.rs":"d855cb943ae7106e9599ef38e30a3afb1c6bd5433178baca54cb128fd9a7d143","src/api/cast/v64.rs":"fe0f7dfaf4fc0c0c1a78c96fcfcdfdc2a1e2845843b11aa797a0c6fb52a8f774","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"3ed23d2a930b0f9750c3a5309da766b03dc4f9c4d375b42ad3c50fe732693d15","src/api/cmp/partial_ord.rs":"e16b11805c94048acd058c93994b5bc74bb187f8d7e3b86a87df60e1601467f9","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"b61f92fc0e33a2633b3375eb405beba480da071cde03df4d437d8a6058afcd97","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"35cb5c266197d6224d598fb3d286e5fe48ef0c01ed356c2ff6fe9ba946f96a92","src/api/fmt/debug.rs":"aa18eea443bf353fea3db8b1a025132bbcaf91e747ecfa43b8d9fce9af395a0c","src/api/fmt/lower_hex.rs":"69d5be366631af309f214e8031c8c20267fcc27a695eac6f45c6bc1df72a67e6","src/api/fmt/octal.rs":"9eb11ba3d990213f3c7f1ec25edba7ce997cb1320e16d308c83498ba6b9bfbd9","src/api/fmt/upper_hex.rs":"a4637d085b7bb20e759ce58e08435b510a563ba3dd468af2b03560fdc5511562","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"4151593c7bba7455821fffa5b59867005a77c95d32f1f0cc3fd87294000157d9","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"562cfa3f1d8eb9a733c035a3665a599c2f1e341ee820d8fbdd102a4398a441bc","src/api/into_bits.rs":"82297f0697d67b5a015e904e7e6e7b2a7066ba825bc54b94b4ff3e22d7a1eefb","src/api/into_bits/arch_specific.rs":"1f925390b0ce7132587d95f2419c6e2ad3e1a9d17eb1d9c120a1c1c4bdf4277e","src/api/into_bits/macros.rs":"d762406de25aedff88d460dec7a80dc8e825a2a419d53218ce007efa6a1d3e04","src/api/into_bits/v128.rs":"ecdc5893664c71d7ab1ff3697c3fbe490d20d8748b9b76881d05e7625e40d74c","src/api/into_bits/v16.rs":"5459ec7dad1ad7bd30dc7e48374580b993abf23701d9c3cb22203fa0a9aabb6d","src/api/into_bits/v256.rs":"90ea351da0380ead1bf0f63b620afd40d01d638d09f7e7be31840bd2c1d9c663","src/api/into_bits/v32.rs":"ee1dc5a430050e16f51154b5fe85b1536f5feddf2ea23dd1d3859b67c4afc6fc","src/api/into_bits/v512.rs":"f72098ed1c9a23944f3d01abaf5e0f2d0e81d35a06fdadd2183e896d41b59867","src/api/into_bits/v64.rs":"6394462facdfe7827349c742b7801f1291e75a720dfb8c0b52100df46f371c98","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"78acba000d3fa527111300b6327c1932de9c4c1e02d4174e1a5615c01463d38c","src/api/math/float/cos.rs":"4c2dd7173728ef189314f1576c9486e03be21b7da98843b2f9011282a7979e31","src/api/math/float/exp.rs":"7c6d5f1e304f498a01cfa23b92380c815d7da0ad94eae3483783bc377d287eef","src/api/math/float/ln.rs":"54c7583f3df793b39ff57534fade27b41bb992439e5dc178252f5ca3190a3e54","src/api/math/float/mul_add.rs":"62cac77660d20159276d4c9ef066eb90c81cbddb808e8e157182c607625ad2eb","src/api/math/float/mul_adde.rs":"bae056ee9f3a70df39ec3c3b2f6437c65303888a7b843ef1a5bcf1f5aca0e602","src/api/math/float/powf.rs":"9ddb938984b36d39d82a82f862f80df8f7fb013f1d222d45698d41d88472f568","src/api/math/float/recpre.rs":"589225794ff1dbf31158dff660e6d4509ecc8befbb57c633900dea5ac0b840d6","src/api/math/float/rsqrte.rs":"a32abdcc318d7ccc8448231f54d75b884b7cbeb03a7d595713ab6243036f4dbf","src/api/math/float/sin.rs":"cbd3622b7df74f19691743001c8cf747a201f8977ad90542fee915f37dcd1e49","src/api/math/float/sqrt.rs":"0c66d5d63fb08e4d99c6b82a8828e41173aff1ac9fa1a2764a11fac217ccf2ac","src/api/math/float/sqrte.rs":"731e1c9f321b662accdd27dacb3aac2e8043b7aecb2f2161dde733bd9f025362","src/api/minimal.rs":"1f22bcc528555444e76de569ec0ae2029b9ae9d04805efeafa93369c8098036b","src/api/minimal/iuf.rs":"c501a6696950cf5e521765f178de548af64fdfb6e10d026616d09fab93ca2d17","src/api/minimal/mask.rs":"42e415f536c5193d0218f5a754b34b87fd7c971bff068009f958712166ff056d","src/api/minimal/ptr.rs":"a9ee482d1dd1c956fb8f3f179e6e620b1de4e9d713961461d4c6923a4ef2e67c","src/api/ops.rs":"3e273b277a0f3019d42c3c59ca94a5afd4885d5ae6d2182e5089bbeec9de42ee","src/api/ops/scalar_arithmetic.rs":"d2d5ad897a59dd0787544f927e0e7ca4072c3e58b0f4a2324083312b0d5a21d7","src/api/ops/scalar_bitwise.rs":"482204e459ca6be79568e1c9f70adbe2d2151412ddf122fb2161be8ebb51c40c","src/api/ops/scalar_mask_bitwise.rs":"c250f52042e37b22d57256c80d4604104cfd2fbe2a2e127c676267270ca5d350","src/api/ops/scalar_shifts.rs":"987f8fdebeedc16e3d77c1b732e7826ef70633c541d16dfa290845d5c6289150","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"f5155dce75219f4ba11275b1f295d2fdcddd49d174a6f1fb2ace7ea42813ce41","src/api/ops/vector_int_min_max.rs":"a378789c6ff9b32a51fbd0a97ffd36ed102cd1fe6a067d2b02017c1df342def6","src/api/ops/vector_mask_bitwise.rs":"5052d18517d765415d40327e6e8e55a312daaca0a5e2aec959bfa54b1675f9c8","src/api/ops/vector_neg.rs":"5c62f6b0221983cdbd23cd0a3af3672e6ba1255f0dfe8b19aae6fbd6503e231b","src/api/ops/vector_rotates.rs":"03cbe8a400fd7c688e4ee771a990a6754f2031b1a59b19ae81158b21471167e5","src/api/ops/vector_shifts.rs":"9bf69d0087268f61009e39aea52e03a90f378910206b6a28e8393178b6a5d0e0","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"9ddd960365e050674b25b2fd3116e24d94669b4375d74e71c03e3f1469576066","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"e58c8c87806a95df2b2b5b48ac5991036df024096d9d7c171a480fe9282896a4","src/api/reductions/integer_arithmetic.rs":"47471da1c5f859489680bb5d34ced3d3aa20081c16053a3af121a4496fcb57bf","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"f27be3aa28e1c1f46de7890198db6e12f00c207085e89ef2de7e57ee443cdb98","src/api/select.rs":"a98e2ccf9fc6bdeed32d337c8675bc96c2fbe2cc34fbf149ad6047fb8e749774","src/api/shuffle.rs":"da58200790868c09659819322a489929a5b6e56c596ed07e6a44293ea02e7d09","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"4d4fe8a329c885fcb4fbcbedf99efb15a95296fe6b3f595056cc37037450d5ac","src/api/slice/write_to_slice.rs":"f5b23b2c4b91cfb26b713a9013a6c0da7f45eaefb79ba06dcbc27f3f23bda679","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codegen.rs":"c6eebc3d3665420aa6a2f317977e3c41a4f43e0550ac630cdbe8e4bbed5e2031","src/codegen/bit_manip.rs":"5559e095105a80003e0de35af1d19b0c65c9ab04eb743c7e01c5442d882eb34e","src/codegen/llvm.rs":"d1299c189abb17a6133f047574cffc7a6db4c1be37cb7d4785491cb5e8f8cf54","src/codegen/math.rs":"35f96e37a78fcf0cdb02146b7f27a45108fe06a37fc2a54d8851ce131a326178","src/codegen/math/float.rs":"dd86c0449e576c83b719700962ac017c332987fac08d91f2b7a2b1b883598170","src/codegen/math/float/abs.rs":"f56e2b4b8055ea861c1f5cbc6b6e1d8e7e5af163b62c13574ddee4e09513bfbc","src/codegen/math/float/cos.rs":"ef3b511a24d23045b310315e80348a9b7fedb576fc2de52d74290616a0abeb2a","src/codegen/math/float/cos_pi.rs":"4e7631a5d73dac21531e09ef1802d1180f8997509c2c8fa9f67f322194263a97","src/codegen/math/float/exp.rs":"61b691598c41b5622f24e4320c1bdd08701e612a516438bdddcc728fc3405c8c","src/codegen/math/float/ln.rs":"46b718b1ba8c9d99e1ad40f53d20dfde08a3063ca7bd2a9fdd6698e060da687e","src/codegen/math/float/macros.rs":"dd42135fff13f9aca4fd3a1a4e14c7e6c31aadc6d817d63b0d2fb9e62e062744","src/codegen/math/float/mul_add.rs":"a37bf764345d4b1714f97e83897b7cf0855fc2811704bcbc0012db91825339e1","src/codegen/math/float/mul_adde.rs":"c75702bfcb361de45964a93caf959a695ef2376bd069227600b8c6872665c755","src/codegen/math/float/powf.rs":"642346e982bc4c39203de0864d2149c4179cd7b21cf67a2951687932b4675872","src/codegen/math/float/sin.rs":"9d68164c90cdca6a85155040cdac42e27342ebe0b925273ef1593df721af4258","src/codegen/math/float/sin_cos_pi.rs":"9be02ad48585a1e8d99129382fbffbaed47852f15459256a708850b6b7a75405","src/codegen/math/float/sin_pi.rs":"9890347905b4d4a3c7341c3eb06406e46e60582bcf6960688bd727e5dadc6c57","src/codegen/math/float/sqrt.rs":"e3c60dcfb0c6d2fc62adabcc931b2d4040b83cab294dea36443fb4b89eb79e34","src/codegen/math/float/sqrte.rs":"f0f4ef9eb475ae41bcc7ec6a95ad744ba6b36925faa8b2c2814004396d196b63","src/codegen/pointer_sized_int.rs":"a70697169c28218b56fd2e8d5353f2e00671d1150d0c8cef77d613bdfacd84cb","src/codegen/reductions.rs":"645e2514746d01387ddd07f0aa4ffd8430cc9ab428d4fb13773ea319fa25dd95","src/codegen/reductions/mask.rs":"8f1afe6aabf096a3278e1fc3a30f736e04aa8b9ce96373cee22162d18cfe2702","src/codegen/reductions/mask/aarch64.rs":"cba6e17603d39795dcfe8339b6b7d8714c3e162a1f0a635979f037aa24fe4206","src/codegen/reductions/mask/arm.rs":"9447904818aa2c7c25d0963eead452a639a11ca7dbd6d21eedbfcaade07a0f33","src/codegen/reductions/mask/fallback.rs":"7a0ef9f7fd03ae318b495b95e121350cd61caffc5cc6ee17fabf130d5d933453","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"14bd2c482071f2355beebcf7b7ecf950ff2dfcdb08c3ca50993092434a9de717","src/codegen/reductions/mask/x86/avx.rs":"b4913d87844c522903641cbbf10db4551addb1ce5e9e78278e21612fa65c733b","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"226610b4ff88c676d5187114dd57b4a8800de6ce40884675e9198445b1ed0306","src/codegen/reductions/mask/x86/sse2.rs":"bc38e6c31cb4b3d62147eba6cac264e519e2a48e0f7ce9010cfa9ef0cf0ec9fd","src/codegen/shuffle.rs":"0abca97e92cdce49a58a39cc447eb09dc7d7715ef256c8dbd2181a186e61bb64","src/codegen/shuffle1_dyn.rs":"04523e9338133bdedb012dd076c2c564b79ce5593b0fc56d0fb6910e04190a81","src/codegen/swap_bytes.rs":"1d6cdc716eadddc92b4fd506b2445a821caa8dc00860447de09d7ebd69c2087f","src/codegen/v128.rs":"94226b31ec403d18d9d2fe06713f147c9c79e9b5f9105089088266313f843185","src/codegen/v16.rs":"ddec4ffb66b6f7aaffb9a1780c5ddba82557abd74f45073d335047e04cf74924","src/codegen/v256.rs":"6b63917f0444118d6b1595bff2045e59b97c4d24012bd575f69f1f0efc5a0241","src/codegen/v32.rs":"3477b3c5540aed86e61e2f5807dd31db947413cec9181c587d93ed6ec74f0eba","src/codegen/v512.rs":"5854f99d3aabc4cd42b28a20d9ce447756dc2ba024a409a69b6a8ae1f1842fc5","src/codegen/v64.rs":"e9e89caebfe63d10c0cbca61e4dfdba3b7e02ee0989170f80beed23237ddd950","src/codegen/vPtr.rs":"96d609a9eece4dcbbcc01ba0b8744d7f5958be12774176a2945bc676f4e6b5cb","src/codegen/vSize.rs":"eeee9858749aa82142b27bc120d1989bb74a6b82e1e4efbbeaccc9634dc9acfc","src/lib.rs":"1b5d419ff05ee0370d671810423ccc254708cc8d415c1dbac2a7a36be4bf63a8","src/masks.rs":"870f429967b2d7d5133f4d28d6c753fc5cef0570b27b29d4e966a066d22d2d0e","src/sealed.rs":"ff7f0324276408ae8249941cfa32c90b8835a54d750896b683efea857af19db2","src/testing.rs":"1d3a7862ef625e235a5734ad7204e68d350f902c0695182b1f08a0552432416e","src/testing/macros.rs":"6378856d7a40ba5ec5c7c0dad6327d79f0c77266921c24296d10aed6c68e9b98","src/testing/utils.rs":"d6fd5a5017f1f85d9d99585754f8f6ad06fc3d683b34083543e67a7cc6c1772c","src/v128.rs":"18fe263c4aa28cd06461c7070b0269f69f4a2e75749b8f142a83dfdfe4d22bf5","src/v16.rs":"e5c663c9fb3547eaeac78a5f7db9969f4d8b5ec96112bf2954602fff11f0aebd","src/v256.rs":"68732cd688ad12a56d8b4f8ddf279f77bdfe1be2943c7dc0c1b4f1a76798aa0f","src/v32.rs":"785b22a1ccb4a41bb53dfeb0670f624c0ce42e6cdf62d1747e3283777a1c70bd","src/v512.rs":"d1337bfe07f06a8f37f8e8fa7d4315b9307476ee435ad80dd5269eaed564fbfa","src/v64.rs":"3077468d65125b8f085e9454c8b2463a4d5225697464ba6a1300f8799528fd4b","src/vPtr.rs":"c9a53f41f466e17b6648a4ce390fd8f4d3a848d440eb8a9a803a11608d76eb05","src/vSize.rs":"5c46d3e8c3ee5863d9b6e37e681f871386e0efc254d6d84ba711edb529ce7b3c","tests/endianness.rs":"541a144be017e3dd7da7c8ea49d907dc02538245e8c5f3deb5bd43da92c929e1"},"package":null}
-\ No newline at end of file
-+{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"d56de6531d3c4880e3aada85ac8e6d7388e5d781871e181cb8ade2a746d5d5f5","Cargo.toml":"e94ccb82002e8b55680c2c5fec554a9e864c5f354e113278d0aa927df279330d","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"49d01e49a33393af64fa6c813b6a724f68a4d1abfbedcb96413651ed105aa820","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"c3312e786c7fcb8f16c0785fe235ebbcf43fbeab6d7d683752f62043ca92d887","ci/all.sh":"2ae6b2445b4db83833e40b37efd0016c6b9879ee988b9b3ef94db5439a3e1606","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":"da88c0d50f16dc08448c7fdf1fa5ed2cbe576acf9e7dd85b5b818621b2a8c702","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"bb5f8ae890707c128652290ffc544447643bf12037ddd73c6ad6989f848cb380","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"1afaefcbc05b740859acd4e067bc92439be6bcbe8f2e9678474fb434bcd398d9","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"8282ea707a94109beed47a57574755e2d58401735904a03f85fb64c578c53b4f","ci/docker/i586-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/i686-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/mips-unknown-linux-gnu/Dockerfile":"b2ebc25797612c4f8395fe9d407725156044955bfbcf442036b7f55b43a5f9da","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"b0c1692ac65bc56dd30494b1993d8e929c48cc9c4b92029b7c7592af6d4f9220","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"4e9249c179300138141d0b2b7401b11897f64aed69f541f078c1db4594df2827","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"3164c52b0dcbb01afa78292b15b5c43503ccf0491cf6eb801ec2bf22ae274e52","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"786f799d0b56eb54d7b6c4b00e1aed4ce81776e14e44767e083c89d014b72004","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"e8bc363837cd9c2d8b22402acb8c1c329efc11ba5d12170603d2fe2eae9da059","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"47998d45b781d797b9e6085ebe898d90de0c952b54537a8db4e8d7503eb032d9","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":"51955a8bf3c4d440f47382af6f5426ebff94ab01a04da36175babda9a057740f","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":"7f4e3ca5fa288ea70edb4d1f75309708cd30b192e2e4444e61c4d5b3b58f89cf","ci/dox.sh":"434e9611c52e389312d2b03564adf09429f10cc76fe66a8644adb104903b87b7","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":"41dd6a60efaaeae9661a01370cce98b631f78392859a0cf68c946c0a16edf5f7","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"fae3960023f6f3d1388cd2ad22fdbab4b075f1f29dd4292d7994a20783beb6cf","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","rustfmt.toml":"de6101d0670bad65fb3b337d56957d2a024e017e5ab146ec784d77312daaf8ff","src/api.rs":"f6e92f056565e6fd93f98829a408aee9e790251e0cbd8a8bc30c8662b4d6fabb","src/api/bit_manip.rs":"c47a4d0f7451f7e35d07715e4f39a472e07457fd456fdb726864a4f6887252a3","src/api/bitmask.rs":"6d2beefd62ee5d9c8eb060bee6abc641616bf828c99f82abf97b21bf004e894b","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"2107ea6a426a0fe37a0aa6a03a579ff0bdeb5a1599ea76e2d81734a82f41276d","src/api/cast/v16.rs":"d785cf93b8e61200c9ae1c32b9f5e9d9518e87c261c56bcaf92f2e47b0009eb4","src/api/cast/v256.rs":"b81fcfd367a5de532d922dedf18579e53666facef7957c0e1bc827825e500ae6","src/api/cast/v32.rs":"2aac9ec0a67a97328ba908b13a1ff98da3dcd7781910d592d31f9207cbd9a7d2","src/api/cast/v512.rs":"33b33de818f8d4eccc982bc2f3951a8b3d03e9762ec02789b3df82e3f5ed3fc3","src/api/cast/v64.rs":"ec878917d52a8c952633251b3a938a2cbe0a63fee6d12c15840d9f1343d1f394","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":"67bf21c134127d12a7028c8b88a57f0ceee8ccbd74976da8ca74eb9f16a174d5","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":"dd3fc64fb17d6184bb60343f8da26a05edf0e5f3c14caf55d49fa15e21d948dc","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"5076ece87969592c876486f5b1ea8affbeaec379d1a14a30859e0aa5592019de","src/api/into_bits.rs":"82297f0697d67b5a015e904e7e6e7b2a7066ba825bc54b94b4ff3e22d7a1eefb","src/api/into_bits/arch_specific.rs":"4acab22af90112072a2608fafc66fccf18cbf2e641b72af28404d30833cfe5c6","src/api/into_bits/macros.rs":"d762406de25aedff88d460dec7a80dc8e825a2a419d53218ce007efa6a1d3e04","src/api/into_bits/v128.rs":"3c502b9ce85bfcc727d6f053d49030b0ba9f46bd8e9fa5aa109382a2033f9f87","src/api/into_bits/v16.rs":"f4f4f61ba88aa51b158ec56ca3dce234349aea0daf2b3029a14ab5125d1e41e5","src/api/into_bits/v256.rs":"c24c3676707a0feb868dabe00766d74deab176794f905f79056337198c7cf790","src/api/into_bits/v32.rs":"905ba683d342fa32f4202b80bb46530807bd0a5b588f6c2e8c9f475223c47775","src/api/into_bits/v512.rs":"7cd89005215a9326eed8a742125dcbf981cba1aca72a313478eabf3df71b1160","src/api/into_bits/v64.rs":"d6238022ccff7b92e55b3f6017fc269acb6f36330a6d7e8fb389853a0f1b6478","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":"819cff26d3e196f807645bcc1d79eb27d9f175edb89910f2274d52a1e913cd11","src/api/minimal/mask.rs":"0cae10ae1fc65f5070e686c0c79bfba27b86b33d6c399367bd4848fb367dcec4","src/api/minimal/ptr.rs":"f65ebf21866a863485344432d9a7a9b7418f7fad5fdf841a4e2fa56ec0766ad0","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":"76bf8cb607e2c442923c1da1061a6b80d742d607408033c2a3761161114cf2a0","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":"138b02b0fa1fdd785b95fc7048488be7e3ef277e0bc6ac5affb26af6a11d41a6","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"3997125f87c7bac07fffda3a1d814e0e6c77ca83099546a9e2fb8dc92231129f","src/api/reductions/integer_arithmetic.rs":"47471da1c5f859489680bb5d34ced3d3aa20081c16053a3af121a4496fcb57bf","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"d40ccad10220ae5982785015bef92e4b0749583c2b060cad0aa4f92d99491c3b","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":"53691dc9958dec4180004a42d140552b405e8cd875caa282e89af378dd63c8bc","src/api/slice/write_to_slice.rs":"3dd2e511af43dc6fa911dd0b12f6f00323e0acd1202a01365db400557d52a89b","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codegen.rs":"a29d38fa0a85eaf787fb49989e625bf64effd5f39c126fbb2a24be206d2a3917","src/codegen/bit_manip.rs":"17ecebcff1f080e712fea5eb51602a73f4201ed56a198220342c8eb55bb92692","src/codegen/llvm.rs":"b1f24237f61b7c5ddb8d47f3943aab79a95ce0e75af87ab2d1c88d842faffd39","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":"4c0457b6276f9809223590092a4c77e73812330326cdabd28df06820de10a310","src/codegen/reductions/mask/x86/avx.rs":"b4913d87844c522903641cbbf10db4551addb1ce5e9e78278e21612fa65c733b","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"5a827c6f8e1074e324f6e4c778942badb6c09d747a7142de01cadec1240b3428","src/codegen/reductions/mask/x86/sse2.rs":"bc38e6c31cb4b3d62147eba6cac264e519e2a48e0f7ce9010cfa9ef0cf0ec9fd","src/codegen/shuffle.rs":"99a0b52c2470097b028af134221099baba383446a01c7dc3ae560209880bcdb7","src/codegen/shuffle1_dyn.rs":"abbc95305dad815ab2ded3e8357791bcff080414668b55a4d397558a1d202d01","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":"711c753a08d53a2879c4fb87a0762c46ce4e34c22f0ca88d2e4c557a0f679969","src/codegen/vSize.rs":"eeee9858749aa82142b27bc120d1989bb74a6b82e1e4efbbeaccc9634dc9acfc","src/lib.rs":"b842b5e47008b9bd59af4d2e309b84204d90a53d36595684082adc46b6934987","src/masks.rs":"be05e923ac58fe6eb61311561b5583cd306574f206dc09fe8e3c7de3dd0c1433","src/sealed.rs":"ae7fdeaf5d84cd7710ed730ca72ca7eaba93df6cb0acb183e5c0a7327acf197f","src/testing.rs":"1d3a7862ef625e235a5734ad7204e68d350f902c0695182b1f08a0552432416e","src/testing/macros.rs":"6378856d7a40ba5ec5c7c0dad6327d79f0c77266921c24296d10aed6c68e9b98","src/testing/utils.rs":"5ec6a47b836f364ec6dede19750a19eaac704162327d03041eb0f007d5f8d75c","src/v128.rs":"16cf9a8e7156b899ee9b9cd3f2dba9d13ec63289bea8c3ee9ae2e43ad9510288","src/v16.rs":"cb6465cf1e00bf530183af1819b9fe3d7eec978f8765d5e85d9b58a39a4b4045","src/v256.rs":"fe235017da18c7f3c361831c60e3173ad304d8ea1e95d64ebebc79da2d708511","src/v32.rs":"145d347855bac59b2de6508f9e594654e6c330423af9edc0e2ac8f4d1abdf45e","src/v512.rs":"f372f277f3e62eb5c945bb1c460333fdb17b6974fcc876633788ff53bded9599","src/v64.rs":"0b8079881b71575e3414be0b7f8f7eaba65281ba6732f2b2f61f73e95b6f48f7","src/vPtr.rs":"8b3e433d487180bb4304ff71245ecad90f0010f43e139a72027b672abe58facc","src/vSize.rs":"eda5aa020706cbf94d15bada41a0c2a35fc8f3f37cb7c2cd6f34d201399a495e","tests/endianness.rs":"7db22078f31fe1421fc2d21f2e6b9df5eb0bdc99c10f6985d3a74c0df8f205dc"},"package":null}
-\ No newline at end of file
-diff --git a/third_party/rust/packed_simd/.travis.yml b/third_party/rust/packed_simd/.travis.yml
-index 8d8ed54ab7..be3fb23693 100644
---- a/third_party/rust/packed_simd/.travis.yml
-+++ b/third_party/rust/packed_simd/.travis.yml
-@@ -1,192 +1,129 @@
- language: rust
--sudo: false
- rust: nightly
-+os: linux
-+dist: focal
-
- stages:
- - tools
-- - linux-tier1
-- - osx-tier1
-- - osx-tier2
-- - linux-tier2
-- - android
-+ - build-test-verify # Passes full test suite, permit no regressions (unless it's rustup :/)
-+ - 32bit-tier1
-+ - 64bit-tier2
-+ - 32bit-tier2
-
--matrix:
-- fast_finish: true
-+jobs:
-+ fast_finish: true
- include:
- # Android:
-- - env: TARGET=x86_64-linux-android NOVERIFY=1
-+ - env: TARGET=x86_64-linux-android
- name: "x86_64-unknown-linux-android + SSE2"
-- stage: android
-+ stage: build-test-verify
- - env: TARGET=arm-linux-androideabi
- name: "arm-linux-androideabi"
-- stage: android
-+ stage: build-test-verify
- - env: TARGET=arm-linux-androideabi RUSTFLAGS="-C target-feature=+v7,+neon"
- name: "arm-linux-androideabi + NEON"
-- stage: android
-- - env: TARGET=aarch64-linux-android
-- name: "aarch64-unknown-linux-android"
-- stage: android
-- - env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon"
-- name: "aarch64-unknown-linux-android + NEON"
-- stage: android
-+ stage: build-test-verify
-+ - name: "aarch64-unknown-linux-android + NEON"
-+ env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon"
-+ stage: build-test-verify
- - env: TARGET="thumbv7neon-linux-androideabi"
- name: "thumbv7neon-linux-androideabi"
-- stage: android
-+ stage: 32bit-tier2
- # Linux:
- - env: TARGET=i586-unknown-linux-gnu
- name: "i586-unknown-linux-gnu"
-- stage: linux-tier2
-+ stage: 32bit-tier2
- - env: TARGET=i586-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse"
- name: "i586-unknown-linux-gnu + SSE"
-- stage: linux-tier2
-+ stage: 32bit-tier2
- - env: TARGET=i586-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse2"
- name: "i586-unknown-linux-gnu + SSE2"
-- stage: linux-tier2
-+ stage: 32bit-tier2
- - env: TARGET=i686-unknown-linux-gnu
- name: "i686-unknown-linux-gnu + SSE2"
-- stage: linux-tier1
-+ stage: 32bit-tier1
- - env: TARGET=i686-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse4.2"
- name: "i686-unknown-linux-gnu + SSE4.2"
-- stage: linux-tier1
-+ stage: 32bit-tier1
- - env: TARGET=i686-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx2"
- name: "i686-unknown-linux-gnu + AVX2"
-- stage: linux-tier1
-- - env: TARGET=x86_64-unknown-linux-gnu
-- name: "x86_64-unknown-linux-gnu + SSE2"
-- install: rustup component add rustfmt-preview
-- stage: linux-tier1
-+ stage: 32bit-tier1
- - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+sse4.2"
- name: "x86_64-unknown-linux-gnu + SSE4.2"
- install: rustup component add rustfmt-preview
-- stage: linux-tier1
-- - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx"
-- name: "x86_64-unknown-linux-gnu + AVX"
-- install: rustup component add rustfmt-preview
-- stage: linux-tier1
-+ stage: build-test-verify
- - env: TARGET=x86_64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+avx2"
- name: "x86_64-unknown-linux-gnu + AVX2"
- install: rustup component add rustfmt-preview
-- stage: linux-tier1
-- - env: TARGET=x86_64-unknown-linux-gnu-emulated
-- name: "Intel SDE + SSE2"
-- install: true
-- stage: linux-tier1
-- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+sse4.2"
-- name: "Intel SDE + SSE4.2"
-- install: true
-- stage: linux-tier1
-- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx"
-- name: "Intel SDE + AVX"
-- install: true
-- stage: linux-tier1
-- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx2"
-- name: "Intel SDE + AVX2"
-- install: true
-- stage: linux-tier1
-- - env: TARGET=x86_64-unknown-linux-gnu-emulated RUSTFLAGS="-C target-feature=+avx-512f"
-- name: "Intel SDE + AVX-512"
-- install: true
-- stage: linux-tier1
-- - env: TARGET=arm-unknown-linux-gnueabi
-- name: "arm-unknown-linux-gnueabi"
-- stage: linux-tier2
-+ stage: build-test-verify
- - env: TARGET=arm-unknown-linux-gnueabi RUSTFLAGS="-C target-feature=+v7,+neon"
- name: "arm-unknown-linux-gnueabi + NEON"
-- stage: linux-tier2
-+ stage: build-test-verify
- - env: TARGET=arm-unknown-linux-gnueabihf
- name: "arm-unknown-linux-gnueabihf"
-- stage: linux-tier2
-+ stage: build-test-verify
- - env: TARGET=arm-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+v7,+neon"
- name: "arm-unknown-linux-gnueabihf + NEON"
-- stage: linux-tier2
-+ stage: build-test-verify
- - env: TARGET=armv7-unknown-linux-gnueabihf
- name: "armv7-unknown-linux-gnueabihf"
-- stage: linux-tier2
-+ stage: build-test-verify
- - env: TARGET=armv7-unknown-linux-gnueabihf RUSTFLAGS="-C target-feature=+neon"
- name: "armv7-unknown-linux-gnueabihf + NEON"
-- stage: linux-tier2
-+ stage: build-test-verify
- - env: TARGET="thumbv7neon-unknown-linux-gnueabihf"
- name: "thumbv7neon-unknown-linux-gnueabihf"
-- stage: linux-tier2
-- - env: TARGET=aarch64-unknown-linux-gnu
-- name: "aarch64-unknown-linux-gnu"
-- stage: linux-tier2
-- - env: TARGET=aarch64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+neon"
-- name: "aarch64-unknown-linux-gnu + NEON"
-- stage: linux-tier2
-+ stage: 32bit-tier2
-+ - name: "aarch64-unknown-linux-gnu + NEON"
-+ env: TARGET=aarch64-unknown-linux-gnu RUSTFLAGS="-C target-feature=+neon"
-+ stage: build-test-verify
- - env: TARGET=mips-unknown-linux-gnu
- name: "mips-unknown-linux-gnu"
-- stage: linux-tier2
-+ stage: 32bit-tier2
- - env: TARGET=mipsel-unknown-linux-musl
- name: "mipsel-unknown-linux-musl"
-- stage: linux-tier2
-+ stage: 32bit-tier2
- - env: TARGET=mips64-unknown-linux-gnuabi64
- name: "mips64-unknown-linux-gnuabi64"
-- stage: linux-tier2
-+ stage: 64bit-tier2
- - env: TARGET=mips64el-unknown-linux-gnuabi64
- name: "mips64el-unknown-linux-gnuabi64"
-- stage: linux-tier2
-+ stage: 64bit-tier2
- # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/18
- # env: TARGET=mips64el-unknown-linux-gnuabi64 RUSTFLAGS="-C target-feature=+msa -C target-cpu=mips64r6"
- - env: TARGET=powerpc-unknown-linux-gnu
- name: "powerpc-unknown-linux-gnu"
-- stage: linux-tier2
-+ stage: 32bit-tier2
- - env: TARGET=powerpc64-unknown-linux-gnu
- name: "powerpc64-unknown-linux-gnu"
-- stage: linux-tier2
-- - env: TARGET=powerpc64le-unknown-linux-gnu
-- name: "powerpc64le-unknown-linux-gnu"
-- stage: linux-tier2
-- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec"
-- name: "powerpc64le-unknown-linux-gnu + ALTIVEC"
-- stage: linux-tier2
-- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx"
-- name: "powerpc64le-unknown-linux-gnu + VSX"
-- stage: linux-tier2
-- - env: TARGET=s390x-unknown-linux-gnu
-- name: "s390x-unknown-linux-gnu"
-- stage: linux-tier2
-+ stage: 64bit-tier2
-+ - name: "powerpc64le-unknown-linux-gnu"
-+ env: TARGET=powerpc64le-unknown-linux-gnu
-+ stage: build-test-verify
-+ - name: "powerpc64le-unknown-linux-gnu + ALTIVEC"
-+ env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec"
-+ stage: build-test-verify
-+ - name: "powerpc64le-unknown-linux-gnu + VSX"
-+ env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx"
-+ stage: build-test-verify
-+ - name: "s390x-unknown-linux-gnu"
-+ env: TARGET=s390x-unknown-linux-gnu
-+ stage: 64bit-tier2
- - env: TARGET=sparc64-unknown-linux-gnu
- name: "sparc64-unknown-linux-gnu"
-- stage: linux-tier2
-+ stage: 64bit-tier2
- # WebAssembly:
- - env: TARGET=wasm32-unknown-unknown
- name: "wasm32-unknown-unknown"
-- stage: osx-tier1 # For now
-+ stage: 32bit-tier2
- # MacOSX:
-- - os: osx
-- env: TARGET=i686-apple-darwin
-- name: "i686-apple-darwin + SSE2"
-- script: ci/run.sh
-- osx_image: xcode10
-- stage: osx-tier1
-- - os: osx
-- env: TARGET=i686-apple-darwin RUSTFLAGS="-C target-feature=+sse4.2"
-- name: "i686-apple-darwin + SSE4.2"
-- script: ci/run.sh
-- osx_image: xcode10
-- stage: osx-tier1
-- # Travis-CI OSX build bots do not support AVX2:
-- - os: osx
-- env: TARGET=i686-apple-darwin RUSTFLAGS="-C target-feature=+avx"
-- name: "i686-apple-darwin + AVX"
-- script: ci/run.sh
-- osx_image: xcode10
-- stage: osx-tier1
-- - os: osx
-- env: TARGET=x86_64-apple-darwin
-- name: "x86_64-apple-darwin + SSE2"
-- install: true
-- script: ci/run.sh
-- osx_image: xcode10
-- stage: osx-tier1
- - os: osx
- env: TARGET=x86_64-apple-darwin RUSTFLAGS="-C target-feature=+sse4.2"
- name: "x86_64-apple-darwin + SSE4.2"
- install: true
- script: ci/run.sh
- osx_image: xcode10
-- stage: osx-tier1
-+ stage: build-test-verify
- # Travis-CI OSX build bots do not support AVX2:
- - os: osx
- env: TARGET=x86_64-apple-darwin RUSTFLAGS="-C target-feature=+avx"
-@@ -194,7 +131,7 @@ matrix:
- install: true
- script: ci/run.sh
- osx_image: xcode10
-- stage: osx-tier1
-+ stage: build-test-verify
- # *BSDs:
- #- env: TARGET=i686-unknown-freebsd NORUN=1
- # script: ci/run.sh
-@@ -206,81 +143,75 @@ matrix:
- #- env: TARGET=x86_64-sun-solaris NORUN=1
- # script: ci/run.sh
- # iOS:
-- - os: osx
-- env: TARGET=i386-apple-ios
-- name: "i386-apple-ios"
-- script: ci/run.sh
-- osx_image: xcode9.4
-- stage: osx-tier2
- - os: osx
- env: TARGET=x86_64-apple-ios
- name: "x86_64-apple-ios + SSE2"
- script: ci/run.sh
- osx_image: xcode9.4
-- stage: osx-tier2
-- - os: osx
-- env: TARGET=armv7-apple-ios NORUN=1
-- name: "armv7-apple-ios [Build only]"
-- script: ci/run.sh
-+ stage: 64bit-tier2
-+ - name: "aarch64-apple-ios + NEON"
-+ env: TARGET=aarch64-apple-ios RUSTFLAGS="-C target-feature=+neon"
-+ os: osx
- osx_image: xcode9.4
-- stage: osx-tier2
-- - os: osx
-- env: TARGET=aarch64-apple-ios NORUN=1
-- name: "aarch64-apple-ios [Build only]"
- script: ci/run.sh
-- osx_image: xcode9.4
-- stage: osx-tier2
-+ stage: 64bit-tier2
- # BENCHMARKS:
- - name: "Benchmarks - x86_64-unknown-linux-gnu"
- install: TARGET=x86_64-unknown-linux-gnu ./ci/setup_benchmarks.sh
-- script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=core_arch,ispc,sleef-sys ci/benchmark.sh
-+ # FIXME: Use `core_arch,sleef-sys` features once they works again
-+ script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=ispc ci/benchmark.sh
- stage: tools
- - name: "Benchmarks - x86_64-apple-darwin"
- install: TARGET=x86_64-apple-darwin ./ci/setup_benchmarks.sh
-- script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=core_arch,ispc,sleef-sys ci/benchmark.sh
-+ # FIXME: Use `core_arch,sleef-sys` features once they works again
-+ script: PATH=$(pwd):$PATH NORUN=1 VERIFY=1 FEATURES=ispc ci/benchmark.sh
- os: osx
- osx_image: xcode9.4
- stage: tools
- # TOOLS:
- - name: "Documentation"
-- install: cargo install mdbook
-+ before_install:
-+ - sudo add-apt-repository -y ppa:deadsnakes/ppa
-+ - sudo apt-get update -y
-+ - sudo apt-get install -y python3.9
-+ install:
-+ - cargo install mdbook
- script: ci/dox.sh
- stage: tools
- - name: "rustfmt"
- install: true
-- before_script: rustup component add rustfmt-preview
-- script: ci/all.sh check_fmt || true
-+ script: |
-+ if rustup component add rustfmt-preview ; then
-+ ci/all.sh check_fmt || true
-+ fi
- stage: tools
- - name: "clippy"
- install: true
-- before_script: rustup component add clippy-preview
-- script: ci/all.sh clippy
-+ script: |
-+ if rustup component add clippy-preview ; then
-+ ci/all.sh clippy
-+ fi
- stage: tools
-
- allow_failures:
- # FIXME: ISPC cannot be found?
- - name: "Benchmarks - x86_64-apple-darwin"
-- # FIXME: TBD
-- - env: TARGET=powerpc-unknown-linux-gnu
-- - env: TARGET=powerpc64-unknown-linux-gnu
-- - env: TARGET=powerpc64le-unknown-linux-gnu
-- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+altivec"
-- - env: TARGET=powerpc64le-unknown-linux-gnu RUSTFLAGS="-C target-feature=+vsx"
-+ # FIXME: i686 fails in inlining, apparently
-+ - stage: 32bit-tier1
- #- env: TARGET=i686-unknown-freebsd NORUN=1
- #- env: TARGET=x86_64-unknown-freebsd NORUN=1
- #- env: TARGET=x86_64-unknown-netbsd NORUN=1
- #- env: TARGET=x86_64-sun-solaris NORUN=1
-
- # FIXME: TBD
-- - env: TARGET=arm-linux-androideabi
-- - env: TARGET=arm-linux-androideabi RUSTFLAGS="-C target-feature=+v7,+neon"
-- - env: TARGET=aarch64-linux-android
-- - env: TARGET=aarch64-linux-android RUSTFLAGS="-C target-feature=+neon"
-+ - stage: 64bit-tier2
-+ - stage: 32bit-tier2
-
- # FIXME: iOS
- # https://github.com/rust-lang-nursery/packed_simd/issues/26
-- - env: TARGET=i386-apple-ios
- - env: TARGET=x86_64-apple-ios
-+ # Is this related to the above? Mysterious test failure
-+ - name: "aarch64-apple-ios + NEON"
-
- # FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/182
- - env: TARGET=arm-unknown-linux-gnueabi RUSTFLAGS="-C target-feature=+v7,+neon"
-diff --git a/third_party/rust/packed_simd/Cargo.toml b/third_party/rust/packed_simd/Cargo.toml
-index 3db9354c94..70bbf26ed2 100644
---- a/third_party/rust/packed_simd/Cargo.toml
-+++ b/third_party/rust/packed_simd/Cargo.toml
-@@ -1,6 +1,6 @@
- [package]
- name = "packed_simd"
--version = "0.3.3"
-+version = "0.3.4"
- authors = ["Gonzalo Brito Gadeschi <gonzalobg88(a)gmail.com>"]
- description = "Portable Packed SIMD vectors"
- documentation = "https://docs.rs/crate/packed_simd/"
-@@ -21,8 +21,8 @@ is-it-maintained-open-issues = { repository = "rust-lang-nursery/packed_simd" }
- maintenance = { status = "experimental" }
-
- [dependencies]
--cfg-if = "^0.1.6"
--core_arch = { version = "^0.1.3", optional = true }
-+cfg-if = "0.1.10"
-+core_arch = { version = "0.1.5", optional = true }
-
- [features]
- default = []
-@@ -31,12 +31,12 @@ libcore_neon = []
-
- [dev-dependencies]
- paste = "^0.1.3"
--arrayvec = { version = "^0.4", default-features = false }
-+arrayvec = { version = "^0.5", default-features = false }
-
- [target.'cfg(target_arch = "x86_64")'.dependencies.sleef-sys]
--version = "^0.1.2"
-+version = "0.1.2"
- optional = true
-
- [target.wasm32-unknown-unknown.dev-dependencies]
--wasm-bindgen = "=0.2.19"
--wasm-bindgen-test = "=0.2.19"
-\ No newline at end of file
-+wasm-bindgen = "=0.2.52"
-+wasm-bindgen-test = "=0.3.2"
-diff --git a/third_party/rust/packed_simd/readme.md b/third_party/rust/packed_simd/README.md
-similarity index 54%
-rename from third_party/rust/packed_simd/readme.md
-rename to third_party/rust/packed_simd/README.md
-index 3b27a2bba0..ad4f3f2709 100644
---- a/third_party/rust/packed_simd/readme.md
-+++ b/third_party/rust/packed_simd/README.md
-@@ -4,16 +4,14 @@
-
- [![Travis-CI Status]][travis] [![Appveyor Status]][appveyor] [![Latest Version]][crates.io] [![docs]][master_docs]
-
--> This aims to be a 100% conforming implementation of Rust RFC 2366 for stabilization.
--
--**WARNING**: this crate only supports the most recent nightly Rust toolchain.
-+**WARNING**: this crate only supports the most recent nightly Rust toolchain
-+and will be superceded by [stdsimd](https://github.com/rust-lang/stdsimd).
-
- ## Documentation
-
- * [API docs (`master` branch)][master_docs]
- * [Performance guide][perf_guide]
--* [API docs (`docs.rs`)][docs.rs]: **CURRENTLY DOWN** due to
-- https://github.com/rust-lang-nursery/packed_simd/issues/110
-+* [API docs (`docs.rs`)][docs.rs]
- * [RFC2366 `std::simd`][rfc2366]: - contains motivation, design rationale,
- discussion, etc.
-
-@@ -39,17 +37,6 @@ Most of the examples come with both a scalar and a vectorized implementation.
- vector type as those of another vector type safely by just using the
- `.into_bits()` method.
-
--* `core_arch` (default: disabled): enable this feature to recompile `core::arch`
-- for the target-features enabled. `packed_simd` includes optimizations for some
-- target feature combinations that are enabled by this feature. Note, however,
-- that this is an unstable dependency, that rustc might break at any time.
--
--* `sleef-sys` (default: disabled - `x86_64` only): internally uses the [SLEEF]
-- short-vector math library when profitable via the [`sleef-sys`][sleef_sys]
-- crate. [SLEEF] is licensed under the [Boost Software License
-- v1.0][boost_license], an extremely permissive license, and can be statically
-- linked without issues.
--
- ## Performance
-
- The following [ISPC] examples are also part of `packed_simd`'s
-@@ -75,60 +62,40 @@ slowdown:
-
- ## Platform support
-
--The following table describes the supported platforms: `build` shows whether the
--library compiles without issues for a given target, while `run` shows whether
--the full testsuite passes on the target.
--
--| Linux targets: | build | run |
--|-----------------------------------|-----------|---------|
--| `i586-unknown-linux-gnu` | ✓ | ✓ |
--| `i686-unknown-linux-gnu` | ✓ | ✓ |
--| `x86_64-unknown-linux-gnu` | ✓ | ✓ |
--| `arm-unknown-linux-gnueabi` | ✗ | ✗ |
--| `arm-unknown-linux-gnueabihf` | ✓ | ✓ |
--| `armv7-unknown-linux-gnueabi` | ✓ | ✓ |
--| `aarch64-unknown-linux-gnu` | ✓ | ✓ |
--| `mips-unknown-linux-gnu` | ✓ | ✓ |
--| `mipsel-unknown-linux-musl` | ✓ | ✓ |
--| `mips64-unknown-linux-gnuabi64` | ✓ | ✓ |
--| `mips64el-unknown-linux-gnuabi64` | ✓ | ✓ |
--| `powerpc-unknown-linux-gnu` | ✗ | ✗ |
--| `powerpc64-unknown-linux-gnu` | ✗ | ✗ |
--| `powerpc64le-unknown-linux-gnu` | ✗ | ✗ |
--| `s390x-unknown-linux-gnu` | ✓ | ✓* |
--| `sparc64-unknown-linux-gnu` | ✓ | ✓* |
--| `thumbv7neon-unknown-linux-gnueabihf` | ✓ | ✓ |
--| **MacOSX targets:** | **build** | **run** |
--| `x86_64-apple-darwin` | ✓ | ✓ |
--| `i686-apple-darwin` | ✓ | ✓ |
--| **Windows targets:** | **build** | **run** |
--| `x86_64-pc-windows-msvc` | ✓ | ✓ |
--| `i686-pc-windows-msvc` | ✓ | ✓ |
--| `x86_64-pc-windows-gnu` | ✗ | ✗ |
--| `i686-pc-windows-gnu` | ✗ | ✗ |
--| **WebAssembly targets:** | **build** | **run** |
--| `wasm32-unknown-unknown` | ✓ | ✓ |
--| **Android targets:** | **build** | **run** |
--| `x86_64-linux-android` | ✓ | ✓ |
--| `arm-linux-androideabi` | ✓ | ✓ |
--| `aarch64-linux-android` | ✓ | ✗ |
--| `thumbv7neon-linux-androideabi` | ✓ | ✓ |
--| **iOS targets:** | **build** | **run** |
--| `i386-apple-ios` | ✓ | ✗ |
--| `x86_64-apple-ios` | ✓ | ✗ |
--| `armv7-apple-ios` | ✓ | ✗** |
--| `aarch64-apple-ios` | ✓ | ✗** |
--| **xBSD targets:** | **build** | **run** |
--| `i686-unknown-freebsd` | ✗ | ✗** |
--| `x86_64-unknown-freebsd` | ✗ | ✗** |
--| `x86_64-unknown-netbsd` | ✗ | ✗** |
--| **Solaris targets:** | **build** | **run** |
--| `x86_64-sun-solaris` | ✗ | ✗** |
--
--[*] most of the test suite passes correctly on these platform but
--there are correctness bugs open in the issue tracker.
--
--[**] it is currently not easily possible to run these platforms on CI.
-+The following table describes the supported platforms: `build` shows whether
-+the library compiles without issues for a given target, while `run` shows
-+whether the test suite passes for a given target.
-+
-+| **Linux** | **build** | **run** |
-+|---------------------------------------|-----------|---------|
-+| `i586-unknown-linux-gnu` | ✓ | ✗ |
-+| `i686-unknown-linux-gnu` | ✓ | ✗ |
-+| `x86_64-unknown-linux-gnu` | ✓ | ✓ |
-+| `arm-unknown-linux-gnueabi` | ✗ | ✗ |
-+| `arm-unknown-linux-gnueabihf` | ✓ | ✓ |
-+| `armv7-unknown-linux-gnueabi` | ✓ | ✓ |
-+| `aarch64-unknown-linux-gnu` | ✓ | ✓ |
-+| `mips-unknown-linux-gnu` | ✓ | ✗ |
-+| `mipsel-unknown-linux-musl` | ✓ | ✗ |
-+| `mips64-unknown-linux-gnuabi64` | ✓ | ✗ |
-+| `mips64el-unknown-linux-gnuabi64` | ✓ | ✗ |
-+| `powerpc-unknown-linux-gnu` | ✗ | ✗ |
-+| `powerpc64-unknown-linux-gnu` | ✗ | ✗ |
-+| `powerpc64le-unknown-linux-gnu` | ✓ | ✓ |
-+| `s390x-unknown-linux-gnu` | ✗ | ✗ |
-+| `sparc64-unknown-linux-gnu` | ✓ | ✗ |
-+| `thumbv7neon-unknown-linux-gnueabihf` | ✓ | ✓ |
-+| **MacOSX** | **build** | **run** |
-+| `x86_64-apple-darwin` | ✓ | ✓ |
-+| **Android** | **build** | **run** |
-+| `x86_64-linux-android` | ✓ | ✓ |
-+| `arm-linux-androideabi` | ✓ | ✓ |
-+| `aarch64-linux-android` | ✓ | ✓ |
-+| `thumbv7neon-linux-androideabi` | ✗ | ✗ |
-+| **iOS** | **build** | **run** |
-+| `x86_64-apple-ios` | ✓ | ✗ |
-+| `aarch64-apple-ios` | ✓ | ✗ |
-+
-
- ## Machine code verification
-
-@@ -162,8 +129,8 @@ Unless you explicitly state otherwise, any contribution intentionally submitted
- for inclusion in `packed_simd` by you, as defined in the Apache-2.0 license, shall be
- dual licensed as above, without any additional terms or conditions.
-
--[travis]: https://travis-ci.org/rust-lang-nursery/packed_simd
--[Travis-CI Status]: https://travis-ci.org/rust-lang-nursery/packed_simd.svg?branch=master
-+[travis]: https://travis-ci.com/rust-lang-nursery/packed_simd
-+[Travis-CI Status]: https://travis-ci.com/rust-lang-nursery/packed_simd.svg?branch=master
- [appveyor]: https://ci.appveyor.com/project/gnzlbg/packed-simd
- [Appveyor Status]: https://ci.appveyor.com/api/projects/status/hd7v9dvr442hgdix?svg=true
- [Latest Version]: https://img.shields.io/crates/v/packed_simd.svg
-diff --git a/third_party/rust/packed_simd/build.rs b/third_party/rust/packed_simd/build.rs
-index 85639ff9d0..5958b9b785 100644
---- a/third_party/rust/packed_simd/build.rs
-+++ b/third_party/rust/packed_simd/build.rs
-@@ -1,5 +1,5 @@
- fn main() {
-- println!("cargo:rustc-env=RUSTC_BOOTSTRAP=1");
-+ println!("cargo:rustc-env=RUSTC_BOOTSTRAP=1");
- let target = std::env::var("TARGET")
- .expect("TARGET environment variable not defined");
- if target.contains("neon") {
-diff --git a/third_party/rust/packed_simd/ci/all.sh b/third_party/rust/packed_simd/ci/all.sh
-index 273562d4a9..55a1fa2efe 100755
---- a/third_party/rust/packed_simd/ci/all.sh
-+++ b/third_party/rust/packed_simd/ci/all.sh
-@@ -21,7 +21,7 @@ cargo_fmt() {
- }
-
- cargo_clippy() {
-- cargo clippy --all -- -D clippy::pedantic
-+ cargo clippy --all -- -D clippy::perf
- }
-
- CMD="-1"
-diff --git a/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile
-index 68261a2f03..41ff4729ac 100644
---- a/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile
-+++ b/third_party/rust/packed_simd/ci/docker/aarch64-unknown-linux-gnu/Dockerfile
-@@ -1,4 +1,4 @@
--FROM ubuntu:17.10
-+FROM ubuntu:18.04
- RUN apt-get update && apt-get install -y --no-install-recommends \
- gcc \
- ca-certificates \
-diff --git a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile
-index cb4de6a57e..e1c591dd97 100644
---- a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile
-+++ b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabi/Dockerfile
-@@ -1,4 +1,4 @@
--FROM ubuntu:17.10
-+FROM ubuntu:18.04
- RUN apt-get update && apt-get install -y --no-install-recommends \
- gcc \
- ca-certificates \
-diff --git a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile
-index c7bd61f0a7..757b79e7ec 100644
---- a/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile
-+++ b/third_party/rust/packed_simd/ci/docker/arm-unknown-linux-gnueabihf/Dockerfile
-@@ -1,4 +1,4 @@
--FROM ubuntu:17.10
-+FROM ubuntu:18.04
- RUN apt-get update && apt-get install -y --no-install-recommends \
- gcc \
- ca-certificates \
-diff --git a/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile
-index e01b87afdf..2539062933 100644
---- a/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile
-+++ b/third_party/rust/packed_simd/ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile
-@@ -1,4 +1,4 @@
--FROM ubuntu:17.10
-+FROM ubuntu:18.04
- RUN apt-get update && apt-get install -y --no-install-recommends \
- gcc \
- ca-certificates \
-diff --git a/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile
-index 857974a858..01093698f6 100644
---- a/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile
-+++ b/third_party/rust/packed_simd/ci/docker/i586-unknown-linux-gnu/Dockerfile
-@@ -1,4 +1,4 @@
--FROM ubuntu:17.10
-+FROM ubuntu:18.04
- RUN apt-get update && apt-get install -y --no-install-recommends \
- gcc-multilib \
- libc6-dev \
-diff --git a/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile
-index 857974a858..01093698f6 100644
---- a/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile
-+++ b/third_party/rust/packed_simd/ci/docker/i686-unknown-linux-gnu/Dockerfile
-@@ -1,4 +1,4 @@
--FROM ubuntu:17.10
-+FROM ubuntu:18.04
- RUN apt-get update && apt-get install -y --no-install-recommends \
- gcc-multilib \
- libc6-dev \
-diff --git a/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile
-index 4711cead37..3bd471e87d 100644
---- a/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile
-+++ b/third_party/rust/packed_simd/ci/docker/mips-unknown-linux-gnu/Dockerfile
-@@ -1,4 +1,4 @@
--FROM ubuntu:17.10
-+FROM ubuntu:18.04
-
- RUN apt-get update && apt-get install -y --no-install-recommends \
- gcc libc6-dev qemu-user ca-certificates \
-diff --git a/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
-index 1422e8c809..f26f1f38eb 100644
---- a/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
-+++ b/third_party/rust/packed_simd/ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile
-@@ -1,4 +1,4 @@
--FROM ubuntu:17.10
-+FROM ubuntu:18.04
-
- RUN apt-get update && apt-get install -y --no-install-recommends \
- gcc libc6-dev qemu-user ca-certificates \
-diff --git a/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile b/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile
-index d94deb5b20..7d9f0bd992 100644
---- a/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile
-+++ b/third_party/rust/packed_simd/ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile
-@@ -1,4 +1,4 @@
--FROM ubuntu:17.10
-+FROM ubuntu:18.04
-
- RUN apt-get update && apt-get install -y --no-install-recommends \
- gcc libc6-dev qemu-user ca-certificates \
-diff --git a/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile b/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile
-index 40ac50675b..7488662ef2 100644
---- a/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile
-+++ b/third_party/rust/packed_simd/ci/docker/mipsel-unknown-linux-musl/Dockerfile
-@@ -16,10 +16,10 @@ RUN mkdir /toolchain
-
- # Note that this originally came from:
- # https://downloads.openwrt.org/snapshots/trunk/malta/generic/OpenWrt-Toolcha…
--RUN curl -L https://s3-us-west-1.amazonaws.com/rust-lang-ci2/libc/OpenWrt-Toolchain-mal… | \
-+RUN curl -L https://ci-mirrors.rust-lang.org/libc/OpenWrt-Toolchain-malta-le_gcc-5.3.0_… | \
- tar xjf - -C /toolchain --strip-components=2
-
- ENV PATH=$PATH:/rust/bin:/toolchain/bin \
- CC_mipsel_unknown_linux_musl=mipsel-openwrt-linux-gcc \
- CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_LINKER=mipsel-openwrt-linux-gcc \
-- CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUNNER="qemu-mipsel -L /toolchain"
-\ No newline at end of file
-+ CARGO_TARGET_MIPSEL_UNKNOWN_LINUX_MUSL_RUNNER="qemu-mipsel -L /toolchain"
-diff --git a/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile
-index 43b174ed87..80cfee8ab5 100644
---- a/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile
-+++ b/third_party/rust/packed_simd/ci/docker/powerpc-unknown-linux-gnu/Dockerfile
-@@ -1,4 +1,4 @@
--FROM ubuntu:17.10
-+FROM ubuntu:18.04
-
- RUN apt-get update && apt-get install -y --no-install-recommends \
- gcc libc6-dev qemu-user ca-certificates \
-@@ -9,4 +9,5 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
-
- ENV CARGO_TARGET_POWERPC_UNKNOWN_LINUX_GNU_LINKER=powerpc-linux-gnu-gcc \
- CARGO_TARGET_POWERPC_UNKNOWN_LINUX_GNU_RUNNER="qemu-ppc -cpu Vger -L /usr/powerpc-linux-gnu" \
-+ CC=powerpc-linux-gnu-gcc \
- OBJDUMP=powerpc-linux-gnu-objdump
-diff --git a/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile
-index 7757ad28a4..74031a2a3e 100644
---- a/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile
-+++ b/third_party/rust/packed_simd/ci/docker/powerpc64-unknown-linux-gnu/Dockerfile
-@@ -1,4 +1,4 @@
--FROM ubuntu:17.10
-+FROM ubuntu:18.04
-
- RUN apt-get update && apt-get install -y --no-install-recommends \
- gcc \
-diff --git a/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile
-index 0b0c214fdf..471a7d9651 100644
---- a/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile
-+++ b/third_party/rust/packed_simd/ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile
-@@ -1,4 +1,4 @@
--FROM ubuntu:17.10
-+FROM ubuntu:18.04
-
- RUN apt-get update && apt-get install -y --no-install-recommends \
- gcc libc6-dev qemu-user ca-certificates \
-diff --git a/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile b/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile
-index 696cb6c3fb..588d23c65a 100644
---- a/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile
-+++ b/third_party/rust/packed_simd/ci/docker/thumbv7neon-unknown-linux-gnueabihf/Dockerfile
-@@ -1,4 +1,4 @@
--FROM ubuntu:17.10
-+FROM ubuntu:18.04
- RUN apt-get update && apt-get install -y --no-install-recommends \
- gcc \
- ca-certificates \
-diff --git a/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile b/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile
-index e6b000d051..ce5bb88e62 100644
---- a/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile
-+++ b/third_party/rust/packed_simd/ci/docker/x86_64-unknown-linux-gnu/Dockerfile
-@@ -1,4 +1,4 @@
--FROM ubuntu:17.10
-+FROM ubuntu:18.04
- RUN apt-get update && apt-get install -y --no-install-recommends \
- gcc \
- libc6-dev \
-diff --git a/third_party/rust/packed_simd/ci/dox.sh b/third_party/rust/packed_simd/ci/dox.sh
-index 1743366407..560eaadcc8 100755
---- a/third_party/rust/packed_simd/ci/dox.sh
-+++ b/third_party/rust/packed_simd/ci/dox.sh
-@@ -18,7 +18,10 @@ cp -r perf-guide/book target/doc/perf-guide
-
- # If we're on travis, not a PR, and on the right branch, publish!
- if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "$TRAVIS_BRANCH" = "master" ]; then
-- pip install ghp_import --install-option="--prefix=$HOME/.local"
-- $HOME/.local/bin/ghp-import -n target/doc
-+ python3 -vV
-+ pip -vV
-+ python3.9 -vV
-+ pip install ghp_import --user
-+ ghp-import -n target/doc
- git push -qf https://${GH_PAGES}@github.com/${TRAVIS_REPO_SLUG}.git gh-pages
- fi
-diff --git a/third_party/rust/packed_simd/ci/run.sh b/third_party/rust/packed_simd/ci/run.sh
-index 7bb8258836..428a5d8902 100755
---- a/third_party/rust/packed_simd/ci/run.sh
-+++ b/third_party/rust/packed_simd/ci/run.sh
-@@ -78,9 +78,11 @@ fi
-
- if [[ "${TARGET}" == "x86_64-unknown-linux-gnu" ]] || [[ "${TARGET}" == "x86_64-pc-windows-msvc" ]]; then
- # use sleef on linux and windows x86_64 builds
-- cargo_test_impl --release --features=into_bits,core_arch,sleef-sys
-+ # FIXME: Use `core_arch,sleef-sys` features once they works again
-+ cargo_test_impl --release --features=into_bits
- else
-- cargo_test_impl --release --features=into_bits,core_arch
-+ # FIXME: Use `core_arch` feature once it works again
-+ cargo_test_impl --release --features=into_bits
- fi
-
- # Verify code generation
-diff --git a/third_party/rust/packed_simd/ci/setup_benchmarks.sh b/third_party/rust/packed_simd/ci/setup_benchmarks.sh
-index ddc4765d5c..cd41a78513 100755
---- a/third_party/rust/packed_simd/ci/setup_benchmarks.sh
-+++ b/third_party/rust/packed_simd/ci/setup_benchmarks.sh
-@@ -5,6 +5,3 @@ set -ex
- # Get latest ISPC binary for the target and put it in the path
- git clone https://github.com/gnzlbg/ispc-binaries
- cp ispc-binaries/ispc-${TARGET} ispc
--
--# Rust-bindgen requires RUSTFMT
--rustup component add rustfmt-preview
-diff --git a/third_party/rust/packed_simd/src/api.rs b/third_party/rust/packed_simd/src/api.rs
-index 9959a052ae..4e9c4292e0 100644
---- a/third_party/rust/packed_simd/src/api.rs
-+++ b/third_party/rust/packed_simd/src/api.rs
-@@ -1,5 +1,7 @@
- //! Implements the Simd<[T; N]> APIs
-
-+#[macro_use]
-+mod bitmask;
- crate mod cast;
- #[macro_use]
- mod cmp;
-@@ -39,7 +41,7 @@ crate mod into_bits;
-
- macro_rules! impl_i {
- ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident
-- | $ielem_ty:ident | $test_tt:tt | $($elem_ids:ident),*
-+ | $ielem_ty:ident, $ibitmask_ty:ident | $test_tt:tt | $($elem_ids:ident),*
- | From: $($from_vec_ty:ident),* | $(#[$doc:meta])*) => {
- impl_minimal_iuf!([$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt
- | $($elem_ids),* | $(#[$doc])*);
-@@ -93,6 +95,7 @@ macro_rules! impl_i {
- );
- impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
- impl_cmp_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1));
-+ impl_bitmask!($tuple_id | $ibitmask_ty | (-1, 0) | $test_tt);
-
- test_select!($elem_ty, $mask_ty, $tuple_id, (1, 2) | $test_tt);
- test_cmp_partial_ord_int!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
-@@ -102,7 +105,7 @@ macro_rules! impl_i {
-
- macro_rules! impl_u {
- ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident
-- | $ielem_ty:ident | $test_tt:tt | $($elem_ids:ident),*
-+ | $ielem_ty:ident, $ibitmask_ty:ident | $test_tt:tt | $($elem_ids:ident),*
- | From: $($from_vec_ty:ident),* | $(#[$doc:meta])*) => {
- impl_minimal_iuf!([$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt
- | $($elem_ids),* | $(#[$doc])*);
-@@ -155,6 +158,8 @@ macro_rules! impl_u {
- );
- impl_cmp_partial_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
- impl_cmp_ord!([$elem_ty; $elem_n]: $tuple_id | $test_tt | (0, 1));
-+ impl_bitmask!($tuple_id | $ibitmask_ty | ($ielem_ty::max_value(), 0) |
-+ $test_tt);
-
- test_select!($elem_ty, $mask_ty, $tuple_id, (1, 2) | $test_tt);
- test_cmp_partial_ord_int!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
-@@ -222,7 +227,8 @@ macro_rules! impl_f {
- }
-
- macro_rules! impl_m {
-- ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident | $ielem_ty:ident
-+ ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident
-+ | $ielem_ty:ident, $ibitmask_ty:ident
- | $test_tt:tt | $($elem_ids:ident),* | From: $($from_vec_ty:ident),*
- | $(#[$doc:meta])*) => {
- impl_minimal_mask!(
-@@ -265,6 +271,7 @@ macro_rules! impl_m {
- [$elem_ty; $elem_n]: $tuple_id | $test_tt | (false, true)
- );
- impl_shuffle1_dyn!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
-+ impl_bitmask!($tuple_id | $ibitmask_ty | (true, false) | $test_tt);
-
- test_cmp_partial_ord_mask!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
- test_shuffle1_dyn_mask!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
-diff --git a/third_party/rust/packed_simd/src/api/bit_manip.rs b/third_party/rust/packed_simd/src/api/bit_manip.rs
-index 3d3c4eb885..6d8865706d 100644
---- a/third_party/rust/packed_simd/src/api/bit_manip.rs
-+++ b/third_party/rust/packed_simd/src/api/bit_manip.rs
-@@ -37,6 +37,7 @@ macro_rules! impl_bit_manip {
- paste::item_with_macros! {
- #[allow(overflowing_literals)]
- pub mod [<$id _bit_manip>] {
-+ #![allow(const_item_mutation)]
- use super::*;
-
- const LANE_WIDTH: usize = mem::size_of::<$elem_ty>() * 8;
-diff --git a/third_party/rust/packed_simd/src/api/bitmask.rs b/third_party/rust/packed_simd/src/api/bitmask.rs
-new file mode 100644
-index 0000000000..a06ff0fab1
---- /dev/null
-+++ b/third_party/rust/packed_simd/src/api/bitmask.rs
-@@ -0,0 +1,82 @@
-+//! Bitmask API
-+
-+macro_rules! impl_bitmask {
-+ ($id:ident | $ibitmask_ty:ident | ($set:expr, $clear:expr)
-+ | $test_tt:tt) => {
-+ impl $id {
-+ /// Creates a bitmask with the MSB of each vector lane.
-+ ///
-+ /// If the vector has less than 8 lanes, the bits that do not
-+ /// correspond to any vector lanes are cleared.
-+ #[inline]
-+ pub fn bitmask(self) -> $ibitmask_ty {
-+ unsafe { codegen::llvm::simd_bitmask(self.0) }
-+ }
-+ }
-+
-+ test_if! {
-+ $test_tt:
-+ paste::item! {
-+ #[cfg(not(any(
-+ // FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/210
-+ all(target_arch = "mips", target_endian = "big"),
-+ all(target_arch = "mips64", target_endian = "big"),
-+ target_arch = "sparc64",
-+ target_arch = "s390x",
-+ )))]
-+ pub mod [<$id _bitmask>] {
-+ use super::*;
-+ #[cfg_attr(not(target_arch = "wasm32"), test)]
-+ #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
-+ fn bitmask() {
-+ // clear all lanes
-+ let vec = $id::splat($clear as _);
-+ let bitmask: $ibitmask_ty = 0;
-+ assert_eq!(vec.bitmask(), bitmask);
-+
-+ // set even lanes
-+ let mut vec = $id::splat($clear as _);
-+ for i in 0..$id::lanes() {
-+ if i % 2 == 0 {
-+ vec = vec.replace(i, $set as _);
-+ }
-+ }
-+ // create bitmask with even lanes set:
-+ let mut bitmask: $ibitmask_ty = 0;
-+ for i in 0..$id::lanes() {
-+ if i % 2 == 0 {
-+ bitmask |= 1 << i;
-+ }
-+ }
-+ assert_eq!(vec.bitmask(), bitmask);
-+
-+
-+ // set odd lanes
-+ let mut vec = $id::splat($clear as _);
-+ for i in 0..$id::lanes() {
-+ if i % 2 != 0 {
-+ vec = vec.replace(i, $set as _);
-+ }
-+ }
-+ // create bitmask with odd lanes set:
-+ let mut bitmask: $ibitmask_ty = 0;
-+ for i in 0..$id::lanes() {
-+ if i % 2 != 0 {
-+ bitmask |= 1 << i;
-+ }
-+ }
-+ assert_eq!(vec.bitmask(), bitmask);
-+
-+ // set all lanes
-+ let vec = $id::splat($set as _);
-+ let mut bitmask: $ibitmask_ty = 0;
-+ for i in 0..$id::lanes() {
-+ bitmask |= 1 << i;
-+ }
-+ assert_eq!(vec.bitmask(), bitmask);
-+ }
-+ }
-+ }
-+ }
-+ };
-+}
-diff --git a/third_party/rust/packed_simd/src/api/cast/v128.rs b/third_party/rust/packed_simd/src/api/cast/v128.rs
-index 78c07f3a55..ab47ddc006 100644
---- a/third_party/rust/packed_simd/src/api/cast/v128.rs
-+++ b/third_party/rust/packed_simd/src/api/cast/v128.rs
-@@ -1,5 +1,5 @@
- //! `FromCast` and `IntoCast` implementations for portable 128-bit wide vectors
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- use crate::*;
-
-diff --git a/third_party/rust/packed_simd/src/api/cast/v16.rs b/third_party/rust/packed_simd/src/api/cast/v16.rs
-index d292936baa..cf974bb08e 100644
---- a/third_party/rust/packed_simd/src/api/cast/v16.rs
-+++ b/third_party/rust/packed_simd/src/api/cast/v16.rs
-@@ -1,5 +1,5 @@
- //! `FromCast` and `IntoCast` implementations for portable 16-bit wide vectors
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- use crate::*;
-
-diff --git a/third_party/rust/packed_simd/src/api/cast/v256.rs b/third_party/rust/packed_simd/src/api/cast/v256.rs
-index 0a669e0bee..9389dcb4c7 100644
---- a/third_party/rust/packed_simd/src/api/cast/v256.rs
-+++ b/third_party/rust/packed_simd/src/api/cast/v256.rs
-@@ -1,5 +1,5 @@
- //! `FromCast` and `IntoCast` implementations for portable 256-bit wide vectors
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- use crate::*;
-
-diff --git a/third_party/rust/packed_simd/src/api/cast/v32.rs b/third_party/rust/packed_simd/src/api/cast/v32.rs
-index 65050cdacb..2b254ba0cf 100644
---- a/third_party/rust/packed_simd/src/api/cast/v32.rs
-+++ b/third_party/rust/packed_simd/src/api/cast/v32.rs
-@@ -1,5 +1,5 @@
- //! `FromCast` and `IntoCast` implementations for portable 32-bit wide vectors
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- use crate::*;
-
-diff --git a/third_party/rust/packed_simd/src/api/cast/v512.rs b/third_party/rust/packed_simd/src/api/cast/v512.rs
-index 9ae1caed35..5a10ab0666 100644
---- a/third_party/rust/packed_simd/src/api/cast/v512.rs
-+++ b/third_party/rust/packed_simd/src/api/cast/v512.rs
-@@ -1,5 +1,5 @@
- //! `FromCast` and `IntoCast` implementations for portable 512-bit wide vectors
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- use crate::*;
-
-diff --git a/third_party/rust/packed_simd/src/api/cast/v64.rs b/third_party/rust/packed_simd/src/api/cast/v64.rs
-index 0e2f78f733..192a4638a3 100644
---- a/third_party/rust/packed_simd/src/api/cast/v64.rs
-+++ b/third_party/rust/packed_simd/src/api/cast/v64.rs
-@@ -1,5 +1,5 @@
- //! `FromCast` and `IntoCast` implementations for portable 64-bit wide vectors
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- use crate::*;
-
-diff --git a/third_party/rust/packed_simd/src/api/default.rs b/third_party/rust/packed_simd/src/api/default.rs
-index 843d51bcc4..7af55ea77a 100644
---- a/third_party/rust/packed_simd/src/api/default.rs
-+++ b/third_party/rust/packed_simd/src/api/default.rs
-@@ -12,6 +12,8 @@ macro_rules! impl_default {
- test_if!{
- $test_tt:
- paste::item! {
-+ // Comparisons use integer casts within mantissa^1 range.
-+ #[allow(clippy::float_cmp)]
- pub mod [<$id _default>] {
- use super::*;
- #[cfg_attr(not(target_arch = "wasm32"), test)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
-diff --git a/third_party/rust/packed_simd/src/api/from/from_array.rs b/third_party/rust/packed_simd/src/api/from/from_array.rs
-index 964d1501df..b83f938162 100644
---- a/third_party/rust/packed_simd/src/api/from/from_array.rs
-+++ b/third_party/rust/packed_simd/src/api/from/from_array.rs
-@@ -56,6 +56,8 @@ macro_rules! impl_from_array {
- test_if! {
- $test_tt:
- paste::item! {
-+ // Comparisons use integer casts within mantissa^1 range.
-+ #[allow(clippy::float_cmp)]
- mod [<$id _from>] {
- use super::*;
- #[test]
-diff --git a/third_party/rust/packed_simd/src/api/hash.rs b/third_party/rust/packed_simd/src/api/hash.rs
-index 08d42496ea..ee80eff939 100644
---- a/third_party/rust/packed_simd/src/api/hash.rs
-+++ b/third_party/rust/packed_simd/src/api/hash.rs
-@@ -36,6 +36,8 @@ macro_rules! impl_hash {
- let mut v_hash = a_hash.clone();
- a.hash(&mut a_hash);
-
-+ // Integer within mantissa^1 range.
-+ #[allow(clippy::float_cmp)]
- let v = $id::splat(42 as $elem_ty);
- v.hash(&mut v_hash);
- assert_eq!(a_hash.finish(), v_hash.finish());
-diff --git a/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs b/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs
-index 6cc2fa37b7..fee6140052 100644
---- a/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs
-+++ b/third_party/rust/packed_simd/src/api/into_bits/arch_specific.rs
-@@ -1,6 +1,6 @@
- //! `FromBits` and `IntoBits` between portable vector types and the
- //! architecture-specific vector types.
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- // FIXME: MIPS FromBits/IntoBits
-
-@@ -84,7 +84,6 @@ macro_rules! impl_arch {
- // FIXME: 64-bit single element types
- // FIXME: arm/aarch float16x4_t missing
- impl_arch!(
-- [x86["x86"]: __m64], [x86_64["x86_64"]: __m64],
- [arm["arm"]: int8x8_t, uint8x8_t, poly8x8_t, int16x4_t, uint16x4_t,
- poly16x4_t, int32x2_t, uint32x2_t, float32x2_t, int64x1_t,
- uint64x1_t],
-diff --git a/third_party/rust/packed_simd/src/api/into_bits/v128.rs b/third_party/rust/packed_simd/src/api/into_bits/v128.rs
-index 804dbf282d..e32cd7f9f0 100644
---- a/third_party/rust/packed_simd/src/api/into_bits/v128.rs
-+++ b/third_party/rust/packed_simd/src/api/into_bits/v128.rs
-@@ -1,5 +1,5 @@
- //! `FromBits` and `IntoBits` implementations for portable 128-bit wide vectors
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- #[allow(unused)] // wasm_bindgen_test
- use crate::*;
-diff --git a/third_party/rust/packed_simd/src/api/into_bits/v16.rs b/third_party/rust/packed_simd/src/api/into_bits/v16.rs
-index 1162a62e5b..e44d0e7f9a 100644
---- a/third_party/rust/packed_simd/src/api/into_bits/v16.rs
-+++ b/third_party/rust/packed_simd/src/api/into_bits/v16.rs
-@@ -1,5 +1,5 @@
- //! `FromBits` and `IntoBits` implementations for portable 16-bit wide vectors
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- #[allow(unused)] // wasm_bindgen_test
- use crate::*;
-diff --git a/third_party/rust/packed_simd/src/api/into_bits/v256.rs b/third_party/rust/packed_simd/src/api/into_bits/v256.rs
-index cc7a6646b5..c4c373e0d0 100644
---- a/third_party/rust/packed_simd/src/api/into_bits/v256.rs
-+++ b/third_party/rust/packed_simd/src/api/into_bits/v256.rs
-@@ -1,5 +1,5 @@
- //! `FromBits` and `IntoBits` implementations for portable 256-bit wide vectors
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- #[allow(unused)] // wasm_bindgen_test
- use crate::*;
-diff --git a/third_party/rust/packed_simd/src/api/into_bits/v32.rs b/third_party/rust/packed_simd/src/api/into_bits/v32.rs
-index 2c183ecf1c..5dba38a179 100644
---- a/third_party/rust/packed_simd/src/api/into_bits/v32.rs
-+++ b/third_party/rust/packed_simd/src/api/into_bits/v32.rs
-@@ -1,5 +1,5 @@
- //! `FromBits` and `IntoBits` implementations for portable 32-bit wide vectors
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- #[allow(unused)] // wasm_bindgen_test
- use crate::*;
-diff --git a/third_party/rust/packed_simd/src/api/into_bits/v512.rs b/third_party/rust/packed_simd/src/api/into_bits/v512.rs
-index 8dec6a7f63..4a771962c3 100644
---- a/third_party/rust/packed_simd/src/api/into_bits/v512.rs
-+++ b/third_party/rust/packed_simd/src/api/into_bits/v512.rs
-@@ -1,5 +1,5 @@
- //! `FromBits` and `IntoBits` implementations for portable 512-bit wide vectors
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- #[allow(unused)] // wasm_bindgen_test
- use crate::*;
-diff --git a/third_party/rust/packed_simd/src/api/into_bits/v64.rs b/third_party/rust/packed_simd/src/api/into_bits/v64.rs
-index 8999d98e13..5b065f1bd5 100644
---- a/third_party/rust/packed_simd/src/api/into_bits/v64.rs
-+++ b/third_party/rust/packed_simd/src/api/into_bits/v64.rs
-@@ -1,5 +1,5 @@
- //! `FromBits` and `IntoBits` implementations for portable 64-bit wide vectors
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- #[allow(unused)] // wasm_bindgen_test
- use crate::*;
-diff --git a/third_party/rust/packed_simd/src/api/minimal/iuf.rs b/third_party/rust/packed_simd/src/api/minimal/iuf.rs
-index 58ffabab99..a155ac178a 100644
---- a/third_party/rust/packed_simd/src/api/minimal/iuf.rs
-+++ b/third_party/rust/packed_simd/src/api/minimal/iuf.rs
-@@ -53,7 +53,7 @@ macro_rules! impl_minimal_iuf {
-
- /// Extracts the value at `index`.
- ///
-- /// # Precondition
-+ /// # Safety
- ///
- /// If `index >= Self::lanes()` the behavior is undefined.
- #[inline]
-@@ -80,7 +80,7 @@ macro_rules! impl_minimal_iuf {
-
- /// Returns a new vector where the value at `index` is replaced by `new_value`.
- ///
-- /// # Precondition
-+ /// # Safety
- ///
- /// If `index >= Self::lanes()` the behavior is undefined.
- #[inline]
-@@ -101,6 +101,8 @@ macro_rules! impl_minimal_iuf {
- test_if!{
- $test_tt:
- paste::item! {
-+ // Comparisons use integer casts within mantissa^1 range.
-+ #[allow(clippy::float_cmp)]
- pub mod [<$id _minimal>] {
- use super::*;
- #[cfg_attr(not(target_arch = "wasm32"), test)]
-diff --git a/third_party/rust/packed_simd/src/api/minimal/mask.rs b/third_party/rust/packed_simd/src/api/minimal/mask.rs
-index e65be95db1..a420060b42 100644
---- a/third_party/rust/packed_simd/src/api/minimal/mask.rs
-+++ b/third_party/rust/packed_simd/src/api/minimal/mask.rs
-@@ -58,6 +58,8 @@ macro_rules! impl_minimal_mask {
-
- /// Extracts the value at `index`.
- ///
-+ /// # Safety
-+ ///
- /// If `index >= Self::lanes()` the behavior is undefined.
- #[inline]
- pub unsafe fn extract_unchecked(self, index: usize) -> bool {
-@@ -85,9 +87,9 @@ macro_rules! impl_minimal_mask {
- /// Returns a new vector where the value at `index` is replaced by
- /// `new_value`.
- ///
-- /// # Panics
-+ /// # Safety
- ///
-- /// If `index >= Self::lanes()`.
-+ /// If `index >= Self::lanes()` the behavior is undefined.
- #[inline]
- #[must_use = "replace_unchecked does not modify the original value - \
- it returns a new vector with the value at `index` \
-diff --git a/third_party/rust/packed_simd/src/api/minimal/ptr.rs b/third_party/rust/packed_simd/src/api/minimal/ptr.rs
-index 75e5aad5c0..c3d61fbf6d 100644
---- a/third_party/rust/packed_simd/src/api/minimal/ptr.rs
-+++ b/third_party/rust/packed_simd/src/api/minimal/ptr.rs
-@@ -68,7 +68,7 @@ macro_rules! impl_minimal_p {
-
- /// Extracts the value at `index`.
- ///
-- /// # Precondition
-+ /// # Safety
- ///
- /// If `index >= Self::lanes()` the behavior is undefined.
- #[inline]
-@@ -96,7 +96,7 @@ macro_rules! impl_minimal_p {
-
- /// Returns a new vector where the value at `index` is replaced by `new_value`.
- ///
-- /// # Precondition
-+ /// # Safety
- ///
- /// If `index >= Self::lanes()` the behavior is undefined.
- #[inline]
-@@ -215,7 +215,7 @@ macro_rules! impl_minimal_p {
- f,
- "{}<{}>(",
- stringify!($id),
-- unsafe { crate::intrinsics::type_name::<T>() }
-+ crate::intrinsics::type_name::<T>()
- )?;
- for i in 0..$elem_count {
- if i > 0 {
-@@ -550,11 +550,7 @@ macro_rules! impl_minimal_p {
- ];
-
- for i in 0..$elem_count {
-- let ptr = unsafe {
-- crate::mem::transmute(
-- &values[i] as *const i32
-- )
-- };
-+ let ptr = &values[i] as *const i32 as *mut i32;
- vec = vec.replace(i, ptr);
- array[i] = ptr;
- }
-@@ -611,7 +607,7 @@ macro_rules! impl_minimal_p {
-
- /// Instantiates a new vector with the values of the `slice`.
- ///
-- /// # Precondition
-+ /// # Safety
- ///
- /// If `slice.len() < Self::lanes()` or `&slice[0]` is not aligned
- /// to an `align_of::<Self>()` boundary, the behavior is undefined.
-@@ -624,7 +620,7 @@ macro_rules! impl_minimal_p {
-
- /// Instantiates a new vector with the values of the `slice`.
- ///
-- /// # Precondition
-+ /// # Safety
- ///
- /// If `slice.len() < Self::lanes()` the behavior is undefined.
- #[inline]
-@@ -827,7 +823,7 @@ macro_rules! impl_minimal_p {
-
- /// Writes the values of the vector to the `slice`.
- ///
-- /// # Precondition
-+ /// # Safety
- ///
- /// If `slice.len() < Self::lanes()` or `&slice[0]` is not
- /// aligned to an `align_of::<Self>()` boundary, the behavior is
-@@ -843,7 +839,7 @@ macro_rules! impl_minimal_p {
-
- /// Writes the values of the vector to the `slice`.
- ///
-- /// # Precondition
-+ /// # Safety
- ///
- /// If `slice.len() < Self::lanes()` the behavior is undefined.
- #[inline]
-@@ -1025,11 +1021,7 @@ macro_rules! impl_minimal_p {
- ];
-
- for i in 0..$elem_count {
-- let ptr = unsafe {
-- crate::mem::transmute(
-- &values[i] as *const i32
-- )
-- };
-+ let ptr = &values[i] as *const i32 as *mut i32;
- vec = vec.replace(i, ptr);
- array[i] = ptr;
- }
-@@ -1151,7 +1143,7 @@ macro_rules! impl_minimal_p {
- /// As such, memory acquired directly from allocators or memory
- /// mapped files may be too large to handle with this function.
- ///
-- /// Consider using wrapping_offset_from instead if these constraints
-+ /// Consider using `wrapping_offset_from` instead if these constraints
- /// are difficult to satisfy. The only advantage of this method is
- /// that it enables more aggressive compiler optimizations.
- #[inline]
-diff --git a/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs b/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs
-index 4126e87042..8310667b7a 100644
---- a/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs
-+++ b/third_party/rust/packed_simd/src/api/ops/vector_float_min_max.rs
-@@ -26,6 +26,11 @@ macro_rules! impl_ops_vector_float_min_max {
- test_if!{
- $test_tt:
- paste::item! {
-+ #[cfg(not(any(
-+ // FIXME: https://github.com/rust-lang-nursery/packed_simd/issues/223
-+ all(target_arch = "mips", target_endian = "big"),
-+ target_arch = "mips64",
-+ )))]
- pub mod [<$id _ops_vector_min_max>] {
- use super::*;
- #[cfg_attr(not(target_arch = "wasm32"), test)] #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
-diff --git a/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs b/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs
-index 9d8e113bb4..4304356209 100644
---- a/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs
-+++ b/third_party/rust/packed_simd/src/api/ptr/gather_scatter.rs
-@@ -49,9 +49,9 @@ macro_rules! impl_ptr_read {
- let mut ptr = $id::<i32>::null();
-
- for i in 0..$elem_count {
-- ptr = ptr.replace(i, unsafe {
-- crate::mem::transmute(&v[i] as *const i32)
-- });
-+ ptr = ptr.replace(i,
-+ &v[i] as *const i32 as *mut i32
-+ );
- }
-
- // all mask elements are true:
-@@ -135,32 +135,8 @@ macro_rules! impl_ptr_write {
- M: sealed::Mask,
- [M; $elem_count]: sealed::SimdArray,
- {
-- // FIXME:
-- // https://github.com/rust-lang-nursery/packed_simd/issues/85
-- #[cfg(not(target_arch = "mips"))]
-- {
-- use crate::llvm::simd_scatter;
-- simd_scatter(value.0, self.0, mask.0)
-- }
-- #[cfg(target_arch = "mips")]
-- {
-- let m_ptr =
-- &mask as *const Simd<[M; $elem_count]> as *const M;
-- for i in 0..$elem_count {
-- let m = ptr::read(m_ptr.add(i));
-- if m.test() {
-- let t_ptr = &self
-- as *const Simd<[*mut T; $elem_count]>
-- as *mut *mut T;
-- let v_ptr = &value as *const Simd<[T; $elem_count]>
-- as *const T;
-- ptr::write(
-- ptr::read(t_ptr.add(i)),
-- ptr::read(v_ptr.add(i)),
-- );
-- }
-- }
-- }
-+ use crate::llvm::simd_scatter;
-+ simd_scatter(value.0, self.0, mask.0)
- }
- }
-
-@@ -185,7 +161,7 @@ macro_rules! impl_ptr_write {
- let mut ptr = $id::<i32>::null();
- for i in 0..$elem_count {
- ptr = ptr.replace(i, unsafe {
-- crate::mem::transmute(arr.as_ptr().add(i))
-+ arr.as_ptr().add(i) as *mut i32
- });
- }
- // ptr = [&arr[0], &arr[1], ...]
-diff --git a/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs b/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs
-index dd722ae25f..4a47452e50 100644
---- a/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs
-+++ b/third_party/rust/packed_simd/src/api/reductions/float_arithmetic.rs
-@@ -93,6 +93,8 @@ macro_rules! impl_reduction_float_arithmetic {
- test_if! {
- $test_tt:
- paste::item! {
-+ // Comparisons use integer casts within mantissa^1 range.
-+ #[allow(clippy::float_cmp)]
- pub mod [<$id _reduction_float_arith>] {
- use super::*;
- fn alternating(x: usize) -> $id {
-@@ -225,7 +227,7 @@ macro_rules! impl_reduction_float_arithmetic {
- let mut v = $id::splat(0. as $elem_ty);
- for i in 0..$id::lanes() {
- let c = if i % 2 == 0 { 1e3 } else { -1. };
-- start *= 3.14 * c;
-+ start *= ::core::$elem_ty::consts::PI * c;
- scalar_reduction += start;
- v = v.replace(i, start);
- }
-@@ -257,6 +259,7 @@ macro_rules! impl_reduction_float_arithmetic {
- #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
- #[allow(unused, dead_code)]
- fn product_roundoff() {
-+ use ::core::convert::TryInto;
- // Performs a tree-reduction
- fn tree_reduce_product(a: &[$elem_ty]) -> $elem_ty {
- assert!(!a.is_empty());
-@@ -278,7 +281,7 @@ macro_rules! impl_reduction_float_arithmetic {
- let mut v = $id::splat(0. as $elem_ty);
- for i in 0..$id::lanes() {
- let c = if i % 2 == 0 { 1e3 } else { -1. };
-- start *= 3.14 * c;
-+ start *= ::core::$elem_ty::consts::PI * c;
- scalar_reduction *= start;
- v = v.replace(i, start);
- }
-@@ -288,7 +291,9 @@ macro_rules! impl_reduction_float_arithmetic {
- v.write_to_slice_unaligned(&mut a);
- let tree_reduction = tree_reduce_product(&a);
-
-- // tolerate 1 ULP difference:
-+ // FIXME: Too imprecise, even only for product(f32x8).
-+ // Figure out how to narrow this down.
-+ let ulp_limit = $id::lanes() / 2;
- let red_bits = simd_reduction.to_bits();
- let tree_bits = tree_reduction.to_bits();
- assert!(
-@@ -296,7 +301,7 @@ macro_rules! impl_reduction_float_arithmetic {
- red_bits - tree_bits
- } else {
- tree_bits - red_bits
-- } < 2,
-+ } < ulp_limit.try_into().unwrap(),
- "vector: {:?} | simd_reduction: {:?} | \
- tree_reduction: {} | scalar_reduction: {}",
- v,
-diff --git a/third_party/rust/packed_simd/src/api/reductions/min_max.rs b/third_party/rust/packed_simd/src/api/reductions/min_max.rs
-index c4d3aa10f1..c4c1400a8f 100644
---- a/third_party/rust/packed_simd/src/api/reductions/min_max.rs
-+++ b/third_party/rust/packed_simd/src/api/reductions/min_max.rs
-@@ -76,6 +76,8 @@ macro_rules! impl_reduction_min_max {
- }
- test_if! {$test_tt:
- paste::item! {
-+ // Comparisons use integer casts within mantissa^1 range.
-+ #[allow(clippy::float_cmp)]
- pub mod [<$id _reduction_min_max>] {
- use super::*;
- #[cfg_attr(not(target_arch = "wasm32"), test)]
-@@ -124,6 +126,8 @@ macro_rules! test_reduction_float_min_max {
- test_if!{
- $test_tt:
- paste::item! {
-+ // Comparisons use integer casts within mantissa^1 range.
-+ #[allow(clippy::float_cmp)]
- pub mod [<$id _reduction_min_max_nan>] {
- use super::*;
- #[cfg_attr(not(target_arch = "wasm32"), test)]
-diff --git a/third_party/rust/packed_simd/src/api/slice/from_slice.rs b/third_party/rust/packed_simd/src/api/slice/from_slice.rs
-index 109cd1f10b..25082d1e68 100644
---- a/third_party/rust/packed_simd/src/api/slice/from_slice.rs
-+++ b/third_party/rust/packed_simd/src/api/slice/from_slice.rs
-@@ -38,7 +38,7 @@ macro_rules! impl_slice_from_slice {
-
- /// Instantiates a new vector with the values of the `slice`.
- ///
-- /// # Precondition
-+ /// # Safety
- ///
- /// If `slice.len() < Self::lanes()` or `&slice[0]` is not aligned
- /// to an `align_of::<Self>()` boundary, the behavior is undefined.
-@@ -59,7 +59,7 @@ macro_rules! impl_slice_from_slice {
-
- /// Instantiates a new vector with the values of the `slice`.
- ///
-- /// # Precondition
-+ /// # Safety
- ///
- /// If `slice.len() < Self::lanes()` the behavior is undefined.
- #[inline]
-@@ -84,6 +84,8 @@ macro_rules! impl_slice_from_slice {
- test_if! {
- $test_tt:
- paste::item! {
-+ // Comparisons use integer casts within mantissa^1 range.
-+ #[allow(clippy::float_cmp)]
- pub mod [<$id _slice_from_slice>] {
- use super::*;
- use crate::iter::Iterator;
-diff --git a/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs b/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs
-index fcb288da70..b634d98b99 100644
---- a/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs
-+++ b/third_party/rust/packed_simd/src/api/slice/write_to_slice.rs
-@@ -39,7 +39,7 @@ macro_rules! impl_slice_write_to_slice {
-
- /// Writes the values of the vector to the `slice`.
- ///
-- /// # Precondition
-+ /// # Safety
- ///
- /// If `slice.len() < Self::lanes()` or `&slice[0]` is not
- /// aligned to an `align_of::<Self>()` boundary, the behavior is
-@@ -64,7 +64,7 @@ macro_rules! impl_slice_write_to_slice {
-
- /// Writes the values of the vector to the `slice`.
- ///
-- /// # Precondition
-+ /// # Safety
- ///
- /// If `slice.len() < Self::lanes()` the behavior is undefined.
- #[inline]
-@@ -86,6 +86,8 @@ macro_rules! impl_slice_write_to_slice {
- test_if! {
- $test_tt:
- paste::item! {
-+ // Comparisons use integer casts within mantissa^1 range.
-+ #[allow(clippy::float_cmp)]
- pub mod [<$id _slice_write_to_slice>] {
- use super::*;
- use crate::iter::Iterator;
-diff --git a/third_party/rust/packed_simd/src/codegen.rs b/third_party/rust/packed_simd/src/codegen.rs
-index b7ccd83860..9d1517e203 100644
---- a/third_party/rust/packed_simd/src/codegen.rs
-+++ b/third_party/rust/packed_simd/src/codegen.rs
-@@ -16,6 +16,8 @@ macro_rules! impl_simd_array {
- pub struct $tuple_id($(crate $elem_tys),*);
- //^^^^^^^ leaked through SimdArray
-
-+ impl crate::sealed::Seal for [$elem_ty; $elem_count] {}
-+
- impl crate::sealed::SimdArray for [$elem_ty; $elem_count] {
- type Tuple = $tuple_id;
- type T = $elem_ty;
-@@ -23,6 +25,7 @@ macro_rules! impl_simd_array {
- type NT = [u32; $elem_count];
- }
-
-+ impl crate::sealed::Seal for $tuple_id {}
- impl crate::sealed::Simd for $tuple_id {
- type Element = $elem_ty;
- const LANES: usize = $elem_count;
-diff --git a/third_party/rust/packed_simd/src/codegen/bit_manip.rs b/third_party/rust/packed_simd/src/codegen/bit_manip.rs
-index 947266f5bc..83c7d1987c 100644
---- a/third_party/rust/packed_simd/src/codegen/bit_manip.rs
-+++ b/third_party/rust/packed_simd/src/codegen/bit_manip.rs
-@@ -1,5 +1,5 @@
- //! LLVM bit manipulation intrinsics.
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- use crate::*;
-
-diff --git a/third_party/rust/packed_simd/src/codegen/llvm.rs b/third_party/rust/packed_simd/src/codegen/llvm.rs
-index 91c2b0758d..93c6ce6b77 100644
---- a/third_party/rust/packed_simd/src/codegen/llvm.rs
-+++ b/third_party/rust/packed_simd/src/codegen/llvm.rs
-@@ -10,31 +10,37 @@ extern "platform-intrinsic" {
- // FIXME: Passing this intrinsics an `idx` array with an index that is
- // out-of-bounds will produce a monomorphization-time error.
- // https://github.com/rust-lang-nursery/packed_simd/issues/21
-+ #[rustc_args_required_const(2)]
- pub fn simd_shuffle2<T, U>(x: T, y: T, idx: [u32; 2]) -> U
- where
- T: Simd,
- <T as Simd>::Element: Shuffle<[u32; 2], Output = U>;
-
-+ #[rustc_args_required_const(2)]
- pub fn simd_shuffle4<T, U>(x: T, y: T, idx: [u32; 4]) -> U
- where
- T: Simd,
- <T as Simd>::Element: Shuffle<[u32; 4], Output = U>;
-
-+ #[rustc_args_required_const(2)]
- pub fn simd_shuffle8<T, U>(x: T, y: T, idx: [u32; 8]) -> U
- where
- T: Simd,
- <T as Simd>::Element: Shuffle<[u32; 8], Output = U>;
-
-+ #[rustc_args_required_const(2)]
- pub fn simd_shuffle16<T, U>(x: T, y: T, idx: [u32; 16]) -> U
- where
- T: Simd,
- <T as Simd>::Element: Shuffle<[u32; 16], Output = U>;
-
-+ #[rustc_args_required_const(2)]
- pub fn simd_shuffle32<T, U>(x: T, y: T, idx: [u32; 32]) -> U
- where
- T: Simd,
- <T as Simd>::Element: Shuffle<[u32; 32], Output = U>;
-
-+ #[rustc_args_required_const(2)]
- pub fn simd_shuffle64<T, U>(x: T, y: T, idx: [u32; 64]) -> U
- where
- T: Simd,
-@@ -96,4 +102,6 @@ extern "platform-intrinsic" {
-
- crate fn simd_gather<T, P, M>(value: T, pointers: P, mask: M) -> T;
- crate fn simd_scatter<T, P, M>(value: T, pointers: P, mask: M);
-+
-+ crate fn simd_bitmask<T, U>(value: T) -> U;
- }
-diff --git a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs
-index 2ae4ed81c4..bcfb1a6e17 100644
---- a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs
-+++ b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86.rs
-@@ -19,13 +19,7 @@ mod avx2;
- /// x86 64-bit m8x8 implementation
- macro_rules! x86_m8x8_impl {
- ($id:ident) => {
-- cfg_if! {
-- if #[cfg(all(target_arch = "x86_64", target_feature = "sse"))] {
-- x86_m8x8_sse_impl!($id);
-- } else {
-- fallback_impl!($id);
-- }
-- }
-+ fallback_impl!($id);
- };
- }
-
-diff --git a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs
-index 7482f9430a..eb1ef7fac9 100644
---- a/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs
-+++ b/third_party/rust/packed_simd/src/codegen/reductions/mask/x86/sse.rs
-@@ -34,35 +34,3 @@ macro_rules! x86_m32x4_sse_impl {
- }
- };
- }
--
--macro_rules! x86_m8x8_sse_impl {
-- ($id:ident) => {
-- impl All for $id {
-- #[inline]
-- #[target_feature(enable = "sse")]
-- unsafe fn all(self) -> bool {
-- #[cfg(target_arch = "x86")]
-- use crate::arch::x86::_mm_movemask_pi8;
-- #[cfg(target_arch = "x86_64")]
-- use crate::arch::x86_64::_mm_movemask_pi8;
-- // _mm_movemask_pi8(a) creates an 8bit mask containing the most
-- // significant bit of each byte of `a`. If all bits are set,
-- // then all 8 lanes of the mask are true.
-- _mm_movemask_pi8(crate::mem::transmute(self))
-- == u8::max_value() as i32
-- }
-- }
-- impl Any for $id {
-- #[inline]
-- #[target_feature(enable = "sse")]
-- unsafe fn any(self) -> bool {
-- #[cfg(target_arch = "x86")]
-- use crate::arch::x86::_mm_movemask_pi8;
-- #[cfg(target_arch = "x86_64")]
-- use crate::arch::x86_64::_mm_movemask_pi8;
--
-- _mm_movemask_pi8(crate::mem::transmute(self)) != 0
-- }
-- }
-- };
--}
-diff --git a/third_party/rust/packed_simd/src/codegen/shuffle.rs b/third_party/rust/packed_simd/src/codegen/shuffle.rs
-index 35a9db9053..d92c9ee224 100644
---- a/third_party/rust/packed_simd/src/codegen/shuffle.rs
-+++ b/third_party/rust/packed_simd/src/codegen/shuffle.rs
-@@ -2,301 +2,149 @@
- //! lanes and vector element types.
-
- use crate::masks::*;
--use crate::sealed::Shuffle;
--
--impl Shuffle<[u32; 2]> for i8 {
-- type Output = crate::codegen::i8x2;
--}
--impl Shuffle<[u32; 4]> for i8 {
-- type Output = crate::codegen::i8x4;
--}
--impl Shuffle<[u32; 8]> for i8 {
-- type Output = crate::codegen::i8x8;
--}
--impl Shuffle<[u32; 16]> for i8 {
-- type Output = crate::codegen::i8x16;
--}
--impl Shuffle<[u32; 32]> for i8 {
-- type Output = crate::codegen::i8x32;
--}
--impl Shuffle<[u32; 64]> for i8 {
-- type Output = crate::codegen::i8x64;
--}
--
--impl Shuffle<[u32; 2]> for u8 {
-- type Output = crate::codegen::u8x2;
--}
--impl Shuffle<[u32; 4]> for u8 {
-- type Output = crate::codegen::u8x4;
--}
--impl Shuffle<[u32; 8]> for u8 {
-- type Output = crate::codegen::u8x8;
--}
--impl Shuffle<[u32; 16]> for u8 {
-- type Output = crate::codegen::u8x16;
--}
--impl Shuffle<[u32; 32]> for u8 {
-- type Output = crate::codegen::u8x32;
--}
--impl Shuffle<[u32; 64]> for u8 {
-- type Output = crate::codegen::u8x64;
--}
--
--impl Shuffle<[u32; 2]> for m8 {
-- type Output = crate::codegen::m8x2;
--}
--impl Shuffle<[u32; 4]> for m8 {
-- type Output = crate::codegen::m8x4;
--}
--impl Shuffle<[u32; 8]> for m8 {
-- type Output = crate::codegen::m8x8;
--}
--impl Shuffle<[u32; 16]> for m8 {
-- type Output = crate::codegen::m8x16;
--}
--impl Shuffle<[u32; 32]> for m8 {
-- type Output = crate::codegen::m8x32;
--}
--impl Shuffle<[u32; 64]> for m8 {
-- type Output = crate::codegen::m8x64;
--}
--
--impl Shuffle<[u32; 2]> for i16 {
-- type Output = crate::codegen::i16x2;
--}
--impl Shuffle<[u32; 4]> for i16 {
-- type Output = crate::codegen::i16x4;
--}
--impl Shuffle<[u32; 8]> for i16 {
-- type Output = crate::codegen::i16x8;
--}
--impl Shuffle<[u32; 16]> for i16 {
-- type Output = crate::codegen::i16x16;
--}
--impl Shuffle<[u32; 32]> for i16 {
-- type Output = crate::codegen::i16x32;
--}
--
--impl Shuffle<[u32; 2]> for u16 {
-- type Output = crate::codegen::u16x2;
--}
--impl Shuffle<[u32; 4]> for u16 {
-- type Output = crate::codegen::u16x4;
--}
--impl Shuffle<[u32; 8]> for u16 {
-- type Output = crate::codegen::u16x8;
--}
--impl Shuffle<[u32; 16]> for u16 {
-- type Output = crate::codegen::u16x16;
--}
--impl Shuffle<[u32; 32]> for u16 {
-- type Output = crate::codegen::u16x32;
--}
--
--impl Shuffle<[u32; 2]> for m16 {
-- type Output = crate::codegen::m16x2;
--}
--impl Shuffle<[u32; 4]> for m16 {
-- type Output = crate::codegen::m16x4;
--}
--impl Shuffle<[u32; 8]> for m16 {
-- type Output = crate::codegen::m16x8;
--}
--impl Shuffle<[u32; 16]> for m16 {
-- type Output = crate::codegen::m16x16;
--}
--impl Shuffle<[u32; 32]> for m16 {
-- type Output = crate::codegen::m16x32;
--}
--
--impl Shuffle<[u32; 2]> for i32 {
-- type Output = crate::codegen::i32x2;
--}
--impl Shuffle<[u32; 4]> for i32 {
-- type Output = crate::codegen::i32x4;
--}
--impl Shuffle<[u32; 8]> for i32 {
-- type Output = crate::codegen::i32x8;
--}
--impl Shuffle<[u32; 16]> for i32 {
-- type Output = crate::codegen::i32x16;
--}
--
--impl Shuffle<[u32; 2]> for u32 {
-- type Output = crate::codegen::u32x2;
--}
--impl Shuffle<[u32; 4]> for u32 {
-- type Output = crate::codegen::u32x4;
--}
--impl Shuffle<[u32; 8]> for u32 {
-- type Output = crate::codegen::u32x8;
--}
--impl Shuffle<[u32; 16]> for u32 {
-- type Output = crate::codegen::u32x16;
--}
--
--impl Shuffle<[u32; 2]> for f32 {
-- type Output = crate::codegen::f32x2;
--}
--impl Shuffle<[u32; 4]> for f32 {
-- type Output = crate::codegen::f32x4;
--}
--impl Shuffle<[u32; 8]> for f32 {
-- type Output = crate::codegen::f32x8;
--}
--impl Shuffle<[u32; 16]> for f32 {
-- type Output = crate::codegen::f32x16;
--}
--
--impl Shuffle<[u32; 2]> for m32 {
-- type Output = crate::codegen::m32x2;
--}
--impl Shuffle<[u32; 4]> for m32 {
-- type Output = crate::codegen::m32x4;
--}
--impl Shuffle<[u32; 8]> for m32 {
-- type Output = crate::codegen::m32x8;
--}
--impl Shuffle<[u32; 16]> for m32 {
-- type Output = crate::codegen::m32x16;
--}
-+use crate::sealed::{Shuffle, Seal};
-+
-+macro_rules! impl_shuffle {
-+ ($array:ty, $base:ty, $out:ty) => {
-+ impl Seal<$array> for $base {}
-+ impl Shuffle<$array> for $base {
-+ type Output = $out;
-+ }
-+ }
-+}
-+
-+impl_shuffle! { [u32; 2], i8, crate::codegen::i8x2 }
-+impl_shuffle! { [u32; 4], i8, crate::codegen::i8x4 }
-+impl_shuffle! { [u32; 8], i8, crate::codegen::i8x8 }
-+impl_shuffle! { [u32; 16], i8, crate::codegen::i8x16 }
-+impl_shuffle! { [u32; 32], i8, crate::codegen::i8x32 }
-+impl_shuffle! { [u32; 64], i8, crate::codegen::i8x64 }
-+
-+impl_shuffle! { [u32; 2], u8, crate::codegen::u8x2 }
-+impl_shuffle! { [u32; 4], u8, crate::codegen::u8x4 }
-+impl_shuffle! { [u32; 8], u8, crate::codegen::u8x8 }
-+impl_shuffle! { [u32; 16], u8, crate::codegen::u8x16 }
-+impl_shuffle! { [u32; 32], u8, crate::codegen::u8x32 }
-+impl_shuffle! { [u32; 64], u8, crate::codegen::u8x64 }
-+
-+impl_shuffle! { [u32; 2], m8, crate::codegen::m8x2 }
-+impl_shuffle! { [u32; 4], m8, crate::codegen::m8x4 }
-+impl_shuffle! { [u32; 8], m8, crate::codegen::m8x8 }
-+impl_shuffle! { [u32; 16], m8, crate::codegen::m8x16 }
-+impl_shuffle! { [u32; 32], m8, crate::codegen::m8x32 }
-+impl_shuffle! { [u32; 64], m8, crate::codegen::m8x64 }
-+
-+impl_shuffle! { [u32; 2], i16, crate::codegen::i16x2 }
-+impl_shuffle! { [u32; 4], i16, crate::codegen::i16x4 }
-+impl_shuffle! { [u32; 8], i16, crate::codegen::i16x8 }
-+impl_shuffle! { [u32; 16], i16, crate::codegen::i16x16 }
-+impl_shuffle! { [u32; 32], i16, crate::codegen::i16x32 }
-+
-+impl_shuffle! { [u32; 2], u16, crate::codegen::u16x2 }
-+impl_shuffle! { [u32; 4], u16, crate::codegen::u16x4 }
-+impl_shuffle! { [u32; 8], u16, crate::codegen::u16x8 }
-+impl_shuffle! { [u32; 16], u16, crate::codegen::u16x16 }
-+impl_shuffle! { [u32; 32], u16, crate::codegen::u16x32 }
-+
-+impl_shuffle! { [u32; 2], m16, crate::codegen::m16x2 }
-+impl_shuffle! { [u32; 4], m16, crate::codegen::m16x4 }
-+impl_shuffle! { [u32; 8], m16, crate::codegen::m16x8 }
-+impl_shuffle! { [u32; 16], m16, crate::codegen::m16x16 }
-+
-+impl_shuffle! { [u32; 2], i32, crate::codegen::i32x2 }
-+impl_shuffle! { [u32; 4], i32, crate::codegen::i32x4 }
-+impl_shuffle! { [u32; 8], i32, crate::codegen::i32x8 }
-+impl_shuffle! { [u32; 16], i32, crate::codegen::i32x16 }
-+
-+impl_shuffle! { [u32; 2], u32, crate::codegen::u32x2 }
-+impl_shuffle! { [u32; 4], u32, crate::codegen::u32x4 }
-+impl_shuffle! { [u32; 8], u32, crate::codegen::u32x8 }
-+impl_shuffle! { [u32; 16], u32, crate::codegen::u32x16 }
-+
-+impl_shuffle! { [u32; 2], f32, crate::codegen::f32x2 }
-+impl_shuffle! { [u32; 4], f32, crate::codegen::f32x4 }
-+impl_shuffle! { [u32; 8], f32, crate::codegen::f32x8 }
-+impl_shuffle! { [u32; 16], f32, crate::codegen::f32x16 }
-+
-+impl_shuffle! { [u32; 2], m32, crate::codegen::m32x2 }
-+impl_shuffle! { [u32; 4], m32, crate::codegen::m32x4 }
-+impl_shuffle! { [u32; 8], m32, crate::codegen::m32x8 }
-+impl_shuffle! { [u32; 16], m32, crate::codegen::m32x16 }
-
- /* FIXME: 64-bit single element vector
--impl Shuffle<[u32; 1]> for i64 {
-- type Output = crate::codegen::i64x1;
--}
-+impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 }
- */
--impl Shuffle<[u32; 2]> for i64 {
-- type Output = crate::codegen::i64x2;
--}
--impl Shuffle<[u32; 4]> for i64 {
-- type Output = crate::codegen::i64x4;
--}
--impl Shuffle<[u32; 8]> for i64 {
-- type Output = crate::codegen::i64x8;
--}
-+impl_shuffle! { [u32; 2], i64, crate::codegen::i64x2 }
-+impl_shuffle! { [u32; 4], i64, crate::codegen::i64x4 }
-+impl_shuffle! { [u32; 8], i64, crate::codegen::i64x8 }
-
- /* FIXME: 64-bit single element vector
--impl Shuffle<[u32; 1]> for u64 {
-- type Output = crate::codegen::u64x1;
--}
-+impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 }
- */
--impl Shuffle<[u32; 2]> for u64 {
-- type Output = crate::codegen::u64x2;
--}
--impl Shuffle<[u32; 4]> for u64 {
-- type Output = crate::codegen::u64x4;
--}
--impl Shuffle<[u32; 8]> for u64 {
-- type Output = crate::codegen::u64x8;
--}
-+impl_shuffle! { [u32; 2], u64, crate::codegen::u64x2 }
-+impl_shuffle! { [u32; 4], u64, crate::codegen::u64x4 }
-+impl_shuffle! { [u32; 8], u64, crate::codegen::u64x8 }
-
- /* FIXME: 64-bit single element vector
--impl Shuffle<[u32; 1]> for f64 {
-- type Output = crate::codegen::f64x1;
--}
-+impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 }
- */
--impl Shuffle<[u32; 2]> for f64 {
-- type Output = crate::codegen::f64x2;
--}
--impl Shuffle<[u32; 4]> for f64 {
-- type Output = crate::codegen::f64x4;
--}
--impl Shuffle<[u32; 8]> for f64 {
-- type Output = crate::codegen::f64x8;
--}
-+impl_shuffle! { [u32; 2], f64, crate::codegen::f64x2 }
-+impl_shuffle! { [u32; 4], f64, crate::codegen::f64x4 }
-+impl_shuffle! { [u32; 8], f64, crate::codegen::f64x8 }
-
- /* FIXME: 64-bit single element vector
--impl Shuffle<[u32; 1]> for m64 {
-- type Output = crate::codegen::m64x1;
--}
-+impl_shuffle! { [u32; 1], i64, crate::codegen::i64x1 }
- */
--impl Shuffle<[u32; 2]> for m64 {
-- type Output = crate::codegen::m64x2;
--}
--impl Shuffle<[u32; 4]> for m64 {
-- type Output = crate::codegen::m64x4;
--}
--impl Shuffle<[u32; 8]> for m64 {
-- type Output = crate::codegen::m64x8;
--}
-+impl_shuffle! { [u32; 2], m64, crate::codegen::m64x2 }
-+impl_shuffle! { [u32; 4], m64, crate::codegen::m64x4 }
-+impl_shuffle! { [u32; 8], m64, crate::codegen::m64x8 }
-
--impl Shuffle<[u32; 2]> for isize {
-- type Output = crate::codegen::isizex2;
--}
--impl Shuffle<[u32; 4]> for isize {
-- type Output = crate::codegen::isizex4;
--}
--impl Shuffle<[u32; 8]> for isize {
-- type Output = crate::codegen::isizex8;
--}
-+impl_shuffle! { [u32; 2], isize, crate::codegen::isizex2 }
-+impl_shuffle! { [u32; 4], isize, crate::codegen::isizex4 }
-+impl_shuffle! { [u32; 8], isize, crate::codegen::isizex8 }
-
--impl Shuffle<[u32; 2]> for usize {
-- type Output = crate::codegen::usizex2;
--}
--impl Shuffle<[u32; 4]> for usize {
-- type Output = crate::codegen::usizex4;
--}
--impl Shuffle<[u32; 8]> for usize {
-- type Output = crate::codegen::usizex8;
--}
-+impl_shuffle! { [u32; 2], usize, crate::codegen::usizex2 }
-+impl_shuffle! { [u32; 4], usize, crate::codegen::usizex4 }
-+impl_shuffle! { [u32; 8], usize, crate::codegen::usizex8 }
-
-+impl_shuffle! { [u32; 2], msize, crate::codegen::msizex2 }
-+impl_shuffle! { [u32; 4], msize, crate::codegen::msizex4 }
-+impl_shuffle! { [u32; 8], msize, crate::codegen::msizex8 }
-+
-+impl<T> Seal<[u32; 2]> for *const T {}
- impl<T> Shuffle<[u32; 2]> for *const T {
- type Output = crate::codegen::cptrx2<T>;
- }
-+impl<T> Seal<[u32; 4]> for *const T {}
- impl<T> Shuffle<[u32; 4]> for *const T {
- type Output = crate::codegen::cptrx4<T>;
- }
-+impl<T> Seal<[u32; 8]> for *const T {}
- impl<T> Shuffle<[u32; 8]> for *const T {
- type Output = crate::codegen::cptrx8<T>;
- }
-
-+impl<T> Seal<[u32; 2]> for *mut T {}
- impl<T> Shuffle<[u32; 2]> for *mut T {
- type Output = crate::codegen::mptrx2<T>;
- }
-+impl<T> Seal<[u32; 4]> for *mut T {}
- impl<T> Shuffle<[u32; 4]> for *mut T {
- type Output = crate::codegen::mptrx4<T>;
- }
-+impl<T> Seal<[u32; 8]> for *mut T {}
- impl<T> Shuffle<[u32; 8]> for *mut T {
- type Output = crate::codegen::mptrx8<T>;
- }
-
--impl Shuffle<[u32; 2]> for msize {
-- type Output = crate::codegen::msizex2;
--}
--impl Shuffle<[u32; 4]> for msize {
-- type Output = crate::codegen::msizex4;
--}
--impl Shuffle<[u32; 8]> for msize {
-- type Output = crate::codegen::msizex8;
--}
-+impl_shuffle! { [u32; 1], i128, crate::codegen::i128x1 }
-+impl_shuffle! { [u32; 2], i128, crate::codegen::i128x2 }
-+impl_shuffle! { [u32; 4], i128, crate::codegen::i128x4 }
-
--impl Shuffle<[u32; 1]> for i128 {
-- type Output = crate::codegen::i128x1;
--}
--impl Shuffle<[u32; 2]> for i128 {
-- type Output = crate::codegen::i128x2;
--}
--impl Shuffle<[u32; 4]> for i128 {
-- type Output = crate::codegen::i128x4;
--}
-+impl_shuffle! { [u32; 1], u128, crate::codegen::u128x1 }
-+impl_shuffle! { [u32; 2], u128, crate::codegen::u128x2 }
-+impl_shuffle! { [u32; 4], u128, crate::codegen::u128x4 }
-
--impl Shuffle<[u32; 1]> for u128 {
-- type Output = crate::codegen::u128x1;
--}
--impl Shuffle<[u32; 2]> for u128 {
-- type Output = crate::codegen::u128x2;
--}
--impl Shuffle<[u32; 4]> for u128 {
-- type Output = crate::codegen::u128x4;
--}
--
--impl Shuffle<[u32; 1]> for m128 {
-- type Output = crate::codegen::m128x1;
--}
--impl Shuffle<[u32; 2]> for m128 {
-- type Output = crate::codegen::m128x2;
--}
--impl Shuffle<[u32; 4]> for m128 {
-- type Output = crate::codegen::m128x4;
--}
-+impl_shuffle! { [u32; 1], m128, crate::codegen::m128x1 }
-+impl_shuffle! { [u32; 2], m128, crate::codegen::m128x2 }
-+impl_shuffle! { [u32; 4], m128, crate::codegen::m128x4 }
-diff --git a/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs b/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs
-index 1e9f581637..a5403a06bb 100644
---- a/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs
-+++ b/third_party/rust/packed_simd/src/codegen/shuffle1_dyn.rs
-@@ -28,31 +28,10 @@ macro_rules! impl_fallback {
- macro_rules! impl_shuffle1_dyn {
- (u8x8) => {
- cfg_if! {
-- if #[cfg(all(any(target_arch = "x86", target_arch = "x86_64"),
-- target_feature = "ssse3"))] {
-- impl Shuffle1Dyn for u8x8 {
-- type Indices = Self;
-- #[inline]
-- fn shuffle1_dyn(self, indices: Self::Indices) -> Self {
-- #[cfg(target_arch = "x86")]
-- use crate::arch::x86::_mm_shuffle_pi8;
-- #[cfg(target_arch = "x86_64")]
-- use crate::arch::x86_64::_mm_shuffle_pi8;
--
-- unsafe {
-- crate::mem::transmute(
-- _mm_shuffle_pi8(
-- crate::mem::transmute(self.0),
-- crate::mem::transmute(indices.0)
-- )
-- )
-- }
-- }
-- }
-- } else if #[cfg(all(
-+ if #[cfg(all(
- any(
-- all(target_aarch = "aarch64", target_feature = "neon"),
-- all(target_aarch = "arm", target_feature = "v7",
-+ all(target_arch = "aarch64", target_feature = "neon"),
-+ all(target_arch = "doesnotexist", target_feature = "v7",
- target_feature = "neon")
- ),
- any(feature = "core_arch", libcore_neon)
-@@ -62,9 +41,9 @@ macro_rules! impl_shuffle1_dyn {
- type Indices = Self;
- #[inline]
- fn shuffle1_dyn(self, indices: Self::Indices) -> Self {
-- #[cfg(targt_arch = "aarch64")]
-+ #[cfg(target_arch = "aarch64")]
- use crate::arch::aarch64::vtbl1_u8;
-- #[cfg(targt_arch = "arm")]
-+ #[cfg(target_arch = "doesnotexist")]
- use crate::arch::arm::vtbl1_u8;
-
- // This is safe because the binary is compiled with
-@@ -106,7 +85,7 @@ macro_rules! impl_shuffle1_dyn {
- }
- }
- }
-- } else if #[cfg(all(target_aarch = "aarch64", target_feature = "neon",
-+ } else if #[cfg(all(target_arch = "aarch64", target_feature = "neon",
- any(feature = "core_arch", libcore_neon)))] {
- impl Shuffle1Dyn for u8x16 {
- type Indices = Self;
-@@ -125,7 +104,7 @@ macro_rules! impl_shuffle1_dyn {
- }
- }
- }
-- } else if #[cfg(all(target_aarch = "arm", target_feature = "v7",
-+ } else if #[cfg(all(target_arch = "doesnotexist", target_feature = "v7",
- target_feature = "neon",
- any(feature = "core_arch", libcore_neon)))] {
- impl Shuffle1Dyn for u8x16 {
-diff --git a/third_party/rust/packed_simd/src/codegen/vPtr.rs b/third_party/rust/packed_simd/src/codegen/vPtr.rs
-index 1f2bc7714d..cf47655381 100644
---- a/third_party/rust/packed_simd/src/codegen/vPtr.rs
-+++ b/third_party/rust/packed_simd/src/codegen/vPtr.rs
-@@ -8,6 +8,7 @@ macro_rules! impl_simd_ptr {
- pub struct $tuple_id<$ty>($(crate $tys),*);
- //^^^^^^^ leaked through SimdArray
-
-+ impl<$ty> crate::sealed::Seal for [$ptr_ty; $elem_count] {}
- impl<$ty> crate::sealed::SimdArray for [$ptr_ty; $elem_count] {
- type Tuple = $tuple_id<$ptr_ty>;
- type T = $ptr_ty;
-@@ -15,6 +16,7 @@ macro_rules! impl_simd_ptr {
- type NT = [u32; $elem_count];
- }
-
-+ impl<$ty> crate::sealed::Seal for $tuple_id<$ptr_ty> {}
- impl<$ty> crate::sealed::Simd for $tuple_id<$ptr_ty> {
- type Element = $ptr_ty;
- const LANES: usize = $elem_count;
-diff --git a/third_party/rust/packed_simd/src/lib.rs b/third_party/rust/packed_simd/src/lib.rs
-index d73645e72f..b0b56d4d74 100644
---- a/third_party/rust/packed_simd/src/lib.rs
-+++ b/third_party/rust/packed_simd/src/lib.rs
-@@ -201,6 +201,7 @@
-
- #![feature(
- repr_simd,
-+ rustc_attrs,
- const_fn,
- platform_intrinsics,
- stdsimd,
-@@ -209,22 +210,26 @@
- link_llvm_intrinsics,
- core_intrinsics,
- stmt_expr_attributes,
-- align_offset,
-- mmx_target_feature,
- crate_visibility_modifier,
- custom_inner_attributes
- )]
- #![allow(non_camel_case_types, non_snake_case,
-- clippy::cast_possible_truncation,
-- clippy::cast_lossless,
-- clippy::cast_possible_wrap,
-- clippy::cast_precision_loss,
-- // This lint is currently broken for generic code
-- // See https://github.com/rust-lang/rust-clippy/issues/3410
-- clippy::use_self
-+ // FIXME: these types are unsound in C FFI already
-+ // See https://github.com/rust-lang/rust/issues/53346
-+ improper_ctypes_definitions,
-+ clippy::cast_possible_truncation,
-+ clippy::cast_lossless,
-+ clippy::cast_possible_wrap,
-+ clippy::cast_precision_loss,
-+ // TODO: manually add the `#[must_use]` attribute where appropriate
-+ clippy::must_use_candidate,
-+ // This lint is currently broken for generic code
-+ // See https://github.com/rust-lang/rust-clippy/issues/3410
-+ clippy::use_self,
-+ clippy::wrong_self_convention,
- )]
- #![cfg_attr(test, feature(hashmap_internals))]
--#![deny(warnings, rust_2018_idioms, clippy::missing_inline_in_public_items)]
-+#![deny(rust_2018_idioms, clippy::missing_inline_in_public_items)]
- #![no_std]
-
- use cfg_if::cfg_if;
-@@ -256,6 +261,8 @@ mod api;
- mod codegen;
- mod sealed;
-
-+pub use crate::sealed::{Simd as SimdVector, Shuffle, SimdArray, Mask};
-+
- /// Packed SIMD vector type.
- ///
- /// # Examples
-@@ -276,6 +283,8 @@ pub struct Simd<A: sealed::SimdArray>(
- #[doc(hidden)] pub <A as sealed::SimdArray>::Tuple,
- );
-
-+impl<A: sealed::SimdArray> sealed::Seal for Simd<A> {}
-+
- /// Wrapper over `T` implementing a lexicoraphical order via the `PartialOrd`
- /// and/or `Ord` traits.
- #[repr(transparent)]
-diff --git a/third_party/rust/packed_simd/src/masks.rs b/third_party/rust/packed_simd/src/masks.rs
-index f83c4da957..aeb36d2328 100644
---- a/third_party/rust/packed_simd/src/masks.rs
-+++ b/third_party/rust/packed_simd/src/masks.rs
-@@ -6,7 +6,9 @@ macro_rules! impl_mask_ty {
- #[derive(Copy, Clone)]
- pub struct $id($elem_ty);
-
-+ impl crate::sealed::Seal for $id {}
- impl crate::sealed::Mask for $id {
-+ #[inline]
- fn test(&self) -> bool {
- $id::test(self)
- }
-diff --git a/third_party/rust/packed_simd/src/sealed.rs b/third_party/rust/packed_simd/src/sealed.rs
-index 832acd3f1d..0ec20300fd 100644
---- a/third_party/rust/packed_simd/src/sealed.rs
-+++ b/third_party/rust/packed_simd/src/sealed.rs
-@@ -1,8 +1,11 @@
- //! Sealed traits
-
-+/// A sealed trait, this is logically private to the crate
-+/// and will prevent implementations from outside the crate
-+pub trait Seal<T = ()> {}
-+
- /// Trait implemented by arrays that can be SIMD types.
--#[doc(hidden)]
--pub trait SimdArray {
-+pub trait SimdArray: Seal {
- /// The type of the #[repr(simd)] type.
- type Tuple: Copy + Clone;
- /// The element type of the vector.
-@@ -16,7 +19,7 @@ pub trait SimdArray {
- /// This traits is used to constraint the arguments
- /// and result type of the portable shuffles.
- #[doc(hidden)]
--pub trait Shuffle<Lanes> {
-+pub trait Shuffle<Lanes>: Seal<Lanes> {
- // Lanes is a `[u32; N]` where `N` is the number of vector lanes
-
- /// The result type of the shuffle.
-@@ -24,8 +27,7 @@ pub trait Shuffle<Lanes> {
- }
-
- /// This trait is implemented by all SIMD vector types.
--#[doc(hidden)]
--pub trait Simd {
-+pub trait Simd: Seal {
- /// Element type of the SIMD vector
- type Element;
- /// The number of elements in the SIMD vector.
-@@ -35,7 +37,6 @@ pub trait Simd {
- }
-
- /// This trait is implemented by all mask types
--#[doc(hidden)]
--pub trait Mask {
-+pub trait Mask: Seal {
- fn test(&self) -> bool;
- }
-diff --git a/third_party/rust/packed_simd/src/testing/utils.rs b/third_party/rust/packed_simd/src/testing/utils.rs
-index 7b8f21ac1c..21f27aae54 100644
---- a/third_party/rust/packed_simd/src/testing/utils.rs
-+++ b/third_party/rust/packed_simd/src/testing/utils.rs
-@@ -1,6 +1,8 @@
- //! Testing utilities
-
- #![allow(dead_code)]
-+// FIXME: Or don't. But it's true this is a problematic comparison.
-+#![allow(clippy::neg_cmp_op_on_partial_ord)]
-
- use crate::{cmp::PartialOrd, fmt::Debug, LexicographicallyOrdered};
-
-@@ -19,14 +21,19 @@ pub fn test_lt<T>(
- assert!(a <= b, "{:?}, {:?}", a, b);
- assert!(b >= a, "{:?}, {:?}", a, b);
-
-- // Irreflexivity
-- assert!(!(a < a), "{:?}, {:?}", a, b);
-- assert!(!(b < b), "{:?}, {:?}", a, b);
-- assert!(!(a > a), "{:?}, {:?}", a, b);
-- assert!(!(b > b), "{:?}, {:?}", a, b);
-+ // The elegance of the mathematical expression of irreflexivity is more
-+ // than clippy can handle.
-+ #[allow(clippy::eq_op)]
-+ {
-+ // Irreflexivity
-+ assert!(!(a < a), "{:?}, {:?}", a, b);
-+ assert!(!(b < b), "{:?}, {:?}", a, b);
-+ assert!(!(a > a), "{:?}, {:?}", a, b);
-+ assert!(!(b > b), "{:?}, {:?}", a, b);
-
-- assert!(a <= a, "{:?}, {:?}", a, b);
-- assert!(b <= b, "{:?}, {:?}", a, b);
-+ assert!(a <= a, "{:?}, {:?}", a, b);
-+ assert!(b <= b, "{:?}, {:?}", a, b);
-+ }
- }
-
- /// Tests PartialOrd for `a` and `b` where `a <= b` is true.
-@@ -38,8 +45,8 @@ pub fn test_le<T>(
- assert!(a <= b, "{:?}, {:?}", a, b);
- assert!(b >= a, "{:?}, {:?}", a, b);
-
-- assert!(a == b || a < b, "{:?}, {:?}", a, b);
-- assert!(a == b || b > a, "{:?}, {:?}", a, b);
-+ assert!(a <= b, "{:?}, {:?}", a, b);
-+ assert!(b >= a, "{:?}, {:?}", a, b);
-
- if a == b {
- assert!(!(a < b), "{:?}, {:?}", a, b);
-diff --git a/third_party/rust/packed_simd/src/v128.rs b/third_party/rust/packed_simd/src/v128.rs
-index 1d0282dc42..7949f6619a 100644
---- a/third_party/rust/packed_simd/src/v128.rs
-+++ b/third_party/rust/packed_simd/src/v128.rs
-@@ -1,42 +1,42 @@
- //! 128-bit wide vector types
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- use crate::*;
-
--impl_i!([i8; 16]: i8x16, m8x16 | i8 | test_v128 |
-+impl_i!([i8; 16]: i8x16, m8x16 | i8, u16 | test_v128 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
- From: |
- /// A 128-bit vector with 16 `i8` lanes.
- );
--impl_u!([u8; 16]: u8x16, m8x16 | u8 | test_v128 |
-+impl_u!([u8; 16]: u8x16, m8x16 | u8, u16 | test_v128 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
- From: |
- /// A 128-bit vector with 16 `u8` lanes.
- );
--impl_m!([m8; 16]: m8x16 | i8 | test_v128 |
-+impl_m!([m8; 16]: m8x16 | i8, u16 | test_v128 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
- From: m16x16 |
- /// A 128-bit vector mask with 16 `m8` lanes.
- );
-
--impl_i!([i16; 8]: i16x8, m16x8 | i16 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
-+impl_i!([i16; 8]: i16x8, m16x8 | i16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
- From: i8x8, u8x8 |
- /// A 128-bit vector with 8 `i16` lanes.
- );
--impl_u!([u16; 8]: u16x8, m16x8 | u16| test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
-+impl_u!([u16; 8]: u16x8, m16x8 | u16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
- From: u8x8 |
- /// A 128-bit vector with 8 `u16` lanes.
- );
--impl_m!([m16; 8]: m16x8 | i16 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
-+impl_m!([m16; 8]: m16x8 | i16, u8 | test_v128 | x0, x1, x2, x3, x4, x5, x6, x7 |
- From: m8x8, m32x8 |
- /// A 128-bit vector mask with 8 `m16` lanes.
- );
-
--impl_i!([i32; 4]: i32x4, m32x4 | i32 | test_v128 | x0, x1, x2, x3 |
-+impl_i!([i32; 4]: i32x4, m32x4 | i32, u8 | test_v128 | x0, x1, x2, x3 |
- From: i8x4, u8x4, i16x4, u16x4 |
- /// A 128-bit vector with 4 `i32` lanes.
- );
--impl_u!([u32; 4]: u32x4, m32x4 | u32| test_v128 | x0, x1, x2, x3 |
-+impl_u!([u32; 4]: u32x4, m32x4 | u32, u8 | test_v128 | x0, x1, x2, x3 |
- From: u8x4, u16x4 |
- /// A 128-bit vector with 4 `u32` lanes.
- );
-@@ -44,16 +44,16 @@ impl_f!([f32; 4]: f32x4, m32x4 | f32 | test_v128 | x0, x1, x2, x3 |
- From: i8x4, u8x4, i16x4, u16x4 |
- /// A 128-bit vector with 4 `f32` lanes.
- );
--impl_m!([m32; 4]: m32x4 | i32 | test_v128 | x0, x1, x2, x3 |
-+impl_m!([m32; 4]: m32x4 | i32, u8 | test_v128 | x0, x1, x2, x3 |
- From: m8x4, m16x4, m64x4 |
- /// A 128-bit vector mask with 4 `m32` lanes.
- );
-
--impl_i!([i64; 2]: i64x2, m64x2 | i64 | test_v128 | x0, x1 |
-+impl_i!([i64; 2]: i64x2, m64x2 | i64, u8 | test_v128 | x0, x1 |
- From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2 |
- /// A 128-bit vector with 2 `i64` lanes.
- );
--impl_u!([u64; 2]: u64x2, m64x2 | u64 | test_v128 | x0, x1 |
-+impl_u!([u64; 2]: u64x2, m64x2 | u64, u8 | test_v128 | x0, x1 |
- From: u8x2, u16x2, u32x2 |
- /// A 128-bit vector with 2 `u64` lanes.
- );
-@@ -61,20 +61,20 @@ impl_f!([f64; 2]: f64x2, m64x2 | f64 | test_v128 | x0, x1 |
- From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2, f32x2 |
- /// A 128-bit vector with 2 `f64` lanes.
- );
--impl_m!([m64; 2]: m64x2 | i64 | test_v128 | x0, x1 |
-+impl_m!([m64; 2]: m64x2 | i64, u8 | test_v128 | x0, x1 |
- From: m8x2, m16x2, m32x2, m128x2 |
- /// A 128-bit vector mask with 2 `m64` lanes.
- );
-
--impl_i!([i128; 1]: i128x1, m128x1 | i128 | test_v128 | x0 |
-+impl_i!([i128; 1]: i128x1, m128x1 | i128, u8 | test_v128 | x0 |
- From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1, i64x1, u64x1 */ | // FIXME: unary small vector types
- /// A 128-bit vector with 1 `i128` lane.
- );
--impl_u!([u128; 1]: u128x1, m128x1 | u128 | test_v128 | x0 |
-+impl_u!([u128; 1]: u128x1, m128x1 | u128, u8 | test_v128 | x0 |
- From: /*u8x1, u16x1, u32x1, u64x1 */ | // FIXME: unary small vector types
- /// A 128-bit vector with 1 `u128` lane.
- );
--impl_m!([m128; 1]: m128x1 | i128 | test_v128 | x0 |
-+impl_m!([m128; 1]: m128x1 | i128, u8 | test_v128 | x0 |
- From: /*m8x1, m16x1, m32x1, m64x1 */ | // FIXME: unary small vector types
- /// A 128-bit vector mask with 1 `m128` lane.
- );
-diff --git a/third_party/rust/packed_simd/src/v16.rs b/third_party/rust/packed_simd/src/v16.rs
-index 67a3832d25..4ca5afb2a7 100644
---- a/third_party/rust/packed_simd/src/v16.rs
-+++ b/third_party/rust/packed_simd/src/v16.rs
-@@ -2,15 +2,15 @@
-
- use crate::*;
-
--impl_i!([i8; 2]: i8x2, m8x2 | i8 | test_v16 | x0, x1 |
-+impl_i!([i8; 2]: i8x2, m8x2 | i8, u8 | test_v16 | x0, x1 |
- From: |
- /// A 16-bit vector with 2 `i8` lanes.
- );
--impl_u!([u8; 2]: u8x2, m8x2 | u8 | test_v16 | x0, x1 |
-+impl_u!([u8; 2]: u8x2, m8x2 | u8, u8 | test_v16 | x0, x1 |
- From: |
- /// A 16-bit vector with 2 `u8` lanes.
- );
--impl_m!([m8; 2]: m8x2 | i8 | test_v16 | x0, x1 |
-+impl_m!([m8; 2]: m8x2 | i8, u8 | test_v16 | x0, x1 |
- From: m16x2, m32x2, m64x2, m128x2 |
- /// A 16-bit vector mask with 2 `m8` lanes.
- );
-diff --git a/third_party/rust/packed_simd/src/v256.rs b/third_party/rust/packed_simd/src/v256.rs
-index 6b59336f68..f0c3bc2813 100644
---- a/third_party/rust/packed_simd/src/v256.rs
-+++ b/third_party/rust/packed_simd/src/v256.rs
-@@ -1,48 +1,48 @@
- //! 256-bit wide vector types
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- use crate::*;
-
--impl_i!([i8; 32]: i8x32, m8x32 | i8 | test_v256 |
-+impl_i!([i8; 32]: i8x32, m8x32 | i8, u32 | test_v256 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
- x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
- From: |
- /// A 256-bit vector with 32 `i8` lanes.
- );
--impl_u!([u8; 32]: u8x32, m8x32 | u8 | test_v256 |
-+impl_u!([u8; 32]: u8x32, m8x32 | u8, u32 | test_v256 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
- x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
- From: |
- /// A 256-bit vector with 32 `u8` lanes.
- );
--impl_m!([m8; 32]: m8x32 | i8 | test_v256 |
-+impl_m!([m8; 32]: m8x32 | i8, u32 | test_v256 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
- x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
- From: |
- /// A 256-bit vector mask with 32 `m8` lanes.
- );
-
--impl_i!([i16; 16]: i16x16, m16x16 | i16 | test_v256 |
-+impl_i!([i16; 16]: i16x16, m16x16 | i16, u16 | test_v256 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
- From: i8x16, u8x16 |
- /// A 256-bit vector with 16 `i16` lanes.
- );
--impl_u!([u16; 16]: u16x16, m16x16 | u16 | test_v256 |
-+impl_u!([u16; 16]: u16x16, m16x16 | u16, u16 | test_v256 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
- From: u8x16 |
- /// A 256-bit vector with 16 `u16` lanes.
- );
--impl_m!([m16; 16]: m16x16 | i16 | test_v256 |
-+impl_m!([m16; 16]: m16x16 | i16, u16 | test_v256 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
- From: m8x16 |
- /// A 256-bit vector mask with 16 `m16` lanes.
- );
-
--impl_i!([i32; 8]: i32x8, m32x8 | i32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
-+impl_i!([i32; 8]: i32x8, m32x8 | i32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
- From: i8x8, u8x8, i16x8, u16x8 |
- /// A 256-bit vector with 8 `i32` lanes.
- );
--impl_u!([u32; 8]: u32x8, m32x8 | u32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
-+impl_u!([u32; 8]: u32x8, m32x8 | u32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
- From: u8x8, u16x8 |
- /// A 256-bit vector with 8 `u32` lanes.
- );
-@@ -50,16 +50,16 @@ impl_f!([f32; 8]: f32x8, m32x8 | f32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x
- From: i8x8, u8x8, i16x8, u16x8 |
- /// A 256-bit vector with 8 `f32` lanes.
- );
--impl_m!([m32; 8]: m32x8 | i32 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
-+impl_m!([m32; 8]: m32x8 | i32, u8 | test_v256 | x0, x1, x2, x3, x4, x5, x6, x7 |
- From: m8x8, m16x8 |
- /// A 256-bit vector mask with 8 `m32` lanes.
- );
-
--impl_i!([i64; 4]: i64x4, m64x4 | i64 | test_v256 | x0, x1, x2, x3 |
-+impl_i!([i64; 4]: i64x4, m64x4 | i64, u8 | test_v256 | x0, x1, x2, x3 |
- From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4 |
- /// A 256-bit vector with 4 `i64` lanes.
- );
--impl_u!([u64; 4]: u64x4, m64x4 | u64 | test_v256 | x0, x1, x2, x3 |
-+impl_u!([u64; 4]: u64x4, m64x4 | u64, u8 | test_v256 | x0, x1, x2, x3 |
- From: u8x4, u16x4, u32x4 |
- /// A 256-bit vector with 4 `u64` lanes.
- );
-@@ -67,20 +67,20 @@ impl_f!([f64; 4]: f64x4, m64x4 | f64 | test_v256 | x0, x1, x2, x3 |
- From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4, f32x4 |
- /// A 256-bit vector with 4 `f64` lanes.
- );
--impl_m!([m64; 4]: m64x4 | i64 | test_v256 | x0, x1, x2, x3 |
-+impl_m!([m64; 4]: m64x4 | i64, u8 | test_v256 | x0, x1, x2, x3 |
- From: m8x4, m16x4, m32x4 |
- /// A 256-bit vector mask with 4 `m64` lanes.
- );
-
--impl_i!([i128; 2]: i128x2, m128x2 | i128 | test_v256 | x0, x1 |
-+impl_i!([i128; 2]: i128x2, m128x2 | i128, u8 | test_v256 | x0, x1 |
- From: i8x2, u8x2, i16x2, u16x2, i32x2, u32x2, i64x2, u64x2 |
- /// A 256-bit vector with 2 `i128` lanes.
- );
--impl_u!([u128; 2]: u128x2, m128x2 | u128 | test_v256 | x0, x1 |
-+impl_u!([u128; 2]: u128x2, m128x2 | u128, u8 | test_v256 | x0, x1 |
- From: u8x2, u16x2, u32x2, u64x2 |
- /// A 256-bit vector with 2 `u128` lanes.
- );
--impl_m!([m128; 2]: m128x2 | i128 | test_v256 | x0, x1 |
-+impl_m!([m128; 2]: m128x2 | i128, u8 | test_v256 | x0, x1 |
- From: m8x2, m16x2, m32x2, m64x2 |
- /// A 256-bit vector mask with 2 `m128` lanes.
- );
-diff --git a/third_party/rust/packed_simd/src/v32.rs b/third_party/rust/packed_simd/src/v32.rs
-index 09cef9bdd4..75a1838e5e 100644
---- a/third_party/rust/packed_simd/src/v32.rs
-+++ b/third_party/rust/packed_simd/src/v32.rs
-@@ -2,28 +2,28 @@
-
- use crate::*;
-
--impl_i!([i8; 4]: i8x4, m8x4 | i8 | test_v32 | x0, x1, x2, x3 |
-+impl_i!([i8; 4]: i8x4, m8x4 | i8, u8 | test_v32 | x0, x1, x2, x3 |
- From: |
- /// A 32-bit vector with 4 `i8` lanes.
- );
--impl_u!([u8; 4]: u8x4, m8x4 | u8 | test_v32 | x0, x1, x2, x3 |
-+impl_u!([u8; 4]: u8x4, m8x4 | u8, u8 | test_v32 | x0, x1, x2, x3 |
- From: |
- /// A 32-bit vector with 4 `u8` lanes.
- );
--impl_m!([m8; 4]: m8x4 | i8 | test_v32 | x0, x1, x2, x3 |
-+impl_m!([m8; 4]: m8x4 | i8, u8 | test_v32 | x0, x1, x2, x3 |
- From: m16x4, m32x4, m64x4 |
- /// A 32-bit vector mask with 4 `m8` lanes.
- );
-
--impl_i!([i16; 2]: i16x2, m16x2 | i16 | test_v32 | x0, x1 |
-+impl_i!([i16; 2]: i16x2, m16x2 | i16, u8 | test_v32 | x0, x1 |
- From: i8x2, u8x2 |
- /// A 32-bit vector with 2 `i16` lanes.
- );
--impl_u!([u16; 2]: u16x2, m16x2 | u16 | test_v32 | x0, x1 |
-+impl_u!([u16; 2]: u16x2, m16x2 | u16, u8 | test_v32 | x0, x1 |
- From: u8x2 |
- /// A 32-bit vector with 2 `u16` lanes.
- );
--impl_m!([m16; 2]: m16x2 | i16 | test_v32 | x0, x1 |
-+impl_m!([m16; 2]: m16x2 | i16, u8 | test_v32 | x0, x1 |
- From: m8x2, m32x2, m64x2, m128x2 |
- /// A 32-bit vector mask with 2 `m16` lanes.
- );
-diff --git a/third_party/rust/packed_simd/src/v512.rs b/third_party/rust/packed_simd/src/v512.rs
-index b1714aded3..4c8c71338a 100644
---- a/third_party/rust/packed_simd/src/v512.rs
-+++ b/third_party/rust/packed_simd/src/v512.rs
-@@ -1,9 +1,9 @@
- //! 512-bit wide vector types
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- use crate::*;
-
--impl_i!([i8; 64]: i8x64, m8x64 | i8 | test_v512 |
-+impl_i!([i8; 64]: i8x64, m8x64 | i8, u64 | test_v512 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
- x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31,
- x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47,
-@@ -11,7 +11,7 @@ impl_i!([i8; 64]: i8x64, m8x64 | i8 | test_v512 |
- From: |
- /// A 512-bit vector with 64 `i8` lanes.
- );
--impl_u!([u8; 64]: u8x64, m8x64 | u8 | test_v512 |
-+impl_u!([u8; 64]: u8x64, m8x64 | u8, u64 | test_v512 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
- x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31,
- x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47,
-@@ -19,7 +19,7 @@ impl_u!([u8; 64]: u8x64, m8x64 | u8 | test_v512 |
- From: |
- /// A 512-bit vector with 64 `u8` lanes.
- );
--impl_m!([m8; 64]: m8x64 | i8 | test_v512 |
-+impl_m!([m8; 64]: m8x64 | i8, u64 | test_v512 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
- x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31,
- x32, x33, x34, x35, x36, x37, x38, x39, x40, x41, x42, x43, x44, x45, x46, x47,
-@@ -28,31 +28,31 @@ impl_m!([m8; 64]: m8x64 | i8 | test_v512 |
- /// A 512-bit vector mask with 64 `m8` lanes.
- );
-
--impl_i!([i16; 32]: i16x32, m16x32 | i16 | test_v512 |
-+impl_i!([i16; 32]: i16x32, m16x32 | i16, u32 | test_v512 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
- x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
- From: i8x32, u8x32 |
- /// A 512-bit vector with 32 `i16` lanes.
- );
--impl_u!([u16; 32]: u16x32, m16x32 | u16 | test_v512 |
-+impl_u!([u16; 32]: u16x32, m16x32 | u16, u32 | test_v512 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
- x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
- From: u8x32 |
- /// A 512-bit vector with 32 `u16` lanes.
- );
--impl_m!([m16; 32]: m16x32 | i16 | test_v512 |
-+impl_m!([m16; 32]: m16x32 | i16, u32 | test_v512 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15,
- x16, x17, x18, x19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29, x30, x31 |
- From: m8x32 |
- /// A 512-bit vector mask with 32 `m16` lanes.
- );
-
--impl_i!([i32; 16]: i32x16, m32x16 | i32 | test_v512 |
-+impl_i!([i32; 16]: i32x16, m32x16 | i32, u16 | test_v512 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
- From: i8x16, u8x16, i16x16, u16x16 |
- /// A 512-bit vector with 16 `i32` lanes.
- );
--impl_u!([u32; 16]: u32x16, m32x16 | u32 | test_v512 |
-+impl_u!([u32; 16]: u32x16, m32x16 | u32, u16 | test_v512 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
- From: u8x16, u16x16 |
- /// A 512-bit vector with 16 `u32` lanes.
-@@ -62,17 +62,17 @@ impl_f!([f32; 16]: f32x16, m32x16 | f32 | test_v512 |
- From: i8x16, u8x16, i16x16, u16x16 |
- /// A 512-bit vector with 16 `f32` lanes.
- );
--impl_m!([m32; 16]: m32x16 | i32 | test_v512 |
-+impl_m!([m32; 16]: m32x16 | i32, u16 | test_v512 |
- x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 |
- From: m8x16, m16x16 |
- /// A 512-bit vector mask with 16 `m32` lanes.
- );
-
--impl_i!([i64; 8]: i64x8, m64x8 | i64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
-+impl_i!([i64; 8]: i64x8, m64x8 | i64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
- From: i8x8, u8x8, i16x8, u16x8, i32x8, u32x8 |
- /// A 512-bit vector with 8 `i64` lanes.
- );
--impl_u!([u64; 8]: u64x8, m64x8 | u64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
-+impl_u!([u64; 8]: u64x8, m64x8 | u64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
- From: u8x8, u16x8, u32x8 |
- /// A 512-bit vector with 8 `u64` lanes.
- );
-@@ -80,20 +80,20 @@ impl_f!([f64; 8]: f64x8, m64x8 | f64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x
- From: i8x8, u8x8, i16x8, u16x8, i32x8, u32x8, f32x8 |
- /// A 512-bit vector with 8 `f64` lanes.
- );
--impl_m!([m64; 8]: m64x8 | i64 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
-+impl_m!([m64; 8]: m64x8 | i64, u8 | test_v512 | x0, x1, x2, x3, x4, x5, x6, x7 |
- From: m8x8, m16x8, m32x8 |
- /// A 512-bit vector mask with 8 `m64` lanes.
- );
-
--impl_i!([i128; 4]: i128x4, m128x4 | i128 | test_v512 | x0, x1, x2, x3 |
-+impl_i!([i128; 4]: i128x4, m128x4 | i128, u8 | test_v512 | x0, x1, x2, x3 |
- From: i8x4, u8x4, i16x4, u16x4, i32x4, u32x4, i64x4, u64x4 |
- /// A 512-bit vector with 4 `i128` lanes.
- );
--impl_u!([u128; 4]: u128x4, m128x4 | u128 | test_v512 | x0, x1, x2, x3 |
-+impl_u!([u128; 4]: u128x4, m128x4 | u128, u8 | test_v512 | x0, x1, x2, x3 |
- From: u8x4, u16x4, u32x4, u64x4 |
- /// A 512-bit vector with 4 `u128` lanes.
- );
--impl_m!([m128; 4]: m128x4 | i128 | test_v512 | x0, x1, x2, x3 |
-+impl_m!([m128; 4]: m128x4 | i128, u8 | test_v512 | x0, x1, x2, x3 |
- From: m8x4, m16x4, m32x4, m64x4 |
- /// A 512-bit vector mask with 4 `m128` lanes.
- );
-diff --git a/third_party/rust/packed_simd/src/v64.rs b/third_party/rust/packed_simd/src/v64.rs
-index 1ee6219c04..bf6b9de610 100644
---- a/third_party/rust/packed_simd/src/v64.rs
-+++ b/third_party/rust/packed_simd/src/v64.rs
-@@ -1,43 +1,43 @@
- //! 64-bit wide vector types
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- use super::*;
-
--impl_i!([i8; 8]: i8x8, m8x8 | i8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
-+impl_i!([i8; 8]: i8x8, m8x8 | i8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
- From: |
- /// A 64-bit vector with 8 `i8` lanes.
- );
--impl_u!([u8; 8]: u8x8, m8x8 | u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
-+impl_u!([u8; 8]: u8x8, m8x8 | u8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
- From: |
- /// A 64-bit vector with 8 `u8` lanes.
- );
--impl_m!([m8; 8]: m8x8 | i8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
-+impl_m!([m8; 8]: m8x8 | i8, u8 | test_v64 | x0, x1, x2, x3, x4, x5, x6, x7 |
- From: m16x8, m32x8 |
- /// A 64-bit vector mask with 8 `m8` lanes.
- );
-
--impl_i!([i16; 4]: i16x4, m16x4 | i16 | test_v64 | x0, x1, x2, x3 |
-+impl_i!([i16; 4]: i16x4, m16x4 | i16, u8 | test_v64 | x0, x1, x2, x3 |
- From: i8x4, u8x4 |
- /// A 64-bit vector with 4 `i16` lanes.
- );
--impl_u!([u16; 4]: u16x4, m16x4 | u16 | test_v64 | x0, x1, x2, x3 |
-+impl_u!([u16; 4]: u16x4, m16x4 | u16, u8 | test_v64 | x0, x1, x2, x3 |
- From: u8x4 |
- /// A 64-bit vector with 4 `u16` lanes.
- );
--impl_m!([m16; 4]: m16x4 | i16 | test_v64 | x0, x1, x2, x3 |
-+impl_m!([m16; 4]: m16x4 | i16, u8 | test_v64 | x0, x1, x2, x3 |
- From: m8x4, m32x4, m64x4 |
- /// A 64-bit vector mask with 4 `m16` lanes.
- );
-
--impl_i!([i32; 2]: i32x2, m32x2 | i32 | test_v64 | x0, x1 |
-+impl_i!([i32; 2]: i32x2, m32x2 | i32, u8 | test_v64 | x0, x1 |
- From: i8x2, u8x2, i16x2, u16x2 |
- /// A 64-bit vector with 2 `i32` lanes.
- );
--impl_u!([u32; 2]: u32x2, m32x2 | u32 | test_v64 | x0, x1 |
-+impl_u!([u32; 2]: u32x2, m32x2 | u32, u8 | test_v64 | x0, x1 |
- From: u8x2, u16x2 |
- /// A 64-bit vector with 2 `u32` lanes.
- );
--impl_m!([m32; 2]: m32x2 | i32 | test_v64 | x0, x1 |
-+impl_m!([m32; 2]: m32x2 | i32, u8 | test_v64 | x0, x1 |
- From: m8x2, m16x2, m64x2, m128x2 |
- /// A 64-bit vector mask with 2 `m32` lanes.
- );
-@@ -47,15 +47,15 @@ impl_f!([f32; 2]: f32x2, m32x2 | f32 | test_v64 | x0, x1 |
- );
-
- /*
--impl_i!([i64; 1]: i64x1, m64x1 | i64 | test_v64 | x0 |
-+impl_i!([i64; 1]: i64x1, m64x1 | i64, u8 | test_v64 | x0 |
- From: /*i8x1, u8x1, i16x1, u16x1, i32x1, u32x1*/ | // FIXME: primitive to vector conversion
- /// A 64-bit vector with 1 `i64` lanes.
- );
--impl_u!([u64; 1]: u64x1, m64x1 | u64 | test_v64 | x0 |
-+impl_u!([u64; 1]: u64x1, m64x1 | u64, u8 | test_v64 | x0 |
- From: /*u8x1, u16x1, u32x1*/ | // FIXME: primitive to vector conversion
- /// A 64-bit vector with 1 `u64` lanes.
- );
--impl_m!([m64; 1]: m64x1 | i64 | test_v64 | x0 |
-+impl_m!([m64; 1]: m64x1 | i64, u8 | test_v64 | x0 |
- From: /*m8x1, m16x1, m32x1, */ m128x1 | // FIXME: unary small vector types
- /// A 64-bit vector mask with 1 `m64` lanes.
- );
-diff --git a/third_party/rust/packed_simd/src/vPtr.rs b/third_party/rust/packed_simd/src/vPtr.rs
-index fe9fb28ffa..e34cb170eb 100644
---- a/third_party/rust/packed_simd/src/vPtr.rs
-+++ b/third_party/rust/packed_simd/src/vPtr.rs
-@@ -1,5 +1,5 @@
- //! Vectors of pointers
--#![rustfmt::skip]
-+#[rustfmt::skip]
-
- use crate::*;
-
-diff --git a/third_party/rust/packed_simd/src/vSize.rs b/third_party/rust/packed_simd/src/vSize.rs
-index 5594323372..b5d8910061 100644
---- a/third_party/rust/packed_simd/src/vSize.rs
-+++ b/third_party/rust/packed_simd/src/vSize.rs
-@@ -3,50 +3,50 @@
- use crate::codegen::pointer_sized_int::{isize_, usize_};
- use crate::*;
-
--impl_i!([isize; 2]: isizex2, msizex2 | isize_ | test_v128 |
-+impl_i!([isize; 2]: isizex2, msizex2 | isize_, u8 | test_v128 |
- x0, x1|
- From: |
- /// A vector with 2 `isize` lanes.
- );
-
--impl_u!([usize; 2]: usizex2, msizex2 | usize_ | test_v128 |
-+impl_u!([usize; 2]: usizex2, msizex2 | usize_, u8 | test_v128 |
- x0, x1|
- From: |
- /// A vector with 2 `usize` lanes.
- );
--impl_m!([msize; 2]: msizex2 | isize_ | test_v128 |
-+impl_m!([msize; 2]: msizex2 | isize_, u8 | test_v128 |
- x0, x1 |
- From: |
- /// A vector mask with 2 `msize` lanes.
- );
-
--impl_i!([isize; 4]: isizex4, msizex4 | isize_ | test_v256 |
-+impl_i!([isize; 4]: isizex4, msizex4 | isize_, u8 | test_v256 |
- x0, x1, x2, x3 |
- From: |
- /// A vector with 4 `isize` lanes.
- );
--impl_u!([usize; 4]: usizex4, msizex4 | usize_ | test_v256 |
-+impl_u!([usize; 4]: usizex4, msizex4 | usize_, u8 | test_v256 |
- x0, x1, x2, x3|
- From: |
- /// A vector with 4 `usize` lanes.
- );
--impl_m!([msize; 4]: msizex4 | isize_ | test_v256 |
-+impl_m!([msize; 4]: msizex4 | isize_, u8 | test_v256 |
- x0, x1, x2, x3 |
- From: |
- /// A vector mask with 4 `msize` lanes.
- );
-
--impl_i!([isize; 8]: isizex8, msizex8 | isize_ | test_v512 |
-+impl_i!([isize; 8]: isizex8, msizex8 | isize_, u8 | test_v512 |
- x0, x1, x2, x3, x4, x5, x6, x7 |
- From: |
-- /// A vector with 4 `isize` lanes.
-+ /// A vector with 8 `isize` lanes.
- );
--impl_u!([usize; 8]: usizex8, msizex8 | usize_ | test_v512 |
-+impl_u!([usize; 8]: usizex8, msizex8 | usize_, u8 | test_v512 |
- x0, x1, x2, x3, x4, x5, x6, x7 |
- From: |
- /// A vector with 8 `usize` lanes.
- );
--impl_m!([msize; 8]: msizex8 | isize_ | test_v512 |
-+impl_m!([msize; 8]: msizex8 | isize_, u8 | test_v512 |
- x0, x1, x2, x3, x4, x5, x6, x7 |
- From: |
- /// A vector mask with 8 `msize` lanes.
-diff --git a/third_party/rust/packed_simd/tests/endianness.rs b/third_party/rust/packed_simd/tests/endianness.rs
-index 1e6b4f3543..31fb7073af 100644
---- a/third_party/rust/packed_simd/tests/endianness.rs
-+++ b/third_party/rust/packed_simd/tests/endianness.rs
-@@ -17,7 +17,7 @@ fn endian_indexing() {
- #[cfg_attr(not(target_arch = "wasm32"), test)]
- #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
- fn endian_bitcasts() {
-- #[cfg_attr(rustfmt, rustfmt_skip)]
-+ #[rustfmt::skip]
- let x = i8x16::new(
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15,
-@@ -34,13 +34,13 @@ fn endian_bitcasts() {
- #[cfg_attr(not(target_arch = "wasm32"), test)]
- #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
- fn endian_casts() {
-- #[cfg_attr(rustfmt, rustfmt_skip)]
-+ #[rustfmt::skip]
- let x = i8x16::new(
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15,
- );
- let t: i16x16 = x.into(); // simd_cast
-- #[cfg_attr(rustfmt, rustfmt_skip)]
-+ #[rustfmt::skip]
- let e = i16x16::new(
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15,
-@@ -51,7 +51,7 @@ fn endian_casts() {
- #[cfg_attr(not(target_arch = "wasm32"), test)]
- #[cfg_attr(target_arch = "wasm32", wasm_bindgen_test)]
- fn endian_load_and_stores() {
-- #[cfg_attr(rustfmt, rustfmt_skip)]
-+ #[rustfmt::skip]
- let x = i8x16::new(
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15,
-@@ -82,10 +82,15 @@ fn endian_array_union() {
- vec: f32x4,
- }
- let x: [f32; 4] = unsafe { A { vec: f32x4::new(0., 1., 2., 3.) }.data };
-- assert_eq!(x[0], 0_f32);
-- assert_eq!(x[1], 1_f32);
-- assert_eq!(x[2], 2_f32);
-- assert_eq!(x[3], 3_f32);
-+ // As all of these are integer values within the mantissa^1 range, it
-+ // would be very unusual for them to actually fail to compare.
-+ #[allow(clippy::float_cmp)]
-+ {
-+ assert_eq!(x[0], 0_f32);
-+ assert_eq!(x[1], 1_f32);
-+ assert_eq!(x[2], 2_f32);
-+ assert_eq!(x[3], 3_f32);
-+ }
- let y: f32x4 = unsafe { A { data: [3., 2., 1., 0.] }.vec };
- assert_eq!(y, f32x4::new(3., 2., 1., 0.));
-
-@@ -93,23 +98,23 @@ fn endian_array_union() {
- data: [i8; 16],
- vec: i8x16,
- }
-- #[cfg_attr(rustfmt, rustfmt_skip)]
-+ #[rustfmt::skip]
- let x = i8x16::new(
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15,
- );
- let x: [i8; 16] = unsafe { B { vec: x }.data };
-
-- for i in 0..16 {
-- assert_eq!(x[i], i as i8);
-+ for (i, v) in x.iter().enumerate() {
-+ assert_eq!(i as i8, *v);
- }
-
-- #[cfg_attr(rustfmt, rustfmt_skip)]
-+ #[rustfmt::skip]
- let y = [
- 15, 14, 13, 12, 11, 19, 9, 8,
- 7, 6, 5, 4, 3, 2, 1, 0
- ];
-- #[cfg_attr(rustfmt, rustfmt_skip)]
-+ #[rustfmt::skip]
- let e = i8x16::new(
- 15, 14, 13, 12, 11, 19, 9, 8,
- 7, 6, 5, 4, 3, 2, 1, 0
-@@ -121,7 +126,7 @@ fn endian_array_union() {
- data: [i16; 8],
- vec: i8x16,
- }
-- #[cfg_attr(rustfmt, rustfmt_skip)]
-+ #[rustfmt::skip]
- let x = i8x16::new(
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15,
-@@ -145,21 +150,26 @@ fn endian_tuple_access() {
- vec: f32x4,
- }
- let x: F32x4T = unsafe { A { vec: f32x4::new(0., 1., 2., 3.) }.data };
-- assert_eq!(x.0, 0_f32);
-- assert_eq!(x.1, 1_f32);
-- assert_eq!(x.2, 2_f32);
-- assert_eq!(x.3, 3_f32);
-+ // As all of these are integer values within the mantissa^1 range, it
-+ // would be very unusual for them to actually fail to compare.
-+ #[allow(clippy::float_cmp)]
-+ {
-+ assert_eq!(x.0, 0_f32);
-+ assert_eq!(x.1, 1_f32);
-+ assert_eq!(x.2, 2_f32);
-+ assert_eq!(x.3, 3_f32);
-+ }
- let y: f32x4 = unsafe { A { data: (3., 2., 1., 0.) }.vec };
- assert_eq!(y, f32x4::new(3., 2., 1., 0.));
-
-- #[cfg_attr(rustfmt, rustfmt_skip)]
-+ #[rustfmt::skip]
- type I8x16T = (i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8);
- union B {
- data: I8x16T,
- vec: i8x16,
- }
-
-- #[cfg_attr(rustfmt, rustfmt_skip)]
-+ #[rustfmt::skip]
- let x = i8x16::new(
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15,
-@@ -183,27 +193,27 @@ fn endian_tuple_access() {
- assert_eq!(x.14, 14);
- assert_eq!(x.15, 15);
-
-- #[cfg_attr(rustfmt, rustfmt_skip)]
-+ #[rustfmt::skip]
- let y = (
- 15, 14, 13, 12, 11, 10, 9, 8,
- 7, 6, 5, 4, 3, 2, 1, 0
- );
- let z: i8x16 = unsafe { B { data: y }.vec };
-- #[cfg_attr(rustfmt, rustfmt_skip)]
-+ #[rustfmt::skip]
- let e = i8x16::new(
- 15, 14, 13, 12, 11, 10, 9, 8,
- 7, 6, 5, 4, 3, 2, 1, 0
- );
- assert_eq!(e, z);
-
-- #[cfg_attr(rustfmt, rustfmt_skip)]
-+ #[rustfmt::skip]
- type I16x8T = (i16, i16, i16, i16, i16, i16, i16, i16);
- union C {
- data: I16x8T,
- vec: i8x16,
- }
-
-- #[cfg_attr(rustfmt, rustfmt_skip)]
-+ #[rustfmt::skip]
- let x = i8x16::new(
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15,
-@@ -224,7 +234,7 @@ fn endian_tuple_access() {
- assert_eq!(x.6, e[6]);
- assert_eq!(x.7, e[7]);
-
-- #[cfg_attr(rustfmt, rustfmt_skip)]
-+ #[rustfmt::skip]
- #[repr(C)]
- #[derive(Copy ,Clone)]
- pub struct Tup(pub i8, pub i8, pub i16, pub i8, pub i8, pub i16,
-@@ -235,7 +245,7 @@ fn endian_tuple_access() {
- vec: i8x16,
- }
-
-- #[cfg_attr(rustfmt, rustfmt_skip)]
-+ #[rustfmt::skip]
- let x = i8x16::new(
- 0, 1, 2, 3, 4, 5, 6, 7,
- 8, 9, 10, 11, 12, 13, 14, 15,
---
-2.30.1
-
diff --git a/thunderbird/Pkgfile b/thunderbird/Pkgfile
index a30aa00cb..95fd8fb3f 100644
--- a/thunderbird/Pkgfile
+++ b/thunderbird/Pkgfile
@@ -1,25 +1,18 @@
# Description: Email client from the Mozilla project
# URL: https://www.thunderbird.net/en-US/
# Maintainer: Danny Rawlins, crux at romster dot me
-# Depends on: alsa-lib autoconf-2.13 cbindgen clang dbus-glib gnupg gtk libwebp libevent libidl libnotify libvpx lld nodejs nss startup-notification unzip zip wasi-libc++
+# Depends on: alsa-lib autoconf-2.13 cbindgen clang dbus-glib gnupg gtk libevent libidl libnotify libvpx libwebp lld nodejs nss startup-notification unzip wasi-libc++ zip
# Optional: sccache
name=thunderbird
-version=102.2.2
+version=102.4.1
release=1
source=(https://archive.mozilla.org/pub/thunderbird/releases/$version/sourc…
- $name.desktop
- cbindgen-0.24.patch
- rustc_version-0.4.0.patch
- packed_simd_2-0.3.8.patch)
-
+ $name.desktop)
+
build() {
cd $name-$version
- patch -p1 -i $SRC/cbindgen-0.24.patch
- patch -p1 -i $SRC/rustc_version-0.4.0.patch
- patch -p1 -i $SRC/packed_simd_2-0.3.8.patch
-
if [ -e '/usr/bin/ccache' ]; then
export OS_CCACHE_COMPILERCHECK="$(/usr/bin/clang -dumpversion | sed -z 's/\n/ /g'; crux | cut -d' ' -f3)"
export CCACHE_COMPILERCHECK="string:$OS_CCACHE_COMPILERCHECK"
@@ -30,6 +23,8 @@ build() {
mkdir "$PKGMK_SOURCE_DIR/rust" || true
export CARGO_HOME="$PKGMK_SOURCE_DIR/rust"
+ sed -i '/ROOT_CLIP_CHAIN/d' gfx/webrender_bindings/webrender_ffi.h
+
cat <<- EOF > .mozconfig
ac_add_options --prefix=/usr
ac_add_options --enable-application=comm/mail
@@ -41,7 +36,6 @@ cat <<- EOF > .mozconfig
ac_add_options --with-system-libevent
ac_add_options --with-system-libvpx
ac_add_options --with-system-webp
- ac_add_options --with-wasi-sysroot=/usr/share/wasi-sysroot
ac_add_options --enable-av1
ac_add_options --enable-system-ffi
ac_add_options --enable-system-pixman
@@ -58,14 +52,14 @@ cat <<- EOF > .mozconfig
ac_add_options --disable-updater
ac_add_options --disable-crashreporter
ac_add_options --disable-necko-wifi
- ac_add_options --disable-pulseaudio
ac_add_options --disable-elf-hack
+ ac_add_options --without-wasm-sandboxed-libraries
EOF
# audio
- prt-get isinst alsa-lib && echo 'ac_add_options --enable-alsa' >> .mozconfig || echo 'ac_add_options --disable-alsa' >> .mozconfig
- prt-get isinst jack && echo 'ac_add_options --enable-jack' >> .mozconfig || echo 'ac_add_options --disable-jack' >> .mozconfig
- prt-get isinst pulseaudio && echo 'ac_add_options --enable-pulseaudio' >> .mozconfig || echo 'ac_add_options --disable-pulseaudio' >> .mozconfig
+ prt-get isinst alsa-lib && echo 'ac_add_options --enable-audio-backends=alsa' >> .mozconfig
+ prt-get isinst pulseaudio && sed -i '/audio-backends/s/alsa/&,pulseaudio/' .mozconfig
+ #prt-get isinst jack && echo 'ac_add_options --enable-jack' >> .mozconfig || echo 'ac_add_options --disable-jack' >> .mozconfig
prt-get isinst wayland-protocols && \
echo 'ac_add_options --enable-default-toolkit=cairo-gtk3-wayland' >> .mozconfig || \
diff --git a/thunderbird/cbindgen-0.24.patch b/thunderbird/cbindgen-0.24.patch
deleted file mode 100644
index 3011e8ada..000000000
--- a/thunderbird/cbindgen-0.24.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-Description: Remove an extra constant definition that is now being generated by newer versions of cbindgen (0.24), and causing build failures because it is defined in several places.
-Author: Olivier Tilloy <olivier.tilloy(a)canonical.com>
-Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1773259
-Forwarded: not-needed
-
---- a/gfx/webrender_bindings/webrender_ffi.h
-+++ b/gfx/webrender_bindings/webrender_ffi.h
-@@ -73,8 +73,6 @@ struct WrPipelineInfo;
- struct WrPipelineIdAndEpoch;
- using WrPipelineIdEpochs = nsTArray<WrPipelineIdAndEpoch>;
-
--const uint64_t ROOT_CLIP_CHAIN = ~0;
--
- } // namespace wr
- } // namespace mozilla
-
-
diff --git a/thunderbird/packed_simd_2-0.3.8.patch b/thunderbird/packed_simd_2-0.3.8.patch
deleted file mode 100644
index f3c4fca6a..000000000
--- a/thunderbird/packed_simd_2-0.3.8.patch
+++ /dev/null
@@ -1,925 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla(a)glandium.org>
-# Date 1660200949 0
-# Node ID fac963c3bc003f12171fbb706fbd0ef676aeaa52
-# Parent d6c758891f5d505f3dcb09cc559b9aa4d3199597
-Bug 1783784 - Update packed_simd_2 to 0.3.8. r=hsivonen,supply-chain-reviewers
-
-Differential Revision: https://phabricator.services.mozilla.com/D154063
-
-diff --git a/.cargo/config.in b/.cargo/config.in
---- a/.cargo/config.in
-+++ b/.cargo/config.in
-@@ -70,17 +70,17 @@ rev = "499b95580c8b276e52bd9757d73524950
- [source."https://github.com/jfkthame/mapped_hyph.git"]
- git = "https://github.com/jfkthame/mapped_hyph.git"
- replace-with = "vendored-sources"
- rev = "746743227485a83123784df0c53227ab466612ed"
-
- [source."https://github.com/hsivonen/packed_simd"]
- git = "https://github.com/hsivonen/packed_simd"
- replace-with = "vendored-sources"
--rev = "c149d0a519bf878567c7630096737669ec2ff15f"
-+rev = "90eebb82a107cbec1c8e406d9223819417e96de1"
-
- [source."https://github.com/hsivonen/chardetng_c"]
- git = "https://github.com/hsivonen/chardetng_c"
- replace-with = "vendored-sources"
- rev = "ed8a4c6f900a90d4dbc1d64b856e61490a1c3570"
-
- [source."https://github.com/hsivonen/chardetng"]
- git = "https://github.com/hsivonen/chardetng"
-diff --git a/Cargo.lock b/Cargo.lock
---- a/Cargo.lock
-+++ b/Cargo.lock
-@@ -3904,20 +3904,21 @@ version = "0.4.1"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "6ff55baddef9e4ad00f88b6c743a2a8062d4c6ade126c2a528644b8e444d52ce"
- dependencies = [
- "stable_deref_trait",
- ]
-
- [[package]]
- name = "packed_simd_2"
--version = "0.3.7"
--source = "git+https://github.com/hsivonen/packed_simd?rev=c149d0a519bf878567c76300967…"
-+version = "0.3.8"
-+source = "git+https://github.com/hsivonen/packed_simd?rev=90eebb82a107cbec1c8e406d922…"
- dependencies = [
- "cfg-if 1.0.0",
-+ "rustc_version",
- ]
-
- [[package]]
- name = "parking_lot"
- version = "0.11.1"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb"
- dependencies = [
-diff --git a/Cargo.toml b/Cargo.toml
---- a/Cargo.toml
-+++ b/Cargo.toml
-@@ -140,16 +140,16 @@ moz_asserts = { path = "mozglue/static/r
-
- # Other overrides
- async-task = { git = "https://github.com/smol-rs/async-task", rev="f6488e35beccb26eb6e85847b02aa78a42cd3d0e" }
- chardetng = { git = "https://github.com/hsivonen/chardetng", rev="3484d3e3ebdc8931493aa5df4d7ee9360a90e76b" }
- chardetng_c = { git = "https://github.com/hsivonen/chardetng_c", rev="ed8a4c6f900a90d4dbc1d64b856e61490a1c3570" }
- coremidi = { git = "https://github.com/chris-zen/coremidi.git", rev="fc68464b5445caf111e41f643a2e69ccce0b4f83" }
- fog = { path = "toolkit/components/glean/api" }
- libudev-sys = { path = "dom/webauthn/libudev-sys" }
--packed_simd = { package = "packed_simd_2", git = "https://github.com/hsivonen/packed_simd", rev="c149d0a519bf878567c7630096737669ec2ff15f" }
-+packed_simd = { package = "packed_simd_2", git = "https://github.com/hsivonen/packed_simd", rev="90eebb82a107cbec1c8e406d9223819417e96de1" }
- midir = { git = "https://github.com/mozilla/midir.git", rev = "4c11f0ffb5d6a10de4aff40a7b81218b33b94e6f" }
- minidump_writer_linux = { git = "https://github.com/rust-minidump/minidump-writer.git", rev = "75ada456c92a429704691a85e1cb42fef8cafc0d" }
-
- # Patch mio 0.6 to use winapi 0.3 and miow 0.3, getting rid of winapi 0.2.
- # There is not going to be new version of mio 0.6, mio now being >= 0.7.11.
- [patch.crates-io.mio]
- path = "third_party/rust/mio-0.6.23"
-diff --git a/third_party/rust/packed_simd_2/.cargo-checksum.json b/third_party/rust/packed_simd_2/.cargo-checksum.json
---- a/third_party/rust/packed_simd_2/.cargo-checksum.json
-+++ b/third_party/rust/packed_simd_2/.cargo-checksum.json
-@@ -1,1 +1,1 @@
--{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"30a61a5ec53355fc1f3585e1690280308c2b7961701abc11e8389b235b647178","Cargo.toml":"f85e54e13a05f6e4f27c230ab81430af27b6ff80a1c036bd70c42ea115f89487","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"882f8894b333becf490d23c9024a86fd1327c8edea33aa8dbb98dc2f2ddb3956","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"019ed29c43989782d8eec3a961654cfc172d7a7898da4eca8f654700af7e1988","ci/all.sh":"2ae6b2445b4db83833e40b37efd0016c6b9879ee988b9b3ef94db5439a3e1606","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":"da88c0d50f16dc08448c7fdf1fa5ed2cbe576acf9e7dd85b5b818621b2a8c702","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"bb5f8ae890707c128652290ffc544447643bf12037ddd73c6ad6989f848cb380","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"1afaefcbc05b740859acd4e067bc92439be6bcbe8f2e9678474fb434bcd398d9","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"8282ea707a94109beed47a57574755e2d58401735904a03f85fb64c578c53b4f","ci/docker/i586-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/i686-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/mips-unknown-linux-gnu/Dockerfile":"b2ebc25797612c4f8395fe9d407725156044955bfbcf442036b7f55b43a5f9da","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"b0c1692ac65bc56dd30494b1993d8e929c48cc9c4b92029b7c7592af6d4f9220","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"4e9249c179300138141d0b2b7401b11897f64aed69f541f078c1db4594df2827","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"3164c52b0dcbb01afa78292b15b5c43503ccf0491cf6eb801ec2bf22ae274e52","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"786f799d0b56eb54d7b6c4b00e1aed4ce81776e14e44767e083c89d014b72004","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"e8bc363837cd9c2d8b22402acb8c1c329efc11ba5d12170603d2fe2eae9da059","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"47998d45b781d797b9e6085ebe898d90de0c952b54537a8db4e8d7503eb032d9","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":"51955a8bf3c4d440f47382af6f5426ebff94ab01a04da36175babda9a057740f","ci/docker/wasm32-unknown-unknown/Dockerfile":"5a022299f56730cf8c432a07391e95e199cfa36dc8da2a96c9d185c8de93e913","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":"7f4e3ca5fa288ea70edb4d1f75309708cd30b192e2e4444e61c4d5b3b58f89cf","ci/dox.sh":"434e9611c52e389312d2b03564adf09429f10cc76fe66a8644adb104903b87b7","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":"41dd6a60efaaeae9661a01370cce98b631f78392859a0cf68c946c0a16edf5f7","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"fae3960023f6f3d1388cd2ad22fdbab4b075f1f29dd4292d7994a20783beb6cf","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2d2629310ad4d464c482bdbb5819f0d6ce223c576aeef2cdce6a1f6857085ea5","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":"01197acf6f0adec8db32b8591811f69cecb6555a2b05dc5d5ec27d0e3f7b065e","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","rustfmt.toml":"d99a43f3f8ef9e425cf01c333fba9f0051f888f5d87ab4e8f63c2f7d0fe6620f","src/api.rs":"f6e92f056565e6fd93f98829a408aee9e790251e0cbd8a8bc30c8662b4d6fabb","src/api/bit_manip.rs":"c47a4d0f7451f7e35d07715e4f39a472e07457fd456fdb726864a4f6887252a3","src/api/bitmask.rs":"6d2beefd62ee5d9c8eb060bee6abc641616bf828c99f82abf97b21bf004e894b","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"edd0994efac4379dff26e178423a52dbb3ffeb38b1fc97cae975d744c00b4fb6","src/api/cast/v16.rs":"96bd98c2d21b0663abe6c0ab33005b1fa693f3db7ee6795351391343863484da","src/api/cast/v256.rs":"8c31fe91f5e78ef737dfba6979cc1240210cb094a89d284fe459bf8a991ca24b","src/api/cast/v32.rs":"a99a79dd84d2a5e6adf9db98705675915bd03fd1287d489c7fe38e84d7e4a086","src/api/cast/v512.rs":"c0dd526f41ed7b8a71c3743d91267554ec0a0c75834ccc2e3ecb0ef3004af642","src/api/cast/v64.rs":"6572fdba2a1241a6cd666d3f0cce3306cd2cb7e5e236172e59d5d4351c8a88af","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"902ccb8aa01fd5738b30ba0b712669c21d4801958907e03bad23432c7dba0198","src/api/cmp/partial_ord.rs":"9db0c37d7434cdfc62d8d66912e972fa3d8c115ab2af051a6f45e414bd3e4f1c","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"67bf21c134127d12a7028c8b88a57f0ceee8ccbd74976da8ca74eb9f16a174d5","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"02b2b287f7404f8a983813cf70c87108c8da3835578b63ab303116885f609413","src/api/fmt/debug.rs":"56e1c3bdc092747344fffaafff9da7163ee7827857f6fb7cb1c9923eca4f6fa0","src/api/fmt/lower_hex.rs":"558fd592f7f485712fb051509cecc7174a21e6bf62e5ce64766e75afc97bb8e1","src/api/fmt/octal.rs":"3b2e70877a4f368c7704f8e254236c014c365c74d93371c1feb5f030e6c66422","src/api/fmt/upper_hex.rs":"2a442f666bc80e22d41f903f881238fe114dd49344c3ed69849250e853cafc5d","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"dd3fc64fb17d6184bb60343f8da26a05edf0e5f3c14caf55d49fa15e21d948dc","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"5076ece87969592c876486f5b1ea8affbeaec379d1a14a30859e0aa5592019de","src/api/into_bits.rs":"1ee15923352786b9ab4a31fa506762297116b18cfdb8e72853abc8ad001651d2","src/api/into_bits/arch_specific.rs":"e7445021f3908326bfee758835e5fc5ad56aa1baa77fc1c58abe4350c66c670a","src/api/into_bits/macros.rs":"bb4fe99be2af6a21d805efab44c8e4e61a7b2adb42a65504a0cf26d13efdadcd","src/api/into_bits/v128.rs":"145a44922b09a5ca5b62d88a461d327d399a997a15db4b11d7b17e554a9fa4c0","src/api/into_bits/v16.rs":"f4f4f61ba88aa51b158ec56ca3dce234349aea0daf2b3029a14ab5125d1e41e5","src/api/into_bits/v256.rs":"8cea9c5d9809f11323cb7cdc53b83df593fd17caf926251e412ae9777bed547f","src/api/into_bits/v32.rs":"905ba683d342fa32f4202b80bb46530807bd0a5b588f6c2e8c9f475223c47775","src/api/into_bits/v512.rs":"e25afa1fbf088a5d58e7d75d197b6cd4c56637ea28542ba18e46a451f29d04e7","src/api/into_bits/v64.rs":"d6238022ccff7b92e55b3f6017fc269acb6f36330a6d7e8fb389853a0f1b6478","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"6302c9261da4291d144d5bb53493cdd073498feb40955fb6860ea3c4d06c978a","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":"819cff26d3e196f807645bcc1d79eb27d9f175edb89910f2274d52a1e913cd11","src/api/minimal/mask.rs":"0cae10ae1fc65f5070e686c0c79bfba27b86b33d6c399367bd4848fb367dcec4","src/api/minimal/ptr.rs":"f65ebf21866a863485344432d9a7a9b7418f7fad5fdf841a4e2fa56ec0766ad0","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":"c4773d435c3f9da4454327e6fbb2b5b41a1c0ebb1cca7372e69dc7a344a1b6e4","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"76bf8cb607e2c442923c1da1061a6b80d742d607408033c2a3761161114cf2a0","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":"ee319eaaa449dc50ea8ef05b89d38519c6faa6753dfdce432ea7bb8520e4e8e7","src/api/ops/vector_shifts.rs":"e510be14127c0ffd58a2573a39701da3557d66bedec09837ac8bbd44d579da00","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"3d614f9d5b4ca201a9f7e46af4405e1d2c28ecee1620297c23b52e37b92cc0ea","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"47a5679896db2cbb56c31372fe42143da015b6beae7db5d2f3a0309ddf427ae1","src/api/reductions/integer_arithmetic.rs":"c2df3cf7493cca4174f2c65aea422a3d20d8a23af03f8d57cef72c19fee8f20d","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"6af8c9aa45c69961b1b6fc205395f4767d4421869fb105fb3d563c5605fc13cd","src/api/select.rs":"6b07e7e8026df561f7307221a896f0fbb272536f41b9109040ac094c24c69331","src/api/shuffle.rs":"26458aec2557bfab41b7765f72aefbff3a7ee08cdc689981a81f133f58ee368b","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"9b6f01ace2d12ef45c84608bb7aad3a122e2cc319b2d99170fc332a568b8de63","src/api/slice/write_to_slice.rs":"244b6bd6ccffa6e5a195f8b1abc66d94251b6d16b2ec3fe4d76d32caec68261e","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codegen.rs":"a29d38fa0a85eaf787fb49989e625bf64effd5f39c126fbb2a24be206d2a3917","src/codegen/bit_manip.rs":"9991570a21ca98134b08b5c5935e2c259cea39c82d9d1529f52c561a84fec642","src/codegen/llvm.rs":"5bc6751293f9f184cf23d5df448c7d58b58b799e41c7a91f8ca41a5ba56e64ec","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":"fc9924869ed85e4795983af228cacf23158f4f35919adce16c920ad4a3f0a009","src/codegen/math/float/mul_add.rs":"a37bf764345d4b1714f97e83897b7cf0855fc2811704bcbc0012db91825339e1","src/codegen/math/float/mul_adde.rs":"9aa6ed39825e61edb2522e002c59c9392d7c655c01af1cf8380ba22c8ddf69cd","src/codegen/math/float/powf.rs":"642346e982bc4c39203de0864d2149c4179cd7b21cf67a2951687932b4675872","src/codegen/math/float/sin.rs":"9d68164c90cdca6a85155040cdac42e27342ebe0b925273ef1593df721af4258","src/codegen/math/float/sin_cos_pi.rs":"e0c661d1d894fd4018723b9f3143ab6771c9405e41907cb1a7b9f9b380a97523","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":"dd68fd8bc5335fa2d0405e59dd1e9fff16fdf7651aa8db670ca86145fd5b5dda","src/codegen/reductions/mask/aarch64.rs":"84b101c17cad1ede4eb6d38cada0ac7da239dba8cea3badd3829b967e558431f","src/codegen/reductions/mask/arm.rs":"aaa07129bd078ae7e677cf8b8e67ec9f30536606a0c7ed1baaa18fd1793bb218","src/codegen/reductions/mask/fallback.rs":"3eb9319d2c7cf19216b607b8459612c4e027b643cf11b036937d36896bf76786","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"36dcd8af4ab99730a078ed113d3955f74eb1a2876e2e6d9f224e0ff462c216d1","src/codegen/reductions/mask/x86/avx.rs":"3a40868b38c86e35aefb96d7578de6322efe89d8135e0366359b54ddd06f861a","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"8522f6ed03f6c32dd577d4298df477c08aeaaa38563706f29096e1911ed731f2","src/codegen/reductions/mask/x86/sse2.rs":"54ec56e49b0c6841eccb719e4f310d65fe767c04136b2ec20bd8b9d7d9897b9e","src/codegen/shuffle.rs":"1ec2930f4e1acc43ac30b518af298d466a79e9e75734a51c380b7810efd1a27f","src/codegen/shuffle1_dyn.rs":"3f13ca1597378758d05106bf5ff3715eee531f3cb6d88f48b9182bd6c9386b51","src/codegen/swap_bytes.rs":"ac659780deb0c52daa9c73afb4ba8645c9fa35350cd897b23e567860492553b7","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":"711c753a08d53a2879c4fb87a0762c46ce4e34c22f0ca88d2e4c557a0f679969","src/codegen/vSize.rs":"c89f5fdeb28ac4c8272ed1816fce03d9d95308cc32bb2533bd8b20cd5ac102ac","src/lib.rs":"5efc09cb3d164e4e38b71fd4999afbfd234f5080dc84ce22fda2fc15d381e8c7","src/masks.rs":"70fc0abe4c2907ce2a491c574e1cfb9f3423385da2e1a923a48c9c13f8ba6ed8","src/sealed.rs":"ae7fdeaf5d84cd7710ed730ca72ca7eaba93df6cb0acb183e5c0a7327acf197f","src/testing.rs":"1d3a7862ef625e235a5734ad7204e68d350f902c0695182b1f08a0552432416e","src/testing/macros.rs":"403bbc5ecb7c786fe36156df302d0c07a8122408dbb15f7474d7682224ba1106","src/testing/utils.rs":"41912a92266dfe884647fc035e4242fd746100df8e839808ae0397af3759a3c8","src/v128.rs":"16cf9a8e7156b899ee9b9cd3f2dba9d13ec63289bea8c3ee9ae2e43ad9510288","src/v16.rs":"cb6465cf1e00bf530183af1819b9fe3d7eec978f8765d5e85d9b58a39a4b4045","src/v256.rs":"fe235017da18c7f3c361831c60e3173ad304d8ea1e95d64ebebc79da2d708511","src/v32.rs":"145d347855bac59b2de6508f9e594654e6c330423af9edc0e2ac8f4d1abdf45e","src/v512.rs":"f372f277f3e62eb5c945bb1c460333fdb17b6974fcc876633788ff53bded9599","src/v64.rs":"0b8079881b71575e3414be0b7f8f7eaba65281ba6732f2b2f61f73e95b6f48f7","src/vPtr.rs":"8b3e433d487180bb4304ff71245ecad90f0010f43e139a72027b672abe58facc","src/vSize.rs":"eda5aa020706cbf94d15bada41a0c2a35fc8f3f37cb7c2cd6f34d201399a495e","tests/endianness.rs":"2783d727e8ff8789211e03120634cd3ad9f8972fc484012681b5b63cf89408a7"},"package":null}
-\ No newline at end of file
-+{"files":{".appveyor.yml":"f1ed01850e0d725f9498f52a1a63ddf40702ad6e0bf5b2d7c4c04d76e96794a3",".travis.yml":"30a61a5ec53355fc1f3585e1690280308c2b7961701abc11e8389b235b647178","Cargo.toml":"2cab084b3d55d0b307788b02a6206a3ec39fee027535dc62d6421bce70e2e2c1","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"fa4dd64f66972217d35b7653338c9e2011ccd8f3008ae7c0103272d4287f9b1d","bors.toml":"dee881dc69b9b7834e4eba5d95c3ed5a416d4628815a167d6a22d4cb4fb064b8","build.rs":"a766fba121243a9b617432c592873801adb74c3a2f4a24d9d45859b8ce9357fc","ci/all.sh":"2ae6b2445b4db83833e40b37efd0016c6b9879ee988b9b3ef94db5439a3e1606","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":"da88c0d50f16dc08448c7fdf1fa5ed2cbe576acf9e7dd85b5b818621b2a8c702","ci/docker/arm-linux-androideabi/Dockerfile":"370e55d3330a413a3ccf677b3afb3e0ef9018a5fab263faa97ae8ac017fc2286","ci/docker/arm-unknown-linux-gnueabi/Dockerfile":"bb5f8ae890707c128652290ffc544447643bf12037ddd73c6ad6989f848cb380","ci/docker/arm-unknown-linux-gnueabihf/Dockerfile":"1afaefcbc05b740859acd4e067bc92439be6bcbe8f2e9678474fb434bcd398d9","ci/docker/armv7-unknown-linux-gnueabihf/Dockerfile":"8282ea707a94109beed47a57574755e2d58401735904a03f85fb64c578c53b4f","ci/docker/i586-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/i686-unknown-linux-gnu/Dockerfile":"49792922269f371bd29da4727e9085101b27be67a6b97755d0196c63317f7abb","ci/docker/mips-unknown-linux-gnu/Dockerfile":"b2ebc25797612c4f8395fe9d407725156044955bfbcf442036b7f55b43a5f9da","ci/docker/mips64-unknown-linux-gnuabi64/Dockerfile":"b0c1692ac65bc56dd30494b1993d8e929c48cc9c4b92029b7c7592af6d4f9220","ci/docker/mips64el-unknown-linux-gnuabi64/Dockerfile":"4e9249c179300138141d0b2b7401b11897f64aed69f541f078c1db4594df2827","ci/docker/mipsel-unknown-linux-musl/Dockerfile":"3164c52b0dcbb01afa78292b15b5c43503ccf0491cf6eb801ec2bf22ae274e52","ci/docker/powerpc-unknown-linux-gnu/Dockerfile":"786f799d0b56eb54d7b6c4b00e1aed4ce81776e14e44767e083c89d014b72004","ci/docker/powerpc64-unknown-linux-gnu/Dockerfile":"e8bc363837cd9c2d8b22402acb8c1c329efc11ba5d12170603d2fe2eae9da059","ci/docker/powerpc64le-unknown-linux-gnu/Dockerfile":"47998d45b781d797b9e6085ebe898d90de0c952b54537a8db4e8d7503eb032d9","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":"51955a8bf3c4d440f47382af6f5426ebff94ab01a04da36175babda9a057740f","ci/docker/wasm32-unknown-unknown/Dockerfile":"5a022299f56730cf8c432a07391e95e199cfa36dc8da2a96c9d185c8de93e913","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":"7f4e3ca5fa288ea70edb4d1f75309708cd30b192e2e4444e61c4d5b3b58f89cf","ci/dox.sh":"434e9611c52e389312d2b03564adf09429f10cc76fe66a8644adb104903b87b7","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":"41dd6a60efaaeae9661a01370cce98b631f78392859a0cf68c946c0a16edf5f7","ci/run_examples.sh":"d1a23c6c35374a0678ba5114b9b8fefd8be0a79e774872a8bf0898d1baca18d0","ci/runtest-android.rs":"145a8e9799a5223975061fe7e586ade5669ee4877a7d7a4cf6b4ab48e8e36c7c","ci/setup_benchmarks.sh":"fae3960023f6f3d1388cd2ad22fdbab4b075f1f29dd4292d7994a20783beb6cf","ci/test-runner-linux":"c8aa6025cff5306f4f31d0c61dc5f9d4dd5a1d189ab613ef8d4c367c694d9ccd","contributing.md":"2d2629310ad4d464c482bdbb5819f0d6ce223c576aeef2cdce6a1f6857085ea5","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":"01197acf6f0adec8db32b8591811f69cecb6555a2b05dc5d5ec27d0e3f7b065e","perf-guide/src/vert-hor-ops.md":"c6211c0ee91e60552ec592d89d9d957eedc21dee3cbd89e1ad6765ea06a27471","rustfmt.toml":"d99a43f3f8ef9e425cf01c333fba9f0051f888f5d87ab4e8f63c2f7d0fe6620f","src/api.rs":"bb1795e9657a8298d37d2349b45443f08e9e455399ad4b727018600728478c10","src/api/bit_manip.rs":"c47a4d0f7451f7e35d07715e4f39a472e07457fd456fdb726864a4f6887252a3","src/api/bitmask.rs":"6d2beefd62ee5d9c8eb060bee6abc641616bf828c99f82abf97b21bf004e894b","src/api/cast.rs":"03b94a3d316ac7b7be7068810044911e965e889a0ace7bae762749ca74a92747","src/api/cast/macros.rs":"b0a14d0c83ad2ebb7a275180f6d9e3f2bc312ba57a7d3d6c39fad4e0f20f9408","src/api/cast/v128.rs":"edd0994efac4379dff26e178423a52dbb3ffeb38b1fc97cae975d744c00b4fb6","src/api/cast/v16.rs":"96bd98c2d21b0663abe6c0ab33005b1fa693f3db7ee6795351391343863484da","src/api/cast/v256.rs":"8c31fe91f5e78ef737dfba6979cc1240210cb094a89d284fe459bf8a991ca24b","src/api/cast/v32.rs":"a99a79dd84d2a5e6adf9db98705675915bd03fd1287d489c7fe38e84d7e4a086","src/api/cast/v512.rs":"c0dd526f41ed7b8a71c3743d91267554ec0a0c75834ccc2e3ecb0ef3004af642","src/api/cast/v64.rs":"6572fdba2a1241a6cd666d3f0cce3306cd2cb7e5e236172e59d5d4351c8a88af","src/api/cmp.rs":"357c3a2a09c6d4611c32dd7fa95be2fae933d513e229026ec9b44451a77b884e","src/api/cmp/eq.rs":"60f70f355bae4cb5b17db53204cacc3890f70670611c17df638d4c04f7cc8075","src/api/cmp/ord.rs":"589f7234761c294fa5df8f525bc4acd5a47cdb602207d524a0d4e19804cd9695","src/api/cmp/partial_eq.rs":"902ccb8aa01fd5738b30ba0b712669c21d4801958907e03bad23432c7dba0198","src/api/cmp/partial_ord.rs":"9db0c37d7434cdfc62d8d66912e972fa3d8c115ab2af051a6f45e414bd3e4f1c","src/api/cmp/vertical.rs":"de3d62f38eba817299aa16f1e1939954c9a447e316509397465c2830852ba053","src/api/default.rs":"67bf21c134127d12a7028c8b88a57f0ceee8ccbd74976da8ca74eb9f16a174d5","src/api/fmt.rs":"67fb804bb86b6cd77cf8cd492b5733ce437071b66fe3297278b8a6552c325dda","src/api/fmt/binary.rs":"02b2b287f7404f8a983813cf70c87108c8da3835578b63ab303116885f609413","src/api/fmt/debug.rs":"56e1c3bdc092747344fffaafff9da7163ee7827857f6fb7cb1c9923eca4f6fa0","src/api/fmt/lower_hex.rs":"558fd592f7f485712fb051509cecc7174a21e6bf62e5ce64766e75afc97bb8e1","src/api/fmt/octal.rs":"3b2e70877a4f368c7704f8e254236c014c365c74d93371c1feb5f030e6c66422","src/api/fmt/upper_hex.rs":"2a442f666bc80e22d41f903f881238fe114dd49344c3ed69849250e853cafc5d","src/api/from.rs":"2e599d8329cb05eaf06224cc441355c4b7b51254fc19256619333be8c149d444","src/api/from/from_array.rs":"dd3fc64fb17d6184bb60343f8da26a05edf0e5f3c14caf55d49fa15e21d948dc","src/api/from/from_vector.rs":"9764371aa9e6005aace74dea14f59e5611a095b7cf42707940924749282c52f0","src/api/hash.rs":"5076ece87969592c876486f5b1ea8affbeaec379d1a14a30859e0aa5592019de","src/api/into_bits.rs":"1ee15923352786b9ab4a31fa506762297116b18cfdb8e72853abc8ad001651d2","src/api/into_bits/arch_specific.rs":"e7445021f3908326bfee758835e5fc5ad56aa1baa77fc1c58abe4350c66c670a","src/api/into_bits/macros.rs":"bb4fe99be2af6a21d805efab44c8e4e61a7b2adb42a65504a0cf26d13efdadcd","src/api/into_bits/v128.rs":"145a44922b09a5ca5b62d88a461d327d399a997a15db4b11d7b17e554a9fa4c0","src/api/into_bits/v16.rs":"f4f4f61ba88aa51b158ec56ca3dce234349aea0daf2b3029a14ab5125d1e41e5","src/api/into_bits/v256.rs":"8cea9c5d9809f11323cb7cdc53b83df593fd17caf926251e412ae9777bed547f","src/api/into_bits/v32.rs":"905ba683d342fa32f4202b80bb46530807bd0a5b588f6c2e8c9f475223c47775","src/api/into_bits/v512.rs":"e25afa1fbf088a5d58e7d75d197b6cd4c56637ea28542ba18e46a451f29d04e7","src/api/into_bits/v64.rs":"d6238022ccff7b92e55b3f6017fc269acb6f36330a6d7e8fb389853a0f1b6478","src/api/math.rs":"8b2a2fc651917a850539f993aa0b9e5bf4da67b11685285b8de8cdca311719ec","src/api/math/float.rs":"61d2794d68262a1090ae473bd30793b5f65cf732f32a6694a3af2ce5d9225616","src/api/math/float/abs.rs":"5b6b2701e2e11135b7ce58a05052ea8120e10e4702c95d046b9d21b827b26bf8","src/api/math/float/consts.rs":"6302c9261da4291d144d5bb53493cdd073498feb40955fb6860ea3c4d06c978a","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":"819cff26d3e196f807645bcc1d79eb27d9f175edb89910f2274d52a1e913cd11","src/api/minimal/mask.rs":"0cae10ae1fc65f5070e686c0c79bfba27b86b33d6c399367bd4848fb367dcec4","src/api/minimal/ptr.rs":"f65ebf21866a863485344432d9a7a9b7418f7fad5fdf841a4e2fa56ec0766ad0","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":"c4773d435c3f9da4454327e6fbb2b5b41a1c0ebb1cca7372e69dc7a344a1b6e4","src/api/ops/vector_arithmetic.rs":"ddca15d09ddeef502c2ed66117a62300ca65d87e959e8b622d767bdf1c307910","src/api/ops/vector_bitwise.rs":"b3968f7005b649edcc22a54e2379b14d5ee19045f2e784029805781ae043b5ee","src/api/ops/vector_float_min_max.rs":"76bf8cb607e2c442923c1da1061a6b80d742d607408033c2a3761161114cf2a0","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":"ee319eaaa449dc50ea8ef05b89d38519c6faa6753dfdce432ea7bb8520e4e8e7","src/api/ops/vector_shifts.rs":"e510be14127c0ffd58a2573a39701da3557d66bedec09837ac8bbd44d579da00","src/api/ptr.rs":"8a793251bed6130dcfb2f1519ceaa18b751bbb15875928d0fb6deb5a5e07523a","src/api/ptr/gather_scatter.rs":"3d614f9d5b4ca201a9f7e46af4405e1d2c28ecee1620297c23b52e37b92cc0ea","src/api/reductions.rs":"ae5baca81352ecd44526d6c30c0a1feeda475ec73ddd3c3ec6b14e944e5448ee","src/api/reductions/bitwise.rs":"8bf910ae226188bd15fc7e125f058cd2566b6186fcd0cd8fd020f352c39ce139","src/api/reductions/float_arithmetic.rs":"47a5679896db2cbb56c31372fe42143da015b6beae7db5d2f3a0309ddf427ae1","src/api/reductions/integer_arithmetic.rs":"c2df3cf7493cca4174f2c65aea422a3d20d8a23af03f8d57cef72c19fee8f20d","src/api/reductions/mask.rs":"db83327a950e33a317f37fd33ca4e20c347fb415975ec024f3e23da8509425af","src/api/reductions/min_max.rs":"6af8c9aa45c69961b1b6fc205395f4767d4421869fb105fb3d563c5605fc13cd","src/api/select.rs":"6b07e7e8026df561f7307221a896f0fbb272536f41b9109040ac094c24c69331","src/api/shuffle.rs":"26458aec2557bfab41b7765f72aefbff3a7ee08cdc689981a81f133f58ee368b","src/api/shuffle1_dyn.rs":"bfea5a91905b31444e9ef7ca6eddb7a9606b7e22d3f71bb842eb2795a0346620","src/api/slice.rs":"ee87484e8af329547b9a5d4f2a69e8bed6ea10bbd96270d706083843d4eea2ac","src/api/slice/from_slice.rs":"9b6f01ace2d12ef45c84608bb7aad3a122e2cc319b2d99170fc332a568b8de63","src/api/slice/write_to_slice.rs":"244b6bd6ccffa6e5a195f8b1abc66d94251b6d16b2ec3fe4d76d32caec68261e","src/api/swap_bytes.rs":"4a6792a2e49a77475e1b237592b4b2804dbddb79c474331acd0dd71b36934259","src/codegen.rs":"db4f232fb9f5728db310b87dc8c4733be48afacab1053798c06106bef9a42b05","src/codegen/bit_manip.rs":"525ea6ff7ad1e043b6f6136992166f1803ed5563b7f6fc292c1c40257d20e264","src/codegen/llvm.rs":"b4ccbc0bad90038f00fc3c158736462d01d0053df3afa00f9169e67d1a264444","src/codegen/math.rs":"dfcf02ad34e2fdfe22c3f1cc2822001cc895e65031b4d06e585e5047839febb7","src/codegen/math/float.rs":"2c1cbce155bc527ce34d472c0fef6bc3dadb79cd7a357dd7aa5b1ebeb1d77a13","src/codegen/math/float/abs.rs":"d5aaadcf540bdb9b4264dca6471a255fd7bf509e763bef0239c0144a68466fea","src/codegen/math/float/cos.rs":"17f28d2900c852dca221fa9c92a9cd5fe7fd2df8d427bbc60216c749b2be013d","src/codegen/math/float/cos_pi.rs":"dbaf9f443f9846a491d4ec52210a7b5835dd593b03366e3135b05c37d70f9d6c","src/codegen/math/float/exp.rs":"d300058a4bcc7ae7976f216f81902cd73a9e603ad63880dff3bbc866c27a9f37","src/codegen/math/float/ln.rs":"c851e211e43f8256093ba75b03ae0c307c9962ee66d94f09b4dd80068190cbdf","src/codegen/math/float/macros.rs":"fc9924869ed85e4795983af228cacf23158f4f35919adce16c920ad4a3f0a009","src/codegen/math/float/mul_add.rs":"041a5b69d5991d93ef795351b17560c10faf80b78fd26ad7df42a239b32cf9de","src/codegen/math/float/mul_adde.rs":"d71d5f0f3333b62a7439b823cb7adf5340ea1555ce820fb4a3f4cb922f73f5f5","src/codegen/math/float/powf.rs":"9742c3877f1a5509ca5c9492a40884b6579ba6dd11c26b7112e63f70666b395d","src/codegen/math/float/sin.rs":"0e9868d35531566509f3a01d85d5253045eb4afa8525d8407dcc1f5f33c56036","src/codegen/math/float/sin_cos_pi.rs":"8e6b6142d7dd240cdb36669722e82ab9810a2261e86e659f7d97a942ad8b1258","src/codegen/math/float/sin_pi.rs":"bb6d39db8f921e03a301fc5206ac1a61a97def8a2cb83b87ccf189f3fc48d548","src/codegen/math/float/sqrt.rs":"e6ebb0c5f428efad1f672b9a8fe4e58534dbf1ea5a8fe092ce5ce76b52fe89cb","src/codegen/math/float/sqrte.rs":"23acfaea38d0e081a6d9021c1094e813d0cfd12c58c1eca9662aade5e625d51c","src/codegen/pointer_sized_int.rs":"6ca13c214b6cf7e0929dbe18e96a16fc0bb7d8799608df29c4c8115490f99e01","src/codegen/reductions.rs":"8eb18ebac76985d2aa30262a2edd8cb004230b511a765d657525f677a585c12c","src/codegen/reductions/mask.rs":"e67f35a1f4d156a4894a2d6ea5a935b4d898cf70eefb2715f5c1cc165e776c11","src/codegen/reductions/mask/aarch64.rs":"84b101c17cad1ede4eb6d38cada0ac7da239dba8cea3badd3829b967e558431f","src/codegen/reductions/mask/arm.rs":"aaa07129bd078ae7e677cf8b8e67ec9f30536606a0c7ed1baaa18fd1793bb218","src/codegen/reductions/mask/fallback.rs":"3eb9319d2c7cf19216b607b8459612c4e027b643cf11b036937d36896bf76786","src/codegen/reductions/mask/fallback_impl.rs":"76547f396e55ef403327c77c314cf8db8c7a5c9b9819bfb925abeacf130249e5","src/codegen/reductions/mask/x86.rs":"36dcd8af4ab99730a078ed113d3955f74eb1a2876e2e6d9f224e0ff462c216d1","src/codegen/reductions/mask/x86/avx.rs":"3a40868b38c86e35aefb96d7578de6322efe89d8135e0366359b54ddd06f861a","src/codegen/reductions/mask/x86/avx2.rs":"677aed3f056285285daa3adff8bc65e739630b4424defa6d9665e160f027507e","src/codegen/reductions/mask/x86/sse.rs":"8522f6ed03f6c32dd577d4298df477c08aeaaa38563706f29096e1911ed731f2","src/codegen/reductions/mask/x86/sse2.rs":"54ec56e49b0c6841eccb719e4f310d65fe767c04136b2ec20bd8b9d7d9897b9e","src/codegen/shuffle.rs":"1ec2930f4e1acc43ac30b518af298d466a79e9e75734a51c380b7810efd1a27f","src/codegen/shuffle1_dyn.rs":"3f13ca1597378758d05106bf5ff3715eee531f3cb6d88f48b9182bd6c9386b51","src/codegen/swap_bytes.rs":"c67c86e91ca3fc77539e0efcea081a3c62548cccf503963ae408f2e86f4e6a21","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":"f0753b405cdc865bdf8e82c6505f299ea1f96136239ebbaf7f9ce93d310764b8","src/codegen/vSize.rs":"c89f5fdeb28ac4c8272ed1816fce03d9d95308cc32bb2533bd8b20cd5ac102ac","src/lib.rs":"b6f846d5d30cf6b035a2d18039aba7b2045cf89384733d643572bd68873ae064","src/masks.rs":"70fc0abe4c2907ce2a491c574e1cfb9f3423385da2e1a923a48c9c13f8ba6ed8","src/sealed.rs":"ae7fdeaf5d84cd7710ed730ca72ca7eaba93df6cb0acb183e5c0a7327acf197f","src/testing.rs":"896669c08d8c801448a4d2fadc9d633eda0fbe879d229997e2a182e31278e469","src/testing/macros.rs":"403bbc5ecb7c786fe36156df302d0c07a8122408dbb15f7474d7682224ba1106","src/testing/utils.rs":"41912a92266dfe884647fc035e4242fd746100df8e839808ae0397af3759a3c8","src/v128.rs":"16cf9a8e7156b899ee9b9cd3f2dba9d13ec63289bea8c3ee9ae2e43ad9510288","src/v16.rs":"cb6465cf1e00bf530183af1819b9fe3d7eec978f8765d5e85d9b58a39a4b4045","src/v256.rs":"fe235017da18c7f3c361831c60e3173ad304d8ea1e95d64ebebc79da2d708511","src/v32.rs":"145d347855bac59b2de6508f9e594654e6c330423af9edc0e2ac8f4d1abdf45e","src/v512.rs":"f372f277f3e62eb5c945bb1c460333fdb17b6974fcc876633788ff53bded9599","src/v64.rs":"0b8079881b71575e3414be0b7f8f7eaba65281ba6732f2b2f61f73e95b6f48f7","src/vPtr.rs":"8b3e433d487180bb4304ff71245ecad90f0010f43e139a72027b672abe58facc","src/vSize.rs":"eda5aa020706cbf94d15bada41a0c2a35fc8f3f37cb7c2cd6f34d201399a495e","tests/endianness.rs":"2783d727e8ff8789211e03120634cd3ad9f8972fc484012681b5b63cf89408a7"},"package":null}
-\ No newline at end of file
-diff --git a/third_party/rust/packed_simd_2/Cargo.toml b/third_party/rust/packed_simd_2/Cargo.toml
---- a/third_party/rust/packed_simd_2/Cargo.toml
-+++ b/third_party/rust/packed_simd_2/Cargo.toml
-@@ -1,11 +1,11 @@
- [package]
- name = "packed_simd_2"
--version = "0.3.7"
-+version = "0.3.8"
- description = "Portable Packed SIMD vectors"
- documentation = "https://docs.rs/crate/packed_simd/"
- homepage = "https://github.com/rust-lang/packed_simd"
- repository = "https://github.com/rust-lang/packed_simd"
- keywords = ["simd", "vector", "portability"]
- categories = ["hardware-support", "concurrency", "no-std", "data-structures"]
- license = "MIT OR Apache-2.0"
- build = "build.rs"
-@@ -18,16 +18,19 @@ codecov = { repository = "rust-lang/pack
- is-it-maintained-issue-resolution = { repository = "rust-lang/packed_simd" }
- is-it-maintained-open-issues = { repository = "rust-lang/packed_simd" }
- maintenance = { status = "experimental" }
-
- [dependencies]
- cfg-if = "1.0.0"
- core_arch = { version = "0.1.5", optional = true }
-
-+[build-dependencies]
-+rustc_version = "0.4"
-+
- [features]
- default = []
- into_bits = []
- libcore_neon = []
-
- [dev-dependencies]
- paste = "^0.1.3"
- arrayvec = { version = "^0.5", default-features = false }
-diff --git a/third_party/rust/packed_simd_2/README.md b/third_party/rust/packed_simd_2/README.md
---- a/third_party/rust/packed_simd_2/README.md
-+++ b/third_party/rust/packed_simd_2/README.md
-@@ -3,17 +3,17 @@
- The original maintainer is out of contact, and the new maintainers (the Portable SIMD Project Group) do not have the appropriate crates.io permissions to issue updates.
-
- We are aware that the version available on crates.io is currently broken, and will not build.
-
- If you need to continue to use the crate, we have published a "next version" under an alternative name.
-
- Adjust your `[dependencies]` section of `Cargo.toml` to be the following:
- ```toml
--packed_simd = { version = "0.3.6", package = "packed_simd_2" }
-+packed_simd = { version = "0.3.8", package = "packed_simd_2" }
- ```
-
- # `Simd<[T; N]>`
-
- ## Implementation of [Rust RFC #2366: `std::simd`][rfc2366]
-
- [![Travis-CI Status]][travis] <!-- [![Appveyor Status]][appveyor] --> [![Latest Version]][crates.io] [![docs]][master_docs]
-
-diff --git a/third_party/rust/packed_simd_2/build.rs b/third_party/rust/packed_simd_2/build.rs
---- a/third_party/rust/packed_simd_2/build.rs
-+++ b/third_party/rust/packed_simd_2/build.rs
-@@ -1,6 +1,11 @@
-+use rustc_version::{version, Version};
-+
- fn main() {
- let target = std::env::var("TARGET").expect("TARGET environment variable not defined");
- if target.contains("neon") {
- println!("cargo:rustc-cfg=libcore_neon");
- }
-+ if version().unwrap() < Version::parse("1.61.0-alpha").unwrap() {
-+ println!("cargo:rustc-cfg=aarch64_target_feature");
-+ }
- }
-diff --git a/third_party/rust/packed_simd_2/src/api.rs b/third_party/rust/packed_simd_2/src/api.rs
---- a/third_party/rust/packed_simd_2/src/api.rs
-+++ b/third_party/rust/packed_simd_2/src/api.rs
-@@ -1,13 +1,13 @@
- //! Implements the Simd<[T; N]> APIs
-
- #[macro_use]
- mod bitmask;
--crate mod cast;
-+pub(crate) mod cast;
- #[macro_use]
- mod cmp;
- #[macro_use]
- mod default;
- #[macro_use]
- mod fmt;
- #[macro_use]
- mod from;
-@@ -32,17 +32,17 @@ mod shuffle1_dyn;
- #[macro_use]
- mod slice;
- #[macro_use]
- mod swap_bytes;
- #[macro_use]
- mod bit_manip;
-
- #[cfg(feature = "into_bits")]
--crate mod into_bits;
-+pub(crate) mod into_bits;
-
- macro_rules! impl_i {
- ([$elem_ty:ident; $elem_n:expr]: $tuple_id:ident, $mask_ty:ident
- | $ielem_ty:ident, $ibitmask_ty:ident | $test_tt:tt | $($elem_ids:ident),*
- | From: $($from_vec_ty:ident),* | $(#[$doc:meta])*) => {
- impl_minimal_iuf!([$elem_ty; $elem_n]: $tuple_id | $ielem_ty | $test_tt
- | $($elem_ids),* | $(#[$doc])*);
- impl_ops_vector_arithmetic!([$elem_ty; $elem_n]: $tuple_id | $test_tt);
-diff --git a/third_party/rust/packed_simd_2/src/codegen.rs b/third_party/rust/packed_simd_2/src/codegen.rs
---- a/third_party/rust/packed_simd_2/src/codegen.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen.rs
-@@ -1,24 +1,24 @@
- //! Code-generation utilities
-
--crate mod bit_manip;
--crate mod llvm;
--crate mod math;
--crate mod reductions;
--crate mod shuffle;
--crate mod shuffle1_dyn;
--crate mod swap_bytes;
-+pub(crate) mod bit_manip;
-+pub(crate) mod llvm;
-+pub(crate) mod math;
-+pub(crate) mod reductions;
-+pub(crate) mod shuffle;
-+pub(crate) mod shuffle1_dyn;
-+pub(crate) mod swap_bytes;
-
- macro_rules! impl_simd_array {
- ([$elem_ty:ident; $elem_count:expr]:
- $tuple_id:ident | $($elem_tys:ident),*) => {
- #[derive(Copy, Clone)]
- #[repr(simd)]
-- pub struct $tuple_id($(crate $elem_tys),*);
-+ pub struct $tuple_id($(pub(crate) $elem_tys),*);
- //^^^^^^^ leaked through SimdArray
-
- impl crate::sealed::Seal for [$elem_ty; $elem_count] {}
-
- impl crate::sealed::SimdArray for [$elem_ty; $elem_count] {
- type Tuple = $tuple_id;
- type T = $elem_ty;
- const N: usize = $elem_count;
-@@ -30,33 +30,33 @@ macro_rules! impl_simd_array {
- type Element = $elem_ty;
- const LANES: usize = $elem_count;
- type LanesType = [u32; $elem_count];
- }
-
- }
- }
-
--crate mod pointer_sized_int;
-+pub(crate) mod pointer_sized_int;
-
--crate mod v16;
--crate use self::v16::*;
-+pub(crate) mod v16;
-+pub(crate) use self::v16::*;
-
--crate mod v32;
--crate use self::v32::*;
-+pub(crate) mod v32;
-+pub(crate) use self::v32::*;
-
--crate mod v64;
--crate use self::v64::*;
-+pub(crate) mod v64;
-+pub(crate) use self::v64::*;
-
--crate mod v128;
--crate use self::v128::*;
-+pub(crate) mod v128;
-+pub(crate) use self::v128::*;
-
--crate mod v256;
--crate use self::v256::*;
-+pub(crate) mod v256;
-+pub(crate) use self::v256::*;
-
--crate mod v512;
--crate use self::v512::*;
-+pub(crate) mod v512;
-+pub(crate) use self::v512::*;
-
--crate mod vSize;
--crate use self::vSize::*;
-+pub(crate) mod vSize;
-+pub(crate) use self::vSize::*;
-
--crate mod vPtr;
--crate use self::vPtr::*;
-+pub(crate) mod vPtr;
-+pub(crate) use self::vPtr::*;
-diff --git a/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs b/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs
---- a/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/bit_manip.rs
-@@ -1,12 +1,12 @@
- //! LLVM bit manipulation intrinsics.
- #[rustfmt::skip]
-
--use crate::*;
-+pub(crate) use crate::*;
-
- #[allow(improper_ctypes, dead_code)]
- extern "C" {
- #[link_name = "llvm.ctlz.v2i8"]
- fn ctlz_u8x2(x: u8x2, is_zero_undef: bool) -> u8x2;
- #[link_name = "llvm.ctlz.v4i8"]
- fn ctlz_u8x4(x: u8x4, is_zero_undef: bool) -> u8x4;
- #[link_name = "llvm.ctlz.v8i8"]
-@@ -142,17 +142,17 @@ extern "C" {
- #[link_name = "llvm.ctpop.v1i128"]
- fn ctpop_u128x1(x: u128x1) -> u128x1;
- #[link_name = "llvm.ctpop.v2i128"]
- fn ctpop_u128x2(x: u128x2) -> u128x2;
- #[link_name = "llvm.ctpop.v4i128"]
- fn ctpop_u128x4(x: u128x4) -> u128x4;
- }
-
--crate trait BitManip {
-+pub(crate) trait BitManip {
- fn ctpop(self) -> Self;
- fn ctlz(self) -> Self;
- fn cttz(self) -> Self;
- }
-
- macro_rules! impl_bit_manip {
- (inner: $ty:ident, $scalar:ty, $uty:ident,
- $ctpop:ident, $ctlz:ident, $cttz:ident) => {
-diff --git a/third_party/rust/packed_simd_2/src/codegen/llvm.rs b/third_party/rust/packed_simd_2/src/codegen/llvm.rs
---- a/third_party/rust/packed_simd_2/src/codegen/llvm.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/llvm.rs
-@@ -71,58 +71,58 @@ pub unsafe fn __shuffle_vector64<const I
- where
- T: Simd,
- <T as Simd>::Element: Shuffle<[u32; 64], Output = U>,
- {
- simd_shuffle64(x, y, IDX)
- }
-
- extern "platform-intrinsic" {
-- crate fn simd_eq<T, U>(x: T, y: T) -> U;
-- crate fn simd_ne<T, U>(x: T, y: T) -> U;
-- crate fn simd_lt<T, U>(x: T, y: T) -> U;
-- crate fn simd_le<T, U>(x: T, y: T) -> U;
-- crate fn simd_gt<T, U>(x: T, y: T) -> U;
-- crate fn simd_ge<T, U>(x: T, y: T) -> U;
-+ pub(crate) fn simd_eq<T, U>(x: T, y: T) -> U;
-+ pub(crate) fn simd_ne<T, U>(x: T, y: T) -> U;
-+ pub(crate) fn simd_lt<T, U>(x: T, y: T) -> U;
-+ pub(crate) fn simd_le<T, U>(x: T, y: T) -> U;
-+ pub(crate) fn simd_gt<T, U>(x: T, y: T) -> U;
-+ pub(crate) fn simd_ge<T, U>(x: T, y: T) -> U;
-
-- crate fn simd_insert<T, U>(x: T, idx: u32, val: U) -> T;
-- crate fn simd_extract<T, U>(x: T, idx: u32) -> U;
-+ pub(crate) fn simd_insert<T, U>(x: T, idx: u32, val: U) -> T;
-+ pub(crate) fn simd_extract<T, U>(x: T, idx: u32) -> U;
-
-- crate fn simd_cast<T, U>(x: T) -> U;
-+ pub(crate) fn simd_cast<T, U>(x: T) -> U;
-
-- crate fn simd_add<T>(x: T, y: T) -> T;
-- crate fn simd_sub<T>(x: T, y: T) -> T;
-- crate fn simd_mul<T>(x: T, y: T) -> T;
-- crate fn simd_div<T>(x: T, y: T) -> T;
-- crate fn simd_rem<T>(x: T, y: T) -> T;
-- crate fn simd_shl<T>(x: T, y: T) -> T;
-- crate fn simd_shr<T>(x: T, y: T) -> T;
-- crate fn simd_and<T>(x: T, y: T) -> T;
-- crate fn simd_or<T>(x: T, y: T) -> T;
-- crate fn simd_xor<T>(x: T, y: T) -> T;
-+ pub(crate) fn simd_add<T>(x: T, y: T) -> T;
-+ pub(crate) fn simd_sub<T>(x: T, y: T) -> T;
-+ pub(crate) fn simd_mul<T>(x: T, y: T) -> T;
-+ pub(crate) fn simd_div<T>(x: T, y: T) -> T;
-+ pub(crate) fn simd_rem<T>(x: T, y: T) -> T;
-+ pub(crate) fn simd_shl<T>(x: T, y: T) -> T;
-+ pub(crate) fn simd_shr<T>(x: T, y: T) -> T;
-+ pub(crate) fn simd_and<T>(x: T, y: T) -> T;
-+ pub(crate) fn simd_or<T>(x: T, y: T) -> T;
-+ pub(crate) fn simd_xor<T>(x: T, y: T) -> T;
-
-- crate fn simd_reduce_add_unordered<T, U>(x: T) -> U;
-- crate fn simd_reduce_mul_unordered<T, U>(x: T) -> U;
-- crate fn simd_reduce_add_ordered<T, U>(x: T, acc: U) -> U;
-- crate fn simd_reduce_mul_ordered<T, U>(x: T, acc: U) -> U;
-- crate fn simd_reduce_min<T, U>(x: T) -> U;
-- crate fn simd_reduce_max<T, U>(x: T) -> U;
-- crate fn simd_reduce_min_nanless<T, U>(x: T) -> U;
-- crate fn simd_reduce_max_nanless<T, U>(x: T) -> U;
-- crate fn simd_reduce_and<T, U>(x: T) -> U;
-- crate fn simd_reduce_or<T, U>(x: T) -> U;
-- crate fn simd_reduce_xor<T, U>(x: T) -> U;
-- crate fn simd_reduce_all<T>(x: T) -> bool;
-- crate fn simd_reduce_any<T>(x: T) -> bool;
-+ pub(crate) fn simd_reduce_add_unordered<T, U>(x: T) -> U;
-+ pub(crate) fn simd_reduce_mul_unordered<T, U>(x: T) -> U;
-+ pub(crate) fn simd_reduce_add_ordered<T, U>(x: T, acc: U) -> U;
-+ pub(crate) fn simd_reduce_mul_ordered<T, U>(x: T, acc: U) -> U;
-+ pub(crate) fn simd_reduce_min<T, U>(x: T) -> U;
-+ pub(crate) fn simd_reduce_max<T, U>(x: T) -> U;
-+ pub(crate) fn simd_reduce_min_nanless<T, U>(x: T) -> U;
-+ pub(crate) fn simd_reduce_max_nanless<T, U>(x: T) -> U;
-+ pub(crate) fn simd_reduce_and<T, U>(x: T) -> U;
-+ pub(crate) fn simd_reduce_or<T, U>(x: T) -> U;
-+ pub(crate) fn simd_reduce_xor<T, U>(x: T) -> U;
-+ pub(crate) fn simd_reduce_all<T>(x: T) -> bool;
-+ pub(crate) fn simd_reduce_any<T>(x: T) -> bool;
-
-- crate fn simd_select<M, T>(m: M, a: T, b: T) -> T;
-+ pub(crate) fn simd_select<M, T>(m: M, a: T, b: T) -> T;
-
-- crate fn simd_fmin<T>(a: T, b: T) -> T;
-- crate fn simd_fmax<T>(a: T, b: T) -> T;
-+ pub(crate) fn simd_fmin<T>(a: T, b: T) -> T;
-+ pub(crate) fn simd_fmax<T>(a: T, b: T) -> T;
-
-- crate fn simd_fsqrt<T>(a: T) -> T;
-- crate fn simd_fma<T>(a: T, b: T, c: T) -> T;
-+ pub(crate) fn simd_fsqrt<T>(a: T) -> T;
-+ pub(crate) fn simd_fma<T>(a: T, b: T, c: T) -> T;
-
-- crate fn simd_gather<T, P, M>(value: T, pointers: P, mask: M) -> T;
-- crate fn simd_scatter<T, P, M>(value: T, pointers: P, mask: M);
-+ pub(crate) fn simd_gather<T, P, M>(value: T, pointers: P, mask: M) -> T;
-+ pub(crate) fn simd_scatter<T, P, M>(value: T, pointers: P, mask: M);
-
-- crate fn simd_bitmask<T, U>(value: T) -> U;
-+ pub(crate) fn simd_bitmask<T, U>(value: T) -> U;
- }
-diff --git a/third_party/rust/packed_simd_2/src/codegen/math.rs b/third_party/rust/packed_simd_2/src/codegen/math.rs
---- a/third_party/rust/packed_simd_2/src/codegen/math.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/math.rs
-@@ -1,3 +1,3 @@
- //! Vertical math operations
-
--crate mod float;
-+pub(crate) mod float;
-diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float.rs b/third_party/rust/packed_simd_2/src/codegen/math/float.rs
---- a/third_party/rust/packed_simd_2/src/codegen/math/float.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/math/float.rs
-@@ -1,18 +1,18 @@
- //! Vertical floating-point math operations.
- #![allow(clippy::useless_transmute)]
-
- #[macro_use]
--crate mod macros;
--crate mod abs;
--crate mod cos;
--crate mod cos_pi;
--crate mod exp;
--crate mod ln;
--crate mod mul_add;
--crate mod mul_adde;
--crate mod powf;
--crate mod sin;
--crate mod sin_cos_pi;
--crate mod sin_pi;
--crate mod sqrt;
--crate mod sqrte;
-+pub(crate) mod macros;
-+pub(crate) mod abs;
-+pub(crate) mod cos;
-+pub(crate) mod cos_pi;
-+pub(crate) mod exp;
-+pub(crate) mod ln;
-+pub(crate) mod mul_add;
-+pub(crate) mod mul_adde;
-+pub(crate) mod powf;
-+pub(crate) mod sin;
-+pub(crate) mod sin_cos_pi;
-+pub(crate) mod sin_pi;
-+pub(crate) mod sqrt;
-+pub(crate) mod sqrte;
-diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs
---- a/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/math/float/abs.rs
-@@ -1,16 +1,16 @@
- //! Vertical floating-point `fabs`
- #![allow(unused)]
-
- // FIXME 64-bit 1 elem vectors fabs
-
- use crate::*;
-
--crate trait Abs {
-+pub(crate) trait Abs {
- fn abs(self) -> Self;
- }
-
- #[allow(improper_ctypes)]
- extern "C" {
- #[link_name = "llvm.fabs.v2f32"]
- fn fabs_v2f32(x: f32x2) -> f32x2;
- #[link_name = "llvm.fabs.v4f32"]
-diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs
---- a/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/math/float/cos.rs
-@@ -1,16 +1,16 @@
- //! Vertical floating-point `cos`
- #![allow(unused)]
-
- // FIXME 64-bit 1 elem vector cos
-
- use crate::*;
-
--crate trait Cos {
-+pub(crate) trait Cos {
- fn cos(self) -> Self;
- }
-
- #[allow(improper_ctypes)]
- extern "C" {
- #[link_name = "llvm.cos.v2f32"]
- fn cos_v2f32(x: f32x2) -> f32x2;
- #[link_name = "llvm.cos.v4f32"]
-diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs
---- a/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/math/float/cos_pi.rs
-@@ -1,16 +1,16 @@
- //! Vertical floating-point `cos`
- #![allow(unused)]
-
- // FIXME 64-bit 1 elem vectors cos_pi
-
- use crate::*;
-
--crate trait CosPi {
-+pub(crate) trait CosPi {
- fn cos_pi(self) -> Self;
- }
-
- gen_unary_impl_table!(CosPi, cos_pi);
-
- macro_rules! impl_def {
- ($vid:ident, $PI:path) => {
- impl CosPi for $vid {
-diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs
---- a/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/math/float/exp.rs
-@@ -1,16 +1,16 @@
- //! Vertical floating-point `exp`
- #![allow(unused)]
-
- // FIXME 64-bit expgle elem vectors misexpg
-
- use crate::*;
-
--crate trait Exp {
-+pub(crate) trait Exp {
- fn exp(self) -> Self;
- }
-
- #[allow(improper_ctypes)]
- extern "C" {
- #[link_name = "llvm.exp.v2f32"]
- fn exp_v2f32(x: f32x2) -> f32x2;
- #[link_name = "llvm.exp.v4f32"]
-diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs
---- a/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/math/float/ln.rs
-@@ -1,16 +1,16 @@
- //! Vertical floating-point `ln`
- #![allow(unused)]
-
- // FIXME 64-bit lngle elem vectors mislng
-
- use crate::*;
-
--crate trait Ln {
-+pub(crate) trait Ln {
- fn ln(self) -> Self;
- }
-
- #[allow(improper_ctypes)]
- extern "C" {
- #[link_name = "llvm.log.v2f32"]
- fn ln_v2f32(x: f32x2) -> f32x2;
- #[link_name = "llvm.log.v4f32"]
-diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs
---- a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_add.rs
-@@ -1,15 +1,15 @@
- //! Vertical floating-point `mul_add`
- #![allow(unused)]
- use crate::*;
-
- // FIXME: 64-bit 1 element mul_add
-
--crate trait MulAdd {
-+pub(crate) trait MulAdd {
- fn mul_add(self, y: Self, z: Self) -> Self;
- }
-
- #[cfg(not(target_arch = "s390x"))]
- #[allow(improper_ctypes)]
- extern "C" {
- #[link_name = "llvm.fma.v2f32"]
- fn fma_v2f32(x: f32x2, y: f32x2, z: f32x2) -> f32x2;
-diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs
---- a/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/math/float/mul_adde.rs
-@@ -1,14 +1,14 @@
- //! Approximation for floating-point `mul_add`
- use crate::*;
-
- // FIXME: 64-bit 1 element mul_adde
-
--crate trait MulAddE {
-+pub(crate) trait MulAddE {
- fn mul_adde(self, y: Self, z: Self) -> Self;
- }
-
- #[cfg(not(target_arch = "s390x"))]
- #[allow(improper_ctypes)]
- extern "C" {
- #[link_name = "llvm.fmuladd.v2f32"]
- fn fmuladd_v2f32(x: f32x2, y: f32x2, z: f32x2) -> f32x2;
-diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs
---- a/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/math/float/powf.rs
-@@ -1,16 +1,16 @@
- //! Vertical floating-point `powf`
- #![allow(unused)]
-
- // FIXME 64-bit powfgle elem vectors mispowfg
-
- use crate::*;
-
--crate trait Powf {
-+pub(crate) trait Powf {
- fn powf(self, x: Self) -> Self;
- }
-
- #[allow(improper_ctypes)]
- extern "C" {
- #[link_name = "llvm.pow.v2f32"]
- fn powf_v2f32(x: f32x2, y: f32x2) -> f32x2;
- #[link_name = "llvm.pow.v4f32"]
-diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs
---- a/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sin.rs
-@@ -1,16 +1,16 @@
- //! Vertical floating-point `sin`
- #![allow(unused)]
-
- // FIXME 64-bit 1 elem vectors sin
-
- use crate::*;
-
--crate trait Sin {
-+pub(crate) trait Sin {
- fn sin(self) -> Self;
- }
-
- #[allow(improper_ctypes)]
- extern "C" {
- #[link_name = "llvm.sin.v2f32"]
- fn sin_v2f32(x: f32x2) -> f32x2;
- #[link_name = "llvm.sin.v4f32"]
-diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs
---- a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_cos_pi.rs
-@@ -1,16 +1,16 @@
- //! Vertical floating-point `sin_cos`
- #![allow(unused)]
-
- // FIXME 64-bit 1 elem vectors sin_cos
-
- use crate::*;
-
--crate trait SinCosPi: Sized {
-+pub(crate) trait SinCosPi: Sized {
- type Output;
- fn sin_cos_pi(self) -> Self::Output;
- }
-
- macro_rules! impl_def {
- ($vid:ident, $PI:path) => {
- impl SinCosPi for $vid {
- type Output = (Self, Self);
-diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs
---- a/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sin_pi.rs
-@@ -1,16 +1,16 @@
- //! Vertical floating-point `sin_pi`
- #![allow(unused)]
-
- // FIXME 64-bit 1 elem vectors sin_pi
-
- use crate::*;
-
--crate trait SinPi {
-+pub(crate) trait SinPi {
- fn sin_pi(self) -> Self;
- }
-
- gen_unary_impl_table!(SinPi, sin_pi);
-
- macro_rules! impl_def {
- ($vid:ident, $PI:path) => {
- impl SinPi for $vid {
-diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs
---- a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrt.rs
-@@ -1,16 +1,16 @@
- //! Vertical floating-point `sqrt`
- #![allow(unused)]
-
- // FIXME 64-bit 1 elem vectors sqrt
-
- use crate::*;
-
--crate trait Sqrt {
-+pub(crate) trait Sqrt {
- fn sqrt(self) -> Self;
- }
-
- #[allow(improper_ctypes)]
- extern "C" {
- #[link_name = "llvm.sqrt.v2f32"]
- fn sqrt_v2f32(x: f32x2) -> f32x2;
- #[link_name = "llvm.sqrt.v4f32"]
-diff --git a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs
---- a/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/math/float/sqrte.rs
-@@ -1,17 +1,17 @@
- //! Vertical floating-point `sqrt`
- #![allow(unused)]
-
- // FIXME 64-bit 1 elem vectors sqrte
-
- use crate::llvm::simd_fsqrt;
- use crate::*;
-
--crate trait Sqrte {
-+pub(crate) trait Sqrte {
- fn sqrte(self) -> Self;
- }
-
- gen_unary_impl_table!(Sqrte, sqrte);
-
- cfg_if! {
- if #[cfg(all(target_arch = "x86_64", feature = "sleef-sys"))] {
- use sleef_sys::*;
-diff --git a/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs b/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs
---- a/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/pointer_sized_int.rs
-@@ -1,28 +1,28 @@
- //! Provides `isize` and `usize`
-
- use cfg_if::cfg_if;
-
- cfg_if! {
- if #[cfg(target_pointer_width = "8")] {
-- crate type isize_ = i8;
-- crate type usize_ = u8;
-+ pub(crate) type isize_ = i8;
-+ pub(crate) type usize_ = u8;
- } else if #[cfg(target_pointer_width = "16")] {
-- crate type isize_ = i16;
-- crate type usize_ = u16;
-+ pub(crate) type isize_ = i16;
-+ pub(crate) type usize_ = u16;
- } else if #[cfg(target_pointer_width = "32")] {
-- crate type isize_ = i32;
-- crate type usize_ = u32;
-+ pub(crate) type isize_ = i32;
-+ pub(crate) type usize_ = u32;
-
- } else if #[cfg(target_pointer_width = "64")] {
-- crate type isize_ = i64;
-- crate type usize_ = u64;
-+ pub(crate) type isize_ = i64;
-+ pub(crate) type usize_ = u64;
- } else if #[cfg(target_pointer_width = "64")] {
-- crate type isize_ = i64;
-- crate type usize_ = u64;
-+ pub(crate) type isize_ = i64;
-+ pub(crate) type usize_ = u64;
- } else if #[cfg(target_pointer_width = "128")] {
-- crate type isize_ = i128;
-- crate type usize_ = u128;
-+ pub(crate) type isize_ = i128;
-+ pub(crate) type usize_ = u128;
- } else {
- compile_error!("unsupported target_pointer_width");
- }
- }
-diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions.rs b/third_party/rust/packed_simd_2/src/codegen/reductions.rs
---- a/third_party/rust/packed_simd_2/src/codegen/reductions.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/reductions.rs
-@@ -1,1 +1,1 @@
--crate mod mask;
-+pub(crate) mod mask;
-diff --git a/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs b/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs
---- a/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/reductions/mask.rs
-@@ -2,21 +2,21 @@
- //!
- //! Works around [LLVM bug 36702].
- //!
- //! [LLVM bug 36702]: https://bugs.llvm.org/show_bug.cgi?id=36702
- #![allow(unused_macros)]
-
- use crate::*;
-
--crate trait All: crate::marker::Sized {
-+pub(crate) trait All: crate::marker::Sized {
- unsafe fn all(self) -> bool;
- }
-
--crate trait Any: crate::marker::Sized {
-+pub(crate) trait Any: crate::marker::Sized {
- unsafe fn any(self) -> bool;
- }
-
- #[macro_use]
- mod fallback_impl;
-
- cfg_if! {
- if #[cfg(any(target_arch = "x86", target_arch = "x86_64"))] {
-diff --git a/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs b/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs
---- a/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/swap_bytes.rs
-@@ -1,26 +1,26 @@
- //! Horizontal swap bytes reductions.
-
- // FIXME: investigate using `llvm.bswap`
- // https://github.com/rust-lang-nursery/packed_simd/issues/19
-
- use crate::*;
-
--crate trait SwapBytes {
-+pub(crate) trait SwapBytes {
- fn swap_bytes(self) -> Self;
- }
-
- macro_rules! impl_swap_bytes {
- (v16: $($id:ident,)+) => {
- $(
- impl SwapBytes for $id {
- #[inline]
- fn swap_bytes(self) -> Self {
-- unsafe { shuffle!(self, [1, 0]) }
-+ shuffle!(self, [1, 0])
- }
- }
- )+
- };
- (v32: $($id:ident,)+) => {
- $(
- impl SwapBytes for $id {
- #[inline]
-diff --git a/third_party/rust/packed_simd_2/src/codegen/vPtr.rs b/third_party/rust/packed_simd_2/src/codegen/vPtr.rs
---- a/third_party/rust/packed_simd_2/src/codegen/vPtr.rs
-+++ b/third_party/rust/packed_simd_2/src/codegen/vPtr.rs
-@@ -1,16 +1,16 @@
- //! Pointer vector types
-
- macro_rules! impl_simd_ptr {
- ([$ptr_ty:ty; $elem_count:expr]: $tuple_id:ident | $ty:ident
- | $($tys:ty),*) => {
- #[derive(Copy, Clone)]
- #[repr(simd)]
-- pub struct $tuple_id<$ty>($(crate $tys),*);
-+ pub struct $tuple_id<$ty>($(pub(crate) $tys),*);
- //^^^^^^^ leaked through SimdArray
-
- impl<$ty> crate::sealed::Seal for [$ptr_ty; $elem_count] {}
- impl<$ty> crate::sealed::SimdArray for [$ptr_ty; $elem_count] {
- type Tuple = $tuple_id<$ptr_ty>;
- type T = $ptr_ty;
- const N: usize = $elem_count;
- type NT = [u32; $elem_count];
-diff --git a/third_party/rust/packed_simd_2/src/lib.rs b/third_party/rust/packed_simd_2/src/lib.rs
---- a/third_party/rust/packed_simd_2/src/lib.rs
-+++ b/third_party/rust/packed_simd_2/src/lib.rs
-@@ -212,24 +212,23 @@
- //! guide](https://rust-lang-nursery.github.io/packed_simd/perf-guide/)
-
- #![feature(
- adt_const_params,
- repr_simd,
- rustc_attrs,
- platform_intrinsics,
- stdsimd,
-- aarch64_target_feature,
- arm_target_feature,
- link_llvm_intrinsics,
- core_intrinsics,
- stmt_expr_attributes,
-- crate_visibility_modifier,
- custom_inner_attributes,
- )]
-+#![cfg_attr(aarch64_target_feature, feature(aarch64_target_feature))]
- #![allow(non_camel_case_types, non_snake_case,
- // FIXME: these types are unsound in C FFI already
- // See https://github.com/rust-lang/rust/issues/53346
- improper_ctypes_definitions,
- incomplete_features,
- clippy::cast_possible_truncation,
- clippy::cast_lossless,
- clippy::cast_possible_wrap,
-@@ -339,11 +338,11 @@ pub use self::api::into_bits::*;
-
- // Re-export the shuffle intrinsics required by the `shuffle!` macro.
- #[doc(hidden)]
- pub use self::codegen::llvm::{
- __shuffle_vector16, __shuffle_vector2, __shuffle_vector32, __shuffle_vector4, __shuffle_vector64,
- __shuffle_vector8,
- };
-
--crate mod llvm {
-- crate use crate::codegen::llvm::*;
-+pub(crate) mod llvm {
-+ pub(crate) use crate::codegen::llvm::*;
- }
-diff --git a/third_party/rust/packed_simd_2/src/testing.rs b/third_party/rust/packed_simd_2/src/testing.rs
---- a/third_party/rust/packed_simd_2/src/testing.rs
-+++ b/third_party/rust/packed_simd_2/src/testing.rs
-@@ -1,8 +1,8 @@
- //! Testing macros and other utilities.
-
- #[macro_use]
- mod macros;
-
- #[cfg(test)]
- #[macro_use]
--crate mod utils;
-+pub(crate) mod utils;
-
diff --git a/thunderbird/rustc_version-0.4.0.patch b/thunderbird/rustc_version-0.4.0.patch
deleted file mode 100644
index b0e95daaf..000000000
--- a/thunderbird/rustc_version-0.4.0.patch
+++ /dev/null
@@ -1,8593 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla(a)glandium.org>
-# Date 1654596092 0
-# Node ID f52e2ad948e88e2c4ce83599d379aa4a1e57334e
-# Parent 969171da8cc09d4eb7c070b0ecf33bc5cc504537
-Bug 1772048 - Update rustc_version and semver crates. r=emilio,webdriver-reviewers,kinetik,whimboo
-
-semver 1.0 doesn't and won't support Clone on semver::Error[1], so we
-convert the mozversion error type to store the string version of the
-error, which is an incompatible change requiring a version bump on the
-crate.
-
-1. https://github.com/dtolnay/semver/pull/280
-
-Differential Revision: https://phabricator.services.mozilla.com/D147825
-
-diff --git a/.cargo/config.in b/.cargo/config.in
---- a/.cargo/config.in
-+++ b/.cargo/config.in
-@@ -25,17 +25,17 @@ rev = "3bfc47d9a571d0842676043ba60716318
- [source."https://github.com/mozilla/midir.git"]
- git = "https://github.com/mozilla/midir.git"
- replace-with = "vendored-sources"
- rev = "4c11f0ffb5d6a10de4aff40a7b81218b33b94e6f"
-
- [source."https://github.com/mozilla/cubeb-pulse-rs"]
- git = "https://github.com/mozilla/cubeb-pulse-rs"
- replace-with = "vendored-sources"
--rev = "df4dc0288b07b865440f4c7e41ca49ca9ccffc63"
-+rev = "1f1fe1e08e01a9a534ec7f079702a583a0899ce7"
-
- [source."https://github.com/mozilla/cubeb-coreaudio-rs"]
- git = "https://github.com/mozilla/cubeb-coreaudio-rs"
- replace-with = "vendored-sources"
- rev = "44eca95823bb57e964cf7b6d9791ed2ccb4b2108"
-
- [source."https://github.com/mozilla/audioipc"]
- git = "https://github.com/mozilla/audioipc"
-diff --git a/Cargo.lock b/Cargo.lock
---- a/Cargo.lock
-+++ b/Cargo.lock
-@@ -1157,17 +1157,17 @@ dependencies = [
- "mach",
- "ringbuf",
- "triple_buffer",
- ]
-
- [[package]]
- name = "cubeb-pulse"
- version = "0.4.0"
--source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=df4dc0288b07b865440f4c7e4…"
-+source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=1f1fe1e08e01a9a534ec7f079…"
- dependencies = [
- "cubeb-backend",
- "pulse",
- "pulse-ffi",
- "ringbuf",
- "semver",
- ]
-
-@@ -3399,17 +3399,17 @@ dependencies = [
- "nsstring",
- "url",
- "uuid",
- "xpcom",
- ]
-
- [[package]]
- name = "mozversion"
--version = "0.4.3"
-+version = "0.5.0-alpha"
- dependencies = [
- "regex",
- "rust-ini",
- "semver",
- ]
-
- [[package]]
- name = "mozwer_s"
-@@ -4122,26 +4122,26 @@ dependencies = [
- "proc-macro2",
- "quote",
- "syn",
- ]
-
- [[package]]
- name = "pulse"
- version = "0.3.0"
--source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=df4dc0288b07b865440f4c7e4…"
-+source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=1f1fe1e08e01a9a534ec7f079…"
- dependencies = [
- "bitflags",
- "pulse-ffi",
- ]
-
- [[package]]
- name = "pulse-ffi"
- version = "0.1.0"
--source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=df4dc0288b07b865440f4c7e4…"
-+source = "git+https://github.com/mozilla/cubeb-pulse-rs?rev=1f1fe1e08e01a9a534ec7f079…"
- dependencies = [
- "libc",
- ]
-
- [[package]]
- name = "qcms"
- version = "0.2.0"
- dependencies = [
-@@ -4456,19 +4456,19 @@ checksum = "7ef03e0a2b150c7a90d01faf6254
- [[package]]
- name = "rustc-hash"
- version = "1.1.0"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
-
- [[package]]
- name = "rustc_version"
--version = "0.2.3"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
-+version = "0.4.0"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
- dependencies = [
- "semver",
- ]
-
- [[package]]
- name = "ryu"
- version = "1.0.10"
- source = "registry+https://github.com/rust-lang/crates.io-index"
-@@ -4544,28 +4544,19 @@ dependencies = [
- [[package]]
- name = "self_cell"
- version = "0.10.2"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "1ef965a420fe14fdac7dd018862966a4c14094f900e1650bbc71ddd7d580c8af"
-
- [[package]]
- name = "semver"
--version = "0.9.0"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
--dependencies = [
-- "semver-parser",
--]
--
--[[package]]
--name = "semver-parser"
--version = "0.7.0"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
-+version = "1.0.9"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+checksum = "8cb243bdfdb5936c8dc3c45762a19d12ab4550cdc753bc247637d4ec35a040fd"
-
- [[package]]
- name = "serde"
- version = "1.0.136"
- source = "registry+https://github.com/rust-lang/crates.io-index"
- checksum = "ce31e24b01e1e524df96f1c2fdd054405f8d7376249a5110886fb4b658484789"
- dependencies = [
- "serde_derive",
-diff --git a/gfx/qcms/Cargo.toml b/gfx/qcms/Cargo.toml
---- a/gfx/qcms/Cargo.toml
-+++ b/gfx/qcms/Cargo.toml
-@@ -17,9 +17,9 @@ c_bindings = ["libc"]
- neon = []
- iccv4-enabled = []
- cmyk = []
-
- [dependencies]
- libc = {version = "0.2", optional = true }
-
- [build-dependencies]
--rustc_version = "0.2"
-+rustc_version = "0.4"
-diff --git a/mozglue/static/rust/Cargo.toml b/mozglue/static/rust/Cargo.toml
---- a/mozglue/static/rust/Cargo.toml
-+++ b/mozglue/static/rust/Cargo.toml
-@@ -8,12 +8,12 @@ license = "MPL"
- path = "lib.rs"
-
- [dependencies]
- arrayvec = "0.5"
-
- [build-dependencies]
- mozbuild = "0.1"
- cc = "1"
--rustc_version = "0.2"
-+rustc_version = "0.4"
-
- [features]
- moz_memory = []
-diff --git a/testing/geckodriver/Cargo.toml b/testing/geckodriver/Cargo.toml
---- a/testing/geckodriver/Cargo.toml
-+++ b/testing/geckodriver/Cargo.toml
-@@ -15,17 +15,17 @@ chrono = "0.4.6"
- clap = { version = "3.1", default-features = false, features = ["cargo", "std", "suggestions", "wrap_help"] }
- hyper = "0.14"
- lazy_static = "1.0"
- log = { version = "0.4", features = ["std"] }
- marionette = { path = "./marionette", version="0.2.0" }
- mozdevice = { path = "../mozbase/rust/mozdevice", version="0.5.0" }
- mozprofile = { path = "../mozbase/rust/mozprofile", version="0.8.0" }
- mozrunner = { path = "../mozbase/rust/mozrunner", version="0.14.0" }
--mozversion = { path = "../mozbase/rust/mozversion", version="0.4.3" }
-+mozversion = { path = "../mozbase/rust/mozversion", version="0.5.0-alpha" }
- regex = { version="1.0", default-features = false, features = ["perf", "std"] }
- serde = "1.0"
- serde_derive = "1.0"
- serde_json = "1.0"
- serde_yaml = "0.8"
- tempfile = "3"
- url = "2.0"
- uuid = { version = "0.8", features = ["v4"] }
-diff --git a/testing/mozbase/rust/mozversion/Cargo.toml b/testing/mozbase/rust/mozversion/Cargo.toml
---- a/testing/mozbase/rust/mozversion/Cargo.toml
-+++ b/testing/mozbase/rust/mozversion/Cargo.toml
-@@ -1,14 +1,14 @@
- [package]
- name = "mozversion"
--version = "0.4.3"
-+version = "0.5.0-alpha"
- authors = ["Mozilla"]
- description = "Utility for accessing Firefox version metadata"
- keywords = ["mozilla", "firefox"]
- repository = "https://hg.mozilla.org/mozilla-central/file/tip/testing/mozbase/rust/mozver…"
- license = "MPL-2.0"
- edition = "2018"
-
- [dependencies]
- regex = { version = "1", default-features = false, features = ["perf", "std"] }
- rust-ini = "0.10"
--semver = "0.9"
-+semver = "1.0"
-diff --git a/testing/mozbase/rust/mozversion/src/lib.rs b/testing/mozbase/rust/mozversion/src/lib.rs
---- a/testing/mozbase/rust/mozversion/src/lib.rs
-+++ b/testing/mozbase/rust/mozversion/src/lib.rs
-@@ -101,18 +101,18 @@ impl Version {
- // The way the semver crate handles prereleases isn't what we want here
- // This should be fixed in the long term by implementing our own comparison
- // operators, but for now just act as if prerelease metadata was missing,
- // otherwise it is almost impossible to use this with nightly
- semver::Version {
- major: self.major,
- minor: self.minor,
- patch: self.patch,
-- pre: vec![],
-- build: vec![],
-+ pre: semver::Prerelease::EMPTY,
-+ build: semver::BuildMetadata::EMPTY,
- }
- }
-
- pub fn matches(&self, version_req: &str) -> VersionResult<bool> {
- let req = semver::VersionReq::parse(version_req)?;
- Ok(req.matches(&self.to_semver()))
- }
- }
-@@ -269,17 +269,17 @@ fn parse_binary_version(version_str: &st
-
- #[derive(Clone, Debug)]
- pub enum Error {
- /// Error parsing a version string
- VersionError(String),
- /// Error reading application metadata
- MetadataError(String),
- /// Error processing a string as a semver comparator
-- SemVerError(semver::ReqParseError),
-+ SemVerError(String),
- }
-
- impl Display for Error {
- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
- match *self {
- Error::VersionError(ref x) => {
- "VersionError: ".fmt(f)?;
- x.fmt(f)
-@@ -291,28 +291,25 @@ impl Display for Error {
- Error::SemVerError(ref e) => {
- "SemVerError: ".fmt(f)?;
- e.fmt(f)
- }
- }
- }
- }
-
--impl From<semver::ReqParseError> for Error {
-- fn from(err: semver::ReqParseError) -> Error {
-- Error::SemVerError(err)
-+impl From<semver::Error> for Error {
-+ fn from(err: semver::Error) -> Error {
-+ Error::SemVerError(err.to_string())
- }
- }
-
- impl error::Error for Error {
- fn cause(&self) -> Option<&dyn error::Error> {
-- match *self {
-- Error::SemVerError(ref e) => Some(e),
-- Error::VersionError(_) | Error::MetadataError(_) => None,
-- }
-+ None
- }
- }
-
- pub type VersionResult<T> = Result<T, Error>;
-
- #[cfg(target_os = "macos")]
- mod platform {
- use std::path::{Path, PathBuf};
-diff --git a/third_party/rust/cubeb-pulse/.cargo-checksum.json b/third_party/rust/cubeb-pulse/.cargo-checksum.json
---- a/third_party/rust/cubeb-pulse/.cargo-checksum.json
-+++ b/third_party/rust/cubeb-pulse/.cargo-checksum.json
-@@ -1,1 +1,1 @@
--{"files":{".editorconfig":"bf047bd1da10cabb99eea666d1e57c321eba4716dccb3e4ed0e2c5fe3ca53858",".github/workflows/build.yml":"95d0d2542c04f0c932f58591b92c3051db5c95657bf5f24b6a6110f7b667568d","AUTHORS":"0e0ac930a68ce2f6b876126b195add177f0d3886facb9260f4d9b69f1988f0cc","Cargo.toml":"d8f84d114794b79a02c8d93724951a0b924f4815e446d666e66877c7a90d0446","LICENSE":"44c6b5ae5ec3fe2fbc608b00e6f4896f4d2d5c7e525fcbaa3eaa3cf2f3d5a983","README.md":"0079450bb4b013bac065ed1750851e461a3710ebad1f323817da1cb82db0bc4f","src/backend/context.rs":"839fbbd90e501c9e455e6b46729f8c3cc03b368b6b45d02c82399660b7cf8289","src/backend/cork_state.rs":"4a0f1afc7d9f333dac89218cc56d7d32fbffb487cd48c1c9a4e03d79cb3b5e28","src/backend/intern.rs":"11ca424e4eb77f8eb9fd5a6717d1e791facf9743156a8534f0016fcf64d57b0f","src/backend/mod.rs":"d5da05348bf1a7f65c85b14372964a49dc4849f0aee96c75e2c18b51fb03fcaf","src/backend/stream.rs":"525e1f6be1990deef3c42d34fc4e25947be642ce242514f8e3428737146cc755","src/capi.rs":"fa0fa020f0d0efe55aa0fc3596405e8407bbe2cbe6c7a558345304e6da87994e","src/lib.rs":"b41bbdc562cbfb130ed7c1e53fe69944774f515705341d8ce48a2f82c8c0c2c5"},"package":null}
-\ No newline at end of file
-+{"files":{".editorconfig":"bf047bd1da10cabb99eea666d1e57c321eba4716dccb3e4ed0e2c5fe3ca53858",".github/workflows/build.yml":"95d0d2542c04f0c932f58591b92c3051db5c95657bf5f24b6a6110f7b667568d","AUTHORS":"0e0ac930a68ce2f6b876126b195add177f0d3886facb9260f4d9b69f1988f0cc","Cargo.toml":"13fe95ad27f37b8423958d78093ecff3ade9fffb28c5980604b624c2b617e5a7","LICENSE":"44c6b5ae5ec3fe2fbc608b00e6f4896f4d2d5c7e525fcbaa3eaa3cf2f3d5a983","README.md":"0079450bb4b013bac065ed1750851e461a3710ebad1f323817da1cb82db0bc4f","src/backend/context.rs":"839fbbd90e501c9e455e6b46729f8c3cc03b368b6b45d02c82399660b7cf8289","src/backend/cork_state.rs":"4a0f1afc7d9f333dac89218cc56d7d32fbffb487cd48c1c9a4e03d79cb3b5e28","src/backend/intern.rs":"11ca424e4eb77f8eb9fd5a6717d1e791facf9743156a8534f0016fcf64d57b0f","src/backend/mod.rs":"d5da05348bf1a7f65c85b14372964a49dc4849f0aee96c75e2c18b51fb03fcaf","src/backend/stream.rs":"e88a04ab7094b9df1bcdd07628369ec70ecb2062b91b0bd86f2642962814405c","src/capi.rs":"fa0fa020f0d0efe55aa0fc3596405e8407bbe2cbe6c7a558345304e6da87994e","src/lib.rs":"b41bbdc562cbfb130ed7c1e53fe69944774f515705341d8ce48a2f82c8c0c2c5"},"package":null}
-\ No newline at end of file
-diff --git a/third_party/rust/cubeb-pulse/Cargo.toml b/third_party/rust/cubeb-pulse/Cargo.toml
---- a/third_party/rust/cubeb-pulse/Cargo.toml
-+++ b/third_party/rust/cubeb-pulse/Cargo.toml
-@@ -10,10 +10,10 @@ pulse-dlopen = ["pulse-ffi/dlopen"]
-
- [lib]
- crate-type = ["staticlib", "rlib"]
-
- [dependencies]
- cubeb-backend = "0.10"
- pulse-ffi = { path = "pulse-ffi" }
- pulse = { path = "pulse-rs" }
--semver = "^0.9"
-+semver = "1.0"
- ringbuf = "0.2"
-diff --git a/third_party/rust/cubeb-pulse/src/backend/stream.rs b/third_party/rust/cubeb-pulse/src/backend/stream.rs
---- a/third_party/rust/cubeb-pulse/src/backend/stream.rs
-+++ b/third_party/rust/cubeb-pulse/src/backend/stream.rs
-@@ -350,16 +350,25 @@ impl<'ctx> PulseStream<'ctx> {
- ptr::null_mut(),
- read_frames as c_long,
- )
- };
-
- if got < 0 || got as usize != read_frames {
- let _ = s.cancel_write();
- stm.shutdown = true;
-+ if got < 0 {
-+ unsafe {
-+ stm.state_callback.unwrap()(
-+ stm as *mut _ as *mut _,
-+ stm.user_ptr,
-+ ffi::CUBEB_STATE_ERROR,
-+ );
-+ }
-+ }
- break;
- }
- }
- }
-
- if read_size > 0 {
- let _ = s.drop();
- }
-@@ -1064,16 +1073,23 @@ impl<'ctx> PulseStream<'ctx> {
- read_ptr as *const _ as *mut _,
- buffer,
- (size / frame_size) as c_long,
- ) as i64
- };
- if got < 0 {
- let _ = stm.cancel_write();
- self.shutdown = true;
-+ unsafe {
-+ self.state_callback.unwrap()(
-+ self as *const _ as *mut _,
-+ self.user_ptr,
-+ ffi::CUBEB_STATE_ERROR,
-+ );
-+ }
- return;
- }
-
- // If more iterations move offset of read buffer
- if !input_data.is_null() {
- let in_frame_size = self.input_sample_spec.frame_size();
- read_offset += (size / frame_size) * in_frame_size;
- }
-diff --git a/third_party/rust/rustc_version/.cargo-checksum.json b/third_party/rust/rustc_version/.cargo-checksum.json
---- a/third_party/rust/rustc_version/.cargo-checksum.json
-+++ b/third_party/rust/rustc_version/.cargo-checksum.json
-@@ -1,1 +1,1 @@
--{"files":{"Cargo.toml":"80b9fb136c8c2945b4875b05b0f5a4b11e4722997e751f17d8d3f241d7c684db","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"c9a75f18b9ab2927829a208fc6aa2cf4e63b8420887ba29cdb265d6619ae82d5","README.md":"58bd14a1dfa1d828e6e99f35c3b7c2149d08e2d990d6ca93f92ab8ffb43275b7","src/errors.rs":"b28c2eeb1278fc3e8d68a64b177034faed67f6762335729d3a6d1e61be8fb034","src/lib.rs":"92a32673f77961724bc52b872781f06d22d166f06838c9582c5adae3c5214f51"},"package":"138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"}
-\ No newline at end of file
-+{"files":{"Cargo.toml":"6a2e927f37b4897e75470e62face13eff0fe846c57f8fcfb98bcd5e0fe8ed0a2","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"c9a75f18b9ab2927829a208fc6aa2cf4e63b8420887ba29cdb265d6619ae82d5","README.md":"40f1138d4ddcfcfd0534429cea8dcbdcaf4a175aca1c26662f011f6e83d2fd7a","deny.toml":"22979f2da49546b27a5c892d5216bf74215987810a2d011b58870471883b9437","src/lib.rs":"bc18589948e3c04c3ffb491ffc3d4eccd8037c8e377d0bbae8aca2b21978b1de","tests/all.rs":"7b2969022feab85a948fafd331d9bb30d80357d01afaf7e0f723908e75f39e89"},"package":"bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"}
-\ No newline at end of file
-diff --git a/third_party/rust/rustc_version/Cargo.toml b/third_party/rust/rustc_version/Cargo.toml
---- a/third_party/rust/rustc_version/Cargo.toml
-+++ b/third_party/rust/rustc_version/Cargo.toml
-@@ -1,26 +1,27 @@
- # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
- #
- # When uploading crates to the registry Cargo will automatically
- # "normalize" Cargo.toml files for maximal compatibility
- # with all versions of Cargo and also rewrite `path` dependencies
--# to registry (e.g. crates.io) dependencies
-+# to registry (e.g., crates.io) dependencies
- #
- # If you believe there's an error in this file please file an
- # issue against the rust-lang/cargo repository. If you're
- # editing this file be aware that the upstream Cargo.toml
- # will likely look very different (and much more reasonable)
-
- [package]
-+edition = "2018"
- name = "rustc_version"
--version = "0.2.3"
--authors = ["Marvin Löbel <loebel.marvin(a)gmail.com>"]
-+version = "0.4.0"
-+authors = ["Dirkjan Ochtman <dirkjan(a)ochtman.nl>", "Marvin Löbel <loebel.marvin(a)gmail.com>"]
- description = "A library for querying the version of a installed rustc compiler"
- documentation = "https://docs.rs/rustc_version/"
- readme = "README.md"
- keywords = ["version", "rustc"]
- license = "MIT/Apache-2.0"
- repository = "https://github.com/Kimundi/rustc-version-rs"
- [dependencies.semver]
--version = "0.9"
--[badges.travis-ci]
--repository = "Kimundi/rustc-version-rs"
-+version = "1.0"
-+[dev-dependencies.doc-comment]
-+version = "0.3"
-diff --git a/third_party/rust/rustc_version/README.md b/third_party/rust/rustc_version/README.md
---- a/third_party/rust/rustc_version/README.md
-+++ b/third_party/rust/rustc_version/README.md
-@@ -1,40 +1,46 @@
- rustc-version-rs
--==============
-+================
-+
-+[![Documentation](https://docs.rs/rustc_version/badge.svg)](https://docs.rs/rustc_version/)
-+[![Crates.io](https://img.shields.io/crates/v/rustc_version.svg)](https://crates.io/crates/rustc_version)
-+[![Build status](https://github.com/Kimundi/rustc-version-rs/workflows/CI/badge.svg)…
-
- A library for querying the version of a `rustc` compiler.
-
- This can be used by build scripts or other tools dealing with Rust sources
--to make decisions based on the version of the compiler.
-+to make decisions based on the version of the compiler. Current MSRV is 1.32.0.
-
--[![Travis-CI Status](https://travis-ci.org/Kimundi/rustc-version-rs.png?branch=master)](…
-+If this is of interest, also consider looking at these other crates:
-+
-+* [autocfg](https://crates.io/crates/autocfg/), which helps with feature detection instead of depending on compiler versions
-+* [rustversion](https://github.com/dtolnay/rustversion) provides a procedural macro with no other dependencies
-
- # Getting Started
-
- [rustc-version-rs is available on crates.io](https://crates.io/crates/rustc_version).
- It is recommended to look there for the newest released version, as well as links to the newest builds of the docs.
-
- At the point of the last update of this README, the latest published version could be used like this:
-
- Add the following dependency to your Cargo manifest...
-
- ```toml
- [build-dependencies]
- rustc_version = "0.2"
- ```
-
--...and see the [docs](http://kimundi.github.io/rustc-version-rs/rustc_version/index.html) for how to use it.
-+... and see the [docs](https://docs.rs/rustc_version) for how to use it.
-
- # Example
-
- ```rust
- // This could be a cargo build script
-
--extern crate rustc_version;
- use rustc_version::{version, version_meta, Channel, Version};
-
- fn main() {
- // Assert we haven't travelled back in time
- assert!(version().unwrap().major >= 1);
-
- // Set cfg flags depending on release channel
- match version_meta().unwrap().channel {
-diff --git a/third_party/rust/rustc_version/deny.toml b/third_party/rust/rustc_version/deny.toml
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/rustc_version/deny.toml
-@@ -0,0 +1,3 @@
-+[licenses]
-+allow-osi-fsf-free = "either"
-+copyleft = "deny"
-diff --git a/third_party/rust/rustc_version/src/errors.rs b/third_party/rust/rustc_version/src/errors.rs
-deleted file mode 100644
---- a/third_party/rust/rustc_version/src/errors.rs
-+++ /dev/null
-@@ -1,79 +0,0 @@
--use std::{self, error, fmt, io, str};
--use semver::{self, Identifier};
--
--/// The error type for this crate.
--#[derive(Debug)]
--pub enum Error {
-- /// An error ocurrend when executing the `rustc` command.
-- CouldNotExecuteCommand(io::Error),
-- /// The output of `rustc -vV` was not valid utf-8.
-- Utf8Error(str::Utf8Error),
-- /// The output of `rustc -vV` was not in the expected format.
-- UnexpectedVersionFormat,
-- /// An error ocurred in parsing a `VersionReq`.
-- ReqParseError(semver::ReqParseError),
-- /// An error ocurred in parsing the semver.
-- SemVerError(semver::SemVerError),
-- /// The pre-release tag is unknown.
-- UnknownPreReleaseTag(Identifier),
--}
--use Error::*;
--
--impl fmt::Display for Error {
-- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-- use std::error::Error;
-- match *self {
-- CouldNotExecuteCommand(ref e) => write!(f, "{}: {}", self.description(), e),
-- Utf8Error(_) => write!(f, "{}", self.description()),
-- UnexpectedVersionFormat => write!(f, "{}", self.description()),
-- ReqParseError(ref e) => write!(f, "{}: {}", self.description(), e),
-- SemVerError(ref e) => write!(f, "{}: {}", self.description(), e),
-- UnknownPreReleaseTag(ref i) => write!(f, "{}: {}", self.description(), i),
-- }
-- }
--}
--
--impl error::Error for Error {
-- fn cause(&self) -> Option<&error::Error> {
-- match *self {
-- CouldNotExecuteCommand(ref e) => Some(e),
-- Utf8Error(ref e) => Some(e),
-- UnexpectedVersionFormat => None,
-- ReqParseError(ref e) => Some(e),
-- SemVerError(ref e) => Some(e),
-- UnknownPreReleaseTag(_) => None,
-- }
-- }
--
-- fn description(&self) -> &str {
-- match *self {
-- CouldNotExecuteCommand(_) => "could not execute command",
-- Utf8Error(_) => "invalid UTF-8 output from `rustc -vV`",
-- UnexpectedVersionFormat => "unexpected `rustc -vV` format",
-- ReqParseError(_) => "error parsing version requirement",
-- SemVerError(_) => "error parsing version",
-- UnknownPreReleaseTag(_) => "unknown pre-release tag",
-- }
-- }
--}
--
--macro_rules! impl_from {
-- ($($err_ty:ty => $variant:ident),* $(,)*) => {
-- $(
-- impl From<$err_ty> for Error {
-- fn from(e: $err_ty) -> Error {
-- Error::$variant(e)
-- }
-- }
-- )*
-- }
--}
--
--impl_from! {
-- str::Utf8Error => Utf8Error,
-- semver::SemVerError => SemVerError,
-- semver::ReqParseError => ReqParseError,
--}
--
--/// The result type for this crate.
--pub type Result<T> = std::result::Result<T, Error>;
-diff --git a/third_party/rust/rustc_version/src/lib.rs b/third_party/rust/rustc_version/src/lib.rs
---- a/third_party/rust/rustc_version/src/lib.rs
-+++ b/third_party/rust/rustc_version/src/lib.rs
-@@ -17,73 +17,138 @@
- //! It calls `$RUSTC --version -v` and parses the output, falling
- //! back to `rustc` if `$RUSTC` is not set.
- //!
- //! # Example
- //!
- //! ```rust
- //! // This could be a cargo build script
- //!
--//! extern crate rustc_version;
- //! use rustc_version::{version, version_meta, Channel, Version};
- //!
--//! fn main() {
--//! // Assert we haven't travelled back in time
--//! assert!(version().unwrap().major >= 1);
-+//! // Assert we haven't travelled back in time
-+//! assert!(version().unwrap().major >= 1);
- //!
--//! // Set cfg flags depending on release channel
--//! match version_meta().unwrap().channel {
--//! Channel::Stable => {
--//! println!("cargo:rustc-cfg=RUSTC_IS_STABLE");
--//! }
--//! Channel::Beta => {
--//! println!("cargo:rustc-cfg=RUSTC_IS_BETA");
--//! }
--//! Channel::Nightly => {
--//! println!("cargo:rustc-cfg=RUSTC_IS_NIGHTLY");
--//! }
--//! Channel::Dev => {
--//! println!("cargo:rustc-cfg=RUSTC_IS_DEV");
--//! }
-+//! // Set cfg flags depending on release channel
-+//! match version_meta().unwrap().channel {
-+//! Channel::Stable => {
-+//! println!("cargo:rustc-cfg=RUSTC_IS_STABLE");
-+//! }
-+//! Channel::Beta => {
-+//! println!("cargo:rustc-cfg=RUSTC_IS_BETA");
- //! }
-+//! Channel::Nightly => {
-+//! println!("cargo:rustc-cfg=RUSTC_IS_NIGHTLY");
-+//! }
-+//! Channel::Dev => {
-+//! println!("cargo:rustc-cfg=RUSTC_IS_DEV");
-+//! }
-+//! }
- //!
--//! // Check for a minimum version
--//! if version().unwrap() >= Version::parse("1.4.0").unwrap() {
--//! println!("cargo:rustc-cfg=compiler_has_important_bugfix");
--//! }
-+//! // Check for a minimum version
-+//! if version().unwrap() >= Version::parse("1.4.0").unwrap() {
-+//! println!("cargo:rustc-cfg=compiler_has_important_bugfix");
- //! }
- //! ```
-
--extern crate semver;
--use semver::Identifier;
-+#[cfg(test)]
-+#[macro_use]
-+extern crate doc_comment;
-+
-+#[cfg(test)]
-+doctest!("../README.md");
-+
-+use std::collections::HashMap;
- use std::process::Command;
--use std::{env, str};
--use std::ffi::OsString;
-+use std::{env, error, fmt, io, num, str};
-+use std::{ffi::OsString, str::FromStr};
-
- // Convenience re-export to allow version comparison without needing to add
- // semver crate.
- pub use semver::Version;
-
--mod errors;
--pub use errors::{Error, Result};
-+use Error::*;
-
- /// Release channel of the compiler.
- #[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
- pub enum Channel {
- /// Development release channel
- Dev,
- /// Nightly release channel
- Nightly,
- /// Beta release channel
- Beta,
- /// Stable release channel
- Stable,
- }
-
--/// Rustc version plus metada like git short hash and build date.
-+/// LLVM version
-+///
-+/// LLVM's version numbering scheme is not semver compatible until version 4.0
-+///
-+/// rustc [just prints the major and minor versions], so other parts of the version are not included.
-+///
-+/// [just prints the major and minor versions]: https://github.com/rust-lang/rust/blob/b5c9e2448c9ace53ad5c11585803894651b1…
-+#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
-+pub struct LlvmVersion {
-+ // fields must be ordered major, minor for comparison to be correct
-+ /// Major version
-+ pub major: u64,
-+ /// Minor version
-+ pub minor: u64,
-+ // TODO: expose micro version here
-+}
-+
-+impl fmt::Display for LlvmVersion {
-+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-+ write!(f, "{}.{}", self.major, self.minor)
-+ }
-+}
-+
-+impl FromStr for LlvmVersion {
-+ type Err = LlvmVersionParseError;
-+
-+ fn from_str(s: &str) -> Result<Self, Self::Err> {
-+ let mut parts = s
-+ .split('.')
-+ .map(|part| -> Result<u64, LlvmVersionParseError> {
-+ if part == "0" {
-+ Ok(0)
-+ } else if part.starts_with('0') {
-+ Err(LlvmVersionParseError::ComponentMustNotHaveLeadingZeros)
-+ } else if part.starts_with('-') || part.starts_with('+') {
-+ Err(LlvmVersionParseError::ComponentMustNotHaveSign)
-+ } else {
-+ Ok(part.parse()?)
-+ }
-+ });
-+
-+ let major = parts.next().unwrap()?;
-+ let mut minor = 0;
-+
-+ if let Some(part) = parts.next() {
-+ minor = part?;
-+ } else if major < 4 {
-+ // LLVM versions earlier than 4.0 have significant minor versions, so require the minor version in this case.
-+ return Err(LlvmVersionParseError::MinorVersionRequiredBefore4);
-+ }
-+
-+ if let Some(Err(e)) = parts.next() {
-+ return Err(e);
-+ }
-+
-+ if parts.next().is_some() {
-+ return Err(LlvmVersionParseError::TooManyComponents);
-+ }
-+
-+ Ok(Self { major, minor })
-+ }
-+}
-+
-+/// Rustc version plus metadata like git short hash and build date.
- #[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)]
- pub struct VersionMeta {
- /// Version of the compiler
- pub semver: Version,
-
- /// Git short hash of the build of the compiler
- pub commit_hash: Option<String>,
-
-@@ -96,27 +161,37 @@ pub struct VersionMeta {
- /// Release channel of the compiler
- pub channel: Channel,
-
- /// Host target triple of the compiler
- pub host: String,
-
- /// Short version string of the compiler
- pub short_version_string: String,
-+
-+ /// Version of LLVM used by the compiler
-+ pub llvm_version: Option<LlvmVersion>,
- }
-
- impl VersionMeta {
- /// Returns the version metadata for `cmd`, which should be a `rustc` command.
-- pub fn for_command(cmd: Command) -> Result<VersionMeta> {
-- let mut cmd = cmd;
-+ pub fn for_command(mut cmd: Command) -> Result<VersionMeta> {
-+ let out = cmd
-+ .arg("-vV")
-+ .output()
-+ .map_err(Error::CouldNotExecuteCommand)?;
-
-- let out = cmd.arg("-vV").output().map_err(Error::CouldNotExecuteCommand)?;
-- let out = str::from_utf8(&out.stdout)?;
-+ if !out.status.success() {
-+ return Err(Error::CommandError {
-+ stdout: String::from_utf8_lossy(&out.stdout).into(),
-+ stderr: String::from_utf8_lossy(&out.stderr).into(),
-+ });
-+ }
-
-- version_meta_for(out)
-+ version_meta_for(str::from_utf8(&out.stdout)?)
- }
- }
-
- /// Returns the `rustc` SemVer version.
- pub fn version() -> Result<Version> {
- Ok(version_meta()?.semver)
- }
-
-@@ -127,221 +202,216 @@ pub fn version_meta() -> Result<VersionM
-
- VersionMeta::for_command(Command::new(cmd))
- }
-
- /// Parses a "rustc -vV" output string and returns
- /// the SemVer version and additional metadata
- /// like the git short hash and build date.
- pub fn version_meta_for(verbose_version_string: &str) -> Result<VersionMeta> {
-- let out: Vec<_> = verbose_version_string.lines().collect();
--
-- if !(out.len() >= 6 && out.len() <= 8) {
-- return Err(Error::UnexpectedVersionFormat);
-- }
-+ let mut map = HashMap::new();
-+ for (i, line) in verbose_version_string.lines().enumerate() {
-+ if i == 0 {
-+ map.insert("short", line);
-+ continue;
-+ }
-
-- let short_version_string = out[0];
-+ let mut parts = line.splitn(2, ": ");
-+ let key = match parts.next() {
-+ Some(key) => key,
-+ None => continue,
-+ };
-
-- fn expect_prefix<'a>(line: &'a str, prefix: &str) -> Result<&'a str> {
-- if line.starts_with(prefix) {
-- Ok(&line[prefix.len()..])
-- } else {
-- Err(Error::UnexpectedVersionFormat)
-+ if let Some(value) = parts.next() {
-+ map.insert(key, value);
- }
- }
-
-- let commit_hash = match expect_prefix(out[2], "commit-hash: ")? {
-- "unknown" => None,
-- hash => Some(hash.to_owned()),
-- };
-+ let short_version_string = expect_key("short", &map)?;
-+ let host = expect_key("host", &map)?;
-+ let release = expect_key("release", &map)?;
-+ let semver: Version = release.parse()?;
-
-- let commit_date = match expect_prefix(out[3], "commit-date: ")? {
-- "unknown" => None,
-- hash => Some(hash.to_owned()),
-+ let channel = match semver.pre.split('.').next().unwrap() {
-+ "" => Channel::Stable,
-+ "dev" => Channel::Dev,
-+ "beta" => Channel::Beta,
-+ "nightly" => Channel::Nightly,
-+ x => return Err(Error::UnknownPreReleaseTag(x.to_owned())),
- };
-
-- // Handle that the build date may or may not be present.
-- let mut idx = 4;
-- let mut build_date = None;
-- if out[idx].starts_with("build-date") {
-- build_date = match expect_prefix(out[idx], "build-date: ")? {
-- "unknown" => None,
-- s => Some(s.to_owned()),
-- };
-- idx += 1;
-- }
--
-- let host = expect_prefix(out[idx], "host: ")?;
-- idx += 1;
-- let release = expect_prefix(out[idx], "release: ")?;
--
-- let semver: Version = release.parse()?;
--
-- let channel = if semver.pre.is_empty() {
-- Channel::Stable
-- } else {
-- match semver.pre[0] {
-- Identifier::AlphaNumeric(ref s) if s == "dev" => Channel::Dev,
-- Identifier::AlphaNumeric(ref s) if s == "beta" => Channel::Beta,
-- Identifier::AlphaNumeric(ref s) if s == "nightly" => Channel::Nightly,
-- ref x => return Err(Error::UnknownPreReleaseTag(x.clone())),
-- }
-+ let commit_hash = expect_key_or_unknown("commit-hash", &map)?;
-+ let commit_date = expect_key_or_unknown("commit-date", &map)?;
-+ let build_date = map
-+ .get("build-date")
-+ .filter(|&v| *v != "unknown")
-+ .map(|&v| String::from(v));
-+ let llvm_version = match map.get("LLVM version") {
-+ Some(&v) => Some(v.parse()?),
-+ None => None,
- };
-
- Ok(VersionMeta {
-- semver: semver,
-- commit_hash: commit_hash,
-- commit_date: commit_date,
-- build_date: build_date,
-- channel: channel,
-- host: host.into(),
-- short_version_string: short_version_string.into(),
-+ semver,
-+ commit_hash,
-+ commit_date,
-+ build_date,
-+ channel,
-+ host,
-+ short_version_string,
-+ llvm_version,
- })
- }
-
--#[test]
--fn smoketest() {
-- let v = version().unwrap();
-- assert!(v.major >= 1);
-+fn expect_key_or_unknown(key: &str, map: &HashMap<&str, &str>) -> Result<Option<String>, Error> {
-+ match map.get(key) {
-+ Some(&v) if v == "unknown" => Ok(None),
-+ Some(&v) => Ok(Some(String::from(v))),
-+ None => Err(Error::UnexpectedVersionFormat),
-+ }
-+}
-
-- let v = version_meta().unwrap();
-- assert!(v.semver.major >= 1);
--
-- assert!(version().unwrap() >= Version::parse("1.0.0").unwrap());
-+fn expect_key(key: &str, map: &HashMap<&str, &str>) -> Result<String, Error> {
-+ map.get(key)
-+ .map(|&v| String::from(v))
-+ .ok_or(Error::UnexpectedVersionFormat)
- }
-
--#[test]
--fn parse_unexpected() {
-- let res = version_meta_for(
--"rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)
--binary: rustc
--commit-hash: a59de37e99060162a2674e3ff45409ac73595c0e
--commit-date: 2015-05-13
--rust-birthday: 2015-05-14
--host: x86_64-unknown-linux-gnu
--release: 1.0.0");
-+/// LLVM Version Parse Error
-+#[derive(Debug)]
-+pub enum LlvmVersionParseError {
-+ /// An error occurred in parsing a version component as an integer
-+ ParseIntError(num::ParseIntError),
-+ /// A version component must not have leading zeros
-+ ComponentMustNotHaveLeadingZeros,
-+ /// A version component has a sign
-+ ComponentMustNotHaveSign,
-+ /// Minor version component must be zero on LLVM versions later than 4.0
-+ MinorVersionMustBeZeroAfter4,
-+ /// Minor version component is required on LLVM versions earlier than 4.0
-+ MinorVersionRequiredBefore4,
-+ /// Too many components
-+ TooManyComponents,
-+}
-
-- assert!(match res {
-- Err(Error::UnexpectedVersionFormat) => true,
-- _ => false,
-- });
--
-+impl From<num::ParseIntError> for LlvmVersionParseError {
-+ fn from(e: num::ParseIntError) -> Self {
-+ LlvmVersionParseError::ParseIntError(e)
-+ }
- }
-
--#[test]
--fn parse_1_0_0() {
-- let version = version_meta_for(
--"rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)
--binary: rustc
--commit-hash: a59de37e99060162a2674e3ff45409ac73595c0e
--commit-date: 2015-05-13
--build-date: 2015-05-14
--host: x86_64-unknown-linux-gnu
--release: 1.0.0").unwrap();
--
-- assert_eq!(version.semver, Version::parse("1.0.0").unwrap());
-- assert_eq!(version.commit_hash, Some("a59de37e99060162a2674e3ff45409ac73595c0e".into()));
-- assert_eq!(version.commit_date, Some("2015-05-13".into()));
-- assert_eq!(version.build_date, Some("2015-05-14".into()));
-- assert_eq!(version.channel, Channel::Stable);
-- assert_eq!(version.host, "x86_64-unknown-linux-gnu");
-- assert_eq!(version.short_version_string, "rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)");
-+impl fmt::Display for LlvmVersionParseError {
-+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-+ match self {
-+ LlvmVersionParseError::ParseIntError(e) => {
-+ write!(f, "error parsing LLVM version component: {}", e)
-+ }
-+ LlvmVersionParseError::ComponentMustNotHaveLeadingZeros => {
-+ write!(f, "a version component must not have leading zeros")
-+ }
-+ LlvmVersionParseError::ComponentMustNotHaveSign => {
-+ write!(f, "a version component must not have a sign")
-+ }
-+ LlvmVersionParseError::MinorVersionMustBeZeroAfter4 => write!(
-+ f,
-+ "LLVM's minor version component must be 0 for versions greater than 4.0"
-+ ),
-+ LlvmVersionParseError::MinorVersionRequiredBefore4 => write!(
-+ f,
-+ "LLVM's minor version component is required for versions less than 4.0"
-+ ),
-+ LlvmVersionParseError::TooManyComponents => write!(f, "too many version components"),
-+ }
-+ }
- }
-
--
--#[test]
--fn parse_unknown() {
-- let version = version_meta_for(
--"rustc 1.3.0
--binary: rustc
--commit-hash: unknown
--commit-date: unknown
--host: x86_64-unknown-linux-gnu
--release: 1.3.0").unwrap();
--
-- assert_eq!(version.semver, Version::parse("1.3.0").unwrap());
-- assert_eq!(version.commit_hash, None);
-- assert_eq!(version.commit_date, None);
-- assert_eq!(version.channel, Channel::Stable);
-- assert_eq!(version.host, "x86_64-unknown-linux-gnu");
-- assert_eq!(version.short_version_string, "rustc 1.3.0");
-+impl error::Error for LlvmVersionParseError {
-+ fn source(&self) -> Option<&(dyn error::Error + 'static)> {
-+ match self {
-+ LlvmVersionParseError::ParseIntError(e) => Some(e),
-+ LlvmVersionParseError::ComponentMustNotHaveLeadingZeros
-+ | LlvmVersionParseError::ComponentMustNotHaveSign
-+ | LlvmVersionParseError::MinorVersionMustBeZeroAfter4
-+ | LlvmVersionParseError::MinorVersionRequiredBefore4
-+ | LlvmVersionParseError::TooManyComponents => None,
-+ }
-+ }
- }
-
--#[test]
--fn parse_nightly() {
-- let version = version_meta_for(
--"rustc 1.5.0-nightly (65d5c0833 2015-09-29)
--binary: rustc
--commit-hash: 65d5c083377645a115c4ac23a620d3581b9562b6
--commit-date: 2015-09-29
--host: x86_64-unknown-linux-gnu
--release: 1.5.0-nightly").unwrap();
--
-- assert_eq!(version.semver, Version::parse("1.5.0-nightly").unwrap());
-- assert_eq!(version.commit_hash, Some("65d5c083377645a115c4ac23a620d3581b9562b6".into()));
-- assert_eq!(version.commit_date, Some("2015-09-29".into()));
-- assert_eq!(version.channel, Channel::Nightly);
-- assert_eq!(version.host, "x86_64-unknown-linux-gnu");
-- assert_eq!(version.short_version_string, "rustc 1.5.0-nightly (65d5c0833 2015-09-29)");
--}
--
--#[test]
--fn parse_stable() {
-- let version = version_meta_for(
--"rustc 1.3.0 (9a92aaf19 2015-09-15)
--binary: rustc
--commit-hash: 9a92aaf19a64603b02b4130fe52958cc12488900
--commit-date: 2015-09-15
--host: x86_64-unknown-linux-gnu
--release: 1.3.0").unwrap();
--
-- assert_eq!(version.semver, Version::parse("1.3.0").unwrap());
-- assert_eq!(version.commit_hash, Some("9a92aaf19a64603b02b4130fe52958cc12488900".into()));
-- assert_eq!(version.commit_date, Some("2015-09-15".into()));
-- assert_eq!(version.channel, Channel::Stable);
-- assert_eq!(version.host, "x86_64-unknown-linux-gnu");
-- assert_eq!(version.short_version_string, "rustc 1.3.0 (9a92aaf19 2015-09-15)");
-+/// The error type for this crate.
-+#[derive(Debug)]
-+pub enum Error {
-+ /// An error occurred while trying to find the `rustc` to run.
-+ CouldNotExecuteCommand(io::Error),
-+ /// Error output from the command that was run.
-+ CommandError {
-+ /// stdout output from the command
-+ stdout: String,
-+ /// stderr output from the command
-+ stderr: String,
-+ },
-+ /// The output of `rustc -vV` was not valid utf-8.
-+ Utf8Error(str::Utf8Error),
-+ /// The output of `rustc -vV` was not in the expected format.
-+ UnexpectedVersionFormat,
-+ /// An error occurred in parsing the semver.
-+ SemVerError(semver::Error),
-+ /// The pre-release tag is unknown.
-+ UnknownPreReleaseTag(String),
-+ /// An error occurred in parsing a `LlvmVersion`.
-+ LlvmVersionError(LlvmVersionParseError),
- }
-
--#[test]
--fn parse_1_16_0_nightly() {
-- let version = version_meta_for(
--"rustc 1.16.0-nightly (5d994d8b7 2017-01-05)
--binary: rustc
--commit-hash: 5d994d8b7e482e87467d4a521911477bd8284ce3
--commit-date: 2017-01-05
--host: x86_64-unknown-linux-gnu
--release: 1.16.0-nightly
--LLVM version: 3.9").unwrap();
--
-- assert_eq!(version.semver, Version::parse("1.16.0-nightly").unwrap());
-- assert_eq!(version.commit_hash, Some("5d994d8b7e482e87467d4a521911477bd8284ce3".into()));
-- assert_eq!(version.commit_date, Some("2017-01-05".into()));
-- assert_eq!(version.channel, Channel::Nightly);
-- assert_eq!(version.host, "x86_64-unknown-linux-gnu");
-- assert_eq!(version.short_version_string, "rustc 1.16.0-nightly (5d994d8b7 2017-01-05)");
-+impl fmt::Display for Error {
-+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
-+ match *self {
-+ CouldNotExecuteCommand(ref e) => write!(f, "could not execute command: {}", e),
-+ CommandError {
-+ ref stdout,
-+ ref stderr,
-+ } => write!(
-+ f,
-+ "error from command -- stderr:\n\n{}\n\nstderr:\n\n{}",
-+ stderr, stdout,
-+ ),
-+ Utf8Error(_) => write!(f, "invalid UTF-8 output from `rustc -vV`"),
-+ UnexpectedVersionFormat => write!(f, "unexpected `rustc -vV` format"),
-+ SemVerError(ref e) => write!(f, "error parsing version: {}", e),
-+ UnknownPreReleaseTag(ref i) => write!(f, "unknown pre-release tag: {}", i),
-+ LlvmVersionError(ref e) => write!(f, "error parsing LLVM's version: {}", e),
-+ }
-+ }
- }
-
--/*
--#[test]
--fn version_matches_replacement() {
-- let f = |s1: &str, s2: &str| {
-- let a = Version::parse(s1).unwrap();
-- let b = Version::parse(s2).unwrap();
-- println!("{} <= {} : {}", s1, s2, a <= b);
-- };
--
-- println!();
-+impl error::Error for Error {
-+ fn source(&self) -> Option<&(dyn error::Error + 'static)> {
-+ match *self {
-+ CouldNotExecuteCommand(ref e) => Some(e),
-+ CommandError { .. } => None,
-+ Utf8Error(ref e) => Some(e),
-+ UnexpectedVersionFormat => None,
-+ SemVerError(ref e) => Some(e),
-+ UnknownPreReleaseTag(_) => None,
-+ LlvmVersionError(ref e) => Some(e),
-+ }
-+ }
-+}
-
-- f("1.5.0", "1.5.0");
-- f("1.5.0-nightly", "1.5.0");
-- f("1.5.0", "1.5.0-nightly");
-- f("1.5.0-nightly", "1.5.0-nightly");
-+macro_rules! impl_from {
-+ ($($err_ty:ty => $variant:ident),* $(,)*) => {
-+ $(
-+ impl From<$err_ty> for Error {
-+ fn from(e: $err_ty) -> Error {
-+ Error::$variant(e)
-+ }
-+ }
-+ )*
-+ }
-+}
-
-- f("1.5.0", "1.6.0");
-- f("1.5.0-nightly", "1.6.0");
-- f("1.5.0", "1.6.0-nightly");
-- f("1.5.0-nightly", "1.6.0-nightly");
-+impl_from! {
-+ str::Utf8Error => Utf8Error,
-+ semver::Error => SemVerError,
-+ LlvmVersionParseError => LlvmVersionError,
-+}
-
-- panic!();
--
--}
--*/
-+/// The result type for this crate.
-+pub type Result<T, E = Error> = std::result::Result<T, E>;
-diff --git a/third_party/rust/rustc_version/tests/all.rs b/third_party/rust/rustc_version/tests/all.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/rustc_version/tests/all.rs
-@@ -0,0 +1,456 @@
-+#![allow(clippy::match_like_matches_macro)]
-+
-+use std::process::Command;
-+
-+use rustc_version::{
-+ version, version_meta, version_meta_for, Channel, Error, LlvmVersion, LlvmVersionParseError,
-+ Version, VersionMeta,
-+};
-+
-+#[test]
-+fn rustc_error() {
-+ let mut cmd = Command::new("rustc");
-+ cmd.arg("--FOO");
-+ let stderr = match VersionMeta::for_command(cmd) {
-+ Err(Error::CommandError { stdout: _, stderr }) => stderr,
-+ _ => panic!("command error expected"),
-+ };
-+ assert_eq!(stderr, "error: Unrecognized option: \'FOO\'\n\n");
-+}
-+
-+#[test]
-+fn smoketest() {
-+ let v = version().unwrap();
-+ assert!(v.major >= 1);
-+
-+ let v = version_meta().unwrap();
-+ assert!(v.semver.major >= 1);
-+
-+ assert!(version().unwrap() >= Version::parse("1.0.0").unwrap());
-+}
-+
-+#[test]
-+fn parse_1_0_0() {
-+ let version = version_meta_for(
-+ "rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)
-+binary: rustc
-+commit-hash: a59de37e99060162a2674e3ff45409ac73595c0e
-+commit-date: 2015-05-13
-+build-date: 2015-05-14
-+host: x86_64-unknown-linux-gnu
-+release: 1.0.0",
-+ )
-+ .unwrap();
-+
-+ assert_eq!(version.semver, Version::parse("1.0.0").unwrap());
-+ assert_eq!(
-+ version.commit_hash,
-+ Some("a59de37e99060162a2674e3ff45409ac73595c0e".into())
-+ );
-+ assert_eq!(version.commit_date, Some("2015-05-13".into()));
-+ assert_eq!(version.build_date, Some("2015-05-14".into()));
-+ assert_eq!(version.channel, Channel::Stable);
-+ assert_eq!(version.host, "x86_64-unknown-linux-gnu");
-+ assert_eq!(
-+ version.short_version_string,
-+ "rustc 1.0.0 (a59de37e9 2015-05-13) (built 2015-05-14)"
-+ );
-+ assert_eq!(version.llvm_version, None);
-+}
-+
-+#[test]
-+fn parse_unknown() {
-+ let version = version_meta_for(
-+ "rustc 1.3.0
-+binary: rustc
-+commit-hash: unknown
-+commit-date: unknown
-+host: x86_64-unknown-linux-gnu
-+release: 1.3.0",
-+ )
-+ .unwrap();
-+
-+ assert_eq!(version.semver, Version::parse("1.3.0").unwrap());
-+ assert_eq!(version.commit_hash, None);
-+ assert_eq!(version.commit_date, None);
-+ assert_eq!(version.channel, Channel::Stable);
-+ assert_eq!(version.host, "x86_64-unknown-linux-gnu");
-+ assert_eq!(version.short_version_string, "rustc 1.3.0");
-+ assert_eq!(version.llvm_version, None);
-+}
-+
-+#[test]
-+fn parse_nightly() {
-+ let version = version_meta_for(
-+ "rustc 1.5.0-nightly (65d5c0833 2015-09-29)
-+binary: rustc
-+commit-hash: 65d5c083377645a115c4ac23a620d3581b9562b6
-+commit-date: 2015-09-29
-+host: x86_64-unknown-linux-gnu
-+release: 1.5.0-nightly",
-+ )
-+ .unwrap();
-+
-+ assert_eq!(version.semver, Version::parse("1.5.0-nightly").unwrap());
-+ assert_eq!(
-+ version.commit_hash,
-+ Some("65d5c083377645a115c4ac23a620d3581b9562b6".into())
-+ );
-+ assert_eq!(version.commit_date, Some("2015-09-29".into()));
-+ assert_eq!(version.channel, Channel::Nightly);
-+ assert_eq!(version.host, "x86_64-unknown-linux-gnu");
-+ assert_eq!(
-+ version.short_version_string,
-+ "rustc 1.5.0-nightly (65d5c0833 2015-09-29)"
-+ );
-+ assert_eq!(version.llvm_version, None);
-+}
-+
-+#[test]
-+fn parse_stable() {
-+ let version = version_meta_for(
-+ "rustc 1.3.0 (9a92aaf19 2015-09-15)
-+binary: rustc
-+commit-hash: 9a92aaf19a64603b02b4130fe52958cc12488900
-+commit-date: 2015-09-15
-+host: x86_64-unknown-linux-gnu
-+release: 1.3.0",
-+ )
-+ .unwrap();
-+
-+ assert_eq!(version.semver, Version::parse("1.3.0").unwrap());
-+ assert_eq!(
-+ version.commit_hash,
-+ Some("9a92aaf19a64603b02b4130fe52958cc12488900".into())
-+ );
-+ assert_eq!(version.commit_date, Some("2015-09-15".into()));
-+ assert_eq!(version.channel, Channel::Stable);
-+ assert_eq!(version.host, "x86_64-unknown-linux-gnu");
-+ assert_eq!(
-+ version.short_version_string,
-+ "rustc 1.3.0 (9a92aaf19 2015-09-15)"
-+ );
-+ assert_eq!(version.llvm_version, None);
-+}
-+
-+#[test]
-+fn parse_1_16_0_nightly() {
-+ let version = version_meta_for(
-+ "rustc 1.16.0-nightly (5d994d8b7 2017-01-05)
-+binary: rustc
-+commit-hash: 5d994d8b7e482e87467d4a521911477bd8284ce3
-+commit-date: 2017-01-05
-+host: x86_64-unknown-linux-gnu
-+release: 1.16.0-nightly
-+LLVM version: 3.9",
-+ )
-+ .unwrap();
-+
-+ assert_eq!(version.semver, Version::parse("1.16.0-nightly").unwrap());
-+ assert_eq!(
-+ version.commit_hash,
-+ Some("5d994d8b7e482e87467d4a521911477bd8284ce3".into())
-+ );
-+ assert_eq!(version.commit_date, Some("2017-01-05".into()));
-+ assert_eq!(version.channel, Channel::Nightly);
-+ assert_eq!(version.host, "x86_64-unknown-linux-gnu");
-+ assert_eq!(
-+ version.short_version_string,
-+ "rustc 1.16.0-nightly (5d994d8b7 2017-01-05)"
-+ );
-+ assert_eq!(
-+ version.llvm_version,
-+ Some(LlvmVersion { major: 3, minor: 9 })
-+ );
-+}
-+
-+#[test]
-+fn parse_1_47_0_stable() {
-+ let version = version_meta_for(
-+ "rustc 1.47.0 (18bf6b4f0 2020-10-07)
-+binary: rustc
-+commit-hash: 18bf6b4f01a6feaf7259ba7cdae58031af1b7b39
-+commit-date: 2020-10-07
-+host: powerpc64le-unknown-linux-gnu
-+release: 1.47.0
-+LLVM version: 11.0",
-+ )
-+ .unwrap();
-+
-+ assert_eq!(version.semver, Version::parse("1.47.0").unwrap());
-+ assert_eq!(
-+ version.commit_hash,
-+ Some("18bf6b4f01a6feaf7259ba7cdae58031af1b7b39".into())
-+ );
-+ assert_eq!(version.commit_date, Some("2020-10-07".into()));
-+ assert_eq!(version.channel, Channel::Stable);
-+ assert_eq!(version.host, "powerpc64le-unknown-linux-gnu");
-+ assert_eq!(
-+ version.short_version_string,
-+ "rustc 1.47.0 (18bf6b4f0 2020-10-07)"
-+ );
-+ assert_eq!(
-+ version.llvm_version,
-+ Some(LlvmVersion {
-+ major: 11,
-+ minor: 0,
-+ })
-+ );
-+}
-+
-+#[test]
-+fn parse_llvm_micro() {
-+ let version = version_meta_for(
-+ "rustc 1.51.0-nightly (4253153db 2021-01-17)
-+binary: rustc
-+commit-hash: 4253153db205251f72ea4493687a31e04a2a8ca0
-+commit-date: 2021-01-17
-+host: x86_64-pc-windows-msvc
-+release: 1.51.0-nightly
-+LLVM version: 11.0.1",
-+ )
-+ .unwrap();
-+
-+ assert_eq!(version.semver, Version::parse("1.51.0-nightly").unwrap());
-+ assert_eq!(
-+ version.commit_hash.unwrap(),
-+ "4253153db205251f72ea4493687a31e04a2a8ca0"
-+ );
-+ assert_eq!(version.commit_date.unwrap(), "2021-01-17");
-+ assert_eq!(version.host, "x86_64-pc-windows-msvc");
-+ assert_eq!(
-+ version.short_version_string,
-+ "rustc 1.51.0-nightly (4253153db 2021-01-17)"
-+ );
-+ assert_eq!(
-+ version.llvm_version,
-+ Some(LlvmVersion {
-+ major: 11,
-+ minor: 0
-+ })
-+ );
-+}
-+
-+#[test]
-+fn parse_debian_buster() {
-+ let version = version_meta_for(
-+ "rustc 1.41.1
-+binary: rustc
-+commit-hash: unknown
-+commit-date: unknown
-+host: powerpc64le-unknown-linux-gnu
-+release: 1.41.1
-+LLVM version: 7.0",
-+ )
-+ .unwrap();
-+
-+ assert_eq!(version.semver, Version::parse("1.41.1").unwrap());
-+ assert_eq!(version.commit_hash, None);
-+ assert_eq!(version.commit_date, None);
-+ assert_eq!(version.channel, Channel::Stable);
-+ assert_eq!(version.host, "powerpc64le-unknown-linux-gnu");
-+ assert_eq!(version.short_version_string, "rustc 1.41.1");
-+ assert_eq!(
-+ version.llvm_version,
-+ Some(LlvmVersion { major: 7, minor: 0 })
-+ );
-+}
-+
-+#[test]
-+fn parse_termux() {
-+ let version = version_meta_for(
-+ "rustc 1.46.0
-+binary: rustc
-+commit-hash: unknown
-+commit-date: unknown
-+host: aarch64-linux-android
-+release: 1.46.0
-+LLVM version: 10.0",
-+ )
-+ .unwrap();
-+
-+ assert_eq!(version.semver, Version::parse("1.46.0").unwrap());
-+ assert_eq!(version.commit_hash, None);
-+ assert_eq!(version.commit_date, None);
-+ assert_eq!(version.channel, Channel::Stable);
-+ assert_eq!(version.host, "aarch64-linux-android");
-+ assert_eq!(version.short_version_string, "rustc 1.46.0");
-+ assert_eq!(
-+ version.llvm_version,
-+ Some(LlvmVersion {
-+ major: 10,
-+ minor: 0,
-+ })
-+ );
-+}
-+
-+#[test]
-+fn parse_llvm_version_empty() {
-+ let res: Result<LlvmVersion, _> = "".parse();
-+ assert!(match res {
-+ Err(LlvmVersionParseError::ParseIntError(_)) => true,
-+ _ => false,
-+ });
-+}
-+
-+#[test]
-+fn parse_llvm_version_invalid_char() {
-+ let res: Result<LlvmVersion, _> = "A".parse();
-+ assert!(match res {
-+ Err(LlvmVersionParseError::ParseIntError(_)) => true,
-+ _ => false,
-+ });
-+}
-+
-+#[test]
-+fn parse_llvm_version_overflow() {
-+ let res: Result<LlvmVersion, _> = "9999999999999999999999999999999".parse();
-+ assert!(match res {
-+ Err(LlvmVersionParseError::ParseIntError(_)) => true,
-+ _ => false,
-+ });
-+}
-+
-+#[test]
-+fn parse_llvm_version_leading_zero_on_zero() {
-+ let res: Result<LlvmVersion, _> = "00".parse();
-+ assert!(match res {
-+ Err(LlvmVersionParseError::ComponentMustNotHaveLeadingZeros) => true,
-+ _ => false,
-+ });
-+}
-+
-+#[test]
-+fn parse_llvm_version_leading_zero_on_nonzero() {
-+ let res: Result<LlvmVersion, _> = "01".parse();
-+ assert!(match res {
-+ Err(LlvmVersionParseError::ComponentMustNotHaveLeadingZeros) => true,
-+ _ => false,
-+ });
-+}
-+
-+#[test]
-+fn parse_llvm_version_4_components() {
-+ let res: Result<LlvmVersion, _> = "4.0.0.0".parse();
-+
-+ assert!(match res {
-+ Err(LlvmVersionParseError::TooManyComponents) => true,
-+ _ => false,
-+ });
-+}
-+
-+#[test]
-+fn parse_llvm_version_component_sign_plus() {
-+ let res: Result<LlvmVersion, _> = "1.+3".parse();
-+
-+ assert!(match res {
-+ Err(LlvmVersionParseError::ComponentMustNotHaveSign) => true,
-+ _ => false,
-+ });
-+}
-+
-+#[test]
-+fn parse_llvm_version_component_sign_minus() {
-+ let res: Result<LlvmVersion, _> = "1.-3".parse();
-+
-+ assert!(match res {
-+ Err(LlvmVersionParseError::ComponentMustNotHaveSign) => true,
-+ _ => false,
-+ });
-+}
-+
-+#[test]
-+fn parse_llvm_version_3() {
-+ let res: Result<LlvmVersion, _> = "3".parse();
-+
-+ assert!(match res {
-+ Err(LlvmVersionParseError::MinorVersionRequiredBefore4) => true,
-+ _ => false,
-+ });
-+}
-+
-+#[test]
-+fn parse_llvm_version_5() {
-+ let v: LlvmVersion = "5".parse().unwrap();
-+ assert_eq!(v, LlvmVersion { major: 5, minor: 0 });
-+}
-+
-+#[test]
-+fn parse_llvm_version_5_0() {
-+ let v: LlvmVersion = "5.0".parse().unwrap();
-+ assert_eq!(v, LlvmVersion { major: 5, minor: 0 });
-+}
-+
-+#[test]
-+fn parse_llvm_version_4_0() {
-+ let v: LlvmVersion = "4.0".parse().unwrap();
-+ assert_eq!(v, LlvmVersion { major: 4, minor: 0 });
-+}
-+
-+#[test]
-+fn parse_llvm_version_3_0() {
-+ let v: LlvmVersion = "3.0".parse().unwrap();
-+ assert_eq!(v, LlvmVersion { major: 3, minor: 0 });
-+}
-+
-+#[test]
-+fn parse_llvm_version_3_9() {
-+ let v: LlvmVersion = "3.9".parse().unwrap();
-+ assert_eq!(v, LlvmVersion { major: 3, minor: 9 });
-+}
-+
-+#[test]
-+fn parse_llvm_version_11_0() {
-+ let v: LlvmVersion = "11.0".parse().unwrap();
-+ assert_eq!(
-+ v,
-+ LlvmVersion {
-+ major: 11,
-+ minor: 0
-+ }
-+ );
-+}
-+
-+#[test]
-+fn parse_llvm_version_11() {
-+ let v: LlvmVersion = "11".parse().unwrap();
-+ assert_eq!(
-+ v,
-+ LlvmVersion {
-+ major: 11,
-+ minor: 0
-+ }
-+ );
-+}
-+
-+#[test]
-+fn test_llvm_version_comparison() {
-+ // check that field order is correct
-+ assert!(LlvmVersion { major: 3, minor: 9 } < LlvmVersion { major: 4, minor: 0 });
-+}
-+
-+/*
-+#[test]
-+fn version_matches_replacement() {
-+ let f = |s1: &str, s2: &str| {
-+ let a = Version::parse(s1).unwrap();
-+ let b = Version::parse(s2).unwrap();
-+ println!("{} <= {} : {}", s1, s2, a <= b);
-+ };
-+
-+ println!();
-+
-+ f("1.5.0", "1.5.0");
-+ f("1.5.0-nightly", "1.5.0");
-+ f("1.5.0", "1.5.0-nightly");
-+ f("1.5.0-nightly", "1.5.0-nightly");
-+
-+ f("1.5.0", "1.6.0");
-+ f("1.5.0-nightly", "1.6.0");
-+ f("1.5.0", "1.6.0-nightly");
-+ f("1.5.0-nightly", "1.6.0-nightly");
-+
-+ panic!();
-+
-+}
-+*/
-diff --git a/third_party/rust/semver-parser/.cargo-checksum.json b/third_party/rust/semver-parser/.cargo-checksum.json
-deleted file mode 100644
---- a/third_party/rust/semver-parser/.cargo-checksum.json
-+++ /dev/null
-@@ -1,1 +0,0 @@
--{"files":{"Cargo.toml":"67597114802114d2a7fdb457c1cf5f7e0c951b21e287c6a47b9a86b9028cf64d","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"d38feaa4f9468cd1e0ece22e0ad2eadfe6195a9a0a3843b7c722d5c7d81804fb","src/common.rs":"dc42336abd34e19ca9f732f33657e106f98dcc8c10d4c2564bc4f160cb31926e","src/lib.rs":"3ac8ef5a280344a25cb18ac386034c0fee8d64060fa14af5e25ed49f0cb2fd9e","src/range.rs":"3596f048d466d43887aff1e8c8c834476672a4627631ed35379c35466b5f02ec","src/recognize.rs":"9f16eda9fcd7d8af7eee4c3b89c611bd648040273fde6b35778f8a50b004c8b1","src/version.rs":"dbd91a4e4fd92a0aa9eb4f858ecbc1ecd680aa60572cc2ad2085e5c5c30e5b77"},"package":"388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"}
-\ No newline at end of file
-diff --git a/third_party/rust/semver-parser/Cargo.toml b/third_party/rust/semver-parser/Cargo.toml
-deleted file mode 100644
---- a/third_party/rust/semver-parser/Cargo.toml
-+++ /dev/null
-@@ -1,11 +0,0 @@
--[package]
--name = "semver-parser"
--version = "0.7.0"
--authors = ["Steve Klabnik <steve(a)steveklabnik.com>"]
--license = "MIT/Apache-2.0"
--repository = "https://github.com/steveklabnik/semver-parser"
--homepage = "https://github.com/steveklabnik/semver-parser"
--documentation = "https://docs.rs/semver-parser"
--description = """
--Parsing of the semver spec.
--"""
-diff --git a/third_party/rust/semver-parser/LICENSE-APACHE b/third_party/rust/semver-parser/LICENSE-APACHE
-deleted file mode 100644
---- a/third_party/rust/semver-parser/LICENSE-APACHE
-+++ /dev/null
-@@ -1,201 +0,0 @@
-- Apache License
-- Version 2.0, January 2004
-- http://www.apache.org/licenses/
--
--TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
--
--1. Definitions.
--
-- "License" shall mean the terms and conditions for use, reproduction,
-- and distribution as defined by Sections 1 through 9 of this document.
--
-- "Licensor" shall mean the copyright owner or entity authorized by
-- the copyright owner that is granting the License.
--
-- "Legal Entity" shall mean the union of the acting entity and all
-- other entities that control, are controlled by, or are under common
-- control with that entity. For the purposes of this definition,
-- "control" means (i) the power, direct or indirect, to cause the
-- direction or management of such entity, whether by contract or
-- otherwise, or (ii) ownership of fifty percent (50%) or more of the
-- outstanding shares, or (iii) beneficial ownership of such entity.
--
-- "You" (or "Your") shall mean an individual or Legal Entity
-- exercising permissions granted by this License.
--
-- "Source" form shall mean the preferred form for making modifications,
-- including but not limited to software source code, documentation
-- source, and configuration files.
--
-- "Object" form shall mean any form resulting from mechanical
-- transformation or translation of a Source form, including but
-- not limited to compiled object code, generated documentation,
-- and conversions to other media types.
--
-- "Work" shall mean the work of authorship, whether in Source or
-- Object form, made available under the License, as indicated by a
-- copyright notice that is included in or attached to the work
-- (an example is provided in the Appendix below).
--
-- "Derivative Works" shall mean any work, whether in Source or Object
-- form, that is based on (or derived from) the Work and for which the
-- editorial revisions, annotations, elaborations, or other modifications
-- represent, as a whole, an original work of authorship. For the purposes
-- of this License, Derivative Works shall not include works that remain
-- separable from, or merely link (or bind by name) to the interfaces of,
-- the Work and Derivative Works thereof.
--
-- "Contribution" shall mean any work of authorship, including
-- the original version of the Work and any modifications or additions
-- to that Work or Derivative Works thereof, that is intentionally
-- submitted to Licensor for inclusion in the Work by the copyright owner
-- or by an individual or Legal Entity authorized to submit on behalf of
-- the copyright owner. For the purposes of this definition, "submitted"
-- means any form of electronic, verbal, or written communication sent
-- to the Licensor or its representatives, including but not limited to
-- communication on electronic mailing lists, source code control systems,
-- and issue tracking systems that are managed by, or on behalf of, the
-- Licensor for the purpose of discussing and improving the Work, but
-- excluding communication that is conspicuously marked or otherwise
-- designated in writing by the copyright owner as "Not a Contribution."
--
-- "Contributor" shall mean Licensor and any individual or Legal Entity
-- on behalf of whom a Contribution has been received by Licensor and
-- subsequently incorporated within the Work.
--
--2. Grant of Copyright License. Subject to the terms and conditions of
-- this License, each Contributor hereby grants to You a perpetual,
-- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-- copyright license to reproduce, prepare Derivative Works of,
-- publicly display, publicly perform, sublicense, and distribute the
-- Work and such Derivative Works in Source or Object form.
--
--3. Grant of Patent License. Subject to the terms and conditions of
-- this License, each Contributor hereby grants to You a perpetual,
-- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
-- (except as stated in this section) patent license to make, have made,
-- use, offer to sell, sell, import, and otherwise transfer the Work,
-- where such license applies only to those patent claims licensable
-- by such Contributor that are necessarily infringed by their
-- Contribution(s) alone or by combination of their Contribution(s)
-- with the Work to which such Contribution(s) was submitted. If You
-- institute patent litigation against any entity (including a
-- cross-claim or counterclaim in a lawsuit) alleging that the Work
-- or a Contribution incorporated within the Work constitutes direct
-- or contributory patent infringement, then any patent licenses
-- granted to You under this License for that Work shall terminate
-- as of the date such litigation is filed.
--
--4. Redistribution. You may reproduce and distribute copies of the
-- Work or Derivative Works thereof in any medium, with or without
-- modifications, and in Source or Object form, provided that You
-- meet the following conditions:
--
-- (a) You must give any other recipients of the Work or
-- Derivative Works a copy of this License; and
--
-- (b) You must cause any modified files to carry prominent notices
-- stating that You changed the files; and
--
-- (c) You must retain, in the Source form of any Derivative Works
-- that You distribute, all copyright, patent, trademark, and
-- attribution notices from the Source form of the Work,
-- excluding those notices that do not pertain to any part of
-- the Derivative Works; and
--
-- (d) If the Work includes a "NOTICE" text file as part of its
-- distribution, then any Derivative Works that You distribute must
-- include a readable copy of the attribution notices contained
-- within such NOTICE file, excluding those notices that do not
-- pertain to any part of the Derivative Works, in at least one
-- of the following places: within a NOTICE text file distributed
-- as part of the Derivative Works; within the Source form or
-- documentation, if provided along with the Derivative Works; or,
-- within a display generated by the Derivative Works, if and
-- wherever such third-party notices normally appear. The contents
-- of the NOTICE file are for informational purposes only and
-- do not modify the License. You may add Your own attribution
-- notices within Derivative Works that You distribute, alongside
-- or as an addendum to the NOTICE text from the Work, provided
-- that such additional attribution notices cannot be construed
-- as modifying the License.
--
-- You may add Your own copyright statement to Your modifications and
-- may provide additional or different license terms and conditions
-- for use, reproduction, or distribution of Your modifications, or
-- for any such Derivative Works as a whole, provided Your use,
-- reproduction, and distribution of the Work otherwise complies with
-- the conditions stated in this License.
--
--5. Submission of Contributions. Unless You explicitly state otherwise,
-- any Contribution intentionally submitted for inclusion in the Work
-- by You to the Licensor shall be under the terms and conditions of
-- this License, without any additional terms or conditions.
-- Notwithstanding the above, nothing herein shall supersede or modify
-- the terms of any separate license agreement you may have executed
-- with Licensor regarding such Contributions.
--
--6. Trademarks. This License does not grant permission to use the trade
-- names, trademarks, service marks, or product names of the Licensor,
-- except as required for reasonable and customary use in describing the
-- origin of the Work and reproducing the content of the NOTICE file.
--
--7. Disclaimer of Warranty. Unless required by applicable law or
-- agreed to in writing, Licensor provides the Work (and each
-- Contributor provides its Contributions) on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
-- implied, including, without limitation, any warranties or conditions
-- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
-- PARTICULAR PURPOSE. You are solely responsible for determining the
-- appropriateness of using or redistributing the Work and assume any
-- risks associated with Your exercise of permissions under this License.
--
--8. Limitation of Liability. In no event and under no legal theory,
-- whether in tort (including negligence), contract, or otherwise,
-- unless required by applicable law (such as deliberate and grossly
-- negligent acts) or agreed to in writing, shall any Contributor be
-- liable to You for damages, including any direct, indirect, special,
-- incidental, or consequential damages of any character arising as a
-- result of this License or out of the use or inability to use the
-- Work (including but not limited to damages for loss of goodwill,
-- work stoppage, computer failure or malfunction, or any and all
-- other commercial damages or losses), even if such Contributor
-- has been advised of the possibility of such damages.
--
--9. Accepting Warranty or Additional Liability. While redistributing
-- the Work or Derivative Works thereof, You may choose to offer,
-- and charge a fee for, acceptance of support, warranty, indemnity,
-- or other liability obligations and/or rights consistent with this
-- License. However, in accepting such obligations, You may act only
-- on Your own behalf and on Your sole responsibility, not on behalf
-- of any other Contributor, and only if You agree to indemnify,
-- defend, and hold each Contributor harmless for any liability
-- incurred by, or claims asserted against, such Contributor by reason
-- of your accepting any such warranty or additional liability.
--
--END OF TERMS AND CONDITIONS
--
--APPENDIX: How to apply the Apache License to your work.
--
-- To apply the Apache License to your work, attach the following
-- boilerplate notice, with the fields enclosed by brackets "[]"
-- replaced with your own identifying information. (Don't include
-- the brackets!) The text should be enclosed in the appropriate
-- comment syntax for the file format. We also recommend that a
-- file or class name and description of purpose be included on the
-- same "printed page" as the copyright notice for easier
-- identification within third-party archives.
--
--Copyright [yyyy] [name of copyright owner]
--
--Licensed under the Apache License, Version 2.0 (the "License");
--you may not use this file except in compliance with the License.
--You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
--Unless required by applicable law or agreed to in writing, software
--distributed under the License is distributed on an "AS IS" BASIS,
--WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--See the License for the specific language governing permissions and
--limitations under the License.
-diff --git a/third_party/rust/semver-parser/LICENSE-MIT b/third_party/rust/semver-parser/LICENSE-MIT
-deleted file mode 100644
---- a/third_party/rust/semver-parser/LICENSE-MIT
-+++ /dev/null
-@@ -1,25 +0,0 @@
--Copyright (c) 2016 Steve Klabnik
--
--Permission is hereby granted, free of charge, to any
--person obtaining a copy of this software and associated
--documentation files (the "Software"), to deal in the
--Software without restriction, including without
--limitation the rights to use, copy, modify, merge,
--publish, distribute, sublicense, and/or sell copies of
--the Software, and to permit persons to whom the Software
--is furnished to do so, subject to the following
--conditions:
--
--The above copyright notice and this permission notice
--shall be included in all copies or substantial portions
--of the Software.
--
--THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
--ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
--TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
--PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
--SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
--CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
--OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
--IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
--DEALINGS IN THE SOFTWARE.
-diff --git a/third_party/rust/semver-parser/src/common.rs b/third_party/rust/semver-parser/src/common.rs
-deleted file mode 100644
---- a/third_party/rust/semver-parser/src/common.rs
-+++ /dev/null
-@@ -1,66 +0,0 @@
--use version::Identifier;
--use recognize::{Recognize, Alt, OneOrMore, Inclusive, OneByte};
--use std::str::from_utf8;
--
--// by the time we get here, we know that it's all valid characters, so this doesn't need to return
--// a result or anything
--fn parse_meta(s: &str) -> Vec<Identifier> {
-- // Originally, I wanted to implement this method via calling parse, but parse is tolerant of
-- // leading zeroes, and we want anything with leading zeroes to be considered alphanumeric, not
-- // numeric. So the strategy is to check with a recognizer first, and then call parse once
-- // we've determined that it's a number without a leading zero.
-- s.split(".")
-- .map(|part| {
-- // another wrinkle: we made sure that any number starts with a
-- // non-zero. But there's a problem: an actual zero is a number, yet
-- // gets left out by this heuristic. So let's also check for the
-- // single, lone zero.
-- if is_alpha_numeric(part) {
-- Identifier::AlphaNumeric(part.to_string())
-- } else {
-- // we can unwrap here because we know it is only digits due to the regex
-- Identifier::Numeric(part.parse().unwrap())
-- }
-- }).collect()
--}
--
--// parse optional metadata (preceded by the prefix character)
--pub fn parse_optional_meta(s: &[u8], prefix_char: u8)-> Result<(Vec<Identifier>, usize), String> {
-- if let Some(len) = prefix_char.p(s) {
-- let start = len;
-- if let Some(len) = letters_numbers_dash_dot(&s[start..]) {
-- let end = start + len;
-- Ok((parse_meta(from_utf8(&s[start..end]).unwrap()), end))
-- } else {
-- Err("Error parsing prerelease".to_string())
-- }
-- } else {
-- Ok((Vec::new(), 0))
-- }
--}
--
--pub fn is_alpha_numeric(s: &str) -> bool {
-- if let Some((_val, len)) = numeric_identifier(s.as_bytes()) {
-- // Return true for number with leading zero
-- // Note: doing it this way also handily makes overflow fail over.
-- len != s.len()
-- } else {
-- true
-- }
--}
--
--// Note: could plumb overflow error up to return value as Result
--pub fn numeric_identifier(s: &[u8]) -> Option<(u64, usize)> {
-- if let Some(len) = Alt(b'0', OneOrMore(Inclusive(b'0'..b'9'))).p(s) {
-- from_utf8(&s[0..len]).unwrap().parse().ok().map(|val| (val, len))
-- } else {
-- None
-- }
--}
--
--pub fn letters_numbers_dash_dot(s: &[u8]) -> Option<usize> {
-- OneOrMore(OneByte(|c| c == b'-' || c == b'.' ||
-- (b'0' <= c && c <= b'9') ||
-- (b'a' <= c && c <= b'z') ||
-- (b'A' <= c && c <= b'Z'))).p(s)
--}
-diff --git a/third_party/rust/semver-parser/src/lib.rs b/third_party/rust/semver-parser/src/lib.rs
-deleted file mode 100644
---- a/third_party/rust/semver-parser/src/lib.rs
-+++ /dev/null
-@@ -1,8 +0,0 @@
--pub mod version;
--pub mod range;
--
--// for private stuff the two share
--mod common;
--
--// for recognizer combinators
--mod recognize;
-diff --git a/third_party/rust/semver-parser/src/range.rs b/third_party/rust/semver-parser/src/range.rs
-deleted file mode 100644
---- a/third_party/rust/semver-parser/src/range.rs
-+++ /dev/null
-@@ -1,696 +0,0 @@
--use common::{self, numeric_identifier, letters_numbers_dash_dot};
--use version::Identifier;
--use std::str::{FromStr, from_utf8};
--use recognize::*;
--
--#[derive(Debug)]
--pub struct VersionReq {
-- pub predicates: Vec<Predicate>,
--}
--
--#[derive(PartialEq,Debug)]
--pub enum WildcardVersion {
-- Major,
-- Minor,
-- Patch,
--}
--
--#[derive(PartialEq,Debug)]
--pub enum Op {
-- Ex, // Exact
-- Gt, // Greater than
-- GtEq, // Greater than or equal to
-- Lt, // Less than
-- LtEq, // Less than or equal to
-- Tilde, // e.g. ~1.0.0
-- Compatible, // compatible by definition of semver, indicated by ^
-- Wildcard(WildcardVersion), // x.y.*, x.*, *
--}
--
--impl FromStr for Op {
-- type Err = String;
--
-- fn from_str(s: &str) -> Result<Op, String> {
-- match s {
-- "=" => Ok(Op::Ex),
-- ">" => Ok(Op::Gt),
-- ">=" => Ok(Op::GtEq),
-- "<" => Ok(Op::Lt),
-- "<=" => Ok(Op::LtEq),
-- "~" => Ok(Op::Tilde),
-- "^" => Ok(Op::Compatible),
-- _ => Err(String::from("Could not parse Op")),
-- }
-- }
--}
--
--#[derive(PartialEq,Debug)]
--pub struct Predicate {
-- pub op: Op,
-- pub major: u64,
-- pub minor: Option<u64>,
-- pub patch: Option<u64>,
-- pub pre: Vec<Identifier>,
--}
--
--fn numeric_or_wild(s: &[u8]) -> Option<(Option<u64>, usize)> {
-- if let Some((val, len)) = numeric_identifier(s) {
-- Some((Some(val), len))
-- } else if let Some(len) = OneOf(b"*xX").p(s) {
-- Some((None, len))
-- } else {
-- None
-- }
--}
--
--fn dot_numeric_or_wild(s: &[u8]) -> Option<(Option<u64>, usize)> {
-- b'.'.p(s).and_then(|len|
-- numeric_or_wild(&s[len..]).map(|(val, len2)| (val, len + len2))
-- )
--}
--
--fn operation(s: &[u8]) -> Option<(Op, usize)> {
-- if let Some(len) = "=".p(s) {
-- Some((Op::Ex, len))
-- } else if let Some(len) = ">=".p(s) {
-- Some((Op::GtEq, len))
-- } else if let Some(len) = ">".p(s) {
-- Some((Op::Gt, len))
-- } else if let Some(len) = "<=".p(s) {
-- Some((Op::LtEq, len))
-- } else if let Some(len) = "<".p(s) {
-- Some((Op::Lt, len))
-- } else if let Some(len) = "~".p(s) {
-- Some((Op::Tilde, len))
-- } else if let Some(len) = "^".p(s) {
-- Some((Op::Compatible, len))
-- } else {
-- None
-- }
--}
--
--fn whitespace(s: &[u8]) -> Option<usize> {
-- ZeroOrMore(OneOf(b"\t\r\n ")).p(s)
--}
--
--pub fn parse_predicate(range: &str) -> Result<Predicate, String> {
-- let s = range.trim().as_bytes();
-- let mut i = 0;
-- let mut operation = if let Some((op, len)) = operation(&s[i..]) {
-- i += len;
-- op
-- } else {
-- // operations default to Compatible
-- Op::Compatible
-- };
-- if let Some(len) = whitespace.p(&s[i..]) {
-- i += len;
-- }
-- let major = if let Some((major, len)) = numeric_identifier(&s[i..]) {
-- i += len;
-- major
-- } else {
-- return Err("Error parsing major version number: ".to_string());
-- };
-- let minor = if let Some((minor, len)) = dot_numeric_or_wild(&s[i..]) {
-- i += len;
-- if minor.is_none() {
-- operation = Op::Wildcard(WildcardVersion::Minor);
-- }
-- minor
-- } else {
-- None
-- };
-- let patch = if let Some((patch, len)) = dot_numeric_or_wild(&s[i..]) {
-- i += len;
-- if patch.is_none() {
-- operation = Op::Wildcard(WildcardVersion::Patch);
-- }
-- patch
-- } else {
-- None
-- };
-- let (pre, pre_len) = common::parse_optional_meta(&s[i..], b'-')?;
-- i += pre_len;
-- if let Some(len) = (b'+', letters_numbers_dash_dot).p(&s[i..]) {
-- i += len;
-- }
-- if i != s.len() {
-- return Err("Extra junk after valid predicate: ".to_string() +
-- from_utf8(&s[i..]).unwrap());
-- }
-- Ok(Predicate {
-- op: operation,
-- major: major,
-- minor: minor,
-- patch: patch,
-- pre: pre,
-- })
--}
--
--pub fn parse(ranges: &str) -> Result<VersionReq, String> {
-- // null is an error
-- if ranges == "\0" {
-- return Err(String::from("Null is not a valid VersionReq"));
-- }
--
-- // an empty range is a major version wildcard
-- // so is a lone * or x of either capitalization
-- if (ranges == "")
-- || (ranges == "*")
-- || (ranges == "x")
-- || (ranges == "X") {
-- return Ok(VersionReq {
-- predicates: vec![Predicate {
-- op: Op::Wildcard(WildcardVersion::Major),
-- major: 0,
-- minor: None,
-- patch: None,
-- pre: Vec::new(),
-- }],
-- });
-- }
--
--
-- let ranges = ranges.trim();
--
-- let predicates: Result<Vec<_>, String> = ranges
-- .split(",")
-- .map(|range| {
-- parse_predicate(range)
-- })
-- .collect();
--
-- let predicates = try!(predicates);
--
-- if predicates.len() == 0 {
-- return Err(String::from("VersionReq did not parse properly"));
-- }
--
-- Ok(VersionReq {
-- predicates: predicates,
-- })
--}
--
--#[cfg(test)]
--mod tests {
-- use super::*;
-- use range;
-- use version::Identifier;
--
-- #[test]
-- fn test_parsing_default() {
-- let r = range::parse("1.0.0").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Compatible,
-- major: 1,
-- minor: Some(0),
-- patch: Some(0),
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- fn test_parsing_exact_01() {
-- let r = range::parse("=1.0.0").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Ex,
-- major: 1,
-- minor: Some(0),
-- patch: Some(0),
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- fn test_parsing_exact_02() {
-- let r = range::parse("=0.9.0").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Ex,
-- major: 0,
-- minor: Some(9),
-- patch: Some(0),
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- fn test_parsing_exact_03() {
-- let r = range::parse("=0.1.0-beta2.a").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Ex,
-- major: 0,
-- minor: Some(1),
-- patch: Some(0),
-- pre: vec![Identifier::AlphaNumeric(String::from("beta2")),
-- Identifier::AlphaNumeric(String::from("a"))],
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- pub fn test_parsing_greater_than() {
-- let r = range::parse("> 1.0.0").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Gt,
-- major: 1,
-- minor: Some(0),
-- patch: Some(0),
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- pub fn test_parsing_greater_than_01() {
-- let r = range::parse(">= 1.0.0").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::GtEq,
-- major: 1,
-- minor: Some(0),
-- patch: Some(0),
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- pub fn test_parsing_greater_than_02() {
-- let r = range::parse(">= 2.1.0-alpha2").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::GtEq,
-- major: 2,
-- minor: Some(1),
-- patch: Some(0),
-- pre: vec![Identifier::AlphaNumeric(String::from("alpha2"))],
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- pub fn test_parsing_less_than() {
-- let r = range::parse("< 1.0.0").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Lt,
-- major: 1,
-- minor: Some(0),
-- patch: Some(0),
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- pub fn test_parsing_less_than_eq() {
-- let r = range::parse("<= 2.1.0-alpha2").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::LtEq,
-- major: 2,
-- minor: Some(1),
-- patch: Some(0),
-- pre: vec![Identifier::AlphaNumeric(String::from("alpha2"))],
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- pub fn test_parsing_tilde() {
-- let r = range::parse("~1").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Tilde,
-- major: 1,
-- minor: None,
-- patch: None,
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- pub fn test_parsing_compatible() {
-- let r = range::parse("^0").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Compatible,
-- major: 0,
-- minor: None,
-- patch: None,
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- fn test_parsing_blank() {
-- let r = range::parse("").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Wildcard(WildcardVersion::Major),
-- major: 0,
-- minor: None,
-- patch: None,
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- fn test_parsing_wildcard() {
-- let r = range::parse("*").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Wildcard(WildcardVersion::Major),
-- major: 0,
-- minor: None,
-- patch: None,
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- fn test_parsing_x() {
-- let r = range::parse("x").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Wildcard(WildcardVersion::Major),
-- major: 0,
-- minor: None,
-- patch: None,
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- fn test_parsing_capital_x() {
-- let r = range::parse("X").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Wildcard(WildcardVersion::Major),
-- major: 0,
-- minor: None,
-- patch: None,
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- fn test_parsing_minor_wildcard_star() {
-- let r = range::parse("1.*").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Wildcard(WildcardVersion::Minor),
-- major: 1,
-- minor: None,
-- patch: None,
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- fn test_parsing_minor_wildcard_x() {
-- let r = range::parse("1.x").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Wildcard(WildcardVersion::Minor),
-- major: 1,
-- minor: None,
-- patch: None,
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- fn test_parsing_minor_wildcard_capital_x() {
-- let r = range::parse("1.X").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Wildcard(WildcardVersion::Minor),
-- major: 1,
-- minor: None,
-- patch: None,
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- fn test_parsing_patch_wildcard_star() {
-- let r = range::parse("1.2.*").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Wildcard(WildcardVersion::Patch),
-- major: 1,
-- minor: Some(2),
-- patch: None,
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- fn test_parsing_patch_wildcard_x() {
-- let r = range::parse("1.2.x").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Wildcard(WildcardVersion::Patch),
-- major: 1,
-- minor: Some(2),
-- patch: None,
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- fn test_parsing_patch_wildcard_capital_x() {
-- let r = range::parse("1.2.X").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Wildcard(WildcardVersion::Patch),
-- major: 1,
-- minor: Some(2),
-- patch: None,
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
-- }
--
-- #[test]
-- pub fn test_multiple_01() {
-- let r = range::parse("> 0.0.9, <= 2.5.3").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Gt,
-- major: 0,
-- minor: Some(0),
-- patch: Some(9),
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
--
-- assert_eq!(Predicate {
-- op: Op::LtEq,
-- major: 2,
-- minor: Some(5),
-- patch: Some(3),
-- pre: Vec::new(),
-- },
-- r.predicates[1]
-- );
-- }
--
-- #[test]
-- pub fn test_multiple_02() {
-- let r = range::parse("0.3.0, 0.4.0").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Compatible,
-- major: 0,
-- minor: Some(3),
-- patch: Some(0),
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
--
-- assert_eq!(Predicate {
-- op: Op::Compatible,
-- major: 0,
-- minor: Some(4),
-- patch: Some(0),
-- pre: Vec::new(),
-- },
-- r.predicates[1]
-- );
-- }
--
-- #[test]
-- pub fn test_multiple_03() {
-- let r = range::parse("<= 0.2.0, >= 0.5.0").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::LtEq,
-- major: 0,
-- minor: Some(2),
-- patch: Some(0),
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
--
-- assert_eq!(Predicate {
-- op: Op::GtEq,
-- major: 0,
-- minor: Some(5),
-- patch: Some(0),
-- pre: Vec::new(),
-- },
-- r.predicates[1]
-- );
-- }
--
-- #[test]
-- pub fn test_multiple_04() {
-- let r = range::parse("0.1.0, 0.1.4, 0.1.6").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::Compatible,
-- major: 0,
-- minor: Some(1),
-- patch: Some(0),
-- pre: Vec::new(),
-- },
-- r.predicates[0]
-- );
--
-- assert_eq!(Predicate {
-- op: Op::Compatible,
-- major: 0,
-- minor: Some(1),
-- patch: Some(4),
-- pre: Vec::new(),
-- },
-- r.predicates[1]
-- );
--
-- assert_eq!(Predicate {
-- op: Op::Compatible,
-- major: 0,
-- minor: Some(1),
-- patch: Some(6),
-- pre: Vec::new(),
-- },
-- r.predicates[2]
-- );
-- }
--
-- #[test]
-- pub fn test_multiple_05() {
-- let r = range::parse(">=0.5.1-alpha3, <0.6").unwrap();
--
-- assert_eq!(Predicate {
-- op: Op::GtEq,
-- major: 0,
-- minor: Some(5),
-- patch: Some(1),
-- pre: vec![Identifier::AlphaNumeric(String::from("alpha3"))],
-- },
-- r.predicates[0]
-- );
--
-- assert_eq!(Predicate {
-- op: Op::Lt,
-- major: 0,
-- minor: Some(6),
-- patch: None,
-- pre: Vec::new(),
-- },
-- r.predicates[1]
-- );
-- }
--
-- #[test]
-- fn test_parse_build_metadata_with_predicate() {
-- assert_eq!(range::parse("^1.2.3+meta").unwrap().predicates[0].op,
-- Op::Compatible);
-- assert_eq!(range::parse("~1.2.3+meta").unwrap().predicates[0].op,
-- Op::Tilde);
-- assert_eq!(range::parse("=1.2.3+meta").unwrap().predicates[0].op,
-- Op::Ex);
-- assert_eq!(range::parse("<=1.2.3+meta").unwrap().predicates[0].op,
-- Op::LtEq);
-- assert_eq!(range::parse(">=1.2.3+meta").unwrap().predicates[0].op,
-- Op::GtEq);
-- assert_eq!(range::parse("<1.2.3+meta").unwrap().predicates[0].op,
-- Op::Lt);
-- assert_eq!(range::parse(">1.2.3+meta").unwrap().predicates[0].op,
-- Op::Gt);
-- }
--
-- #[test]
-- pub fn test_parse_errors() {
-- assert!(range::parse("\0").is_err());
-- assert!(range::parse(">= >= 0.0.2").is_err());
-- assert!(range::parse(">== 0.0.2").is_err());
-- assert!(range::parse("a.0.0").is_err());
-- assert!(range::parse("1.0.0-").is_err());
-- assert!(range::parse(">=").is_err());
-- assert!(range::parse("> 0.1.0,").is_err());
-- assert!(range::parse("> 0.3.0, ,").is_err());
-- }
--
-- #[test]
-- pub fn test_large_major_version() {
-- assert!(range::parse("18446744073709551617.0.0").is_err());
-- }
--
-- #[test]
-- pub fn test_large_minor_version() {
-- assert!(range::parse("0.18446744073709551617.0").is_err());
-- }
--
-- #[test]
-- pub fn test_large_patch_version() {
-- assert!(range::parse("0.0.18446744073709551617").is_err());
-- }
--}
-diff --git a/third_party/rust/semver-parser/src/recognize.rs b/third_party/rust/semver-parser/src/recognize.rs
-deleted file mode 100644
---- a/third_party/rust/semver-parser/src/recognize.rs
-+++ /dev/null
-@@ -1,154 +0,0 @@
--// Copyright 2017 Google Inc. All rights reserved.
--//
--// Licensed under either of MIT or Apache License, Version 2.0,
--// at your option.
--//
--// Use of this source code is governed by a MIT-style
--// license that can be found in the LICENSE file or at
--// https://opensource.org/licenses/MIT.
--//
--// Licensed under the Apache License, Version 2.0 (the "License");
--// you may not use this file except in compliance with the License.
--// You may obtain a copy of the License at
--//
--// http://www.apache.org/licenses/LICENSE-2.0
--//
--// Unless required by applicable law or agreed to in writing, software
--// distributed under the License is distributed on an "AS IS" BASIS,
--// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
--// See the License for the specific language governing permissions and
--// limitations under the License.
--
--//! Simple recognizer combinators.
--
--// This version is similar to a similar one in the "lang" module of
--// xi-editor, but is stripped down to only the needed combinators.
--
--use std::ops;
--
--pub trait Recognize {
-- fn p(&self, s: &[u8]) -> Option<usize>;
--}
--
--impl<F: Fn(&[u8]) -> Option<usize>> Recognize for F {
-- #[inline(always)]
-- fn p(&self, s: &[u8]) -> Option<usize> {
-- self(s)
-- }
--}
--
--pub struct OneByte<F>(pub F);
--
--impl<F: Fn(u8) -> bool> Recognize for OneByte<F> {
-- #[inline(always)]
-- fn p(&self, s: &[u8]) -> Option<usize> {
-- if s.is_empty() || !self.0(s[0]) {
-- None
-- } else {
-- Some(1)
-- }
-- }
--}
--
--impl Recognize for u8 {
-- #[inline(always)]
-- fn p(&self, s: &[u8]) -> Option<usize> {
-- OneByte(|b| b == *self).p(s)
-- }
--}
--
--/// Use Inclusive(a..b) to indicate an inclusive range. When a...b syntax becomes
--/// stable, we can get rid of this and switch to that.
--pub struct Inclusive<T>(pub T);
--
--impl Recognize for Inclusive<ops::Range<u8>> {
-- #[inline(always)]
-- fn p(&self, s: &[u8]) -> Option<usize> {
-- OneByte(|x| x >= self.0.start && x <= self.0.end).p(s)
-- }
--}
--
--impl<'a> Recognize for &'a [u8] {
-- #[inline(always)]
-- fn p(&self, s: &[u8]) -> Option<usize> {
-- let len = self.len();
-- if s.len() >= len && &s[..len] == *self {
-- Some(len)
-- } else {
-- None
-- }
-- }
--}
--
--impl<'a> Recognize for &'a str {
-- #[inline(always)]
-- fn p(&self, s: &[u8]) -> Option<usize> {
-- self.as_bytes().p(s)
-- }
--}
--
--impl<P1: Recognize, P2: Recognize> Recognize for (P1, P2) {
-- #[inline(always)]
-- fn p(&self, s: &[u8]) -> Option<usize> {
-- self.0.p(s).and_then(|len1|
-- self.1.p(&s[len1..]).map(|len2|
-- len1 + len2))
-- }
--}
--
--/// Choice from two heterogeneous alternatives.
--pub struct Alt<P1, P2>(pub P1, pub P2);
--
--impl<P1: Recognize, P2: Recognize> Recognize for Alt<P1, P2> {
-- #[inline(always)]
-- fn p(&self, s: &[u8]) -> Option<usize> {
-- self.0.p(s).or_else(|| self.1.p(s))
-- }
--}
--
--/// Choice from a homogenous slice of parsers.
--pub struct OneOf<'a, P: 'a>(pub &'a [P]);
--
--impl<'a, P: Recognize> Recognize for OneOf<'a, P> {
-- #[inline]
-- fn p(&self, s: &[u8]) -> Option<usize> {
-- for ref p in self.0 {
-- if let Some(len) = p.p(s) {
-- return Some(len);
-- }
-- }
-- None
-- }
--}
--
--pub struct OneOrMore<P>(pub P);
--
--impl<P: Recognize> Recognize for OneOrMore<P> {
-- #[inline]
-- fn p(&self, s: &[u8]) -> Option<usize> {
-- let mut i = 0;
-- let mut count = 0;
-- while let Some(len) = self.0.p(&s[i..]) {
-- i += len;
-- count += 1;
-- }
-- if count >= 1 {
-- Some(i)
-- } else {
-- None
-- }
-- }
--}
--
--pub struct ZeroOrMore<P>(pub P);
--
--impl<P: Recognize> Recognize for ZeroOrMore<P> {
-- #[inline]
-- fn p(&self, s: &[u8]) -> Option<usize> {
-- let mut i = 0;
-- while let Some(len) = self.0.p(&s[i..]) {
-- i += len;
-- }
-- Some(i)
-- }
--}
-diff --git a/third_party/rust/semver-parser/src/version.rs b/third_party/rust/semver-parser/src/version.rs
-deleted file mode 100644
---- a/third_party/rust/semver-parser/src/version.rs
-+++ /dev/null
-@@ -1,365 +0,0 @@
--use std::fmt;
--use std::str::from_utf8;
--
--use recognize::*;
--
--use common::{self, numeric_identifier};
--
--#[derive(Clone, Debug, PartialEq, Eq)]
--pub struct Version {
-- pub major: u64,
-- pub minor: u64,
-- pub patch: u64,
-- pub pre: Vec<Identifier>,
-- pub build: Vec<Identifier>,
--}
--
--#[derive(Clone, Debug, PartialEq, Eq)]
--pub enum Identifier {
-- /// An identifier that's solely numbers.
-- Numeric(u64),
-- /// An identifier with letters and numbers.
-- AlphaNumeric(String),
--}
--
--pub fn parse(version: &str) -> Result<Version, String> {
-- let s = version.trim().as_bytes();
-- let mut i = 0;
-- let major = if let Some((major, len)) = numeric_identifier(&s[i..]) {
-- i += len;
-- major
-- } else {
-- return Err("Error parsing major identifier".to_string());
-- };
-- if let Some(len) = b'.'.p(&s[i..]) {
-- i += len;
-- } else {
-- return Err("Expected dot".to_string());
-- }
-- let minor = if let Some((minor, len)) = numeric_identifier(&s[i..]) {
-- i += len;
-- minor
-- } else {
-- return Err("Error parsing minor identifier".to_string());
-- };
-- if let Some(len) = b'.'.p(&s[i..]) {
-- i += len;
-- } else {
-- return Err("Expected dot".to_string());
-- }
-- let patch = if let Some((patch, len)) = numeric_identifier(&s[i..]) {
-- i += len;
-- patch
-- } else {
-- return Err("Error parsing patch identifier".to_string());
-- };
-- let (pre, pre_len) = common::parse_optional_meta(&s[i..], b'-')?;
-- i += pre_len;
-- let (build, build_len) = common::parse_optional_meta(&s[i..], b'+')?;
-- i += build_len;
-- if i != s.len() {
-- return Err("Extra junk after valid version: ".to_string() +
-- from_utf8(&s[i..]).unwrap());
-- }
-- Ok(Version {
-- major: major,
-- minor: minor,
-- patch: patch,
-- pre: pre,
-- build: build,
-- })
--}
--
--impl fmt::Display for Version {
-- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-- try!(write!(f, "{}.{}.{}", self.major, self.minor, self.patch));
-- if !self.pre.is_empty() {
-- let strs: Vec<_> =
-- self.pre.iter().map(ToString::to_string).collect();
-- try!(write!(f, "-{}", strs.join(".")));
-- }
-- if !self.build.is_empty() {
-- let strs: Vec<_> =
-- self.build.iter().map(ToString::to_string).collect();
-- try!(write!(f, "+{}", strs.join(".")));
-- }
-- Ok(())
-- }
--}
--
--impl fmt::Display for Identifier {
-- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-- match *self {
-- Identifier::Numeric(ref id) => id.fmt(f),
-- Identifier::AlphaNumeric(ref id) => id.fmt(f),
-- }
-- }
--}
--
--#[cfg(test)]
--mod tests {
-- use version;
-- use super::*;
--
-- #[test]
-- fn parse_empty() {
-- let version = "";
--
-- let parsed = version::parse(version);
--
-- assert!(parsed.is_err(), "empty string incorrectly considered a valid parse");
-- }
--
-- #[test]
-- fn parse_blank() {
-- let version = " ";
--
-- let parsed = version::parse(version);
--
-- assert!(parsed.is_err(), "blank string incorrectly considered a valid parse");
-- }
--
-- #[test]
-- fn parse_no_minor_patch() {
-- let version = "1";
--
-- let parsed = version::parse(version);
--
-- assert!(parsed.is_err(), format!("'{}' incorrectly considered a valid parse", version));
-- }
--
-- #[test]
-- fn parse_no_patch() {
-- let version = "1.2";
--
-- let parsed = version::parse(version);
--
-- assert!(parsed.is_err(), format!("'{}' incorrectly considered a valid parse", version));
-- }
--
-- #[test]
-- fn parse_empty_pre() {
-- let version = "1.2.3-";
--
-- let parsed = version::parse(version);
--
-- assert!(parsed.is_err(), format!("'{}' incorrectly considered a valid parse", version));
-- }
--
-- #[test]
-- fn parse_letters() {
-- let version = "a.b.c";
--
-- let parsed = version::parse(version);
--
-- assert!(parsed.is_err(), format!("'{}' incorrectly considered a valid parse", version));
-- }
--
-- #[test]
-- fn parse_with_letters() {
-- let version = "1.2.3 a.b.c";
--
-- let parsed = version::parse(version);
--
-- assert!(parsed.is_err(), format!("'{}' incorrectly considered a valid parse", version));
-- }
--
-- #[test]
-- fn parse_basic_version() {
-- let version = "1.2.3";
--
-- let parsed = version::parse(version).unwrap();
--
-- assert_eq!(1, parsed.major);
-- assert_eq!(2, parsed.minor);
-- assert_eq!(3, parsed.patch);
-- }
--
-- #[test]
-- fn parse_trims_input() {
-- let version = " 1.2.3 ";
--
-- let parsed = version::parse(version).unwrap();
--
-- assert_eq!(1, parsed.major);
-- assert_eq!(2, parsed.minor);
-- assert_eq!(3, parsed.patch);
-- }
--
-- #[test]
-- fn parse_no_major_leading_zeroes() {
-- let version = "01.0.0";
--
-- let parsed = version::parse(version);
--
-- assert!(parsed.is_err(), "01 incorrectly considered a valid major version");
-- }
--
-- #[test]
-- fn parse_no_minor_leading_zeroes() {
-- let version = "0.01.0";
--
-- let parsed = version::parse(version);
--
-- assert!(parsed.is_err(), "01 incorrectly considered a valid minor version");
-- }
--
-- #[test]
-- fn parse_no_patch_leading_zeroes() {
-- let version = "0.0.01";
--
-- let parsed = version::parse(version);
--
-- assert!(parsed.is_err(), "01 incorrectly considered a valid patch version");
-- }
--
-- #[test]
-- fn parse_no_major_overflow() {
-- let version = "98765432109876543210.0.0";
--
-- let parsed = version::parse(version);
--
-- assert!(parsed.is_err(), "98765432109876543210 incorrectly considered a valid major version");
-- }
--
-- #[test]
-- fn parse_no_minor_overflow() {
-- let version = "0.98765432109876543210.0";
--
-- let parsed = version::parse(version);
--
-- assert!(parsed.is_err(), "98765432109876543210 incorrectly considered a valid minor version");
-- }
--
-- #[test]
-- fn parse_no_patch_overflow() {
-- let version = "0.0.98765432109876543210";
--
-- let parsed = version::parse(version);
--
-- assert!(parsed.is_err(), "98765432109876543210 incorrectly considered a valid patch version");
-- }
--
-- #[test]
-- fn parse_basic_prerelease() {
-- let version = "1.2.3-pre";
--
-- let parsed = version::parse(version).unwrap();
--
-- let expected_pre = vec![Identifier::AlphaNumeric(String::from("pre"))];
-- assert_eq!(expected_pre, parsed.pre);
-- }
--
-- #[test]
-- fn parse_prerelease_alphanumeric() {
-- let version = "1.2.3-alpha1";
--
-- let parsed = version::parse(version).unwrap();
--
-- let expected_pre = vec![Identifier::AlphaNumeric(String::from("alpha1"))];
-- assert_eq!(expected_pre, parsed.pre);
-- }
--
-- #[test]
-- fn parse_prerelease_zero() {
-- let version = "1.2.3-pre.0";
--
-- let parsed = version::parse(version).unwrap();
--
-- let expected_pre = vec![Identifier::AlphaNumeric(String::from("pre")),
-- Identifier::Numeric(0)];
-- assert_eq!(expected_pre, parsed.pre);
-- }
--
-- #[test]
-- fn parse_basic_build() {
-- let version = "1.2.3+build";
--
-- let parsed = version::parse(version).unwrap();
--
-- let expected_build = vec![Identifier::AlphaNumeric(String::from("build"))];
-- assert_eq!(expected_build, parsed.build);
-- }
--
-- #[test]
-- fn parse_build_alphanumeric() {
-- let version = "1.2.3+build5";
--
-- let parsed = version::parse(version).unwrap();
--
-- let expected_build = vec![Identifier::AlphaNumeric(String::from("build5"))];
-- assert_eq!(expected_build, parsed.build);
-- }
--
-- #[test]
-- fn parse_pre_and_build() {
-- let version = "1.2.3-alpha1+build5";
--
-- let parsed = version::parse(version).unwrap();
--
-- let expected_pre = vec![Identifier::AlphaNumeric(String::from("alpha1"))];
-- assert_eq!(expected_pre, parsed.pre);
--
-- let expected_build = vec![Identifier::AlphaNumeric(String::from("build5"))];
-- assert_eq!(expected_build, parsed.build);
-- }
--
-- #[test]
-- fn parse_complex_metadata_01() {
-- let version = "1.2.3-1.alpha1.9+build5.7.3aedf ";
--
-- let parsed = version::parse(version).unwrap();
--
-- let expected_pre = vec![Identifier::Numeric(1),
-- Identifier::AlphaNumeric(String::from("alpha1")),
-- Identifier::Numeric(9)];
-- assert_eq!(expected_pre, parsed.pre);
--
-- let expected_build = vec![Identifier::AlphaNumeric(String::from("build5")),
-- Identifier::Numeric(7),
-- Identifier::AlphaNumeric(String::from("3aedf"))];
-- assert_eq!(expected_build, parsed.build);
-- }
--
-- #[test]
-- fn parse_complex_metadata_02() {
-- let version = "0.4.0-beta.1+0851523";
--
-- let parsed = version::parse(version).unwrap();
--
-- let expected_pre = vec![Identifier::AlphaNumeric(String::from("beta")),
-- Identifier::Numeric(1)];
-- assert_eq!(expected_pre, parsed.pre);
--
-- let expected_build = vec![Identifier::AlphaNumeric(String::from("0851523"))];
-- assert_eq!(expected_build, parsed.build);
-- }
--
-- #[test]
-- fn parse_metadata_overflow() {
-- let version = "0.4.0-beta.1+98765432109876543210";
--
-- let parsed = version::parse(version).unwrap();
--
-- let expected_pre = vec![Identifier::AlphaNumeric(String::from("beta")),
-- Identifier::Numeric(1)];
-- assert_eq!(expected_pre, parsed.pre);
--
-- let expected_build = vec![Identifier::AlphaNumeric(String::from("98765432109876543210"))];
-- assert_eq!(expected_build, parsed.build);
-- }
--
-- #[test]
-- fn parse_regression_01() {
-- let version = "0.0.0-WIP";
--
-- let parsed = version::parse(version).unwrap();
--
-- assert_eq!(0, parsed.major);
-- assert_eq!(0, parsed.minor);
-- assert_eq!(0, parsed.patch);
--
-- let expected_pre = vec![Identifier::AlphaNumeric(String::from("WIP"))];
-- assert_eq!(expected_pre, parsed.pre);
-- }
--}
-diff --git a/third_party/rust/semver/.cargo-checksum.json b/third_party/rust/semver/.cargo-checksum.json
---- a/third_party/rust/semver/.cargo-checksum.json
-+++ b/third_party/rust/semver/.cargo-checksum.json
-@@ -1,1 +1,1 @@
--{"files":{"Cargo.toml":"a5b995796b5559de8975a6fee7166c9fda6c21b449ec90bef5f9baaeddd479a5","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6485b8ed310d3f0340bf1ad1f47645069ce4069dcc6bb46c7d5c6faf41de1fdb","README.md":"c780d8c3c802c5fe2c316127900385010c3e57f71c851eea9e8ed8495e2030dd","src/lib.rs":"cb1725a8bb90c1043f187c6ba504d0a9d07793e2f39f5205f926c58849311770","src/version.rs":"ffdf9c628597b889f149f3b2b1245b97c774eae1ce7030bd19235eabecaaede0","src/version_req.rs":"40d20720f5fdc0b3d9e398e64eb448a65987229bd322cab0fedf0cf1843f3bd8","tests/deprecation.rs":"b5ec79e19d61968d05b96b876c449e54d43cbd1762c6e63c23c3470f9db56292","tests/regression.rs":"180b699ad029b81e6135d42f0a8e6d782177bc29a41132f875ee6f8607a46b56","tests/serde.rs":"cdbbefc576ffcc814c30dad9598ab87a7fd9d14c5f42f1349e1db6afc72f8fed"},"package":"1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"}
-\ No newline at end of file
-+{"files":{"Cargo.toml":"2a2126f8fe5d20540ae6cfbf6649ed3af365ffb9a0a788a7552a6e7649a7a75f","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"23f18e03dc49df91622fe2a76176497404e46ced8a715d9d2b67a7446571cca3","README.md":"57659341319915482c0b83779fb7f3f0f3accb7a8b881965799116afb5e9f7e9","benches/parse.rs":"6531f66f80ce2fc83878f9bf84f94c42e96f1e709466f2b88be8d95a3cec1511","build.rs":"47b42941210d44567c8561107420d7825aa1d01332c2d2f8892d9e20646a1c77","src/backport.rs":"f8866548840434c8974f135528693f25aacc4ad03639c4e3aea3be351e13fdf8","src/display.rs":"9ba42f7a6579aa9c7dd72f2380036f5c9664592f3eacd09ea25cef291a3e64e5","src/error.rs":"3bb489f4a29f38d93370e64ae8d6e4e9b451a055cd7d392b6aeacab7eb3e1953","src/eval.rs":"b7e7ec976051b9f87ddf5cfdbaad64654d98d86ae0763f7d88b14eeaeac6013c","src/identifier.rs":"601231351ac58602b7d193cb0951b5146bd868b62aba938d5cbe52cf2b93414b","src/impls.rs":"79b5a2ac6ca3d4cb46adfb1494756079f53bef780dd81c3a8d3adf86f91395c8","src/lib.rs":"8e116a19e521909f3fa50206c078f1e23bf033dc8057ba6101f80d5bc5900fed","src/parse.rs":"93593f62cdae489feb4f2e8ae1fa93d90dca63db50669b6265346ffaaf687be5","src/serde.rs":"970d343a6bac21ddd965168d3cc2af9998796bf29bf545e8b37c6bcdd97d9710","tests/node/mod.rs":"2710d9b8daace2038b66db0f8f4cc522dee938e7cbc42d7739c31995343c32f4","tests/test_autotrait.rs":"070500c32ceee14a8a0110c04a01f98278b24614a0aec8c382dcea3da0343f58","tests/test_identifier.rs":"6c3da46c73df210527b60f1069131b15e2c65eb7b5d11793940d00cf66812f4d","tests/test_version.rs":"09e37c3df162205acf3683d1c760a6001e34e1c709fd4a1a265d82450e340003","tests/test_version_req.rs":"b6eea0258cc3b6d567a9f6c42693a97316345083495236c47e85374fd45f7cf0","tests/util/mod.rs":"db61c2cd86af864d8be4f2a3d5f25c86d7712201cc6ab47b715facf5f7f275b7"},"package":"8cb243bdfdb5936c8dc3c45762a19d12ab4550cdc753bc247637d4ec35a040fd"}
-\ No newline at end of file
-diff --git a/third_party/rust/semver/Cargo.toml b/third_party/rust/semver/Cargo.toml
---- a/third_party/rust/semver/Cargo.toml
-+++ b/third_party/rust/semver/Cargo.toml
-@@ -1,45 +1,38 @@
- # THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
- #
- # When uploading crates to the registry Cargo will automatically
- # "normalize" Cargo.toml files for maximal compatibility
- # with all versions of Cargo and also rewrite `path` dependencies
--# to registry (e.g. crates.io) dependencies
-+# to registry (e.g., crates.io) dependencies.
- #
--# If you believe there's an error in this file please file an
--# issue against the rust-lang/cargo repository. If you're
--# editing this file be aware that the upstream Cargo.toml
--# will likely look very different (and much more reasonable)
-+# If you are reading this file be aware that the original Cargo.toml
-+# will likely look very different (and much more reasonable).
-+# See Cargo.toml.orig for the original contents.
-
- [package]
-+edition = "2018"
-+rust-version = "1.31"
- name = "semver"
--version = "0.9.0"
--authors = ["Steve Klabnik <steve(a)steveklabnik.com>", "The Rust Project Developers"]
--description = "Semantic version parsing and comparison.\n"
--homepage = "https://docs.rs/crate/semver/"
--documentation = "https://docs.rs/crate/semver/"
-+version = "1.0.9"
-+authors = ["David Tolnay <dtolnay(a)gmail.com>"]
-+description = "Parser and evaluator for Cargo's flavor of Semantic Versioning"
-+documentation = "https://docs.rs/semver"
- readme = "README.md"
--license = "MIT/Apache-2.0"
--repository = "https://github.com/steveklabnik/semver"
--[dependencies.semver-parser]
--version = "0.7.0"
-+license = "MIT OR Apache-2.0"
-+repository = "https://github.com/dtolnay/semver"
-+
-+[package.metadata.docs.rs]
-+targets = ["x86_64-unknown-linux-gnu"]
-+rustdoc-args = [
-+ "--cfg",
-+ "doc_cfg",
-+]
-
- [dependencies.serde]
- version = "1.0"
- optional = true
--[dev-dependencies.crates-index]
--version = "0.5.0"
--
--[dev-dependencies.serde_json]
--version = "1.0"
--
--[dev-dependencies.serde_derive]
--version = "1.0"
--
--[dev-dependencies.tempdir]
--version = "0.3.4"
-+default-features = false
-
- [features]
--default = []
--ci = ["serde"]
--[badges.travis-ci]
--repository = "steveklabnik/semver"
-+default = ["std"]
-+std = []
-diff --git a/third_party/rust/semver/LICENSE-MIT b/third_party/rust/semver/LICENSE-MIT
---- a/third_party/rust/semver/LICENSE-MIT
-+++ b/third_party/rust/semver/LICENSE-MIT
-@@ -1,10 +1,8 @@
--Copyright (c) 2014 The Rust Project Developers
--
- Permission is hereby granted, free of charge, to any
- person obtaining a copy of this software and associated
- documentation files (the "Software"), to deal in the
- Software without restriction, including without
- limitation the rights to use, copy, modify, merge,
- publish, distribute, sublicense, and/or sell copies of
- the Software, and to permit persons to whom the Software
- is furnished to do so, subject to the following
-diff --git a/third_party/rust/semver/README.md b/third_party/rust/semver/README.md
---- a/third_party/rust/semver/README.md
-+++ b/third_party/rust/semver/README.md
-@@ -1,103 +1,84 @@
- semver
- ======
-
--Semantic version parsing and comparison.
--
--[![Build Status](https://api.travis-ci.org/steveklabnik/semver.svg?branch=master)](h…
--
--[Documentation](https://steveklabnik.github.io/semver)
--
--Semantic versioning (see http://semver.org/) is a set of rules for
--assigning version numbers.
-+[<img alt="github" src="https://img.shields.io/badge/github-dtolnay/semver-8da0cb?style=for-the-bad…" height="20">](https://github.com/dtolnay/semver)
-+[<img alt="crates.io" src="https://img.shields.io/crates/v/semver.svg?style=for-the-badge&color=fc8d62…" height="20">](https://crates.io/crates/semver)
-+[<img alt="docs.rs" src="https://img.shields.io/badge/docs.rs-semver-66c2a5?style=for-the-badge&labe…" height="20">](https://docs.rs/semver)
-+[<img alt="build status" src="https://img.shields.io/github/workflow/status/dtolnay/semver/CI/master?styl…" height="20">](https://github.com/dtolnay/semver/actions?query=branch%3Amaster)
-
--## SemVer and the Rust ecosystem
--
--Rust itself follows the SemVer specification, as does its standard libraries. The two are
--not tied together.
-+A parser and evaluator for Cargo's flavor of Semantic Versioning.
-
--[Cargo](https://crates.io), Rust's package manager, uses SemVer to determine which versions of
--packages you need installed.
--
--## Installation
--
--To use `semver`, add this to your `[dependencies]` section:
-+Semantic Versioning (see <https://semver.org>) is a guideline for how version
-+numbers are assigned and incremented. It is widely followed within the
-+Cargo/crates.io ecosystem for Rust.
-
- ```toml
--semver = "0.7.0"
--```
--
--And this to your crate root:
--
--```rust
--extern crate semver;
--```
--
--## Versions
--
--At its simplest, the `semver` crate allows you to construct `Version` objects using the `parse`
--method:
--
--```rust
--use semver::Version;
--
--assert!(Version::parse("1.2.3") == Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: vec!(),
-- build: vec!(),
--}));
-+[dependencies]
-+semver = "1.0"
- ```
-
--If you have multiple `Version`s, you can use the usual comparison operators to compare them:
--
--```rust
--use semver::Version;
-+*Compiler support: requires rustc 1.31+*
-
--assert!(Version::parse("1.2.3-alpha") != Version::parse("1.2.3-beta"));
--assert!(Version::parse("1.2.3-alpha2") > Version::parse("1.2.0"));
--```
--
--## Requirements
-+<br>
-
--The `semver` crate also provides the ability to compare requirements, which are more complex
--comparisons.
--
--For example, creating a requirement that only matches versions greater than or
--equal to 1.0.0:
-+## Example
-
- ```rust
--use semver::Version;
--use semver::VersionReq;
-+use semver::{BuildMetadata, Prerelease, Version, VersionReq};
-+
-+fn main() {
-+ let req = VersionReq::parse(">=1.2.3, <1.8.0").unwrap();
-
--let r = VersionReq::parse(">= 1.0.0").unwrap();
--let v = Version::parse("1.0.0").unwrap();
-+ // Check whether this requirement matches version 1.2.3-alpha.1 (no)
-+ let version = Version {
-+ major: 1,
-+ minor: 2,
-+ patch: 3,
-+ pre: Prerelease::new("alpha.1").unwrap(),
-+ build: BuildMetadata::EMPTY,
-+ };
-+ assert!(!req.matches(&version));
-
--assert!(r.to_string() == ">= 1.0.0".to_string());
--assert!(r.matches(&v))
-+ // Check whether it matches 1.3.0 (yes it does)
-+ let version = Version::parse("1.3.0").unwrap();
-+ assert!(req.matches(&version));
-+}
- ```
-
--It also allows parsing of `~x.y.z` and `^x.y.z` requirements as defined at
--https://www.npmjs.org/doc/misc/semver.html
-+<br>
-+
-+## Scope of this crate
-
--**Tilde requirements** specify a minimal version with some updates:
-+Besides Cargo, several other package ecosystems and package managers for other
-+languages also use SemVer: RubyGems/Bundler for Ruby, npm for JavaScript,
-+Composer for PHP, CocoaPods for Objective-C...
-
--```notrust
--~1.2.3 := >=1.2.3 <1.3.0
--~1.2 := >=1.2.0 <1.3.0
--~1 := >=1.0.0 <2.0.0
--```
-+The `semver` crate is specifically intended to implement Cargo's interpretation
-+of Semantic Versioning.
-+
-+Where the various tools differ in their interpretation or implementation of the
-+spec, this crate follows the implementation choices made by Cargo. If you are
-+operating on version numbers from some other package ecosystem, you will want to
-+use a different semver library which is appropriate to that ecosystem.
-+
-+The extent of Cargo's SemVer support is documented in the *[Specifying
-+Dependencies]* chapter of the Cargo reference.
-
--**Caret requirements** allow SemVer compatible updates to a specified version,
--`0.x` and `0.x+1` are not considered compatible, but `1.x` and `1.x+1` are.
-+[Specifying Dependencies]: https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html
-
--`0.0.x` is not considered compatible with any other version.
--Missing minor and patch versions are desugared to `0` but allow flexibility for that value.
-+<br>
-+
-+#### License
-
--```notrust
--^1.2.3 := >=1.2.3 <2.0.0
--^0.2.3 := >=0.2.3 <0.3.0
--^0.0.3 := >=0.0.3 <0.0.4
--^0.0 := >=0.0.0 <0.1.0
--^0 := >=0.0.0 <1.0.0
--```
-+<sup>
-+Licensed under either of <a href="LICENSE-APACHE">Apache License, Version
-+2.0</a> or <a href="LICENSE-MIT">MIT license</a> at your option.
-+</sup>
-+
-+<br>
-+
-+<sub>
-+Unless you explicitly state otherwise, any contribution intentionally submitted
-+for inclusion in this crate by you, as defined in the Apache-2.0 license, shall
-+be dual licensed as above, without any additional terms or conditions.
-+</sub>
-diff --git a/third_party/rust/semver/benches/parse.rs b/third_party/rust/semver/benches/parse.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/semver/benches/parse.rs
-@@ -0,0 +1,24 @@
-+#![feature(test)]
-+
-+extern crate test;
-+
-+use semver::{Prerelease, Version, VersionReq};
-+use test::{black_box, Bencher};
-+
-+#[bench]
-+fn parse_prerelease(b: &mut Bencher) {
-+ let text = "x.7.z.92";
-+ b.iter(|| black_box(text).parse::<Prerelease>().unwrap());
-+}
-+
-+#[bench]
-+fn parse_version(b: &mut Bencher) {
-+ let text = "1.0.2021-beta+exp.sha.5114f85";
-+ b.iter(|| black_box(text).parse::<Version>().unwrap());
-+}
-+
-+#[bench]
-+fn parse_version_req(b: &mut Bencher) {
-+ let text = ">=1.2.3, <2.0.0";
-+ b.iter(|| black_box(text).parse::<VersionReq>().unwrap());
-+}
-diff --git a/third_party/rust/semver/build.rs b/third_party/rust/semver/build.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/semver/build.rs
-@@ -0,0 +1,73 @@
-+use std::env;
-+use std::process::Command;
-+use std::str;
-+
-+fn main() {
-+ let compiler = match rustc_minor_version() {
-+ Some(compiler) => compiler,
-+ None => return,
-+ };
-+
-+ if compiler < 33 {
-+ // Exhaustive integer patterns. On older compilers, a final `_` arm is
-+ // required even if every possible integer value is otherwise covered.
-+ // https://github.com/rust-lang/rust/issues/50907
-+ println!("cargo:rustc-cfg=no_exhaustive_int_match");
-+ }
-+
-+ if compiler < 36 {
-+ // extern crate alloc.
-+ // https://blog.rust-lang.org/2019/07/04/Rust-1.36.0.html#the-alloc-crate-is-s…
-+ println!("cargo:rustc-cfg=no_alloc_crate");
-+ }
-+
-+ if compiler < 39 {
-+ // const Vec::new.
-+ // https://doc.rust-lang.org/std/vec/struct.Vec.html#method.new
-+ println!("cargo:rustc-cfg=no_const_vec_new");
-+ }
-+
-+ if compiler < 40 {
-+ // #[non_exhaustive].
-+ // https://blog.rust-lang.org/2019/12/19/Rust-1.40.0.html#non_exhaustive-struc…
-+ println!("cargo:rustc-cfg=no_non_exhaustive");
-+ }
-+
-+ if compiler < 45 {
-+ // String::strip_prefix.
-+ // https://doc.rust-lang.org/std/primitive.str.html#method.repeat
-+ println!("cargo:rustc-cfg=no_str_strip_prefix");
-+ }
-+
-+ if compiler < 46 {
-+ // #[track_caller].
-+ // https://blog.rust-lang.org/2020/08/27/Rust-1.46.0.html#track_caller
-+ println!("cargo:rustc-cfg=no_track_caller");
-+ }
-+
-+ if compiler < 52 {
-+ // #![deny(unsafe_op_in_unsafe_fn)].
-+ // https://github.com/rust-lang/rust/issues/71668
-+ println!("cargo:rustc-cfg=no_unsafe_op_in_unsafe_fn_lint");
-+ }
-+
-+ if compiler < 53 {
-+ // Efficient intrinsics for count-leading-zeros and count-trailing-zeros
-+ // on NonZero integers stabilized in 1.53.0. On many architectures these
-+ // are more efficient than counting zeros on ordinary zeroable integers.
-+ // https://doc.rust-lang.org/std/num/struct.NonZeroU64.html#method.leading_zer…
-+ // https://doc.rust-lang.org/std/num/struct.NonZeroU64.html#method.trailing_ze…
-+ println!("cargo:rustc-cfg=no_nonzero_bitscan");
-+ }
-+}
-+
-+fn rustc_minor_version() -> Option<u32> {
-+ 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;
-+ }
-+ pieces.next()?.parse().ok()
-+}
-diff --git a/third_party/rust/semver/src/backport.rs b/third_party/rust/semver/src/backport.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/semver/src/backport.rs
-@@ -0,0 +1,51 @@
-+#[cfg(no_str_strip_prefix)] // rustc <1.45
-+pub(crate) trait StripPrefixExt {
-+ fn strip_prefix(&self, ch: char) -> Option<&str>;
-+}
-+
-+#[cfg(no_str_strip_prefix)]
-+impl StripPrefixExt for str {
-+ fn strip_prefix(&self, ch: char) -> Option<&str> {
-+ if self.starts_with(ch) {
-+ Some(&self[ch.len_utf8()..])
-+ } else {
-+ None
-+ }
-+ }
-+}
-+
-+pub(crate) use crate::alloc::vec::Vec;
-+
-+#[cfg(no_alloc_crate)] // rustc <1.36
-+pub(crate) mod alloc {
-+ pub use std::vec;
-+
-+ pub mod alloc {
-+ use std::mem;
-+
-+ pub struct Layout {
-+ size: usize,
-+ }
-+
-+ impl Layout {
-+ pub unsafe fn from_size_align_unchecked(size: usize, align: usize) -> Self {
-+ assert_eq!(align, 2);
-+ Layout { size }
-+ }
-+ }
-+
-+ pub unsafe fn alloc(layout: Layout) -> *mut u8 {
-+ let len_u16 = (layout.size + 1) / 2;
-+ let mut vec = Vec::new();
-+ vec.reserve_exact(len_u16);
-+ let ptr: *mut u16 = vec.as_mut_ptr();
-+ mem::forget(vec);
-+ ptr as *mut u8
-+ }
-+
-+ pub unsafe fn dealloc(ptr: *mut u8, layout: Layout) {
-+ let len_u16 = (layout.size + 1) / 2;
-+ unsafe { Vec::from_raw_parts(ptr as *mut u16, 0, len_u16) };
-+ }
-+ }
-+}
-diff --git a/third_party/rust/semver/src/display.rs b/third_party/rust/semver/src/display.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/semver/src/display.rs
-@@ -0,0 +1,165 @@
-+use crate::{BuildMetadata, Comparator, Op, Prerelease, Version, VersionReq};
-+use core::fmt::{self, Alignment, Debug, Display, Write};
-+
-+impl Display for Version {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let do_display = |formatter: &mut fmt::Formatter| -> fmt::Result {
-+ write!(formatter, "{}.{}.{}", self.major, self.minor, self.patch)?;
-+ if !self.pre.is_empty() {
-+ write!(formatter, "-{}", self.pre)?;
-+ }
-+ if !self.build.is_empty() {
-+ write!(formatter, "+{}", self.build)?;
-+ }
-+ Ok(())
-+ };
-+
-+ let do_len = || -> usize {
-+ digits(self.major)
-+ + 1
-+ + digits(self.minor)
-+ + 1
-+ + digits(self.patch)
-+ + !self.pre.is_empty() as usize
-+ + self.pre.len()
-+ + !self.build.is_empty() as usize
-+ + self.build.len()
-+ };
-+
-+ pad(formatter, do_display, do_len)
-+ }
-+}
-+
-+impl Display for VersionReq {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ if self.comparators.is_empty() {
-+ return formatter.write_str("*");
-+ }
-+ for (i, comparator) in self.comparators.iter().enumerate() {
-+ if i > 0 {
-+ formatter.write_str(", ")?;
-+ }
-+ write!(formatter, "{}", comparator)?;
-+ }
-+ Ok(())
-+ }
-+}
-+
-+impl Display for Comparator {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let op = match self.op {
-+ Op::Exact => "=",
-+ Op::Greater => ">",
-+ Op::GreaterEq => ">=",
-+ Op::Less => "<",
-+ Op::LessEq => "<=",
-+ Op::Tilde => "~",
-+ Op::Caret => "^",
-+ Op::Wildcard => "",
-+ #[cfg(no_non_exhaustive)]
-+ Op::__NonExhaustive => unreachable!(),
-+ };
-+ formatter.write_str(op)?;
-+ write!(formatter, "{}", self.major)?;
-+ if let Some(minor) = &self.minor {
-+ write!(formatter, ".{}", minor)?;
-+ if let Some(patch) = &self.patch {
-+ write!(formatter, ".{}", patch)?;
-+ if !self.pre.is_empty() {
-+ write!(formatter, "-{}", self.pre)?;
-+ }
-+ } else if self.op == Op::Wildcard {
-+ formatter.write_str(".*")?;
-+ }
-+ } else if self.op == Op::Wildcard {
-+ formatter.write_str(".*")?;
-+ }
-+ Ok(())
-+ }
-+}
-+
-+impl Display for Prerelease {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ formatter.write_str(self.as_str())
-+ }
-+}
-+
-+impl Display for BuildMetadata {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ formatter.write_str(self.as_str())
-+ }
-+}
-+
-+impl Debug for Version {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ let mut debug = formatter.debug_struct("Version");
-+ debug
-+ .field("major", &self.major)
-+ .field("minor", &self.minor)
-+ .field("patch", &self.patch);
-+ if !self.pre.is_empty() {
-+ debug.field("pre", &self.pre);
-+ }
-+ if !self.build.is_empty() {
-+ debug.field("build", &self.build);
-+ }
-+ debug.finish()
-+ }
-+}
-+
-+impl Debug for Prerelease {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ write!(formatter, "Prerelease(\"{}\")", self)
-+ }
-+}
-+
-+impl Debug for BuildMetadata {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ write!(formatter, "BuildMetadata(\"{}\")", self)
-+ }
-+}
-+
-+fn pad(
-+ formatter: &mut fmt::Formatter,
-+ do_display: impl FnOnce(&mut fmt::Formatter) -> fmt::Result,
-+ do_len: impl FnOnce() -> usize,
-+) -> fmt::Result {
-+ let min_width = match formatter.width() {
-+ Some(min_width) => min_width,
-+ None => return do_display(formatter),
-+ };
-+
-+ let len = do_len();
-+ if len >= min_width {
-+ return do_display(formatter);
-+ }
-+
-+ let default_align = Alignment::Left;
-+ let align = formatter.align().unwrap_or(default_align);
-+ let padding = min_width - len;
-+ let (pre_pad, post_pad) = match align {
-+ Alignment::Left => (0, padding),
-+ Alignment::Right => (padding, 0),
-+ Alignment::Center => (padding / 2, (padding + 1) / 2),
-+ };
-+
-+ let fill = formatter.fill();
-+ for _ in 0..pre_pad {
-+ formatter.write_char(fill)?;
-+ }
-+
-+ do_display(formatter)?;
-+
-+ for _ in 0..post_pad {
-+ formatter.write_char(fill)?;
-+ }
-+ Ok(())
-+}
-+
-+fn digits(val: u64) -> usize {
-+ if val < 10 {
-+ 1
-+ } else {
-+ 1 + digits(val / 10)
-+ }
-+}
-diff --git a/third_party/rust/semver/src/error.rs b/third_party/rust/semver/src/error.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/semver/src/error.rs
-@@ -0,0 +1,124 @@
-+use crate::parse::Error;
-+use core::fmt::{self, Debug, Display};
-+
-+pub(crate) enum ErrorKind {
-+ UnexpectedEnd(Position),
-+ UnexpectedChar(Position, char),
-+ UnexpectedCharAfter(Position, char),
-+ ExpectedCommaFound(Position, char),
-+ LeadingZero(Position),
-+ Overflow(Position),
-+ EmptySegment(Position),
-+ IllegalCharacter(Position),
-+ WildcardNotTheOnlyComparator(char),
-+ UnexpectedAfterWildcard,
-+ ExcessiveComparators,
-+}
-+
-+#[derive(Copy, Clone, Eq, PartialEq)]
-+pub(crate) enum Position {
-+ Major,
-+ Minor,
-+ Patch,
-+ Pre,
-+ Build,
-+}
-+
-+#[cfg(feature = "std")]
-+#[cfg_attr(doc_cfg, doc(cfg(feature = "std")))]
-+impl std::error::Error for Error {}
-+
-+impl Display for Error {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ match &self.kind {
-+ ErrorKind::UnexpectedEnd(pos) => {
-+ write!(formatter, "unexpected end of input while parsing {}", pos)
-+ }
-+ ErrorKind::UnexpectedChar(pos, ch) => {
-+ write!(
-+ formatter,
-+ "unexpected character {} while parsing {}",
-+ QuotedChar(*ch),
-+ pos,
-+ )
-+ }
-+ ErrorKind::UnexpectedCharAfter(pos, ch) => {
-+ write!(
-+ formatter,
-+ "unexpected character {} after {}",
-+ QuotedChar(*ch),
-+ pos,
-+ )
-+ }
-+ ErrorKind::ExpectedCommaFound(pos, ch) => {
-+ write!(
-+ formatter,
-+ "expected comma after {}, found {}",
-+ pos,
-+ QuotedChar(*ch),
-+ )
-+ }
-+ ErrorKind::LeadingZero(pos) => {
-+ write!(formatter, "invalid leading zero in {}", pos)
-+ }
-+ ErrorKind::Overflow(pos) => {
-+ write!(formatter, "value of {} exceeds u64::MAX", pos)
-+ }
-+ ErrorKind::EmptySegment(pos) => {
-+ write!(formatter, "empty identifier segment in {}", pos)
-+ }
-+ ErrorKind::IllegalCharacter(pos) => {
-+ write!(formatter, "unexpected character in {}", pos)
-+ }
-+ ErrorKind::WildcardNotTheOnlyComparator(ch) => {
-+ write!(
-+ formatter,
-+ "wildcard req ({}) must be the only comparator in the version req",
-+ ch,
-+ )
-+ }
-+ ErrorKind::UnexpectedAfterWildcard => {
-+ formatter.write_str("unexpected character after wildcard in version req")
-+ }
-+ ErrorKind::ExcessiveComparators => {
-+ formatter.write_str("excessive number of version comparators")
-+ }
-+ }
-+ }
-+}
-+
-+impl Display for Position {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ formatter.write_str(match self {
-+ Position::Major => "major version number",
-+ Position::Minor => "minor version number",
-+ Position::Patch => "patch version number",
-+ Position::Pre => "pre-release identifier",
-+ Position::Build => "build metadata",
-+ })
-+ }
-+}
-+
-+impl Debug for Error {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ formatter.write_str("Error(\"")?;
-+ Display::fmt(self, formatter)?;
-+ formatter.write_str("\")")?;
-+ Ok(())
-+ }
-+}
-+
-+struct QuotedChar(char);
-+
-+impl Display for QuotedChar {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ // Standard library versions prior to https://github.com/rust-lang/rust/pull/95345
-+ // print character 0 as '\u{0}'. We prefer '\0' to keep error messages
-+ // the same across all supported Rust versions.
-+ if self.0 == '\0' {
-+ formatter.write_str("'\\0'")
-+ } else {
-+ write!(formatter, "{:?}", self.0)
-+ }
-+ }
-+}
-diff --git a/third_party/rust/semver/src/eval.rs b/third_party/rust/semver/src/eval.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/semver/src/eval.rs
-@@ -0,0 +1,181 @@
-+use crate::{Comparator, Op, Version, VersionReq};
-+
-+pub(crate) fn matches_req(req: &VersionReq, ver: &Version) -> bool {
-+ for cmp in &req.comparators {
-+ if !matches_impl(cmp, ver) {
-+ return false;
-+ }
-+ }
-+
-+ if ver.pre.is_empty() {
-+ return true;
-+ }
-+
-+ // If a version has a prerelease tag (for example, 1.2.3-alpha.3) then it
-+ // will only be allowed to satisfy req if at least one comparator with the
-+ // same major.minor.patch also has a prerelease tag.
-+ for cmp in &req.comparators {
-+ if pre_is_compatible(cmp, ver) {
-+ return true;
-+ }
-+ }
-+
-+ false
-+}
-+
-+pub(crate) fn matches_comparator(cmp: &Comparator, ver: &Version) -> bool {
-+ matches_impl(cmp, ver) && (ver.pre.is_empty() || pre_is_compatible(cmp, ver))
-+}
-+
-+fn matches_impl(cmp: &Comparator, ver: &Version) -> bool {
-+ match cmp.op {
-+ Op::Exact | Op::Wildcard => matches_exact(cmp, ver),
-+ Op::Greater => matches_greater(cmp, ver),
-+ Op::GreaterEq => matches_exact(cmp, ver) || matches_greater(cmp, ver),
-+ Op::Less => matches_less(cmp, ver),
-+ Op::LessEq => matches_exact(cmp, ver) || matches_less(cmp, ver),
-+ Op::Tilde => matches_tilde(cmp, ver),
-+ Op::Caret => matches_caret(cmp, ver),
-+ #[cfg(no_non_exhaustive)]
-+ Op::__NonExhaustive => unreachable!(),
-+ }
-+}
-+
-+fn matches_exact(cmp: &Comparator, ver: &Version) -> bool {
-+ if ver.major != cmp.major {
-+ return false;
-+ }
-+
-+ if let Some(minor) = cmp.minor {
-+ if ver.minor != minor {
-+ return false;
-+ }
-+ }
-+
-+ if let Some(patch) = cmp.patch {
-+ if ver.patch != patch {
-+ return false;
-+ }
-+ }
-+
-+ ver.pre == cmp.pre
-+}
-+
-+fn matches_greater(cmp: &Comparator, ver: &Version) -> bool {
-+ if ver.major != cmp.major {
-+ return ver.major > cmp.major;
-+ }
-+
-+ match cmp.minor {
-+ None => return false,
-+ Some(minor) => {
-+ if ver.minor != minor {
-+ return ver.minor > minor;
-+ }
-+ }
-+ }
-+
-+ match cmp.patch {
-+ None => return false,
-+ Some(patch) => {
-+ if ver.patch != patch {
-+ return ver.patch > patch;
-+ }
-+ }
-+ }
-+
-+ ver.pre > cmp.pre
-+}
-+
-+fn matches_less(cmp: &Comparator, ver: &Version) -> bool {
-+ if ver.major != cmp.major {
-+ return ver.major < cmp.major;
-+ }
-+
-+ match cmp.minor {
-+ None => return false,
-+ Some(minor) => {
-+ if ver.minor != minor {
-+ return ver.minor < minor;
-+ }
-+ }
-+ }
-+
-+ match cmp.patch {
-+ None => return false,
-+ Some(patch) => {
-+ if ver.patch != patch {
-+ return ver.patch < patch;
-+ }
-+ }
-+ }
-+
-+ ver.pre < cmp.pre
-+}
-+
-+fn matches_tilde(cmp: &Comparator, ver: &Version) -> bool {
-+ if ver.major != cmp.major {
-+ return false;
-+ }
-+
-+ if let Some(minor) = cmp.minor {
-+ if ver.minor != minor {
-+ return false;
-+ }
-+ }
-+
-+ if let Some(patch) = cmp.patch {
-+ if ver.patch != patch {
-+ return ver.patch > patch;
-+ }
-+ }
-+
-+ ver.pre >= cmp.pre
-+}
-+
-+fn matches_caret(cmp: &Comparator, ver: &Version) -> bool {
-+ if ver.major != cmp.major {
-+ return false;
-+ }
-+
-+ let minor = match cmp.minor {
-+ None => return true,
-+ Some(minor) => minor,
-+ };
-+
-+ let patch = match cmp.patch {
-+ None => {
-+ if cmp.major > 0 {
-+ return ver.minor >= minor;
-+ } else {
-+ return ver.minor == minor;
-+ }
-+ }
-+ Some(patch) => patch,
-+ };
-+
-+ if cmp.major > 0 {
-+ if ver.minor != minor {
-+ return ver.minor > minor;
-+ } else if ver.patch != patch {
-+ return ver.patch > patch;
-+ }
-+ } else if minor > 0 {
-+ if ver.minor != minor {
-+ return false;
-+ } else if ver.patch != patch {
-+ return ver.patch > patch;
-+ }
-+ } else if ver.minor != minor || ver.patch != patch {
-+ return false;
-+ }
-+
-+ ver.pre >= cmp.pre
-+}
-+
-+fn pre_is_compatible(cmp: &Comparator, ver: &Version) -> bool {
-+ cmp.major == ver.major
-+ && cmp.minor == Some(ver.minor)
-+ && cmp.patch == Some(ver.patch)
-+ && !cmp.pre.is_empty()
-+}
-diff --git a/third_party/rust/semver/src/identifier.rs b/third_party/rust/semver/src/identifier.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/semver/src/identifier.rs
-@@ -0,0 +1,400 @@
-+// This module implements Identifier, a short-optimized string allowed to
-+// contain only the ASCII characters hyphen, dot, 0-9, A-Z, a-z.
-+//
-+// As of mid-2021, the distribution of pre-release lengths on crates.io is:
-+//
-+// length count length count length count
-+// 0 355929 11 81 24 2
-+// 1 208 12 48 25 6
-+// 2 236 13 55 26 10
-+// 3 1909 14 25 27 4
-+// 4 1284 15 15 28 1
-+// 5 1742 16 35 30 1
-+// 6 3440 17 9 31 5
-+// 7 5624 18 6 32 1
-+// 8 1321 19 12 36 2
-+// 9 179 20 2 37 379
-+// 10 65 23 11
-+//
-+// and the distribution of build metadata lengths is:
-+//
-+// length count length count length count
-+// 0 364445 8 7725 18 1
-+// 1 72 9 16 19 1
-+// 2 7 10 85 20 1
-+// 3 28 11 17 22 4
-+// 4 9 12 10 26 1
-+// 5 68 13 9 27 1
-+// 6 73 14 10 40 5
-+// 7 53 15 6
-+//
-+// Therefore it really behooves us to be able to use the entire 8 bytes of a
-+// pointer for inline storage. For both pre-release and build metadata there are
-+// vastly more strings with length exactly 8 bytes than the sum over all lengths
-+// longer than 8 bytes.
-+//
-+// To differentiate the inline representation from the heap allocated long
-+// representation, we'll allocate heap pointers with 2-byte alignment so that
-+// they are guaranteed to have an unset least significant bit. Then in the repr
-+// we store for pointers, we rotate a 1 into the most significant bit of the
-+// most significant byte, which is never set for an ASCII byte.
-+//
-+// Inline repr:
-+//
-+// 0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx 0xxxxxxx
-+//
-+// Heap allocated repr:
-+//
-+// 1ppppppp pppppppp pppppppp pppppppp pppppppp pppppppp pppppppp pppppppp 0
-+// ^ most significant bit least significant bit of orig ptr, rotated out ^
-+//
-+// Since the most significant bit doubles as a sign bit for the similarly sized
-+// signed integer type, the CPU has an efficient instruction for inspecting it,
-+// meaning we can differentiate between an inline repr and a heap allocated repr
-+// in one instruction. Effectively an inline repr always looks like a positive
-+// i64 while a heap allocated repr always looks like a negative i64.
-+//
-+// For the inline repr, we store \0 padding on the end of the stored characters,
-+// and thus the string length is readily determined efficiently by a cttz (count
-+// trailing zeros) or bsf (bit scan forward) instruction.
-+//
-+// For the heap allocated repr, the length is encoded as a base-128 varint at
-+// the head of the allocation.
-+//
-+// Empty strings are stored as an all-1 bit pattern, corresponding to -1i64.
-+// Consequently the all-0 bit pattern is never a legal representation in any
-+// repr, leaving it available as a niche for downstream code. For example this
-+// allows size_of::<Version>() == size_of::<Option<Version>>().
-+
-+use crate::alloc::alloc::{alloc, dealloc, Layout};
-+use core::mem;
-+use core::num::{NonZeroU64, NonZeroUsize};
-+use core::ptr::{self, NonNull};
-+use core::slice;
-+use core::str;
-+
-+const PTR_BYTES: usize = mem::size_of::<NonNull<u8>>();
-+
-+// If pointers are already 8 bytes or bigger, then 0. If pointers are smaller
-+// than 8 bytes, then Identifier will contain a byte array to raise its size up
-+// to 8 bytes total.
-+const TAIL_BYTES: usize = 8 * (PTR_BYTES < 8) as usize - PTR_BYTES * (PTR_BYTES < 8) as usize;
-+
-+#[repr(C, align(8))]
-+pub(crate) struct Identifier {
-+ head: NonNull<u8>,
-+ tail: [u8; TAIL_BYTES],
-+}
-+
-+impl Identifier {
-+ pub(crate) const fn empty() -> Self {
-+ // This is a separate constant because unsafe function calls are not
-+ // allowed in a const fn body, only in a const, until later rustc than
-+ // what we support.
-+ const HEAD: NonNull<u8> = unsafe { NonNull::new_unchecked(!0 as *mut u8) };
-+
-+ // `mov rax, -1`
-+ Identifier {
-+ head: HEAD,
-+ tail: [!0; TAIL_BYTES],
-+ }
-+ }
-+
-+ // SAFETY: string must be ASCII and not contain \0 bytes.
-+ pub(crate) unsafe fn new_unchecked(string: &str) -> Self {
-+ let len = string.len();
-+ match len as u64 {
-+ 0 => Self::empty(),
-+ 1..=8 => {
-+ let mut bytes = [0u8; mem::size_of::<Identifier>()];
-+ // SAFETY: string is big enough to read len bytes, bytes is big
-+ // enough to write len bytes, and they do not overlap.
-+ unsafe { ptr::copy_nonoverlapping(string.as_ptr(), bytes.as_mut_ptr(), len) };
-+ // SAFETY: the head field is nonzero because the input string
-+ // was at least 1 byte of ASCII and did not contain \0.
-+ unsafe { mem::transmute::<[u8; mem::size_of::<Identifier>()], Identifier>(bytes) }
-+ }
-+ 9..=0xff_ffff_ffff_ffff => {
-+ // SAFETY: len is in a range that does not contain 0.
-+ let size = bytes_for_varint(unsafe { NonZeroUsize::new_unchecked(len) }) + len;
-+ let align = 2;
-+ // SAFETY: align is not zero, align is a power of two, and
-+ // rounding size up to align does not overflow usize::MAX.
-+ let layout = unsafe { Layout::from_size_align_unchecked(size, align) };
-+ // SAFETY: layout's size is nonzero.
-+ let ptr = unsafe { alloc(layout) };
-+ let mut write = ptr;
-+ let mut varint_remaining = len;
-+ while varint_remaining > 0 {
-+ // SAFETY: size is bytes_for_varint(len) bytes + len bytes.
-+ // This is writing the first bytes_for_varint(len) bytes.
-+ unsafe { ptr::write(write, varint_remaining as u8 | 0x80) };
-+ varint_remaining >>= 7;
-+ // SAFETY: still in bounds of the same allocation.
-+ write = unsafe { write.add(1) };
-+ }
-+ // SAFETY: size is bytes_for_varint(len) bytes + len bytes. This
-+ // is writing to the last len bytes.
-+ unsafe { ptr::copy_nonoverlapping(string.as_ptr(), write, len) };
-+ Identifier {
-+ head: ptr_to_repr(ptr),
-+ tail: [0; TAIL_BYTES],
-+ }
-+ }
-+ 0x100_0000_0000_0000..=0xffff_ffff_ffff_ffff => {
-+ unreachable!("please refrain from storing >64 petabytes of text in semver version");
-+ }
-+ #[cfg(no_exhaustive_int_match)] // rustc <1.33
-+ _ => unreachable!(),
-+ }
-+ }
-+
-+ pub(crate) fn is_empty(&self) -> bool {
-+ // `cmp rdi, -1` -- basically: `repr as i64 == -1`
-+ let empty = Self::empty();
-+ let is_empty = self.head == empty.head && self.tail == empty.tail;
-+ // The empty representation does nothing on Drop. We can't let this one
-+ // drop normally because `impl Drop for Identifier` calls is_empty; that
-+ // would be an infinite recursion.
-+ mem::forget(empty);
-+ is_empty
-+ }
-+
-+ fn is_inline(&self) -> bool {
-+ // `test rdi, rdi` -- basically: `repr as i64 >= 0`
-+ self.head.as_ptr() as usize >> (PTR_BYTES * 8 - 1) == 0
-+ }
-+
-+ fn is_empty_or_inline(&self) -> bool {
-+ // `cmp rdi, -2` -- basically: `repr as i64 > -2`
-+ self.is_empty() || self.is_inline()
-+ }
-+
-+ pub(crate) fn as_str(&self) -> &str {
-+ if self.is_empty() {
-+ ""
-+ } else if self.is_inline() {
-+ // SAFETY: repr is in the inline representation.
-+ unsafe { inline_as_str(self) }
-+ } else {
-+ // SAFETY: repr is in the heap allocated representation.
-+ unsafe { ptr_as_str(&self.head) }
-+ }
-+ }
-+}
-+
-+impl Clone for Identifier {
-+ fn clone(&self) -> Self {
-+ if self.is_empty_or_inline() {
-+ Identifier {
-+ head: self.head,
-+ tail: self.tail,
-+ }
-+ } else {
-+ let ptr = repr_to_ptr(self.head);
-+ // SAFETY: ptr is one of our own heap allocations.
-+ let len = unsafe { decode_len(ptr) };
-+ let size = bytes_for_varint(len) + len.get();
-+ let align = 2;
-+ // SAFETY: align is not zero, align is a power of two, and rounding
-+ // size up to align does not overflow usize::MAX. This is just
-+ // duplicating a previous allocation where all of these guarantees
-+ // were already made.
-+ let layout = unsafe { Layout::from_size_align_unchecked(size, align) };
-+ // SAFETY: layout's size is nonzero.
-+ let clone = unsafe { alloc(layout) };
-+ // SAFETY: new allocation cannot overlap the previous one (this was
-+ // not a realloc). The argument ptrs are readable/writeable
-+ // respectively for size bytes.
-+ unsafe { ptr::copy_nonoverlapping(ptr, clone, size) }
-+ Identifier {
-+ head: ptr_to_repr(clone),
-+ tail: [0; TAIL_BYTES],
-+ }
-+ }
-+ }
-+}
-+
-+impl Drop for Identifier {
-+ fn drop(&mut self) {
-+ if self.is_empty_or_inline() {
-+ return;
-+ }
-+ let ptr = repr_to_ptr_mut(self.head);
-+ // SAFETY: ptr is one of our own heap allocations.
-+ let len = unsafe { decode_len(ptr) };
-+ let size = bytes_for_varint(len) + len.get();
-+ let align = 2;
-+ // SAFETY: align is not zero, align is a power of two, and rounding
-+ // size up to align does not overflow usize::MAX. These guarantees were
-+ // made when originally allocating this memory.
-+ let layout = unsafe { Layout::from_size_align_unchecked(size, align) };
-+ // SAFETY: ptr was previously allocated by the same allocator with the
-+ // same layout.
-+ unsafe { dealloc(ptr, layout) }
-+ }
-+}
-+
-+impl PartialEq for Identifier {
-+ fn eq(&self, rhs: &Self) -> bool {
-+ if self.is_empty_or_inline() {
-+ // Fast path (most common)
-+ self.head == rhs.head && self.tail == rhs.tail
-+ } else if rhs.is_empty_or_inline() {
-+ false
-+ } else {
-+ // SAFETY: both reprs are in the heap allocated representation.
-+ unsafe { ptr_as_str(&self.head) == ptr_as_str(&rhs.head) }
-+ }
-+ }
-+}
-+
-+unsafe impl Send for Identifier {}
-+unsafe impl Sync for Identifier {}
-+
-+// We use heap pointers that are 2-byte aligned, meaning they have an
-+// insignificant 0 in the least significant bit. We take advantage of that
-+// unneeded bit to rotate a 1 into the most significant bit to make the repr
-+// distinguishable from ASCII bytes.
-+fn ptr_to_repr(original: *mut u8) -> NonNull<u8> {
-+ // `mov eax, 1`
-+ // `shld rax, rdi, 63`
-+ let modified = (original as usize | 1).rotate_right(1);
-+
-+ // `original + (modified - original)`, but being mindful of provenance.
-+ let diff = modified.wrapping_sub(original as usize);
-+ let modified = original.wrapping_add(diff);
-+
-+ // SAFETY: the most significant bit of repr is known to be set, so the value
-+ // is not zero.
-+ unsafe { NonNull::new_unchecked(modified) }
-+}
-+
-+// Shift out the 1 previously placed into the most significant bit of the least
-+// significant byte. Shift in a low 0 bit to reconstruct the original 2-byte
-+// aligned pointer.
-+fn repr_to_ptr(modified: NonNull<u8>) -> *const u8 {
-+ // `lea rax, [rdi + rdi]`
-+ let modified = modified.as_ptr();
-+ let original = (modified as usize) << 1;
-+
-+ // `modified + (original - modified)`, but being mindful of provenance.
-+ let diff = original.wrapping_sub(modified as usize);
-+ modified.wrapping_add(diff)
-+}
-+
-+fn repr_to_ptr_mut(repr: NonNull<u8>) -> *mut u8 {
-+ repr_to_ptr(repr) as *mut u8
-+}
-+
-+// Compute the length of the inline string, assuming the argument is in short
-+// string representation. Short strings are stored as 1 to 8 nonzero ASCII
-+// bytes, followed by \0 padding for the remaining bytes.
-+//
-+// SAFETY: the identifier must indeed be in the inline representation.
-+unsafe fn inline_len(repr: &Identifier) -> NonZeroUsize {
-+ // SAFETY: Identifier's layout is align(8) and at least size 8. We're doing
-+ // an aligned read of the first 8 bytes from it. The bytes are not all zero
-+ // because inline strings are at least 1 byte long and cannot contain \0.
-+ let repr = unsafe { ptr::read(repr as *const Identifier as *const NonZeroU64) };
-+
-+ // Rustc >=1.53 has intrinsics for counting zeros on a non-zeroable integer.
-+ // On many architectures these are more efficient than counting on ordinary
-+ // zeroable integers (bsf vs cttz). On rustc <1.53 without those intrinsics,
-+ // we count zeros in the u64 rather than the NonZeroU64.
-+ #[cfg(no_nonzero_bitscan)]
-+ let repr = repr.get();
-+
-+ #[cfg(target_endian = "little")]
-+ let zero_bits_on_string_end = repr.leading_zeros();
-+ #[cfg(target_endian = "big")]
-+ let zero_bits_on_string_end = repr.trailing_zeros();
-+
-+ let nonzero_bytes = 8 - zero_bits_on_string_end as usize / 8;
-+
-+ // SAFETY: repr is nonzero, so it has at most 63 zero bits on either end,
-+ // thus at least one nonzero byte.
-+ unsafe { NonZeroUsize::new_unchecked(nonzero_bytes) }
-+}
-+
-+// SAFETY: repr must be in the inline representation, i.e. at least 1 and at
-+// most 8 nonzero ASCII bytes padded on the end with \0 bytes.
-+unsafe fn inline_as_str(repr: &Identifier) -> &str {
-+ let ptr = repr as *const Identifier as *const u8;
-+ let len = unsafe { inline_len(repr) }.get();
-+ // SAFETY: we are viewing the nonzero ASCII prefix of the inline repr's
-+ // contents as a slice of bytes. Input/output lifetimes are correctly
-+ // associated.
-+ let slice = unsafe { slice::from_raw_parts(ptr, len) };
-+ // SAFETY: the string contents are known to be only ASCII bytes, which are
-+ // always valid UTF-8.
-+ unsafe { str::from_utf8_unchecked(slice) }
-+}
-+
-+// Decode varint. Varints consist of between one and eight base-128 digits, each
-+// of which is stored in a byte with most significant bit set. Adjacent to the
-+// varint in memory there is guaranteed to be at least 9 ASCII bytes, each of
-+// which has an unset most significant bit.
-+//
-+// SAFETY: ptr must be one of our own heap allocations, with the varint header
-+// already written.
-+unsafe fn decode_len(ptr: *const u8) -> NonZeroUsize {
-+ // SAFETY: There is at least one byte of varint followed by at least 9 bytes
-+ // of string content, which is at least 10 bytes total for the allocation,
-+ // so reading the first two is no problem.
-+ let [first, second] = unsafe { ptr::read(ptr as *const [u8; 2]) };
-+ if second < 0x80 {
-+ // SAFETY: the length of this heap allocated string has been encoded as
-+ // one base-128 digit, so the length is at least 9 and at most 127. It
-+ // cannot be zero.
-+ unsafe { NonZeroUsize::new_unchecked((first & 0x7f) as usize) }
-+ } else {
-+ return unsafe { decode_len_cold(ptr) };
-+
-+ // Identifiers 128 bytes or longer. This is not exercised by any crate
-+ // version currently published to crates.io.
-+ #[cold]
-+ #[inline(never)]
-+ unsafe fn decode_len_cold(mut ptr: *const u8) -> NonZeroUsize {
-+ let mut len = 0;
-+ let mut shift = 0;
-+ loop {
-+ // SAFETY: varint continues while there are bytes having the
-+ // most significant bit set, i.e. until we start hitting the
-+ // ASCII string content with msb unset.
-+ let byte = unsafe { *ptr };
-+ if byte < 0x80 {
-+ // SAFETY: the string length is known to be 128 bytes or
-+ // longer.
-+ return unsafe { NonZeroUsize::new_unchecked(len) };
-+ }
-+ // SAFETY: still in bounds of the same allocation.
-+ ptr = unsafe { ptr.add(1) };
-+ len += ((byte & 0x7f) as usize) << shift;
-+ shift += 7;
-+ }
-+ }
-+ }
-+}
-+
-+// SAFETY: repr must be in the heap allocated representation, with varint header
-+// and string contents already written.
-+unsafe fn ptr_as_str(repr: &NonNull<u8>) -> &str {
-+ let ptr = repr_to_ptr(*repr);
-+ let len = unsafe { decode_len(ptr) };
-+ let header = bytes_for_varint(len);
-+ let slice = unsafe { slice::from_raw_parts(ptr.add(header), len.get()) };
-+ // SAFETY: all identifier contents are ASCII bytes, which are always valid
-+ // UTF-8.
-+ unsafe { str::from_utf8_unchecked(slice) }
-+}
-+
-+// Number of base-128 digits required for the varint representation of a length.
-+fn bytes_for_varint(len: NonZeroUsize) -> usize {
-+ #[cfg(no_nonzero_bitscan)] // rustc <1.53
-+ let len = len.get();
-+
-+ let usize_bits = mem::size_of::<usize>() * 8;
-+ let len_bits = usize_bits - len.leading_zeros() as usize;
-+ (len_bits + 6) / 7
-+}
-diff --git a/third_party/rust/semver/src/impls.rs b/third_party/rust/semver/src/impls.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/semver/src/impls.rs
-@@ -0,0 +1,156 @@
-+use crate::backport::*;
-+use crate::identifier::Identifier;
-+use crate::{BuildMetadata, Comparator, Prerelease, VersionReq};
-+use core::cmp::Ordering;
-+use core::hash::{Hash, Hasher};
-+use core::iter::FromIterator;
-+use core::ops::Deref;
-+
-+impl Default for Identifier {
-+ fn default() -> Self {
-+ Identifier::empty()
-+ }
-+}
-+
-+impl Eq for Identifier {}
-+
-+impl Hash for Identifier {
-+ fn hash<H: Hasher>(&self, hasher: &mut H) {
-+ self.as_str().hash(hasher);
-+ }
-+}
-+
-+impl Deref for Prerelease {
-+ type Target = str;
-+
-+ fn deref(&self) -> &Self::Target {
-+ self.identifier.as_str()
-+ }
-+}
-+
-+impl Deref for BuildMetadata {
-+ type Target = str;
-+
-+ fn deref(&self) -> &Self::Target {
-+ self.identifier.as_str()
-+ }
-+}
-+
-+impl PartialOrd for Prerelease {
-+ fn partial_cmp(&self, rhs: &Self) -> Option<Ordering> {
-+ Some(Ord::cmp(self, rhs))
-+ }
-+}
-+
-+impl PartialOrd for BuildMetadata {
-+ fn partial_cmp(&self, rhs: &Self) -> Option<Ordering> {
-+ Some(Ord::cmp(self, rhs))
-+ }
-+}
-+
-+impl Ord for Prerelease {
-+ fn cmp(&self, rhs: &Self) -> Ordering {
-+ match self.is_empty() {
-+ true if rhs.is_empty() => return Ordering::Equal,
-+ // A real release compares greater than prerelease.
-+ true => return Ordering::Greater,
-+ // Prerelease compares less than the real release.
-+ false if rhs.is_empty() => return Ordering::Less,
-+ false => {}
-+ }
-+
-+ let lhs = self.as_str().split('.');
-+ let mut rhs = rhs.as_str().split('.');
-+
-+ for lhs in lhs {
-+ let rhs = match rhs.next() {
-+ // Spec: "A larger set of pre-release fields has a higher
-+ // precedence than a smaller set, if all of the preceding
-+ // identifiers are equal."
-+ None => return Ordering::Greater,
-+ Some(rhs) => rhs,
-+ };
-+
-+ let string_cmp = || Ord::cmp(lhs, rhs);
-+ let is_ascii_digit = |b: u8| b.is_ascii_digit();
-+ let ordering = match (
-+ lhs.bytes().all(is_ascii_digit),
-+ rhs.bytes().all(is_ascii_digit),
-+ ) {
-+ // Respect numeric ordering, for example 99 < 100. Spec says:
-+ // "Identifiers consisting of only digits are compared
-+ // numerically."
-+ (true, true) => Ord::cmp(&lhs.len(), &rhs.len()).then_with(string_cmp),
-+ // Spec: "Numeric identifiers always have lower precedence than
-+ // non-numeric identifiers."
-+ (true, false) => return Ordering::Less,
-+ (false, true) => return Ordering::Greater,
-+ // Spec: "Identifiers with letters or hyphens are compared
-+ // lexically in ASCII sort order."
-+ (false, false) => string_cmp(),
-+ };
-+
-+ if ordering != Ordering::Equal {
-+ return ordering;
-+ }
-+ }
-+
-+ if rhs.next().is_none() {
-+ Ordering::Equal
-+ } else {
-+ Ordering::Less
-+ }
-+ }
-+}
-+
-+impl Ord for BuildMetadata {
-+ fn cmp(&self, rhs: &Self) -> Ordering {
-+ let lhs = self.as_str().split('.');
-+ let mut rhs = rhs.as_str().split('.');
-+
-+ for lhs in lhs {
-+ let rhs = match rhs.next() {
-+ None => return Ordering::Greater,
-+ Some(rhs) => rhs,
-+ };
-+
-+ let is_ascii_digit = |b: u8| b.is_ascii_digit();
-+ let ordering = match (
-+ lhs.bytes().all(is_ascii_digit),
-+ rhs.bytes().all(is_ascii_digit),
-+ ) {
-+ (true, true) => {
-+ // 0 < 00 < 1 < 01 < 001 < 2 < 02 < 002 < 10
-+ let lhval = lhs.trim_start_matches('0');
-+ let rhval = rhs.trim_start_matches('0');
-+ Ord::cmp(&lhval.len(), &rhval.len())
-+ .then_with(|| Ord::cmp(lhval, rhval))
-+ .then_with(|| Ord::cmp(&lhs.len(), &rhs.len()))
-+ }
-+ (true, false) => return Ordering::Less,
-+ (false, true) => return Ordering::Greater,
-+ (false, false) => Ord::cmp(lhs, rhs),
-+ };
-+
-+ if ordering != Ordering::Equal {
-+ return ordering;
-+ }
-+ }
-+
-+ if rhs.next().is_none() {
-+ Ordering::Equal
-+ } else {
-+ Ordering::Less
-+ }
-+ }
-+}
-+
-+impl FromIterator<Comparator> for VersionReq {
-+ fn from_iter<I>(iter: I) -> Self
-+ where
-+ I: IntoIterator<Item = Comparator>,
-+ {
-+ let comparators = Vec::from_iter(iter);
-+ VersionReq { comparators }
-+ }
-+}
-diff --git a/third_party/rust/semver/src/lib.rs b/third_party/rust/semver/src/lib.rs
---- a/third_party/rust/semver/src/lib.rs
-+++ b/third_party/rust/semver/src/lib.rs
-@@ -1,182 +1,533 @@
--// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
--// file at the top-level directory of this distribution and at
--// http://rust-lang.org/COPYRIGHT.
--//
--// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
--// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
--// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
--// option. This file may not be copied, modified, or distributed
--// except according to those terms.
--
--//! Semantic version parsing and comparison.
-+//! [![github]](https://github.com/dtolnay/semver) [![crates-io]](https://crates.io/crates/semver) [![docs-rs]](https://docs.rs/semver)
- //!
--//! Semantic versioning (see http://semver.org/) is a set of rules for
--//! assigning version numbers.
-+//! [github]: https://img.shields.io/badge/github-8da0cb?style=for-the-badge&labelColor=5…
-+//! [crates-io]: https://img.shields.io/badge/crates.io-fc8d62?style=for-the-badge&labelColo…
-+//! [docs-rs]: https://img.shields.io/badge/docs.rs-66c2a5?style=for-the-badge&labelColor=…
- //!
--//! ## SemVer overview
--//!
--//! Given a version number MAJOR.MINOR.PATCH, increment the:
-+//! <br>
- //!
--//! 1. MAJOR version when you make incompatible API changes,
--//! 2. MINOR version when you add functionality in a backwards-compatible
--//! manner, and
--//! 3. PATCH version when you make backwards-compatible bug fixes.
--//!
--//! Additional labels for pre-release and build metadata are available as
--//! extensions to the MAJOR.MINOR.PATCH format.
--//!
--//! Any references to 'the spec' in this documentation refer to [version 2.0 of
--//! the SemVer spec](http://semver.org/spec/v2.0.0.html).
-+//! A parser and evaluator for Cargo's flavor of Semantic Versioning.
- //!
--//! ## SemVer and the Rust ecosystem
--//!
--//! Rust itself follows the SemVer specification, as does its standard
--//! libraries. The two are not tied together.
-+//! Semantic Versioning (see <https://semver.org>) is a guideline for how
-+//! version numbers are assigned and incremented. It is widely followed within
-+//! the Cargo/crates.io ecosystem for Rust.
- //!
--//! [Cargo](http://crates.io), Rust's package manager, uses SemVer to determine
--//! which versions of packages you need installed.
-+//! <br>
- //!
--//! ## Versions
--//!
--//! At its simplest, the `semver` crate allows you to construct `Version`
--//! objects using the `parse` method:
-+//! # Example
- //!
--//! ```{rust}
--//! use semver::Version;
-+//! ```
-+//! use semver::{BuildMetadata, Prerelease, Version, VersionReq};
- //!
--//! assert!(Version::parse("1.2.3") == Ok(Version {
--//! major: 1,
--//! minor: 2,
--//! patch: 3,
--//! pre: vec!(),
--//! build: vec!(),
--//! }));
--//! ```
--//!
--//! If you have multiple `Version`s, you can use the usual comparison operators
--//! to compare them:
--//!
--//! ```{rust}
--//! use semver::Version;
--//!
--//! assert!(Version::parse("1.2.3-alpha") != Version::parse("1.2.3-beta"));
--//! assert!(Version::parse("1.2.3-alpha2") > Version::parse("1.2.0"));
--//! ```
-+//! fn main() {
-+//! let req = VersionReq::parse(">=1.2.3, <1.8.0").unwrap();
- //!
--//! If you explicitly need to modify a Version, SemVer also allows you to
--//! increment the major, minor, and patch numbers in accordance with the spec.
--//!
--//! Please note that in order to do this, you must use a mutable Version:
--//!
--//! ```{rust}
--//! use semver::Version;
--//!
--//! let mut bugfix_release = Version::parse("1.0.0").unwrap();
--//! bugfix_release.increment_patch();
-+//! // Check whether this requirement matches version 1.2.3-alpha.1 (no)
-+//! let version = Version {
-+//! major: 1,
-+//! minor: 2,
-+//! patch: 3,
-+//! pre: Prerelease::new("alpha.1").unwrap(),
-+//! build: BuildMetadata::EMPTY,
-+//! };
-+//! assert!(!req.matches(&version));
- //!
--//! assert_eq!(Ok(bugfix_release), Version::parse("1.0.1"));
--//! ```
--//!
--//! When incrementing the minor version number, the patch number resets to zero
--//! (in accordance with section 7 of the spec)
--//!
--//! ```{rust}
--//! use semver::Version;
--//!
--//! let mut feature_release = Version::parse("1.4.6").unwrap();
--//! feature_release.increment_minor();
--//!
--//! assert_eq!(Ok(feature_release), Version::parse("1.5.0"));
-+//! // Check whether it matches 1.3.0 (yes it does)
-+//! let version = Version::parse("1.3.0").unwrap();
-+//! assert!(req.matches(&version));
-+//! }
- //! ```
- //!
--//! Similarly, when incrementing the major version number, the patch and minor
--//! numbers reset to zero (in accordance with section 8 of the spec)
-+//! <br><br>
- //!
--//! ```{rust}
--//! use semver::Version;
--//!
--//! let mut chrome_release = Version::parse("41.5.5377").unwrap();
--//! chrome_release.increment_major();
-+//! # Scope of this crate
- //!
--//! assert_eq!(Ok(chrome_release), Version::parse("42.0.0"));
--//! ```
--//!
--//! ## Requirements
--//!
--//! The `semver` crate also provides the ability to compare requirements, which
--//! are more complex comparisons.
--//!
--//! For example, creating a requirement that only matches versions greater than
--//! or equal to 1.0.0:
-+//! Besides Cargo, several other package ecosystems and package managers for
-+//! other languages also use SemVer: RubyGems/Bundler for Ruby, npm for
-+//! JavaScript, Composer for PHP, CocoaPods for Objective-C...
- //!
--//! ```{rust}
--//! # #![allow(unstable)]
--//! use semver::Version;
--//! use semver::VersionReq;
--//!
--//! let r = VersionReq::parse(">= 1.0.0").unwrap();
--//! let v = Version::parse("1.0.0").unwrap();
-+//! The `semver` crate is specifically intended to implement Cargo's
-+//! interpretation of Semantic Versioning.
- //!
--//! assert!(r.to_string() == ">= 1.0.0".to_string());
--//! assert!(r.matches(&v))
--//! ```
--//!
--//! It also allows parsing of `~x.y.z` and `^x.y.z` requirements as defined at
--//! https://www.npmjs.org/doc/misc/semver.html
-+//! Where the various tools differ in their interpretation or implementation of
-+//! the spec, this crate follows the implementation choices made by Cargo. If
-+//! you are operating on version numbers from some other package ecosystem, you
-+//! will want to use a different semver library which is appropriate to that
-+//! ecosystem.
- //!
--//! **Tilde requirements** specify a minimal version with some updates:
--//!
--//! ```notrust
--//! ~1.2.3 := >=1.2.3 <1.3.0
--//! ~1.2 := >=1.2.0 <1.3.0
--//! ~1 := >=1.0.0 <2.0.0
--//! ```
-+//! The extent of Cargo's SemVer support is documented in the *[Specifying
-+//! Dependencies]* chapter of the Cargo reference.
- //!
--//! **Caret requirements** allow SemVer compatible updates to a specified
--//! verion, `0.x` and `0.x+1` are not considered compatible, but `1.x` and
--//! `1.x+1` are.
--//!
--//! `0.0.x` is not considered compatible with any other version.
--//! Missing minor and patch versions are desugared to `0` but allow flexibility
--//! for that value.
--//!
--//! ```notrust
--//! ^1.2.3 := >=1.2.3 <2.0.0
--//! ^0.2.3 := >=0.2.3 <0.3.0
--//! ^0.0.3 := >=0.0.3 <0.0.4
--//! ^0.0 := >=0.0.0 <0.1.0
--//! ^0 := >=0.0.0 <1.0.0
--//! ```
--//!
--//! **Wildcard requirements** allows parsing of version requirements of the
--//! formats `*`, `x.*` and `x.y.*`.
--//!
--//! ```notrust
--//! * := >=0.0.0
--//! 1.* := >=1.0.0 <2.0.0
--//! 1.2.* := >=1.2.0 <1.3.0
--//! ```
-+//! [Specifying Dependencies]: https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html
-+
-+#![doc(html_root_url = "https://docs.rs/semver/1.0.9")]
-+#![cfg_attr(doc_cfg, feature(doc_cfg))]
-+#![cfg_attr(all(not(feature = "std"), not(no_alloc_crate)), no_std)]
-+#![cfg_attr(not(no_unsafe_op_in_unsafe_fn_lint), deny(unsafe_op_in_unsafe_fn))]
-+#![cfg_attr(no_unsafe_op_in_unsafe_fn_lint, allow(unused_unsafe))]
-+#![cfg_attr(no_str_strip_prefix, allow(unstable_name_collisions))]
-+#![allow(
-+ clippy::cast_lossless,
-+ clippy::cast_possible_truncation,
-+ clippy::doc_markdown,
-+ clippy::items_after_statements,
-+ clippy::manual_map,
-+ clippy::match_bool,
-+ clippy::missing_errors_doc,
-+ clippy::must_use_candidate,
-+ clippy::needless_doctest_main,
-+ clippy::option_if_let_else,
-+ clippy::ptr_as_ptr,
-+ clippy::redundant_else,
-+ clippy::semicolon_if_nothing_returned, // https://github.com/rust-lang/rust-clippy/issues/7324
-+ clippy::similar_names,
-+ clippy::unnested_or_patterns,
-+ clippy::unseparated_literal_suffix,
-+ clippy::wildcard_imports
-+)]
-+
-+#[cfg(not(no_alloc_crate))]
-+extern crate alloc;
-+
-+mod backport;
-+mod display;
-+mod error;
-+mod eval;
-+mod identifier;
-+mod impls;
-+mod parse;
-+
-+#[cfg(feature = "serde")]
-+mod serde;
-+
-+use crate::alloc::vec::Vec;
-+use crate::identifier::Identifier;
-+use core::str::FromStr;
-+
-+#[allow(unused_imports)]
-+use crate::backport::*;
-+
-+pub use crate::parse::Error;
-+
-+/// **SemVer version** as defined by <https://semver.org>.
-+///
-+/// # Syntax
-+///
-+/// - The major, minor, and patch numbers may be any integer 0 through u64::MAX.
-+/// When representing a SemVer version as a string, each number is written as
-+/// a base 10 integer. For example, `1.0.119`.
-+///
-+/// - Leading zeros are forbidden in those positions. For example `1.01.00` is
-+/// invalid as a SemVer version.
-+///
-+/// - The pre-release identifier, if present, must conform to the syntax
-+/// documented for [`Prerelease`].
-+///
-+/// - The build metadata, if present, must conform to the syntax documented for
-+/// [`BuildMetadata`].
-+///
-+/// - Whitespace is not allowed anywhere in the version.
-+///
-+/// # Total ordering
-+///
-+/// Given any two SemVer versions, one is less than, greater than, or equal to
-+/// the other. Versions may be compared against one another using Rust's usual
-+/// comparison operators.
-+///
-+/// - The major, minor, and patch number are compared numerically from left to
-+/// right, lexicographically ordered as a 3-tuple of integers. So for example
-+/// version `1.5.0` is less than version `1.19.0`, despite the fact that
-+/// "1.19.0" < "1.5.0" as ASCIIbetically compared strings and 1.19 < 1.5
-+/// as real numbers.
-+///
-+/// - When major, minor, and patch are equal, a pre-release version is
-+/// considered less than the ordinary release: version `1.0.0-alpha.1` is
-+/// less than version `1.0.0`.
-+///
-+/// - Two pre-releases of the same major, minor, patch are compared by
-+/// lexicographic ordering of dot-separated components of the pre-release
-+/// string.
-+///
-+/// - Identifiers consisting of only digits are compared
-+/// numerically: `1.0.0-pre.8` is less than `1.0.0-pre.12`.
-+///
-+/// - Identifiers that contain a letter or hyphen are compared in ASCII sort
-+/// order: `1.0.0-pre12` is less than `1.0.0-pre8`.
-+///
-+/// - Any numeric identifier is always less than any non-numeric
-+/// identifier: `1.0.0-pre.1` is less than `1.0.0-pre.x`.
-+///
-+/// Example: `1.0.0-alpha` < `1.0.0-alpha.1` < `1.0.0-alpha.beta` < `1.0.0-beta` < `1.0.0-beta.2` < `1.0.0-beta.11` < `1.0.0-rc.1` < `1.0.0`
-+#[derive(Clone, Eq, PartialEq, Ord, PartialOrd, Hash)]
-+pub struct Version {
-+ pub major: u64,
-+ pub minor: u64,
-+ pub patch: u64,
-+ pub pre: Prerelease,
-+ pub build: BuildMetadata,
-+}
-+
-+/// **SemVer version requirement** describing the intersection of some version
-+/// comparators, such as `>=1.2.3, <1.8`.
-+///
-+/// # Syntax
-+///
-+/// - Either `*` (meaning "any"), or one or more comma-separated comparators.
-+///
-+/// - A [`Comparator`] is an operator ([`Op`]) and a partial version, separated
-+/// by optional whitespace. For example `>=1.0.0` or `>=1.0`.
-+///
-+/// - Build metadata is syntactically permitted on the partial versions, but is
-+/// completely ignored, as it's never relevant to whether any comparator
-+/// matches a particular version.
-+///
-+/// - Whitespace is permitted around commas and around operators. Whitespace is
-+/// not permitted within a partial version, i.e. anywhere between the major
-+/// version number and its minor, patch, pre-release, or build metadata.
-+#[derive(Clone, Eq, PartialEq, Hash, Debug)]
-+#[cfg_attr(no_const_vec_new, derive(Default))]
-+pub struct VersionReq {
-+ pub comparators: Vec<Comparator>,
-+}
-+
-+/// A pair of comparison operator and partial version, such as `>=1.2`. Forms
-+/// one piece of a VersionReq.
-+#[derive(Clone, Eq, PartialEq, Hash, Debug)]
-+pub struct Comparator {
-+ pub op: Op,
-+ pub major: u64,
-+ pub minor: Option<u64>,
-+ /// Patch is only allowed if minor is Some.
-+ pub patch: Option<u64>,
-+ /// Non-empty pre-release is only allowed if patch is Some.
-+ pub pre: Prerelease,
-+}
-+
-+/// SemVer comparison operator: `=`, `>`, `>=`, `<`, `<=`, `~`, `^`, `*`.
-+///
-+/// # Op::Exact
-+/// -  **`=I.J.K`** — exactly the version I.J.K
-+/// -  **`=I.J`** — equivalent to `>=I.J.0, <I.(J+1).0`
-+/// -  **`=I`** — equivalent to `>=I.0.0, <(I+1).0.0`
-+///
-+/// # Op::Greater
-+/// -  **`>I.J.K`**
-+/// -  **`>I.J`** — equivalent to `>=I.(J+1).0`
-+/// -  **`>I`** — equivalent to `>=(I+1).0.0`
-+///
-+/// # Op::GreaterEq
-+/// -  **`>=I.J.K`**
-+/// -  **`>=I.J`** — equivalent to `>=I.J.0`
-+/// -  **`>=I`** — equivalent to `>=I.0.0`
-+///
-+/// # Op::Less
-+/// -  **`<I.J.K`**
-+/// -  **`<I.J`** — equivalent to `<I.J.0`
-+/// -  **`<I`** — equivalent to `<I.0.0`
-+///
-+/// # Op::LessEq
-+/// -  **`<=I.J.K`**
-+/// -  **`<=I.J`** — equivalent to `<I.(J+1).0`
-+/// -  **`<=I`** — equivalent to `<(I+1).0.0`
-+///
-+/// # Op::Tilde ("patch" updates)
-+/// *Tilde requirements allow the **patch** part of the semver version (the third number) to increase.*
-+/// -  **`~I.J.K`** — equivalent to `>=I.J.K, <I.(J+1).0`
-+/// -  **`~I.J`** — equivalent to `=I.J`
-+/// -  **`~I`** — equivalent to `=I`
-+///
-+/// # Op::Caret ("compatible" updates)
-+/// *Caret requirements allow parts that are **right of the first nonzero** part of the semver version to increase.*
-+/// -  **`^I.J.K`** (for I\>0) — equivalent to `>=I.J.K, <(I+1).0.0`
-+/// -  **`^0.J.K`** (for J\>0) — equivalent to `>=0.J.K, <0.(J+1).0`
-+/// -  **`^0.0.K`** — equivalent to `=0.0.K`
-+/// -  **`^I.J`** (for I\>0 or J\>0) — equivalent to `^I.J.0`
-+/// -  **`^0.0`** — equivalent to `=0.0`
-+/// -  **`^I`** — equivalent to `=I`
-+///
-+/// # Op::Wildcard
-+/// -  **`I.J.*`** — equivalent to `=I.J`
-+/// -  **`I.*`** or **`I.*.*`** — equivalent to `=I`
-+#[derive(Copy, Clone, Eq, PartialEq, Hash, Debug)]
-+#[cfg_attr(not(no_non_exhaustive), non_exhaustive)]
-+pub enum Op {
-+ Exact,
-+ Greater,
-+ GreaterEq,
-+ Less,
-+ LessEq,
-+ Tilde,
-+ Caret,
-+ Wildcard,
-+
-+ #[cfg(no_non_exhaustive)] // rustc <1.40
-+ #[doc(hidden)]
-+ __NonExhaustive,
-+}
-
--#![doc(html_logo_url = "https://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
-- html_favicon_url = "https://www.rust-lang.org/favicon.ico")]
--#![deny(missing_docs)]
--#![cfg_attr(test, deny(warnings))]
-+/// Optional pre-release identifier on a version string. This comes after `-` in
-+/// a SemVer version, like `1.0.0-alpha.1`
-+///
-+/// # Examples
-+///
-+/// Some real world pre-release idioms drawn from crates.io:
-+///
-+/// - **[mio]** <code>0.7.0-<b>alpha.1</b></code> — the most common style
-+/// for numbering pre-releases.
-+///
-+/// - **[pest]** <code>1.0.0-<b>beta.8</b></code>, <code>1.0.0-<b>rc.0</b></code>
-+/// — this crate makes a distinction between betas and release
-+/// candidates.
-+///
-+/// - **[sassers]** <code>0.11.0-<b>shitshow</b></code> — ???.
-+///
-+/// - **[atomic-utils]** <code>0.0.0-<b>reserved</b></code> — a squatted
-+/// crate name.
-+///
-+/// [mio]: https://crates.io/crates/mio
-+/// [pest]: https://crates.io/crates/pest
-+/// [atomic-utils]: https://crates.io/crates/atomic-utils
-+/// [sassers]: https://crates.io/crates/sassers
-+///
-+/// *Tip:* Be aware that if you are planning to number your own pre-releases,
-+/// you should prefer to separate the numeric part from any non-numeric
-+/// identifiers by using a dot in between. That is, prefer pre-releases
-+/// `alpha.1`, `alpha.2`, etc rather than `alpha1`, `alpha2` etc. The SemVer
-+/// spec's rule for pre-release precedence has special treatment of numeric
-+/// components in the pre-release string, but only if there are no non-digit
-+/// characters in the same dot-separated component. So you'd have `alpha.2` <
-+/// `alpha.11` as intended, but `alpha11` < `alpha2`.
-+///
-+/// # Syntax
-+///
-+/// Pre-release strings are a series of dot separated identifiers immediately
-+/// following the patch version. Identifiers must comprise only ASCII
-+/// alphanumerics and hyphens: `0-9`, `A-Z`, `a-z`, `-`. Identifiers must not be
-+/// empty. Numeric identifiers must not include leading zeros.
-+///
-+/// # Total ordering
-+///
-+/// Pre-releases have a total order defined by the SemVer spec. It uses
-+/// lexicographic ordering of dot-separated components. Identifiers consisting
-+/// of only digits are compared numerically. Otherwise, identifiers are compared
-+/// in ASCII sort order. Any numeric identifier is always less than any
-+/// non-numeric identifier.
-+///
-+/// Example: `alpha` < `alpha.85` < `alpha.90` < `alpha.200` < `alpha.0a` < `alpha.1a0` < `alpha.a` < `beta`
-+#[derive(Default, Clone, Eq, PartialEq, Hash)]
-+pub struct Prerelease {
-+ identifier: Identifier,
-+}
-
--extern crate semver_parser;
--
--// Serialization and deserialization support for version numbers
--#[cfg(feature = "serde")]
--extern crate serde;
-+/// Optional build metadata identifier. This comes after `+` in a SemVer
-+/// version, as in `0.8.1+zstd.1.5.0`.
-+///
-+/// # Examples
-+///
-+/// Some real world build metadata idioms drawn from crates.io:
-+///
-+/// - **[libgit2-sys]** <code>0.12.20+<b>1.1.0</b></code> — for this
-+/// crate, the build metadata indicates the version of the C libgit2 library
-+/// that the Rust crate is built against.
-+///
-+/// - **[mashup]** <code>0.1.13+<b>deprecated</b></code> — just the word
-+/// "deprecated" for a crate that has been superseded by another. Eventually
-+/// people will take notice of this in Cargo's build output where it lists the
-+/// crates being compiled.
-+///
-+/// - **[google-bigquery2]** <code>2.0.4+<b>20210327</b></code> — this
-+/// library is automatically generated from an official API schema, and the
-+/// build metadata indicates the date on which that schema was last captured.
-+///
-+/// - **[fbthrift-git]** <code>0.0.6+<b>c7fcc0e</b></code> — this crate is
-+/// published from snapshots of a big company monorepo. In monorepo
-+/// development, there is no concept of versions, and all downstream code is
-+/// just updated atomically in the same commit that breaking changes to a
-+/// library are landed. Therefore for crates.io purposes, every published
-+/// version must be assumed to be incompatible with the previous. The build
-+/// metadata provides the source control hash of the snapshotted code.
-+///
-+/// [libgit2-sys]: https://crates.io/crates/libgit2-sys
-+/// [mashup]: https://crates.io/crates/mashup
-+/// [google-bigquery2]: https://crates.io/crates/google-bigquery2
-+/// [fbthrift-git]: https://crates.io/crates/fbthrift-git
-+///
-+/// # Syntax
-+///
-+/// Build metadata is a series of dot separated identifiers immediately
-+/// following the patch or pre-release version. Identifiers must comprise only
-+/// ASCII alphanumerics and hyphens: `0-9`, `A-Z`, `a-z`, `-`. Identifiers must
-+/// not be empty. Leading zeros *are* allowed, unlike any other place in the
-+/// SemVer grammar.
-+///
-+/// # Total ordering
-+///
-+/// Build metadata is ignored in evaluating `VersionReq`; it plays no role in
-+/// whether a `Version` matches any one of the comparison operators.
-+///
-+/// However for comparing build metadatas among one another, they do have a
-+/// total order which is determined by lexicographic ordering of dot-separated
-+/// components. Identifiers consisting of only digits are compared numerically.
-+/// Otherwise, identifiers are compared in ASCII sort order. Any numeric
-+/// identifier is always less than any non-numeric identifier.
-+///
-+/// Example: `demo` < `demo.85` < `demo.90` < `demo.090` < `demo.200` < `demo.1a0` < `demo.a` < `memo`
-+#[derive(Default, Clone, Eq, PartialEq, Hash)]
-+pub struct BuildMetadata {
-+ identifier: Identifier,
-+}
-
--// We take the common approach of keeping our own module system private, and
--// just re-exporting the interface that we want.
-+impl Version {
-+ /// Create `Version` with an empty pre-release and build metadata.
-+ ///
-+ /// Equivalent to:
-+ ///
-+ /// ```
-+ /// # use semver::{BuildMetadata, Prerelease, Version};
-+ /// #
-+ /// # const fn new(major: u64, minor: u64, patch: u64) -> Version {
-+ /// Version {
-+ /// major,
-+ /// minor,
-+ /// patch,
-+ /// pre: Prerelease::EMPTY,
-+ /// build: BuildMetadata::EMPTY,
-+ /// }
-+ /// # }
-+ /// ```
-+ pub const fn new(major: u64, minor: u64, patch: u64) -> Self {
-+ Version {
-+ major,
-+ minor,
-+ patch,
-+ pre: Prerelease::EMPTY,
-+ build: BuildMetadata::EMPTY,
-+ }
-+ }
-+
-+ /// Create `Version` by parsing from string representation.
-+ ///
-+ /// # Errors
-+ ///
-+ /// Possible reasons for the parse to fail include:
-+ ///
-+ /// - `1.0` — too few numeric components. A SemVer version must have
-+ /// exactly three. If you are looking at something that has fewer than
-+ /// three numbers in it, it's possible it is a `VersionReq` instead (with
-+ /// an implicit default `^` comparison operator).
-+ ///
-+ /// - `1.0.01` — a numeric component has a leading zero.
-+ ///
-+ /// - `1.0.unknown` — unexpected character in one of the components.
-+ ///
-+ /// - `1.0.0-` or `1.0.0+` — the pre-release or build metadata are
-+ /// indicated present but empty.
-+ ///
-+ /// - `1.0.0-alpha_123` — pre-release or build metadata have something
-+ /// outside the allowed characters, which are `0-9`, `A-Z`, `a-z`, `-`,
-+ /// and `.` (dot).
-+ ///
-+ /// - `23456789999999999999.0.0` — overflow of a u64.
-+ pub fn parse(text: &str) -> Result<Self, Error> {
-+ Version::from_str(text)
-+ }
-+}
-+
-+impl VersionReq {
-+ /// A `VersionReq` with no constraint on the version numbers it matches.
-+ /// Equivalent to `VersionReq::parse("*").unwrap()`.
-+ ///
-+ /// In terms of comparators this is equivalent to `>=0.0.0`.
-+ ///
-+ /// Counterintuitively a `*` VersionReq does not match every possible
-+ /// version number. In particular, in order for *any* `VersionReq` to match
-+ /// a pre-release version, the `VersionReq` must contain at least one
-+ /// `Comparator` that has an explicit major, minor, and patch version
-+ /// identical to the pre-release being matched, and that has a nonempty
-+ /// pre-release component. Since `*` is not written with an explicit major,
-+ /// minor, and patch version, and does not contain a nonempty pre-release
-+ /// component, it does not match any pre-release versions.
-+ #[cfg(not(no_const_vec_new))] // rustc <1.39
-+ pub const STAR: Self = VersionReq {
-+ comparators: Vec::new(),
-+ };
-
--pub use version::{Version, Identifier, SemVerError};
--pub use version::Identifier::{Numeric, AlphaNumeric};
--pub use version_req::{VersionReq, ReqParseError};
-+ /// Create `VersionReq` by parsing from string representation.
-+ ///
-+ /// # Errors
-+ ///
-+ /// Possible reasons for the parse to fail include:
-+ ///
-+ /// - `>a.b` — unexpected characters in the partial version.
-+ ///
-+ /// - `(a)1.0.0` — unrecognized comparison operator.
-+ ///
-+ /// - `^1.0.0, ` — unexpected end of input.
-+ ///
-+ /// - `>=1.0 <2.0` — missing comma between comparators.
-+ ///
-+ /// - `*.*` — unsupported wildcard syntax.
-+ pub fn parse(text: &str) -> Result<Self, Error> {
-+ VersionReq::from_str(text)
-+ }
-+
-+ /// Evaluate whether the given `Version` satisfies the version requirement
-+ /// described by `self`.
-+ pub fn matches(&self, version: &Version) -> bool {
-+ eval::matches_req(self, version)
-+ }
-+}
-+
-+/// The default VersionReq is the same as [`VersionReq::STAR`].
-+#[cfg(not(no_const_vec_new))]
-+impl Default for VersionReq {
-+ fn default() -> Self {
-+ VersionReq::STAR
-+ }
-+}
-+
-+impl Comparator {
-+ pub fn parse(text: &str) -> Result<Self, Error> {
-+ Comparator::from_str(text)
-+ }
-
--// SemVer-compliant versions.
--mod version;
-+ pub fn matches(&self, version: &Version) -> bool {
-+ eval::matches_comparator(self, version)
-+ }
-+}
-+
-+impl Prerelease {
-+ pub const EMPTY: Self = Prerelease {
-+ identifier: Identifier::empty(),
-+ };
-+
-+ pub fn new(text: &str) -> Result<Self, Error> {
-+ Prerelease::from_str(text)
-+ }
-+
-+ pub fn as_str(&self) -> &str {
-+ self.identifier.as_str()
-+ }
-
--// advanced version comparisons
--mod version_req;
-+ pub fn is_empty(&self) -> bool {
-+ self.identifier.is_empty()
-+ }
-+}
-+
-+impl BuildMetadata {
-+ pub const EMPTY: Self = BuildMetadata {
-+ identifier: Identifier::empty(),
-+ };
-+
-+ pub fn new(text: &str) -> Result<Self, Error> {
-+ BuildMetadata::from_str(text)
-+ }
-+
-+ pub fn as_str(&self) -> &str {
-+ self.identifier.as_str()
-+ }
-+
-+ pub fn is_empty(&self) -> bool {
-+ self.identifier.is_empty()
-+ }
-+}
-diff --git a/third_party/rust/semver/src/parse.rs b/third_party/rust/semver/src/parse.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/semver/src/parse.rs
-@@ -0,0 +1,405 @@
-+use crate::backport::*;
-+use crate::error::{ErrorKind, Position};
-+use crate::identifier::Identifier;
-+use crate::{BuildMetadata, Comparator, Op, Prerelease, Version, VersionReq};
-+use core::str::FromStr;
-+
-+/// Error parsing a SemVer version or version requirement.
-+///
-+/// # Example
-+///
-+/// ```
-+/// use semver::Version;
-+///
-+/// fn main() {
-+/// let err = Version::parse("1.q.r").unwrap_err();
-+///
-+/// // "unexpected character 'q' while parsing minor version number"
-+/// eprintln!("{}", err);
-+/// }
-+/// ```
-+pub struct Error {
-+ pub(crate) kind: ErrorKind,
-+}
-+
-+impl FromStr for Version {
-+ type Err = Error;
-+
-+ fn from_str(text: &str) -> Result<Self, Self::Err> {
-+ let mut pos = Position::Major;
-+ let (major, text) = numeric_identifier(text, pos)?;
-+ let text = dot(text, pos)?;
-+
-+ pos = Position::Minor;
-+ let (minor, text) = numeric_identifier(text, pos)?;
-+ let text = dot(text, pos)?;
-+
-+ pos = Position::Patch;
-+ let (patch, text) = numeric_identifier(text, pos)?;
-+
-+ if text.is_empty() {
-+ return Ok(Version::new(major, minor, patch));
-+ }
-+
-+ let (pre, text) = if let Some(text) = text.strip_prefix('-') {
-+ pos = Position::Pre;
-+ let (pre, text) = prerelease_identifier(text)?;
-+ if pre.is_empty() {
-+ return Err(Error::new(ErrorKind::EmptySegment(pos)));
-+ }
-+ (pre, text)
-+ } else {
-+ (Prerelease::EMPTY, text)
-+ };
-+
-+ let (build, text) = if let Some(text) = text.strip_prefix('+') {
-+ pos = Position::Build;
-+ let (build, text) = build_identifier(text)?;
-+ if build.is_empty() {
-+ return Err(Error::new(ErrorKind::EmptySegment(pos)));
-+ }
-+ (build, text)
-+ } else {
-+ (BuildMetadata::EMPTY, text)
-+ };
-+
-+ if let Some(unexpected) = text.chars().next() {
-+ return Err(Error::new(ErrorKind::UnexpectedCharAfter(pos, unexpected)));
-+ }
-+
-+ Ok(Version {
-+ major,
-+ minor,
-+ patch,
-+ pre,
-+ build,
-+ })
-+ }
-+}
-+
-+impl FromStr for VersionReq {
-+ type Err = Error;
-+
-+ fn from_str(text: &str) -> Result<Self, Self::Err> {
-+ let text = text.trim_start_matches(' ');
-+ if let Some((ch, text)) = wildcard(text) {
-+ let rest = text.trim_start_matches(' ');
-+ if rest.is_empty() {
-+ #[cfg(not(no_const_vec_new))]
-+ return Ok(VersionReq::STAR);
-+ #[cfg(no_const_vec_new)] // rustc <1.39
-+ return Ok(VersionReq {
-+ comparators: Vec::new(),
-+ });
-+ } else if rest.starts_with(',') {
-+ return Err(Error::new(ErrorKind::WildcardNotTheOnlyComparator(ch)));
-+ } else {
-+ return Err(Error::new(ErrorKind::UnexpectedAfterWildcard));
-+ }
-+ }
-+
-+ let depth = 0;
-+ let mut comparators = Vec::new();
-+ let len = version_req(text, &mut comparators, depth)?;
-+ unsafe { comparators.set_len(len) }
-+ Ok(VersionReq { comparators })
-+ }
-+}
-+
-+impl FromStr for Comparator {
-+ type Err = Error;
-+
-+ fn from_str(text: &str) -> Result<Self, Self::Err> {
-+ let text = text.trim_start_matches(' ');
-+ let (comparator, pos, rest) = comparator(text)?;
-+ if !rest.is_empty() {
-+ let unexpected = rest.chars().next().unwrap();
-+ return Err(Error::new(ErrorKind::UnexpectedCharAfter(pos, unexpected)));
-+ }
-+ Ok(comparator)
-+ }
-+}
-+
-+impl FromStr for Prerelease {
-+ type Err = Error;
-+
-+ fn from_str(text: &str) -> Result<Self, Self::Err> {
-+ let (pre, rest) = prerelease_identifier(text)?;
-+ if !rest.is_empty() {
-+ return Err(Error::new(ErrorKind::IllegalCharacter(Position::Pre)));
-+ }
-+ Ok(pre)
-+ }
-+}
-+
-+impl FromStr for BuildMetadata {
-+ type Err = Error;
-+
-+ fn from_str(text: &str) -> Result<Self, Self::Err> {
-+ let (build, rest) = build_identifier(text)?;
-+ if !rest.is_empty() {
-+ return Err(Error::new(ErrorKind::IllegalCharacter(Position::Build)));
-+ }
-+ Ok(build)
-+ }
-+}
-+
-+impl Error {
-+ fn new(kind: ErrorKind) -> Self {
-+ Error { kind }
-+ }
-+}
-+
-+impl Op {
-+ const DEFAULT: Self = Op::Caret;
-+}
-+
-+fn numeric_identifier(input: &str, pos: Position) -> Result<(u64, &str), Error> {
-+ let mut len = 0;
-+ let mut value = 0u64;
-+
-+ while let Some(&digit) = input.as_bytes().get(len) {
-+ if digit < b'0' || digit > b'9' {
-+ break;
-+ }
-+ if value == 0 && len > 0 {
-+ return Err(Error::new(ErrorKind::LeadingZero(pos)));
-+ }
-+ match value
-+ .checked_mul(10)
-+ .and_then(|value| value.checked_add((digit - b'0') as u64))
-+ {
-+ Some(sum) => value = sum,
-+ None => return Err(Error::new(ErrorKind::Overflow(pos))),
-+ }
-+ len += 1;
-+ }
-+
-+ if len > 0 {
-+ Ok((value, &input[len..]))
-+ } else if let Some(unexpected) = input[len..].chars().next() {
-+ Err(Error::new(ErrorKind::UnexpectedChar(pos, unexpected)))
-+ } else {
-+ Err(Error::new(ErrorKind::UnexpectedEnd(pos)))
-+ }
-+}
-+
-+fn wildcard(input: &str) -> Option<(char, &str)> {
-+ if let Some(rest) = input.strip_prefix('*') {
-+ Some(('*', rest))
-+ } else if let Some(rest) = input.strip_prefix('x') {
-+ Some(('x', rest))
-+ } else if let Some(rest) = input.strip_prefix('X') {
-+ Some(('X', rest))
-+ } else {
-+ None
-+ }
-+}
-+
-+fn dot(input: &str, pos: Position) -> Result<&str, Error> {
-+ if let Some(rest) = input.strip_prefix('.') {
-+ Ok(rest)
-+ } else if let Some(unexpected) = input.chars().next() {
-+ Err(Error::new(ErrorKind::UnexpectedCharAfter(pos, unexpected)))
-+ } else {
-+ Err(Error::new(ErrorKind::UnexpectedEnd(pos)))
-+ }
-+}
-+
-+fn prerelease_identifier(input: &str) -> Result<(Prerelease, &str), Error> {
-+ let (string, rest) = identifier(input, Position::Pre)?;
-+ let identifier = unsafe { Identifier::new_unchecked(string) };
-+ Ok((Prerelease { identifier }, rest))
-+}
-+
-+fn build_identifier(input: &str) -> Result<(BuildMetadata, &str), Error> {
-+ let (string, rest) = identifier(input, Position::Build)?;
-+ let identifier = unsafe { Identifier::new_unchecked(string) };
-+ Ok((BuildMetadata { identifier }, rest))
-+}
-+
-+fn identifier(input: &str, pos: Position) -> Result<(&str, &str), Error> {
-+ let mut accumulated_len = 0;
-+ let mut segment_len = 0;
-+ let mut segment_has_nondigit = false;
-+
-+ loop {
-+ match input.as_bytes().get(accumulated_len + segment_len) {
-+ Some(b'A'..=b'Z') | Some(b'a'..=b'z') | Some(b'-') => {
-+ segment_len += 1;
-+ segment_has_nondigit = true;
-+ }
-+ Some(b'0'..=b'9') => {
-+ segment_len += 1;
-+ }
-+ boundary => {
-+ if segment_len == 0 {
-+ if accumulated_len == 0 && boundary != Some(&b'.') {
-+ return Ok(("", input));
-+ } else {
-+ return Err(Error::new(ErrorKind::EmptySegment(pos)));
-+ }
-+ }
-+ if pos == Position::Pre
-+ && segment_len > 1
-+ && !segment_has_nondigit
-+ && input[accumulated_len..].starts_with('0')
-+ {
-+ return Err(Error::new(ErrorKind::LeadingZero(pos)));
-+ }
-+ accumulated_len += segment_len;
-+ if boundary == Some(&b'.') {
-+ accumulated_len += 1;
-+ segment_len = 0;
-+ segment_has_nondigit = false;
-+ } else {
-+ return Ok(input.split_at(accumulated_len));
-+ }
-+ }
-+ }
-+ }
-+}
-+
-+fn op(input: &str) -> (Op, &str) {
-+ let bytes = input.as_bytes();
-+ if bytes.get(0) == Some(&b'=') {
-+ (Op::Exact, &input[1..])
-+ } else if bytes.get(0) == Some(&b'>') {
-+ if bytes.get(1) == Some(&b'=') {
-+ (Op::GreaterEq, &input[2..])
-+ } else {
-+ (Op::Greater, &input[1..])
-+ }
-+ } else if bytes.get(0) == Some(&b'<') {
-+ if bytes.get(1) == Some(&b'=') {
-+ (Op::LessEq, &input[2..])
-+ } else {
-+ (Op::Less, &input[1..])
-+ }
-+ } else if bytes.get(0) == Some(&b'~') {
-+ (Op::Tilde, &input[1..])
-+ } else if bytes.get(0) == Some(&b'^') {
-+ (Op::Caret, &input[1..])
-+ } else {
-+ (Op::DEFAULT, input)
-+ }
-+}
-+
-+fn comparator(input: &str) -> Result<(Comparator, Position, &str), Error> {
-+ let (mut op, text) = op(input);
-+ let default_op = input.len() == text.len();
-+ let text = text.trim_start_matches(' ');
-+
-+ let mut pos = Position::Major;
-+ let (major, text) = numeric_identifier(text, pos)?;
-+ let mut has_wildcard = false;
-+
-+ let (minor, text) = if let Some(text) = text.strip_prefix('.') {
-+ pos = Position::Minor;
-+ if let Some((_, text)) = wildcard(text) {
-+ has_wildcard = true;
-+ if default_op {
-+ op = Op::Wildcard;
-+ }
-+ (None, text)
-+ } else {
-+ let (minor, text) = numeric_identifier(text, pos)?;
-+ (Some(minor), text)
-+ }
-+ } else {
-+ (None, text)
-+ };
-+
-+ let (patch, text) = if let Some(text) = text.strip_prefix('.') {
-+ pos = Position::Patch;
-+ if let Some((_, text)) = wildcard(text) {
-+ if default_op {
-+ op = Op::Wildcard;
-+ }
-+ (None, text)
-+ } else if has_wildcard {
-+ return Err(Error::new(ErrorKind::UnexpectedAfterWildcard));
-+ } else {
-+ let (patch, text) = numeric_identifier(text, pos)?;
-+ (Some(patch), text)
-+ }
-+ } else {
-+ (None, text)
-+ };
-+
-+ let (pre, text) = if patch.is_some() && text.starts_with('-') {
-+ pos = Position::Pre;
-+ let text = &text[1..];
-+ let (pre, text) = prerelease_identifier(text)?;
-+ if pre.is_empty() {
-+ return Err(Error::new(ErrorKind::EmptySegment(pos)));
-+ }
-+ (pre, text)
-+ } else {
-+ (Prerelease::EMPTY, text)
-+ };
-+
-+ let text = if patch.is_some() && text.starts_with('+') {
-+ pos = Position::Build;
-+ let text = &text[1..];
-+ let (build, text) = build_identifier(text)?;
-+ if build.is_empty() {
-+ return Err(Error::new(ErrorKind::EmptySegment(pos)));
-+ }
-+ text
-+ } else {
-+ text
-+ };
-+
-+ let text = text.trim_start_matches(' ');
-+
-+ let comparator = Comparator {
-+ op,
-+ major,
-+ minor,
-+ patch,
-+ pre,
-+ };
-+
-+ Ok((comparator, pos, text))
-+}
-+
-+fn version_req(input: &str, out: &mut Vec<Comparator>, depth: usize) -> Result<usize, Error> {
-+ let (comparator, pos, text) = match comparator(input) {
-+ Ok(success) => success,
-+ Err(mut error) => {
-+ if let Some((ch, mut rest)) = wildcard(input) {
-+ rest = rest.trim_start_matches(' ');
-+ if rest.is_empty() || rest.starts_with(',') {
-+ error.kind = ErrorKind::WildcardNotTheOnlyComparator(ch);
-+ }
-+ }
-+ return Err(error);
-+ }
-+ };
-+
-+ if text.is_empty() {
-+ out.reserve_exact(depth + 1);
-+ unsafe { out.as_mut_ptr().add(depth).write(comparator) }
-+ return Ok(depth + 1);
-+ }
-+
-+ let text = if let Some(text) = text.strip_prefix(',') {
-+ text.trim_start_matches(' ')
-+ } else {
-+ let unexpected = text.chars().next().unwrap();
-+ return Err(Error::new(ErrorKind::ExpectedCommaFound(pos, unexpected)));
-+ };
-+
-+ const MAX_COMPARATORS: usize = 32;
-+ if depth + 1 == MAX_COMPARATORS {
-+ return Err(Error::new(ErrorKind::ExcessiveComparators));
-+ }
-+
-+ // Recurse to collect parsed Comparator objects on the stack. We perform a
-+ // single allocation to allocate exactly the right sized Vec only once the
-+ // total number of comparators is known.
-+ let len = version_req(text, out, depth + 1)?;
-+ unsafe { out.as_mut_ptr().add(depth).write(comparator) }
-+ Ok(len)
-+}
-diff --git a/third_party/rust/semver/src/serde.rs b/third_party/rust/semver/src/serde.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/semver/src/serde.rs
-@@ -0,0 +1,74 @@
-+use crate::{Version, VersionReq};
-+use core::fmt;
-+use serde::de::{Deserialize, Deserializer, Error, Visitor};
-+use serde::ser::{Serialize, Serializer};
-+
-+impl Serialize for Version {
-+ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
-+ where
-+ S: Serializer,
-+ {
-+ serializer.collect_str(self)
-+ }
-+}
-+
-+impl Serialize for VersionReq {
-+ fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
-+ where
-+ S: Serializer,
-+ {
-+ serializer.collect_str(self)
-+ }
-+}
-+
-+impl<'de> Deserialize<'de> for Version {
-+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
-+ where
-+ D: Deserializer<'de>,
-+ {
-+ struct VersionVisitor;
-+
-+ impl<'de> Visitor<'de> for VersionVisitor {
-+ type Value = Version;
-+
-+ fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ formatter.write_str("semver version")
-+ }
-+
-+ fn visit_str<E>(self, string: &str) -> Result<Self::Value, E>
-+ where
-+ E: Error,
-+ {
-+ string.parse().map_err(Error::custom)
-+ }
-+ }
-+
-+ deserializer.deserialize_str(VersionVisitor)
-+ }
-+}
-+
-+impl<'de> Deserialize<'de> for VersionReq {
-+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
-+ where
-+ D: Deserializer<'de>,
-+ {
-+ struct VersionReqVisitor;
-+
-+ impl<'de> Visitor<'de> for VersionReqVisitor {
-+ type Value = VersionReq;
-+
-+ fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ formatter.write_str("semver version")
-+ }
-+
-+ fn visit_str<E>(self, string: &str) -> Result<Self::Value, E>
-+ where
-+ E: Error,
-+ {
-+ string.parse().map_err(Error::custom)
-+ }
-+ }
-+
-+ deserializer.deserialize_str(VersionReqVisitor)
-+ }
-+}
-diff --git a/third_party/rust/semver/src/version.rs b/third_party/rust/semver/src/version.rs
-deleted file mode 100644
---- a/third_party/rust/semver/src/version.rs
-+++ /dev/null
-@@ -1,759 +0,0 @@
--// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
--// file at the top-level directory of this distribution and at
--// http://rust-lang.org/COPYRIGHT.
--//
--// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
--// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
--// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
--// option. This file may not be copied, modified, or distributed
--// except according to those terms.
--
--//! The `version` module gives you tools to create and compare SemVer-compliant
--//! versions.
--
--use std::cmp::{self, Ordering};
--use std::fmt;
--use std::hash;
--use std::error::Error;
--
--use std::result;
--use std::str;
--
--use semver_parser;
--
--#[cfg(feature = "serde")]
--use serde::ser::{Serialize, Serializer};
--#[cfg(feature = "serde")]
--use serde::de::{self, Deserialize, Deserializer, Visitor};
--
--/// An identifier in the pre-release or build metadata.
--///
--/// See sections 9 and 10 of the spec for more about pre-release identifers and
--/// build metadata.
--#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
--pub enum Identifier {
-- /// An identifier that's solely numbers.
-- Numeric(u64),
-- /// An identifier with letters and numbers.
-- AlphaNumeric(String),
--}
--
--impl From<semver_parser::version::Identifier> for Identifier {
-- fn from(other: semver_parser::version::Identifier) -> Identifier {
-- match other {
-- semver_parser::version::Identifier::Numeric(n) => Identifier::Numeric(n),
-- semver_parser::version::Identifier::AlphaNumeric(s) => Identifier::AlphaNumeric(s),
-- }
-- }
--}
--
--impl fmt::Display for Identifier {
-- #[inline]
-- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-- match *self {
-- Identifier::Numeric(ref n) => fmt::Display::fmt(n, f),
-- Identifier::AlphaNumeric(ref s) => fmt::Display::fmt(s, f),
-- }
-- }
--}
--
--#[cfg(feature = "serde")]
--impl Serialize for Identifier {
-- fn serialize<S>(&self, serializer: S) -> result::Result<S::Ok, S::Error>
-- where S: Serializer
-- {
-- // Serialize Identifier as a number or string.
-- match *self {
-- Identifier::Numeric(n) => serializer.serialize_u64(n),
-- Identifier::AlphaNumeric(ref s) => serializer.serialize_str(s),
-- }
-- }
--}
--
--#[cfg(feature = "serde")]
--impl<'de> Deserialize<'de> for Identifier {
-- fn deserialize<D>(deserializer: D) -> result::Result<Self, D::Error>
-- where D: Deserializer<'de>
-- {
-- struct IdentifierVisitor;
--
-- // Deserialize Identifier from a number or string.
-- impl<'de> Visitor<'de> for IdentifierVisitor {
-- type Value = Identifier;
--
-- fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-- formatter.write_str("a SemVer pre-release or build identifier")
-- }
--
-- fn visit_u64<E>(self, numeric: u64) -> result::Result<Self::Value, E>
-- where E: de::Error
-- {
-- Ok(Identifier::Numeric(numeric))
-- }
--
-- fn visit_str<E>(self, alphanumeric: &str) -> result::Result<Self::Value, E>
-- where E: de::Error
-- {
-- Ok(Identifier::AlphaNumeric(alphanumeric.to_owned()))
-- }
-- }
--
-- deserializer.deserialize_any(IdentifierVisitor)
-- }
--}
--
--/// Represents a version number conforming to the semantic versioning scheme.
--#[derive(Clone, Eq, Debug)]
--pub struct Version {
-- /// The major version, to be incremented on incompatible changes.
-- pub major: u64,
-- /// The minor version, to be incremented when functionality is added in a
-- /// backwards-compatible manner.
-- pub minor: u64,
-- /// The patch version, to be incremented when backwards-compatible bug
-- /// fixes are made.
-- pub patch: u64,
-- /// The pre-release version identifier, if one exists.
-- pub pre: Vec<Identifier>,
-- /// The build metadata, ignored when determining version precedence.
-- pub build: Vec<Identifier>,
--}
--
--impl From<semver_parser::version::Version> for Version {
-- fn from(other: semver_parser::version::Version) -> Version {
-- Version {
-- major: other.major,
-- minor: other.minor,
-- patch: other.patch,
-- pre: other.pre.into_iter().map(From::from).collect(),
-- build: other.build.into_iter().map(From::from).collect(),
-- }
-- }
--}
--
--#[cfg(feature = "serde")]
--impl Serialize for Version {
-- fn serialize<S>(&self, serializer: S) -> result::Result<S::Ok, S::Error>
-- where S: Serializer
-- {
-- // Serialize Version as a string.
-- serializer.collect_str(self)
-- }
--}
--
--#[cfg(feature = "serde")]
--impl<'de> Deserialize<'de> for Version {
-- fn deserialize<D>(deserializer: D) -> result::Result<Self, D::Error>
-- where D: Deserializer<'de>
-- {
-- struct VersionVisitor;
--
-- // Deserialize Version from a string.
-- impl<'de> Visitor<'de> for VersionVisitor {
-- type Value = Version;
--
-- fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-- formatter.write_str("a SemVer version as a string")
-- }
--
-- fn visit_str<E>(self, v: &str) -> result::Result<Self::Value, E>
-- where E: de::Error
-- {
-- Version::parse(v).map_err(de::Error::custom)
-- }
-- }
--
-- deserializer.deserialize_str(VersionVisitor)
-- }
--}
--
--/// An error type for this crate
--///
--/// Currently, just a generic error. Will make this nicer later.
--#[derive(Clone,PartialEq,Debug,PartialOrd)]
--pub enum SemVerError {
-- /// An error ocurred while parsing.
-- ParseError(String),
--}
--
--impl fmt::Display for SemVerError {
-- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-- match self {
-- &SemVerError::ParseError(ref m) => write!(f, "{}", m),
-- }
-- }
--}
--
--impl Error for SemVerError {
-- fn description(&self) -> &str {
-- match self {
-- &SemVerError::ParseError(ref m) => m,
-- }
-- }
--}
--
--/// A Result type for errors
--pub type Result<T> = result::Result<T, SemVerError>;
--
--impl Version {
--
-- /// Contructs the simple case without pre or build.
-- pub fn new(major: u64, minor: u64, patch: u64) -> Version {
-- Version {
-- major: major,
-- minor: minor,
-- patch: patch,
-- pre: Vec::new(),
-- build: Vec::new()
-- }
-- }
--
-- /// Parse a string into a semver object.
-- pub fn parse(version: &str) -> Result<Version> {
-- let res = semver_parser::version::parse(version);
--
-- match res {
-- // Convert plain String error into proper ParseError
-- Err(e) => Err(SemVerError::ParseError(e)),
-- Ok(v) => Ok(From::from(v)),
-- }
-- }
--
-- /// Clears the build metadata
-- fn clear_metadata(&mut self) {
-- self.build = Vec::new();
-- self.pre = Vec::new();
-- }
--
-- /// Increments the patch number for this Version (Must be mutable)
-- pub fn increment_patch(&mut self) {
-- self.patch += 1;
-- self.clear_metadata();
-- }
--
-- /// Increments the minor version number for this Version (Must be mutable)
-- ///
-- /// As instructed by section 7 of the spec, the patch number is reset to 0.
-- pub fn increment_minor(&mut self) {
-- self.minor += 1;
-- self.patch = 0;
-- self.clear_metadata();
-- }
--
-- /// Increments the major version number for this Version (Must be mutable)
-- ///
-- /// As instructed by section 8 of the spec, the minor and patch numbers are
-- /// reset to 0
-- pub fn increment_major(&mut self) {
-- self.major += 1;
-- self.minor = 0;
-- self.patch = 0;
-- self.clear_metadata();
-- }
--
-- /// Checks to see if the current Version is in pre-release status
-- pub fn is_prerelease(&self) -> bool {
-- !self.pre.is_empty()
-- }
--}
--
--impl str::FromStr for Version {
-- type Err = SemVerError;
--
-- fn from_str(s: &str) -> Result<Version> {
-- Version::parse(s)
-- }
--}
--
--impl fmt::Display for Version {
-- #[inline]
-- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-- try!(write!(f, "{}.{}.{}", self.major, self.minor, self.patch));
-- if !self.pre.is_empty() {
-- try!(write!(f, "-"));
-- for (i, x) in self.pre.iter().enumerate() {
-- if i != 0 {
-- try!(write!(f, "."))
-- }
-- try!(write!(f, "{}", x));
-- }
-- }
-- if !self.build.is_empty() {
-- try!(write!(f, "+"));
-- for (i, x) in self.build.iter().enumerate() {
-- if i != 0 {
-- try!(write!(f, "."))
-- }
-- try!(write!(f, "{}", x));
-- }
-- }
-- Ok(())
-- }
--}
--
--impl cmp::PartialEq for Version {
-- #[inline]
-- fn eq(&self, other: &Version) -> bool {
-- // We should ignore build metadata here, otherwise versions v1 and v2
-- // can exist such that !(v1 < v2) && !(v1 > v2) && v1 != v2, which
-- // violate strict total ordering rules.
-- self.major == other.major && self.minor == other.minor && self.patch == other.patch &&
-- self.pre == other.pre
-- }
--}
--
--impl cmp::PartialOrd for Version {
-- fn partial_cmp(&self, other: &Version) -> Option<Ordering> {
-- Some(self.cmp(other))
-- }
--}
--
--impl cmp::Ord for Version {
-- fn cmp(&self, other: &Version) -> Ordering {
-- match self.major.cmp(&other.major) {
-- Ordering::Equal => {}
-- r => return r,
-- }
--
-- match self.minor.cmp(&other.minor) {
-- Ordering::Equal => {}
-- r => return r,
-- }
--
-- match self.patch.cmp(&other.patch) {
-- Ordering::Equal => {}
-- r => return r,
-- }
--
-- // NB: semver spec says 0.0.0-pre < 0.0.0
-- // but the version of ord defined for vec
-- // says that [] < [pre] so we alter it here
-- match (self.pre.len(), other.pre.len()) {
-- (0, 0) => Ordering::Equal,
-- (0, _) => Ordering::Greater,
-- (_, 0) => Ordering::Less,
-- (_, _) => self.pre.cmp(&other.pre),
-- }
-- }
--}
--
--impl hash::Hash for Version {
-- fn hash<H: hash::Hasher>(&self, into: &mut H) {
-- self.major.hash(into);
-- self.minor.hash(into);
-- self.patch.hash(into);
-- self.pre.hash(into);
-- }
--}
--
--impl From<(u64,u64,u64)> for Version {
-- fn from(tuple: (u64,u64,u64)) -> Version {
-- let (major, minor, patch) = tuple;
-- Version::new(major, minor, patch)
-- }
--}
--
--#[cfg(test)]
--mod tests {
-- use std::result;
-- use super::Version;
-- use super::Identifier;
-- use super::SemVerError;
--
-- #[test]
-- fn test_parse() {
-- fn parse_error(e: &str) -> result::Result<Version, SemVerError> {
-- return Err(SemVerError::ParseError(e.to_string()));
-- }
--
-- assert_eq!(Version::parse(""),
-- parse_error("Error parsing major identifier"));
-- assert_eq!(Version::parse(" "),
-- parse_error("Error parsing major identifier"));
-- assert_eq!(Version::parse("1"),
-- parse_error("Expected dot"));
-- assert_eq!(Version::parse("1.2"),
-- parse_error("Expected dot"));
-- assert_eq!(Version::parse("1.2.3-"),
-- parse_error("Error parsing prerelease"));
-- assert_eq!(Version::parse("a.b.c"),
-- parse_error("Error parsing major identifier"));
-- assert_eq!(Version::parse("1.2.3 abc"),
-- parse_error("Extra junk after valid version: abc"));
--
-- assert_eq!(Version::parse("1.2.3"),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: Vec::new(),
-- build: Vec::new(),
-- }));
--
-- assert_eq!(Version::parse("1.2.3"),
-- Ok(Version::new(1,2,3)));
--
-- assert_eq!(Version::parse(" 1.2.3 "),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: Vec::new(),
-- build: Vec::new(),
-- }));
-- assert_eq!(Version::parse("1.2.3-alpha1"),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: vec![Identifier::AlphaNumeric(String::from("alpha1"))],
-- build: Vec::new(),
-- }));
-- assert_eq!(Version::parse(" 1.2.3-alpha1 "),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: vec![Identifier::AlphaNumeric(String::from("alpha1"))],
-- build: Vec::new(),
-- }));
-- assert_eq!(Version::parse("1.2.3+build5"),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: Vec::new(),
-- build: vec![Identifier::AlphaNumeric(String::from("build5"))],
-- }));
-- assert_eq!(Version::parse(" 1.2.3+build5 "),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: Vec::new(),
-- build: vec![Identifier::AlphaNumeric(String::from("build5"))],
-- }));
-- assert_eq!(Version::parse("1.2.3-alpha1+build5"),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: vec![Identifier::AlphaNumeric(String::from("alpha1"))],
-- build: vec![Identifier::AlphaNumeric(String::from("build5"))],
-- }));
-- assert_eq!(Version::parse(" 1.2.3-alpha1+build5 "),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: vec![Identifier::AlphaNumeric(String::from("alpha1"))],
-- build: vec![Identifier::AlphaNumeric(String::from("build5"))],
-- }));
-- assert_eq!(Version::parse("1.2.3-1.alpha1.9+build5.7.3aedf "),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: vec![Identifier::Numeric(1),
-- Identifier::AlphaNumeric(String::from("alpha1")),
-- Identifier::Numeric(9),
-- ],
-- build: vec![Identifier::AlphaNumeric(String::from("build5")),
-- Identifier::Numeric(7),
-- Identifier::AlphaNumeric(String::from("3aedf")),
-- ],
-- }));
-- assert_eq!(Version::parse("0.4.0-beta.1+0851523"),
-- Ok(Version {
-- major: 0,
-- minor: 4,
-- patch: 0,
-- pre: vec![Identifier::AlphaNumeric(String::from("beta")),
-- Identifier::Numeric(1),
-- ],
-- build: vec![Identifier::AlphaNumeric(String::from("0851523"))],
-- }));
--
-- }
--
-- #[test]
-- fn test_increment_patch() {
-- let mut buggy_release = Version::parse("0.1.0").unwrap();
-- buggy_release.increment_patch();
-- assert_eq!(buggy_release, Version::parse("0.1.1").unwrap());
-- }
--
-- #[test]
-- fn test_increment_minor() {
-- let mut feature_release = Version::parse("1.4.6").unwrap();
-- feature_release.increment_minor();
-- assert_eq!(feature_release, Version::parse("1.5.0").unwrap());
-- }
--
-- #[test]
-- fn test_increment_major() {
-- let mut chrome_release = Version::parse("46.1.246773").unwrap();
-- chrome_release.increment_major();
-- assert_eq!(chrome_release, Version::parse("47.0.0").unwrap());
-- }
--
-- #[test]
-- fn test_increment_keep_prerelease() {
-- let mut release = Version::parse("1.0.0-alpha").unwrap();
-- release.increment_patch();
--
-- assert_eq!(release, Version::parse("1.0.1").unwrap());
--
-- release.increment_minor();
--
-- assert_eq!(release, Version::parse("1.1.0").unwrap());
--
-- release.increment_major();
--
-- assert_eq!(release, Version::parse("2.0.0").unwrap());
-- }
--
--
-- #[test]
-- fn test_increment_clear_metadata() {
-- let mut release = Version::parse("1.0.0+4442").unwrap();
-- release.increment_patch();
--
-- assert_eq!(release, Version::parse("1.0.1").unwrap());
-- release = Version::parse("1.0.1+hello").unwrap();
--
-- release.increment_minor();
--
-- assert_eq!(release, Version::parse("1.1.0").unwrap());
-- release = Version::parse("1.1.3747+hello").unwrap();
--
-- release.increment_major();
--
-- assert_eq!(release, Version::parse("2.0.0").unwrap());
-- }
--
-- #[test]
-- fn test_eq() {
-- assert_eq!(Version::parse("1.2.3"), Version::parse("1.2.3"));
-- assert_eq!(Version::parse("1.2.3-alpha1"),
-- Version::parse("1.2.3-alpha1"));
-- assert_eq!(Version::parse("1.2.3+build.42"),
-- Version::parse("1.2.3+build.42"));
-- assert_eq!(Version::parse("1.2.3-alpha1+42"),
-- Version::parse("1.2.3-alpha1+42"));
-- assert_eq!(Version::parse("1.2.3+23"), Version::parse("1.2.3+42"));
-- }
--
-- #[test]
-- fn test_ne() {
-- assert!(Version::parse("0.0.0") != Version::parse("0.0.1"));
-- assert!(Version::parse("0.0.0") != Version::parse("0.1.0"));
-- assert!(Version::parse("0.0.0") != Version::parse("1.0.0"));
-- assert!(Version::parse("1.2.3-alpha") != Version::parse("1.2.3-beta"));
-- }
--
-- #[test]
-- fn test_show() {
-- assert_eq!(format!("{}", Version::parse("1.2.3").unwrap()),
-- "1.2.3".to_string());
-- assert_eq!(format!("{}", Version::parse("1.2.3-alpha1").unwrap()),
-- "1.2.3-alpha1".to_string());
-- assert_eq!(format!("{}", Version::parse("1.2.3+build.42").unwrap()),
-- "1.2.3+build.42".to_string());
-- assert_eq!(format!("{}", Version::parse("1.2.3-alpha1+42").unwrap()),
-- "1.2.3-alpha1+42".to_string());
-- }
--
-- #[test]
-- fn test_to_string() {
-- assert_eq!(Version::parse("1.2.3").unwrap().to_string(),
-- "1.2.3".to_string());
-- assert_eq!(Version::parse("1.2.3-alpha1").unwrap().to_string(),
-- "1.2.3-alpha1".to_string());
-- assert_eq!(Version::parse("1.2.3+build.42").unwrap().to_string(),
-- "1.2.3+build.42".to_string());
-- assert_eq!(Version::parse("1.2.3-alpha1+42").unwrap().to_string(),
-- "1.2.3-alpha1+42".to_string());
-- }
--
-- #[test]
-- fn test_lt() {
-- assert!(Version::parse("0.0.0") < Version::parse("1.2.3-alpha2"));
-- assert!(Version::parse("1.0.0") < Version::parse("1.2.3-alpha2"));
-- assert!(Version::parse("1.2.0") < Version::parse("1.2.3-alpha2"));
-- assert!(Version::parse("1.2.3-alpha1") < Version::parse("1.2.3"));
-- assert!(Version::parse("1.2.3-alpha1") < Version::parse("1.2.3-alpha2"));
-- assert!(!(Version::parse("1.2.3-alpha2") < Version::parse("1.2.3-alpha2")));
-- assert!(!(Version::parse("1.2.3+23") < Version::parse("1.2.3+42")));
-- }
--
-- #[test]
-- fn test_le() {
-- assert!(Version::parse("0.0.0") <= Version::parse("1.2.3-alpha2"));
-- assert!(Version::parse("1.0.0") <= Version::parse("1.2.3-alpha2"));
-- assert!(Version::parse("1.2.0") <= Version::parse("1.2.3-alpha2"));
-- assert!(Version::parse("1.2.3-alpha1") <= Version::parse("1.2.3-alpha2"));
-- assert!(Version::parse("1.2.3-alpha2") <= Version::parse("1.2.3-alpha2"));
-- assert!(Version::parse("1.2.3+23") <= Version::parse("1.2.3+42"));
-- }
--
-- #[test]
-- fn test_gt() {
-- assert!(Version::parse("1.2.3-alpha2") > Version::parse("0.0.0"));
-- assert!(Version::parse("1.2.3-alpha2") > Version::parse("1.0.0"));
-- assert!(Version::parse("1.2.3-alpha2") > Version::parse("1.2.0"));
-- assert!(Version::parse("1.2.3-alpha2") > Version::parse("1.2.3-alpha1"));
-- assert!(Version::parse("1.2.3") > Version::parse("1.2.3-alpha2"));
-- assert!(!(Version::parse("1.2.3-alpha2") > Version::parse("1.2.3-alpha2")));
-- assert!(!(Version::parse("1.2.3+23") > Version::parse("1.2.3+42")));
-- }
--
-- #[test]
-- fn test_ge() {
-- assert!(Version::parse("1.2.3-alpha2") >= Version::parse("0.0.0"));
-- assert!(Version::parse("1.2.3-alpha2") >= Version::parse("1.0.0"));
-- assert!(Version::parse("1.2.3-alpha2") >= Version::parse("1.2.0"));
-- assert!(Version::parse("1.2.3-alpha2") >= Version::parse("1.2.3-alpha1"));
-- assert!(Version::parse("1.2.3-alpha2") >= Version::parse("1.2.3-alpha2"));
-- assert!(Version::parse("1.2.3+23") >= Version::parse("1.2.3+42"));
-- }
--
-- #[test]
-- fn test_prerelease_check() {
-- assert!(Version::parse("1.0.0").unwrap().is_prerelease() == false);
-- assert!(Version::parse("0.0.1").unwrap().is_prerelease() == false);
-- assert!(Version::parse("4.1.4-alpha").unwrap().is_prerelease());
-- assert!(Version::parse("1.0.0-beta294296").unwrap().is_prerelease());
-- }
--
-- #[test]
-- fn test_spec_order() {
-- let vs = ["1.0.0-alpha",
-- "1.0.0-alpha.1",
-- "1.0.0-alpha.beta",
-- "1.0.0-beta",
-- "1.0.0-beta.2",
-- "1.0.0-beta.11",
-- "1.0.0-rc.1",
-- "1.0.0"];
-- let mut i = 1;
-- while i < vs.len() {
-- let a = Version::parse(vs[i - 1]);
-- let b = Version::parse(vs[i]);
-- assert!(a < b, "nope {:?} < {:?}", a, b);
-- i += 1;
-- }
-- }
--
-- #[test]
-- fn test_from_str() {
-- assert_eq!("1.2.3".parse(),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: Vec::new(),
-- build: Vec::new(),
-- }));
-- assert_eq!(" 1.2.3 ".parse(),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: Vec::new(),
-- build: Vec::new(),
-- }));
-- assert_eq!("1.2.3-alpha1".parse(),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: vec![Identifier::AlphaNumeric(String::from("alpha1"))],
-- build: Vec::new(),
-- }));
-- assert_eq!(" 1.2.3-alpha1 ".parse(),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: vec![Identifier::AlphaNumeric(String::from("alpha1"))],
-- build: Vec::new(),
-- }));
-- assert_eq!("1.2.3+build5".parse(),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: Vec::new(),
-- build: vec![Identifier::AlphaNumeric(String::from("build5"))],
-- }));
-- assert_eq!(" 1.2.3+build5 ".parse(),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: Vec::new(),
-- build: vec![Identifier::AlphaNumeric(String::from("build5"))],
-- }));
-- assert_eq!("1.2.3-alpha1+build5".parse(),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: vec![Identifier::AlphaNumeric(String::from("alpha1"))],
-- build: vec![Identifier::AlphaNumeric(String::from("build5"))],
-- }));
-- assert_eq!(" 1.2.3-alpha1+build5 ".parse(),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: vec![Identifier::AlphaNumeric(String::from("alpha1"))],
-- build: vec![Identifier::AlphaNumeric(String::from("build5"))],
-- }));
-- assert_eq!("1.2.3-1.alpha1.9+build5.7.3aedf ".parse(),
-- Ok(Version {
-- major: 1,
-- minor: 2,
-- patch: 3,
-- pre: vec![Identifier::Numeric(1),
-- Identifier::AlphaNumeric(String::from("alpha1")),
-- Identifier::Numeric(9),
-- ],
-- build: vec![Identifier::AlphaNumeric(String::from("build5")),
-- Identifier::Numeric(7),
-- Identifier::AlphaNumeric(String::from("3aedf")),
-- ],
-- }));
-- assert_eq!("0.4.0-beta.1+0851523".parse(),
-- Ok(Version {
-- major: 0,
-- minor: 4,
-- patch: 0,
-- pre: vec![Identifier::AlphaNumeric(String::from("beta")),
-- Identifier::Numeric(1),
-- ],
-- build: vec![Identifier::AlphaNumeric(String::from("0851523"))],
-- }));
--
-- }
--
-- #[test]
-- fn test_from_str_errors() {
-- fn parse_error(e: &str) -> result::Result<Version, SemVerError> {
-- return Err(SemVerError::ParseError(e.to_string()));
-- }
--
-- assert_eq!("".parse(), parse_error("Error parsing major identifier"));
-- assert_eq!(" ".parse(), parse_error("Error parsing major identifier"));
-- assert_eq!("1".parse(), parse_error("Expected dot"));
-- assert_eq!("1.2".parse(),
-- parse_error("Expected dot"));
-- assert_eq!("1.2.3-".parse(),
-- parse_error("Error parsing prerelease"));
-- assert_eq!("a.b.c".parse(),
-- parse_error("Error parsing major identifier"));
-- assert_eq!("1.2.3 abc".parse(),
-- parse_error("Extra junk after valid version: abc"));
-- }
--}
-diff --git a/third_party/rust/semver/src/version_req.rs b/third_party/rust/semver/src/version_req.rs
-deleted file mode 100644
---- a/third_party/rust/semver/src/version_req.rs
-+++ /dev/null
-@@ -1,895 +0,0 @@
--// Copyright 2012-2013 The Rust Project Developers. See the COPYRIGHT
--// file at the top-level directory of this distribution and at
--// http://rust-lang.org/COPYRIGHT.
--//
--// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
--// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
--// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
--// option. This file may not be copied, modified, or distributed
--// except according to those terms.
--
--use std::error::Error;
--use std::fmt;
--use std::result;
--use std::str;
--
--use Version;
--use version::Identifier;
--use semver_parser;
--
--#[cfg(feature = "serde")]
--use serde::ser::{Serialize, Serializer};
--#[cfg(feature = "serde")]
--use serde::de::{self, Deserialize, Deserializer, Visitor};
--
--use self::Op::{Ex, Gt, GtEq, Lt, LtEq, Tilde, Compatible, Wildcard};
--use self::WildcardVersion::{Major, Minor, Patch};
--use self::ReqParseError::*;
--
--/// A `VersionReq` is a struct containing a list of predicates that can apply to ranges of version
--/// numbers. Matching operations can then be done with the `VersionReq` against a particular
--/// version to see if it satisfies some or all of the constraints.
--#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
--pub struct VersionReq {
-- predicates: Vec<Predicate>,
--}
--
--impl From<semver_parser::range::VersionReq> for VersionReq {
-- fn from(other: semver_parser::range::VersionReq) -> VersionReq {
-- VersionReq { predicates: other.predicates.into_iter().map(From::from).collect() }
-- }
--}
--
--#[cfg(feature = "serde")]
--impl Serialize for VersionReq {
-- fn serialize<S>(&self, serializer: S) -> result::Result<S::Ok, S::Error>
-- where S: Serializer
-- {
-- // Serialize VersionReq as a string.
-- serializer.collect_str(self)
-- }
--}
--
--#[cfg(feature = "serde")]
--impl<'de> Deserialize<'de> for VersionReq {
-- fn deserialize<D>(deserializer: D) -> result::Result<Self, D::Error>
-- where D: Deserializer<'de>
-- {
-- struct VersionReqVisitor;
--
-- /// Deserialize `VersionReq` from a string.
-- impl<'de> Visitor<'de> for VersionReqVisitor {
-- type Value = VersionReq;
--
-- fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-- formatter.write_str("a SemVer version requirement as a string")
-- }
--
-- fn visit_str<E>(self, v: &str) -> result::Result<Self::Value, E>
-- where E: de::Error
-- {
-- VersionReq::parse(v).map_err(de::Error::custom)
-- }
-- }
--
-- deserializer.deserialize_str(VersionReqVisitor)
-- }
--}
--
--#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
--enum WildcardVersion {
-- Major,
-- Minor,
-- Patch,
--}
--
--#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
--enum Op {
-- Ex, // Exact
-- Gt, // Greater than
-- GtEq, // Greater than or equal to
-- Lt, // Less than
-- LtEq, // Less than or equal to
-- Tilde, // e.g. ~1.0.0
-- Compatible, // compatible by definition of semver, indicated by ^
-- Wildcard(WildcardVersion), // x.y.*, x.*, *
--}
--
--impl From<semver_parser::range::Op> for Op {
-- fn from(other: semver_parser::range::Op) -> Op {
-- use semver_parser::range;
-- match other {
-- range::Op::Ex => Op::Ex,
-- range::Op::Gt => Op::Gt,
-- range::Op::GtEq => Op::GtEq,
-- range::Op::Lt => Op::Lt,
-- range::Op::LtEq => Op::LtEq,
-- range::Op::Tilde => Op::Tilde,
-- range::Op::Compatible => Op::Compatible,
-- range::Op::Wildcard(version) => {
-- match version {
-- range::WildcardVersion::Major => Op::Wildcard(WildcardVersion::Major),
-- range::WildcardVersion::Minor => Op::Wildcard(WildcardVersion::Minor),
-- range::WildcardVersion::Patch => Op::Wildcard(WildcardVersion::Patch),
-- }
-- }
-- }
-- }
--}
--
--#[derive(Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Debug)]
--struct Predicate {
-- op: Op,
-- major: u64,
-- minor: Option<u64>,
-- patch: Option<u64>,
-- pre: Vec<Identifier>,
--}
--
--impl From<semver_parser::range::Predicate> for Predicate {
-- fn from(other: semver_parser::range::Predicate) -> Predicate {
-- Predicate {
-- op: From::from(other.op),
-- major: other.major,
-- minor: other.minor,
-- patch: other.patch,
-- pre: other.pre.into_iter().map(From::from).collect(),
-- }
-- }
--}
--
--/// A `ReqParseError` is returned from methods which parse a string into a `VersionReq`. Each
--/// enumeration is one of the possible errors that can occur.
--#[derive(Clone, Debug, PartialEq)]
--pub enum ReqParseError {
-- /// The given version requirement is invalid.
-- InvalidVersionRequirement,
-- /// You have already provided an operation, such as `=`, `~`, or `^`. Only use one.
-- OpAlreadySet,
-- /// The sigil you have written is not correct.
-- InvalidSigil,
-- /// All components of a version must be numeric.
-- VersionComponentsMustBeNumeric,
-- /// There was an error parsing an identifier.
-- InvalidIdentifier,
-- /// At least a major version is required.
-- MajorVersionRequired,
-- /// An unimplemented version requirement.
-- UnimplementedVersionRequirement,
-- /// This form of requirement is deprecated.
-- DeprecatedVersionRequirement(VersionReq),
--}
--
--impl fmt::Display for ReqParseError {
-- fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
-- self.description().fmt(f)
-- }
--}
--
--impl Error for ReqParseError {
-- fn description(&self) -> &str {
-- match self {
-- &InvalidVersionRequirement => "the given version requirement is invalid",
-- &OpAlreadySet => {
-- "you have already provided an operation, such as =, ~, or ^; only use one"
-- },
-- &InvalidSigil => "the sigil you have written is not correct",
-- &VersionComponentsMustBeNumeric => "version components must be numeric",
-- &InvalidIdentifier => "invalid identifier",
-- &MajorVersionRequired => "at least a major version number is required",
-- &UnimplementedVersionRequirement => {
-- "the given version requirement is not implemented, yet"
-- },
-- &DeprecatedVersionRequirement(_) => "This requirement is deprecated",
-- }
-- }
--}
--
--impl From<String> for ReqParseError {
-- fn from(other: String) -> ReqParseError {
-- match &*other {
-- "Null is not a valid VersionReq" => ReqParseError::InvalidVersionRequirement,
-- "VersionReq did not parse properly." => ReqParseError::OpAlreadySet,
-- _ => ReqParseError::InvalidVersionRequirement,
-- }
-- }
--}
--
--impl VersionReq {
-- /// `any()` is a factory method which creates a `VersionReq` with no constraints. In other
-- /// words, any version will match against it.
-- ///
-- /// # Examples
-- ///
-- /// ```
-- /// use semver::VersionReq;
-- ///
-- /// let anything = VersionReq::any();
-- /// ```
-- pub fn any() -> VersionReq {
-- VersionReq { predicates: vec![] }
-- }
--
-- /// `parse()` is the main constructor of a `VersionReq`. It takes a string like `"^1.2.3"`
-- /// and turns it into a `VersionReq` that matches that particular constraint.
-- ///
-- /// A `Result` is returned which contains a `ReqParseError` if there was a problem parsing the
-- /// `VersionReq`.
-- ///
-- /// # Examples
-- ///
-- /// ```
-- /// use semver::VersionReq;
-- ///
-- /// let version = VersionReq::parse("=1.2.3");
-- /// let version = VersionReq::parse(">1.2.3");
-- /// let version = VersionReq::parse("<1.2.3");
-- /// let version = VersionReq::parse("~1.2.3");
-- /// let version = VersionReq::parse("^1.2.3");
-- /// let version = VersionReq::parse("1.2.3"); // synonym for ^1.2.3
-- /// let version = VersionReq::parse("<=1.2.3");
-- /// let version = VersionReq::parse(">=1.2.3");
-- /// ```
-- ///
-- /// This example demonstrates error handling, and will panic.
-- ///
-- /// ```should-panic
-- /// use semver::VersionReq;
-- ///
-- /// let version = match VersionReq::parse("not a version") {
-- /// Ok(version) => version,
-- /// Err(e) => panic!("There was a problem parsing: {}", e),
-- /// }
-- /// ```
-- pub fn parse(input: &str) -> Result<VersionReq, ReqParseError> {
-- let res = semver_parser::range::parse(input);
--
-- if let Ok(v) = res {
-- return Ok(From::from(v));
-- }
--
-- return match VersionReq::parse_deprecated(input) {
-- Some(v) => {
-- Err(ReqParseError::DeprecatedVersionRequirement(v))
-- }
-- None => Err(From::from(res.err().unwrap())),
-- }
-- }
--
-- fn parse_deprecated(version: &str) -> Option<VersionReq> {
-- return match version {
-- ".*" => Some(VersionReq::any()),
-- "0.1.0." => Some(VersionReq::parse("0.1.0").unwrap()),
-- "0.3.1.3" => Some(VersionReq::parse("0.3.13").unwrap()),
-- "0.2*" => Some(VersionReq::parse("0.2.*").unwrap()),
-- "*.0" => Some(VersionReq::any()),
-- _ => None,
-- }
-- }
--
-- /// `exact()` is a factory method which creates a `VersionReq` with one exact constraint.
-- ///
-- /// # Examples
-- ///
-- /// ```
-- /// use semver::VersionReq;
-- /// use semver::Version;
-- ///
-- /// let version = Version { major: 1, minor: 1, patch: 1, pre: vec![], build: vec![] };
-- /// let exact = VersionReq::exact(&version);
-- /// ```
-- pub fn exact(version: &Version) -> VersionReq {
-- VersionReq { predicates: vec![Predicate::exact(version)] }
-- }
--
-- /// `matches()` matches a given `Version` against this `VersionReq`.
-- ///
-- /// # Examples
-- ///
-- /// ```
-- /// use semver::VersionReq;
-- /// use semver::Version;
-- ///
-- /// let version = Version { major: 1, minor: 1, patch: 1, pre: vec![], build: vec![] };
-- /// let exact = VersionReq::exact(&version);
-- ///
-- /// assert!(exact.matches(&version));
-- /// ```
-- pub fn matches(&self, version: &Version) -> bool {
-- // no predicates means anything matches
-- if self.predicates.is_empty() {
-- return true;
-- }
--
-- self.predicates.iter().all(|p| p.matches(version)) &&
-- self.predicates.iter().any(|p| p.pre_tag_is_compatible(version))
-- }
--}
--
--impl str::FromStr for VersionReq {
-- type Err = ReqParseError;
--
-- fn from_str(s: &str) -> Result<VersionReq, ReqParseError> {
-- VersionReq::parse(s)
-- }
--}
--
--impl Predicate {
-- fn exact(version: &Version) -> Predicate {
-- Predicate {
-- op: Ex,
-- major: version.major,
-- minor: Some(version.minor),
-- patch: Some(version.patch),
-- pre: version.pre.clone(),
-- }
-- }
--
-- /// `matches()` takes a `Version` and determines if it matches this particular `Predicate`.
-- pub fn matches(&self, ver: &Version) -> bool {
-- match self.op {
-- Ex => self.is_exact(ver),
-- Gt => self.is_greater(ver),
-- GtEq => self.is_exact(ver) || self.is_greater(ver),
-- Lt => !self.is_exact(ver) && !self.is_greater(ver),
-- LtEq => !self.is_greater(ver),
-- Tilde => self.matches_tilde(ver),
-- Compatible => self.is_compatible(ver),
-- Wildcard(_) => self.matches_wildcard(ver),
-- }
-- }
--
-- fn is_exact(&self, ver: &Version) -> bool {
-- if self.major != ver.major {
-- return false;
-- }
--
-- match self.minor {
-- Some(minor) => {
-- if minor != ver.minor {
-- return false;
-- }
-- }
-- None => return true,
-- }
--
-- match self.patch {
-- Some(patch) => {
-- if patch != ver.patch {
-- return false;
-- }
-- }
-- None => return true,
-- }
--
-- if self.pre != ver.pre {
-- return false;
-- }
--
-- true
-- }
--
-- // https://docs.npmjs.com/misc/semver#prerelease-tags
-- fn pre_tag_is_compatible(&self, ver: &Version) -> bool {
-- // If a version has a prerelease tag (for example, 1.2.3-alpha.3) then it will
-- // only be
-- // allowed to satisfy comparator sets if at least one comparator with the same
-- // [major,
-- // minor, patch] tuple also has a prerelease tag.
-- !ver.is_prerelease() ||
-- (self.major == ver.major && self.minor == Some(ver.minor) &&
-- self.patch == Some(ver.patch) && !self.pre.is_empty())
-- }
--
-- fn is_greater(&self, ver: &Version) -> bool {
-- if self.major != ver.major {
-- return ver.major > self.major;
-- }
--
-- match self.minor {
-- Some(minor) => {
-- if minor != ver.minor {
-- return ver.minor > minor;
-- }
-- }
-- None => return false,
-- }
--
-- match self.patch {
-- Some(patch) => {
-- if patch != ver.patch {
-- return ver.patch > patch;
-- }
-- }
-- None => return false,
-- }
--
-- if !self.pre.is_empty() {
-- return ver.pre.is_empty() || ver.pre > self.pre;
-- }
--
-- false
-- }
--
-- // see https://www.npmjs.org/doc/misc/semver.html for behavior
-- fn matches_tilde(&self, ver: &Version) -> bool {
-- let minor = match self.minor {
-- Some(n) => n,
-- None => return self.major == ver.major,
-- };
--
-- match self.patch {
-- Some(patch) => {
-- self.major == ver.major && minor == ver.minor &&
-- (ver.patch > patch || (ver.patch == patch && self.pre_is_compatible(ver)))
-- }
-- None => self.major == ver.major && minor == ver.minor,
-- }
-- }
--
-- // see https://www.npmjs.org/doc/misc/semver.html for behavior
-- fn is_compatible(&self, ver: &Version) -> bool {
-- if self.major != ver.major {
-- return false;
-- }
--
-- let minor = match self.minor {
-- Some(n) => n,
-- None => return self.major == ver.major,
-- };
--
-- match self.patch {
-- Some(patch) => {
-- if self.major == 0 {
-- if minor == 0 {
-- ver.minor == minor && ver.patch == patch && self.pre_is_compatible(ver)
-- } else {
-- ver.minor == minor &&
-- (ver.patch > patch || (ver.patch == patch && self.pre_is_compatible(ver)))
-- }
-- } else {
-- ver.minor > minor ||
-- (ver.minor == minor &&
-- (ver.patch > patch || (ver.patch == patch && self.pre_is_compatible(ver))))
-- }
-- }
-- None => {
-- if self.major == 0 {
-- ver.minor == minor
-- } else {
-- ver.minor >= minor
-- }
-- }
-- }
-- }
--
-- fn pre_is_compatible(&self, ver: &Version) -> bool {
-- ver.pre.is_empty() || ver.pre >= self.pre
-- }
--
-- // see https://www.npmjs.org/doc/misc/semver.html for behavior
-- fn matches_wildcard(&self, ver: &Version) -> bool {
-- match self.op {
-- Wildcard(Major) => true,
-- Wildcard(Minor) => self.major == ver.major,
-- Wildcard(Patch) => {
-- match self.minor {
-- Some(minor) => self.major == ver.major && minor == ver.minor,
-- None => {
-- // minor and patch version astericks mean match on major
-- self.major == ver.major
-- }
-- }
-- }
-- _ => false, // unreachable
-- }
-- }
--}
--
--impl fmt::Display for VersionReq {
-- fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
-- if self.predicates.is_empty() {
-- try!(write!(fmt, "*"));
-- } else {
-- for (i, ref pred) in self.predicates.iter().enumerate() {
-- if i == 0 {
-- try!(write!(fmt, "{}", pred));
-- } else {
-- try!(write!(fmt, ", {}", pred));
-- }
-- }
-- }
--
-- Ok(())
-- }
--}
--
--impl fmt::Display for Predicate {
-- fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
-- match self.op {
-- Wildcard(Major) => try!(write!(fmt, "*")),
-- Wildcard(Minor) => try!(write!(fmt, "{}.*", self.major)),
-- Wildcard(Patch) => {
-- if let Some(minor) = self.minor {
-- try!(write!(fmt, "{}.{}.*", self.major, minor))
-- } else {
-- try!(write!(fmt, "{}.*.*", self.major))
-- }
-- }
-- _ => {
-- try!(write!(fmt, "{}{}", self.op, self.major));
--
-- match self.minor {
-- Some(v) => try!(write!(fmt, ".{}", v)),
-- None => (),
-- }
--
-- match self.patch {
-- Some(v) => try!(write!(fmt, ".{}", v)),
-- None => (),
-- }
--
-- if !self.pre.is_empty() {
-- try!(write!(fmt, "-"));
-- for (i, x) in self.pre.iter().enumerate() {
-- if i != 0 {
-- try!(write!(fmt, "."))
-- }
-- try!(write!(fmt, "{}", x));
-- }
-- }
-- }
-- }
--
-- Ok(())
-- }
--}
--
--impl fmt::Display for Op {
-- fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result {
-- match *self {
-- Ex => try!(write!(fmt, "= ")),
-- Gt => try!(write!(fmt, "> ")),
-- GtEq => try!(write!(fmt, ">= ")),
-- Lt => try!(write!(fmt, "< ")),
-- LtEq => try!(write!(fmt, "<= ")),
-- Tilde => try!(write!(fmt, "~")),
-- Compatible => try!(write!(fmt, "^")),
-- // gets handled specially in Predicate::fmt
-- Wildcard(_) => try!(write!(fmt, "")),
-- }
-- Ok(())
-- }
--}
--
--#[cfg(test)]
--mod test {
-- use super::{VersionReq, Op};
-- use super::super::version::Version;
-- use std::hash::{Hash, Hasher};
--
-- fn req(s: &str) -> VersionReq {
-- VersionReq::parse(s).unwrap()
-- }
--
-- fn version(s: &str) -> Version {
-- match Version::parse(s) {
-- Ok(v) => v,
-- Err(e) => panic!("`{}` is not a valid version. Reason: {:?}", s, e),
-- }
-- }
--
-- fn assert_match(req: &VersionReq, vers: &[&str]) {
-- for ver in vers.iter() {
-- assert!(req.matches(&version(*ver)), "did not match {}", ver);
-- }
-- }
--
-- fn assert_not_match(req: &VersionReq, vers: &[&str]) {
-- for ver in vers.iter() {
-- assert!(!req.matches(&version(*ver)), "matched {}", ver);
-- }
-- }
--
-- fn calculate_hash<T: Hash>(t: T) -> u64 {
-- use std::collections::hash_map::DefaultHasher;
--
-- let mut s = DefaultHasher::new();
-- t.hash(&mut s);
-- s.finish()
-- }
--
-- #[test]
-- fn test_parsing_default() {
-- let r = req("1.0.0");
--
-- assert_eq!(r.to_string(), "^1.0.0".to_string());
--
-- assert_match(&r, &["1.0.0", "1.0.1"]);
-- assert_not_match(&r, &["0.9.9", "0.10.0", "0.1.0"]);
-- }
--
-- #[test]
-- fn test_parsing_exact() {
-- let r = req("=1.0.0");
--
-- assert!(r.to_string() == "= 1.0.0".to_string());
-- assert_eq!(r.to_string(), "= 1.0.0".to_string());
--
-- assert_match(&r, &["1.0.0"]);
-- assert_not_match(&r, &["1.0.1", "0.9.9", "0.10.0", "0.1.0", "1.0.0-pre"]);
--
-- let r = req("=0.9.0");
--
-- assert_eq!(r.to_string(), "= 0.9.0".to_string());
--
-- assert_match(&r, &["0.9.0"]);
-- assert_not_match(&r, &["0.9.1", "1.9.0", "0.0.9"]);
--
-- let r = req("=0.1.0-beta2.a");
--
-- assert_eq!(r.to_string(), "= 0.1.0-beta2.a".to_string());
--
-- assert_match(&r, &["0.1.0-beta2.a"]);
-- assert_not_match(&r, &["0.9.1", "0.1.0", "0.1.1-beta2.a", "0.1.0-beta2"]);
-- }
--
-- #[test]
-- fn test_parse_metadata_see_issue_88_see_issue_88() {
-- for op in &[Op::Compatible, Op::Ex, Op::Gt, Op::GtEq, Op::Lt, Op::LtEq, Op::Tilde] {
-- req(&format!("{} 1.2.3+meta", op));
-- }
-- }
--
-- #[test]
-- pub fn test_parsing_greater_than() {
-- let r = req(">= 1.0.0");
--
-- assert_eq!(r.to_string(), ">= 1.0.0".to_string());
--
-- assert_match(&r, &["1.0.0", "2.0.0"]);
-- assert_not_match(&r, &["0.1.0", "0.0.1", "1.0.0-pre", "2.0.0-pre"]);
--
-- let r = req(">= 2.1.0-alpha2");
--
-- assert_match(&r, &["2.1.0-alpha2", "2.1.0-alpha3", "2.1.0", "3.0.0"]);
-- assert_not_match(&r,
-- &["2.0.0", "2.1.0-alpha1", "2.0.0-alpha2", "3.0.0-alpha2"]);
-- }
--
-- #[test]
-- pub fn test_parsing_less_than() {
-- let r = req("< 1.0.0");
--
-- assert_eq!(r.to_string(), "< 1.0.0".to_string());
--
-- assert_match(&r, &["0.1.0", "0.0.1"]);
-- assert_not_match(&r, &["1.0.0", "1.0.0-beta", "1.0.1", "0.9.9-alpha"]);
--
-- let r = req("<= 2.1.0-alpha2");
--
-- assert_match(&r, &["2.1.0-alpha2", "2.1.0-alpha1", "2.0.0", "1.0.0"]);
-- assert_not_match(&r,
-- &["2.1.0", "2.2.0-alpha1", "2.0.0-alpha2", "1.0.0-alpha2"]);
-- }
--
-- #[test]
-- pub fn test_multiple() {
-- let r = req("> 0.0.9, <= 2.5.3");
-- assert_eq!(r.to_string(), "> 0.0.9, <= 2.5.3".to_string());
-- assert_match(&r, &["0.0.10", "1.0.0", "2.5.3"]);
-- assert_not_match(&r, &["0.0.8", "2.5.4"]);
--
-- let r = req("0.3.0, 0.4.0");
-- assert_eq!(r.to_string(), "^0.3.0, ^0.4.0".to_string());
-- assert_not_match(&r, &["0.0.8", "0.3.0", "0.4.0"]);
--
-- let r = req("<= 0.2.0, >= 0.5.0");
-- assert_eq!(r.to_string(), "<= 0.2.0, >= 0.5.0".to_string());
-- assert_not_match(&r, &["0.0.8", "0.3.0", "0.5.1"]);
--
-- let r = req("0.1.0, 0.1.4, 0.1.6");
-- assert_eq!(r.to_string(), "^0.1.0, ^0.1.4, ^0.1.6".to_string());
-- assert_match(&r, &["0.1.6", "0.1.9"]);
-- assert_not_match(&r, &["0.1.0", "0.1.4", "0.2.0"]);
--
-- assert!(VersionReq::parse("> 0.1.0,").is_err());
-- assert!(VersionReq::parse("> 0.3.0, ,").is_err());
--
-- let r = req(">=0.5.1-alpha3, <0.6");
-- assert_eq!(r.to_string(), ">= 0.5.1-alpha3, < 0.6".to_string());
-- assert_match(&r,
-- &["0.5.1-alpha3", "0.5.1-alpha4", "0.5.1-beta", "0.5.1", "0.5.5"]);
-- assert_not_match(&r,
-- &["0.5.1-alpha1", "0.5.2-alpha3", "0.5.5-pre", "0.5.0-pre"]);
-- assert_not_match(&r, &["0.6.0", "0.6.0-pre"]);
-- }
--
-- #[test]
-- pub fn test_parsing_tilde() {
-- let r = req("~1");
-- assert_match(&r, &["1.0.0", "1.0.1", "1.1.1"]);
-- assert_not_match(&r, &["0.9.1", "2.9.0", "0.0.9"]);
--
-- let r = req("~1.2");
-- assert_match(&r, &["1.2.0", "1.2.1"]);
-- assert_not_match(&r, &["1.1.1", "1.3.0", "0.0.9"]);
--
-- let r = req("~1.2.2");
-- assert_match(&r, &["1.2.2", "1.2.4"]);
-- assert_not_match(&r, &["1.2.1", "1.9.0", "1.0.9", "2.0.1", "0.1.3"]);
--
-- let r = req("~1.2.3-beta.2");
-- assert_match(&r, &["1.2.3", "1.2.4", "1.2.3-beta.2", "1.2.3-beta.4"]);
-- assert_not_match(&r, &["1.3.3", "1.1.4", "1.2.3-beta.1", "1.2.4-beta.2"]);
-- }
--
-- #[test]
-- pub fn test_parsing_compatible() {
-- let r = req("^1");
-- assert_match(&r, &["1.1.2", "1.1.0", "1.2.1", "1.0.1"]);
-- assert_not_match(&r, &["0.9.1", "2.9.0", "0.1.4"]);
-- assert_not_match(&r, &["1.0.0-beta1", "0.1.0-alpha", "1.0.1-pre"]);
--
-- let r = req("^1.1");
-- assert_match(&r, &["1.1.2", "1.1.0", "1.2.1"]);
-- assert_not_match(&r, &["0.9.1", "2.9.0", "1.0.1", "0.1.4"]);
--
-- let r = req("^1.1.2");
-- assert_match(&r, &["1.1.2", "1.1.4", "1.2.1"]);
-- assert_not_match(&r, &["0.9.1", "2.9.0", "1.1.1", "0.0.1"]);
-- assert_not_match(&r, &["1.1.2-alpha1", "1.1.3-alpha1", "2.9.0-alpha1"]);
--
-- let r = req("^0.1.2");
-- assert_match(&r, &["0.1.2", "0.1.4"]);
-- assert_not_match(&r, &["0.9.1", "2.9.0", "1.1.1", "0.0.1"]);
-- assert_not_match(&r, &["0.1.2-beta", "0.1.3-alpha", "0.2.0-pre"]);
--
-- let r = req("^0.5.1-alpha3");
-- assert_match(&r,
-- &["0.5.1-alpha3", "0.5.1-alpha4", "0.5.1-beta", "0.5.1", "0.5.5"]);
-- assert_not_match(&r,
-- &["0.5.1-alpha1", "0.5.2-alpha3", "0.5.5-pre", "0.5.0-pre", "0.6.0"]);
--
-- let r = req("^0.0.2");
-- assert_match(&r, &["0.0.2"]);
-- assert_not_match(&r, &["0.9.1", "2.9.0", "1.1.1", "0.0.1", "0.1.4"]);
--
-- let r = req("^0.0");
-- assert_match(&r, &["0.0.2", "0.0.0"]);
-- assert_not_match(&r, &["0.9.1", "2.9.0", "1.1.1", "0.1.4"]);
--
-- let r = req("^0");
-- assert_match(&r, &["0.9.1", "0.0.2", "0.0.0"]);
-- assert_not_match(&r, &["2.9.0", "1.1.1"]);
--
-- let r = req("^1.4.2-beta.5");
-- assert_match(&r,
-- &["1.4.2", "1.4.3", "1.4.2-beta.5", "1.4.2-beta.6", "1.4.2-c"]);
-- assert_not_match(&r,
-- &["0.9.9", "2.0.0", "1.4.2-alpha", "1.4.2-beta.4", "1.4.3-beta.5"]);
-- }
--
-- #[test]
-- pub fn test_parsing_wildcard() {
-- let r = req("");
-- assert_match(&r, &["0.9.1", "2.9.0", "0.0.9", "1.0.1", "1.1.1"]);
-- assert_not_match(&r, &[]);
-- let r = req("*");
-- assert_match(&r, &["0.9.1", "2.9.0", "0.0.9", "1.0.1", "1.1.1"]);
-- assert_not_match(&r, &[]);
-- let r = req("x");
-- assert_match(&r, &["0.9.1", "2.9.0", "0.0.9", "1.0.1", "1.1.1"]);
-- assert_not_match(&r, &[]);
-- let r = req("X");
-- assert_match(&r, &["0.9.1", "2.9.0", "0.0.9", "1.0.1", "1.1.1"]);
-- assert_not_match(&r, &[]);
--
-- let r = req("1.*");
-- assert_match(&r, &["1.2.0", "1.2.1", "1.1.1", "1.3.0"]);
-- assert_not_match(&r, &["0.0.9"]);
-- let r = req("1.x");
-- assert_match(&r, &["1.2.0", "1.2.1", "1.1.1", "1.3.0"]);
-- assert_not_match(&r, &["0.0.9"]);
-- let r = req("1.X");
-- assert_match(&r, &["1.2.0", "1.2.1", "1.1.1", "1.3.0"]);
-- assert_not_match(&r, &["0.0.9"]);
--
-- let r = req("1.2.*");
-- assert_match(&r, &["1.2.0", "1.2.2", "1.2.4"]);
-- assert_not_match(&r, &["1.9.0", "1.0.9", "2.0.1", "0.1.3"]);
-- let r = req("1.2.x");
-- assert_match(&r, &["1.2.0", "1.2.2", "1.2.4"]);
-- assert_not_match(&r, &["1.9.0", "1.0.9", "2.0.1", "0.1.3"]);
-- let r = req("1.2.X");
-- assert_match(&r, &["1.2.0", "1.2.2", "1.2.4"]);
-- assert_not_match(&r, &["1.9.0", "1.0.9", "2.0.1", "0.1.3"]);
-- }
--
-- #[test]
-- pub fn test_any() {
-- let r = VersionReq::any();
-- assert_match(&r, &["0.0.1", "0.1.0", "1.0.0"]);
-- }
--
-- #[test]
-- pub fn test_pre() {
-- let r = req("=2.1.1-really.0");
-- assert_match(&r, &["2.1.1-really.0"]);
-- }
--
-- // #[test]
-- // pub fn test_parse_errors() {
-- // assert_eq!(Err(InvalidVersionRequirement), VersionReq::parse("\0"));
-- // assert_eq!(Err(OpAlreadySet), VersionReq::parse(">= >= 0.0.2"));
-- // assert_eq!(Err(InvalidSigil), VersionReq::parse(">== 0.0.2"));
-- // assert_eq!(Err(VersionComponentsMustBeNumeric),
-- // VersionReq::parse("a.0.0"));
-- // assert_eq!(Err(InvalidIdentifier), VersionReq::parse("1.0.0-"));
-- // assert_eq!(Err(MajorVersionRequired), VersionReq::parse(">="));
-- // }
--
-- #[test]
-- pub fn test_from_str() {
-- assert_eq!("1.0.0".parse::<VersionReq>().unwrap().to_string(),
-- "^1.0.0".to_string());
-- assert_eq!("=1.0.0".parse::<VersionReq>().unwrap().to_string(),
-- "= 1.0.0".to_string());
-- assert_eq!("~1".parse::<VersionReq>().unwrap().to_string(),
-- "~1".to_string());
-- assert_eq!("~1.2".parse::<VersionReq>().unwrap().to_string(),
-- "~1.2".to_string());
-- assert_eq!("^1".parse::<VersionReq>().unwrap().to_string(),
-- "^1".to_string());
-- assert_eq!("^1.1".parse::<VersionReq>().unwrap().to_string(),
-- "^1.1".to_string());
-- assert_eq!("*".parse::<VersionReq>().unwrap().to_string(),
-- "*".to_string());
-- assert_eq!("1.*".parse::<VersionReq>().unwrap().to_string(),
-- "1.*".to_string());
-- assert_eq!("< 1.0.0".parse::<VersionReq>().unwrap().to_string(),
-- "< 1.0.0".to_string());
-- }
--
-- // #[test]
-- // pub fn test_from_str_errors() {
-- // assert_eq!(Err(InvalidVersionRequirement), "\0".parse::<VersionReq>());
-- // assert_eq!(Err(OpAlreadySet), ">= >= 0.0.2".parse::<VersionReq>());
-- // assert_eq!(Err(InvalidSigil), ">== 0.0.2".parse::<VersionReq>());
-- // assert_eq!(Err(VersionComponentsMustBeNumeric),
-- // "a.0.0".parse::<VersionReq>());
-- // assert_eq!(Err(InvalidIdentifier), "1.0.0-".parse::<VersionReq>());
-- // assert_eq!(Err(MajorVersionRequired), ">=".parse::<VersionReq>());
-- // }
--
-- #[test]
-- fn test_cargo3202() {
-- let v = "0.*.*".parse::<VersionReq>().unwrap();
-- assert_eq!("0.*.*", format!("{}", v.predicates[0]));
--
-- let v = "0.0.*".parse::<VersionReq>().unwrap();
-- assert_eq!("0.0.*", format!("{}", v.predicates[0]));
--
-- let r = req("0.*.*");
-- assert_match(&r, &["0.5.0"]);
-- }
--
-- #[test]
-- fn test_eq_hash() {
-- assert!(req("^1") == req("^1"));
-- assert!(calculate_hash(req("^1")) == calculate_hash(req("^1")));
-- assert!(req("^1") != req("^2"));
-- }
--
-- #[test]
-- fn test_ordering() {
-- assert!(req("=1") < req("*"));
-- assert!(req(">1") < req("*"));
-- assert!(req(">=1") < req("*"));
-- assert!(req("<1") < req("*"));
-- assert!(req("<=1") < req("*"));
-- assert!(req("~1") < req("*"));
-- assert!(req("^1") < req("*"));
-- assert!(req("*") == req("*"));
-- }
--}
-diff --git a/third_party/rust/semver/tests/deprecation.rs b/third_party/rust/semver/tests/deprecation.rs
-deleted file mode 100644
---- a/third_party/rust/semver/tests/deprecation.rs
-+++ /dev/null
-@@ -1,22 +0,0 @@
--extern crate semver;
--
--#[test]
--fn test_regressions() {
-- use semver::VersionReq;
-- use semver::ReqParseError;
--
-- let versions = vec![
-- (".*", VersionReq::any()),
-- ("0.1.0.", VersionReq::parse("0.1.0").unwrap()),
-- ("0.3.1.3", VersionReq::parse("0.3.13").unwrap()),
-- ("0.2*", VersionReq::parse("0.2.*").unwrap()),
-- ("*.0", VersionReq::any()),
-- ];
--
-- for (version, requirement) in versions.into_iter() {
-- let parsed = VersionReq::parse(version);
-- let error = parsed.err().unwrap();
--
-- assert_eq!(ReqParseError::DeprecatedVersionRequirement(requirement), error);
-- }
--}
-diff --git a/third_party/rust/semver/tests/node/mod.rs b/third_party/rust/semver/tests/node/mod.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/semver/tests/node/mod.rs
-@@ -0,0 +1,43 @@
-+#![cfg(test_node_semver)]
-+
-+use semver::Version;
-+use std::fmt::{self, Display};
-+use std::process::Command;
-+
-+#[derive(Default, Eq, PartialEq, Hash, Debug)]
-+pub(super) struct VersionReq(semver::VersionReq);
-+
-+impl VersionReq {
-+ pub(super) const STAR: Self = VersionReq(semver::VersionReq::STAR);
-+
-+ pub(super) fn matches(&self, version: &Version) -> bool {
-+ let out = Command::new("node")
-+ .arg("-e")
-+ .arg(format!(
-+ "console.log(require('semver').satisfies('{}', '{}'))",
-+ version,
-+ self.to_string().replace(',', ""),
-+ ))
-+ .output()
-+ .unwrap();
-+ if out.stdout == b"true\n" {
-+ true
-+ } else if out.stdout == b"false\n" {
-+ false
-+ } else {
-+ let s = String::from_utf8_lossy(&out.stdout) + String::from_utf8_lossy(&out.stderr);
-+ panic!("unexpected output: {}", s);
-+ }
-+ }
-+}
-+
-+impl Display for VersionReq {
-+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
-+ Display::fmt(&self.0, formatter)
-+ }
-+}
-+
-+#[cfg_attr(not(no_track_caller), track_caller)]
-+pub(super) fn req(text: &str) -> VersionReq {
-+ VersionReq(crate::util::req(text))
-+}
-diff --git a/third_party/rust/semver/tests/regression.rs b/third_party/rust/semver/tests/regression.rs
-deleted file mode 100644
---- a/third_party/rust/semver/tests/regression.rs
-+++ /dev/null
-@@ -1,25 +0,0 @@
--extern crate semver;
--extern crate crates_index;
--extern crate tempdir;
--
--// This test checks to see if every existing crate parses successfully. Important to not break the
--// Rust universe!
--
--#[cfg(feature = "ci")]
--#[test]
--fn test_regressions() {
-- use tempdir::TempDir;
-- use crates_index::Index;
-- use semver::Version;
--
-- let dir = TempDir::new("semver").unwrap();
-- let index = Index::new(dir.into_path());
-- index.clone().unwrap();
--
-- for krate in index.crates() {
-- for version in krate.versions() {
-- let v = version.version();
-- assert!(Version::parse(v).is_ok(), "failed: {} ({})", version.name(), v);
-- }
-- }
--}
-diff --git a/third_party/rust/semver/tests/serde.rs b/third_party/rust/semver/tests/serde.rs
-deleted file mode 100644
---- a/third_party/rust/semver/tests/serde.rs
-+++ /dev/null
-@@ -1,90 +0,0 @@
--#![cfg(feature = "serde")]
--
--#[macro_use]
--extern crate serde_derive;
--
--extern crate semver;
--extern crate serde_json;
--
--use semver::{Identifier, Version, VersionReq};
--
--#[derive(Serialize, Deserialize, PartialEq, Debug)]
--struct Identified {
-- name: String,
-- identifier: Identifier,
--}
--
--#[derive(Serialize, Deserialize, PartialEq, Debug)]
--struct Versioned {
-- name: String,
-- vers: Version,
--}
--
--#[test]
--fn serialize_identifier() {
-- let id = Identified {
-- name: "serde".to_owned(),
-- identifier: Identifier::Numeric(100),
-- };
-- let j = serde_json::to_string(&id).unwrap();
-- assert_eq!(j, r#"{"name":"serde","identifier":100}"#);
--
-- let id = Identified {
-- name: "serde".to_owned(),
-- identifier: Identifier::AlphaNumeric("b100".to_owned()),
-- };
-- let j = serde_json::to_string(&id).unwrap();
-- assert_eq!(j, r#"{"name":"serde","identifier":"b100"}"#);
--}
--
--#[test]
--fn deserialize_identifier() {
-- let j = r#"{"name":"serde","identifier":100}"#;
-- let id = serde_json::from_str::<Identified>(j).unwrap();
-- let expected = Identified {
-- name: "serde".to_owned(),
-- identifier: Identifier::Numeric(100),
-- };
-- assert_eq!(id, expected);
--
-- let j = r#"{"name":"serde","identifier":"b100"}"#;
-- let id = serde_json::from_str::<Identified>(j).unwrap();
-- let expected = Identified {
-- name: "serde".to_owned(),
-- identifier: Identifier::AlphaNumeric("b100".to_owned()),
-- };
-- assert_eq!(id, expected);
--}
--
--#[test]
--fn serialize_version() {
-- let v = Versioned {
-- name: "serde".to_owned(),
-- vers: Version::parse("1.0.0").unwrap(),
-- };
-- let j = serde_json::to_string(&v).unwrap();
-- assert_eq!(j, r#"{"name":"serde","vers":"1.0.0"}"#);
--}
--
--#[test]
--fn deserialize_version() {
-- let j = r#"{"name":"serde","vers":"1.0.0"}"#;
-- let v = serde_json::from_str::<Versioned>(j).unwrap();
-- let expected = Versioned {
-- name: "serde".to_owned(),
-- vers: Version::parse("1.0.0").unwrap(),
-- };
-- assert_eq!(v, expected);
--}
--
--#[test]
--fn serialize_versionreq() {
-- let v = VersionReq::exact(&Version::parse("1.0.0").unwrap());
--
-- assert_eq!(serde_json::to_string(&v).unwrap(), r#""= 1.0.0""#);
--}
--
--#[test]
--fn deserialize_versionreq() {
-- assert_eq!("1.0.0".parse::<VersionReq>().unwrap(), serde_json::from_str(r#""1.0.0""#).unwrap());
--}
-diff --git a/third_party/rust/semver/tests/test_autotrait.rs b/third_party/rust/semver/tests/test_autotrait.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/semver/tests/test_autotrait.rs
-@@ -0,0 +1,12 @@
-+fn assert_send_sync<T: Send + Sync>() {}
-+
-+#[test]
-+fn test() {
-+ assert_send_sync::<semver::BuildMetadata>();
-+ assert_send_sync::<semver::Comparator>();
-+ assert_send_sync::<semver::Error>();
-+ assert_send_sync::<semver::Prerelease>();
-+ assert_send_sync::<semver::Version>();
-+ assert_send_sync::<semver::VersionReq>();
-+ assert_send_sync::<semver::Op>();
-+}
-diff --git a/third_party/rust/semver/tests/test_identifier.rs b/third_party/rust/semver/tests/test_identifier.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/semver/tests/test_identifier.rs
-@@ -0,0 +1,45 @@
-+#![allow(
-+ clippy::eq_op,
-+ clippy::needless_pass_by_value,
-+ clippy::toplevel_ref_arg,
-+ clippy::wildcard_imports
-+)]
-+
-+mod util;
-+
-+use crate::util::*;
-+use semver::Prerelease;
-+
-+#[test]
-+fn test_new() {
-+ fn test(identifier: Prerelease, expected: &str) {
-+ assert_eq!(identifier.is_empty(), expected.is_empty());
-+ assert_eq!(identifier.len(), expected.len());
-+ assert_eq!(identifier.as_str(), expected);
-+ assert_eq!(identifier, identifier);
-+ assert_eq!(identifier, identifier.clone());
-+ }
-+
-+ let ref mut string = String::new();
-+ let limit = if cfg!(miri) { 40 } else { 280 }; // miri is slow
-+ for _ in 0..limit {
-+ test(prerelease(string), string);
-+ string.push('1');
-+ }
-+
-+ if !cfg!(miri) {
-+ let ref string = string.repeat(20000);
-+ test(prerelease(string), string);
-+ }
-+}
-+
-+#[test]
-+fn test_eq() {
-+ assert_eq!(prerelease("-"), prerelease("-"));
-+ assert_ne!(prerelease("a"), prerelease("aa"));
-+ assert_ne!(prerelease("aa"), prerelease("a"));
-+ assert_ne!(prerelease("aaaaaaaaa"), prerelease("a"));
-+ assert_ne!(prerelease("a"), prerelease("aaaaaaaaa"));
-+ assert_ne!(prerelease("aaaaaaaaa"), prerelease("bbbbbbbbb"));
-+ assert_ne!(build_metadata("1"), build_metadata("001"));
-+}
-diff --git a/third_party/rust/semver/tests/test_version.rs b/third_party/rust/semver/tests/test_version.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/semver/tests/test_version.rs
-@@ -0,0 +1,241 @@
-+#![allow(
-+ clippy::nonminimal_bool,
-+ clippy::too_many_lines,
-+ clippy::wildcard_imports
-+)]
-+
-+mod util;
-+
-+use crate::util::*;
-+use semver::{BuildMetadata, Prerelease, Version};
-+
-+#[test]
-+fn test_parse() {
-+ let err = version_err("");
-+ assert_to_string(
-+ err,
-+ "unexpected end of input while parsing major version number",
-+ );
-+
-+ let err = version_err(" ");
-+ assert_to_string(
-+ err,
-+ "unexpected character ' ' while parsing major version number",
-+ );
-+
-+ let err = version_err("1");
-+ assert_to_string(
-+ err,
-+ "unexpected end of input while parsing major version number",
-+ );
-+
-+ let err = version_err("1.2");
-+ assert_to_string(
-+ err,
-+ "unexpected end of input while parsing minor version number",
-+ );
-+
-+ let err = version_err("1.2.3-");
-+ assert_to_string(err, "empty identifier segment in pre-release identifier");
-+
-+ let err = version_err("a.b.c");
-+ assert_to_string(
-+ err,
-+ "unexpected character 'a' while parsing major version number",
-+ );
-+
-+ let err = version_err("1.2.3 abc");
-+ assert_to_string(err, "unexpected character ' ' after patch version number");
-+
-+ let err = version_err("1.2.3-01");
-+ assert_to_string(err, "invalid leading zero in pre-release identifier");
-+
-+ let parsed = version("1.2.3");
-+ let expected = Version::new(1, 2, 3);
-+ assert_eq!(parsed, expected);
-+ let expected = Version {
-+ major: 1,
-+ minor: 2,
-+ patch: 3,
-+ pre: Prerelease::EMPTY,
-+ build: BuildMetadata::EMPTY,
-+ };
-+ assert_eq!(parsed, expected);
-+
-+ let parsed = version("1.2.3-alpha1");
-+ let expected = Version {
-+ major: 1,
-+ minor: 2,
-+ patch: 3,
-+ pre: prerelease("alpha1"),
-+ build: BuildMetadata::EMPTY,
-+ };
-+ assert_eq!(parsed, expected);
-+
-+ let parsed = version("1.2.3+build5");
-+ let expected = Version {
-+ major: 1,
-+ minor: 2,
-+ patch: 3,
-+ pre: Prerelease::EMPTY,
-+ build: build_metadata("build5"),
-+ };
-+ assert_eq!(parsed, expected);
-+
-+ let parsed = version("1.2.3+5build");
-+ let expected = Version {
-+ major: 1,
-+ minor: 2,
-+ patch: 3,
-+ pre: Prerelease::EMPTY,
-+ build: build_metadata("5build"),
-+ };
-+ assert_eq!(parsed, expected);
-+
-+ let parsed = version("1.2.3-alpha1+build5");
-+ let expected = Version {
-+ major: 1,
-+ minor: 2,
-+ patch: 3,
-+ pre: prerelease("alpha1"),
-+ build: build_metadata("build5"),
-+ };
-+ assert_eq!(parsed, expected);
-+
-+ let parsed = version("1.2.3-1.alpha1.9+build5.7.3aedf");
-+ let expected = Version {
-+ major: 1,
-+ minor: 2,
-+ patch: 3,
-+ pre: prerelease("1.alpha1.9"),
-+ build: build_metadata("build5.7.3aedf"),
-+ };
-+ assert_eq!(parsed, expected);
-+
-+ let parsed = version("1.2.3-0a.alpha1.9+05build.7.3aedf");
-+ let expected = Version {
-+ major: 1,
-+ minor: 2,
-+ patch: 3,
-+ pre: prerelease("0a.alpha1.9"),
-+ build: build_metadata("05build.7.3aedf"),
-+ };
-+ assert_eq!(parsed, expected);
-+
-+ let parsed = version("0.4.0-beta.1+0851523");
-+ let expected = Version {
-+ major: 0,
-+ minor: 4,
-+ patch: 0,
-+ pre: prerelease("beta.1"),
-+ build: build_metadata("0851523"),
-+ };
-+ assert_eq!(parsed, expected);
-+
-+ // for https://nodejs.org/dist/index.json, where some older npm versions are "1.1.0-beta-10"
-+ let parsed = version("1.1.0-beta-10");
-+ let expected = Version {
-+ major: 1,
-+ minor: 1,
-+ patch: 0,
-+ pre: prerelease("beta-10"),
-+ build: BuildMetadata::EMPTY,
-+ };
-+ assert_eq!(parsed, expected);
-+}
-+
-+#[test]
-+fn test_eq() {
-+ assert_eq!(version("1.2.3"), version("1.2.3"));
-+ assert_eq!(version("1.2.3-alpha1"), version("1.2.3-alpha1"));
-+ assert_eq!(version("1.2.3+build.42"), version("1.2.3+build.42"));
-+ assert_eq!(version("1.2.3-alpha1+42"), version("1.2.3-alpha1+42"));
-+}
-+
-+#[test]
-+fn test_ne() {
-+ assert_ne!(version("0.0.0"), version("0.0.1"));
-+ assert_ne!(version("0.0.0"), version("0.1.0"));
-+ assert_ne!(version("0.0.0"), version("1.0.0"));
-+ assert_ne!(version("1.2.3-alpha"), version("1.2.3-beta"));
-+ assert_ne!(version("1.2.3+23"), version("1.2.3+42"));
-+}
-+
-+#[test]
-+fn test_display() {
-+ assert_to_string(version("1.2.3"), "1.2.3");
-+ assert_to_string(version("1.2.3-alpha1"), "1.2.3-alpha1");
-+ assert_to_string(version("1.2.3+build.42"), "1.2.3+build.42");
-+ assert_to_string(version("1.2.3-alpha1+42"), "1.2.3-alpha1+42");
-+}
-+
-+#[test]
-+fn test_lt() {
-+ assert!(version("0.0.0") < version("1.2.3-alpha2"));
-+ assert!(version("1.0.0") < version("1.2.3-alpha2"));
-+ assert!(version("1.2.0") < version("1.2.3-alpha2"));
-+ assert!(version("1.2.3-alpha1") < version("1.2.3"));
-+ assert!(version("1.2.3-alpha1") < version("1.2.3-alpha2"));
-+ assert!(!(version("1.2.3-alpha2") < version("1.2.3-alpha2")));
-+ assert!(version("1.2.3+23") < version("1.2.3+42"));
-+}
-+
-+#[test]
-+fn test_le() {
-+ assert!(version("0.0.0") <= version("1.2.3-alpha2"));
-+ assert!(version("1.0.0") <= version("1.2.3-alpha2"));
-+ assert!(version("1.2.0") <= version("1.2.3-alpha2"));
-+ assert!(version("1.2.3-alpha1") <= version("1.2.3-alpha2"));
-+ assert!(version("1.2.3-alpha2") <= version("1.2.3-alpha2"));
-+ assert!(version("1.2.3+23") <= version("1.2.3+42"));
-+}
-+
-+#[test]
-+fn test_gt() {
-+ assert!(version("1.2.3-alpha2") > version("0.0.0"));
-+ assert!(version("1.2.3-alpha2") > version("1.0.0"));
-+ assert!(version("1.2.3-alpha2") > version("1.2.0"));
-+ assert!(version("1.2.3-alpha2") > version("1.2.3-alpha1"));
-+ assert!(version("1.2.3") > version("1.2.3-alpha2"));
-+ assert!(!(version("1.2.3-alpha2") > version("1.2.3-alpha2")));
-+ assert!(!(version("1.2.3+23") > version("1.2.3+42")));
-+}
-+
-+#[test]
-+fn test_ge() {
-+ assert!(version("1.2.3-alpha2") >= version("0.0.0"));
-+ assert!(version("1.2.3-alpha2") >= version("1.0.0"));
-+ assert!(version("1.2.3-alpha2") >= version("1.2.0"));
-+ assert!(version("1.2.3-alpha2") >= version("1.2.3-alpha1"));
-+ assert!(version("1.2.3-alpha2") >= version("1.2.3-alpha2"));
-+ assert!(!(version("1.2.3+23") >= version("1.2.3+42")));
-+}
-+
-+#[test]
-+fn test_spec_order() {
-+ let vs = [
-+ "1.0.0-alpha",
-+ "1.0.0-alpha.1",
-+ "1.0.0-alpha.beta",
-+ "1.0.0-beta",
-+ "1.0.0-beta.2",
-+ "1.0.0-beta.11",
-+ "1.0.0-rc.1",
-+ "1.0.0",
-+ ];
-+ let mut i = 1;
-+ while i < vs.len() {
-+ let a = version(vs[i - 1]);
-+ let b = version(vs[i]);
-+ assert!(a < b, "nope {:?} < {:?}", a, b);
-+ i += 1;
-+ }
-+}
-+
-+#[test]
-+fn test_align() {
-+ let version = version("1.2.3-rc1");
-+ assert_eq!("1.2.3-rc1 ", format!("{:20}", version));
-+ assert_eq!("*****1.2.3-rc1******", format!("{:*^20}", version));
-+ assert_eq!(" 1.2.3-rc1", format!("{:>20}", version));
-+}
-diff --git a/third_party/rust/semver/tests/test_version_req.rs b/third_party/rust/semver/tests/test_version_req.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/semver/tests/test_version_req.rs
-@@ -0,0 +1,443 @@
-+#![allow(
-+ clippy::missing_panics_doc,
-+ clippy::shadow_unrelated,
-+ clippy::toplevel_ref_arg,
-+ clippy::wildcard_imports
-+)]
-+
-+mod node;
-+mod util;
-+
-+use crate::util::*;
-+use std::collections::hash_map::DefaultHasher;
-+use std::hash::{Hash, Hasher};
-+
-+#[cfg(test_node_semver)]
-+use node::{req, VersionReq};
-+#[cfg(not(test_node_semver))]
-+use semver::VersionReq;
-+
-+#[cfg_attr(not(no_track_caller), track_caller)]
-+fn assert_match_all(req: &VersionReq, versions: &[&str]) {
-+ for string in versions {
-+ let parsed = version(string);
-+ assert!(req.matches(&parsed), "did not match {}", string);
-+ }
-+}
-+
-+#[cfg_attr(not(no_track_caller), track_caller)]
-+fn assert_match_none(req: &VersionReq, versions: &[&str]) {
-+ for string in versions {
-+ let parsed = version(string);
-+ assert!(!req.matches(&parsed), "matched {}", string);
-+ }
-+}
-+
-+#[test]
-+fn test_basic() {
-+ let ref r = req("1.0.0");
-+ assert_to_string(r, "^1.0.0");
-+ assert_match_all(r, &["1.0.0", "1.1.0", "1.0.1"]);
-+ assert_match_none(r, &["0.9.9", "0.10.0", "0.1.0", "1.0.0-pre", "1.0.1-pre"]);
-+}
-+
-+#[test]
-+#[cfg(not(no_const_vec_new))]
-+fn test_default() {
-+ let ref r = VersionReq::default();
-+ assert_eq!(r, &VersionReq::STAR);
-+}
-+
-+#[test]
-+fn test_exact() {
-+ let ref r = req("=1.0.0");
-+ assert_to_string(r, "=1.0.0");
-+ assert_match_all(r, &["1.0.0"]);
-+ assert_match_none(r, &["1.0.1", "0.9.9", "0.10.0", "0.1.0", "1.0.0-pre"]);
-+
-+ let ref r = req("=0.9.0");
-+ assert_to_string(r, "=0.9.0");
-+ assert_match_all(r, &["0.9.0"]);
-+ assert_match_none(r, &["0.9.1", "1.9.0", "0.0.9", "0.9.0-pre"]);
-+
-+ let ref r = req("=0.0.2");
-+ assert_to_string(r, "=0.0.2");
-+ assert_match_all(r, &["0.0.2"]);
-+ assert_match_none(r, &["0.0.1", "0.0.3", "0.0.2-pre"]);
-+
-+ let ref r = req("=0.1.0-beta2.a");
-+ assert_to_string(r, "=0.1.0-beta2.a");
-+ assert_match_all(r, &["0.1.0-beta2.a"]);
-+ assert_match_none(r, &["0.9.1", "0.1.0", "0.1.1-beta2.a", "0.1.0-beta2"]);
-+
-+ let ref r = req("=0.1.0+meta");
-+ assert_to_string(r, "=0.1.0");
-+ assert_match_all(r, &["0.1.0", "0.1.0+meta", "0.1.0+any"]);
-+}
-+
-+#[test]
-+pub fn test_greater_than() {
-+ let ref r = req(">= 1.0.0");
-+ assert_to_string(r, ">=1.0.0");
-+ assert_match_all(r, &["1.0.0", "2.0.0"]);
-+ assert_match_none(r, &["0.1.0", "0.0.1", "1.0.0-pre", "2.0.0-pre"]);
-+
-+ let ref r = req(">= 2.1.0-alpha2");
-+ assert_to_string(r, ">=2.1.0-alpha2");
-+ assert_match_all(r, &["2.1.0-alpha2", "2.1.0-alpha3", "2.1.0", "3.0.0"]);
-+ assert_match_none(
-+ r,
-+ &["2.0.0", "2.1.0-alpha1", "2.0.0-alpha2", "3.0.0-alpha2"],
-+ );
-+}
-+
-+#[test]
-+pub fn test_less_than() {
-+ let ref r = req("< 1.0.0");
-+ assert_to_string(r, "<1.0.0");
-+ assert_match_all(r, &["0.1.0", "0.0.1"]);
-+ assert_match_none(r, &["1.0.0", "1.0.0-beta", "1.0.1", "0.9.9-alpha"]);
-+
-+ let ref r = req("<= 2.1.0-alpha2");
-+ assert_match_all(r, &["2.1.0-alpha2", "2.1.0-alpha1", "2.0.0", "1.0.0"]);
-+ assert_match_none(
-+ r,
-+ &["2.1.0", "2.2.0-alpha1", "2.0.0-alpha2", "1.0.0-alpha2"],
-+ );
-+
-+ let ref r = req(">1.0.0-alpha, <1.0.0");
-+ assert_match_all(r, &["1.0.0-beta"]);
-+
-+ let ref r = req(">1.0.0-alpha, <1.0");
-+ assert_match_none(r, &["1.0.0-beta"]);
-+
-+ let ref r = req(">1.0.0-alpha, <1");
-+ assert_match_none(r, &["1.0.0-beta"]);
-+}
-+
-+#[test]
-+pub fn test_multiple() {
-+ let ref r = req("> 0.0.9, <= 2.5.3");
-+ assert_to_string(r, ">0.0.9, <=2.5.3");
-+ assert_match_all(r, &["0.0.10", "1.0.0", "2.5.3"]);
-+ assert_match_none(r, &["0.0.8", "2.5.4"]);
-+
-+ let ref r = req("0.3.0, 0.4.0");
-+ assert_to_string(r, "^0.3.0, ^0.4.0");
-+ assert_match_none(r, &["0.0.8", "0.3.0", "0.4.0"]);
-+
-+ let ref r = req("<= 0.2.0, >= 0.5.0");
-+ assert_to_string(r, "<=0.2.0, >=0.5.0");
-+ assert_match_none(r, &["0.0.8", "0.3.0", "0.5.1"]);
-+
-+ let ref r = req("0.1.0, 0.1.4, 0.1.6");
-+ assert_to_string(r, "^0.1.0, ^0.1.4, ^0.1.6");
-+ assert_match_all(r, &["0.1.6", "0.1.9"]);
-+ assert_match_none(r, &["0.1.0", "0.1.4", "0.2.0"]);
-+
-+ let err = req_err("> 0.1.0,");
-+ assert_to_string(
-+ err,
-+ "unexpected end of input while parsing major version number",
-+ );
-+
-+ let err = req_err("> 0.3.0, ,");
-+ assert_to_string(
-+ err,
-+ "unexpected character ',' while parsing major version number",
-+ );
-+
-+ let ref r = req(">=0.5.1-alpha3, <0.6");
-+ assert_to_string(r, ">=0.5.1-alpha3, <0.6");
-+ assert_match_all(
-+ r,
-+ &[
-+ "0.5.1-alpha3",
-+ "0.5.1-alpha4",
-+ "0.5.1-beta",
-+ "0.5.1",
-+ "0.5.5",
-+ ],
-+ );
-+ assert_match_none(
-+ r,
-+ &["0.5.1-alpha1", "0.5.2-alpha3", "0.5.5-pre", "0.5.0-pre"],
-+ );
-+ assert_match_none(r, &["0.6.0", "0.6.0-pre"]);
-+
-+ // https://github.com/steveklabnik/semver/issues/56
-+ let err = req_err("1.2.3 - 2.3.4");
-+ assert_to_string(err, "expected comma after patch version number, found '-'");
-+}
-+
-+#[test]
-+pub fn test_whitespace_delimited_comparator_sets() {
-+ // https://github.com/steveklabnik/semver/issues/55
-+ let err = req_err("> 0.0.9 <= 2.5.3");
-+ assert_to_string(err, "expected comma after patch version number, found '<'");
-+}
-+
-+#[test]
-+pub fn test_tilde() {
-+ let ref r = req("~1");
-+ assert_match_all(r, &["1.0.0", "1.0.1", "1.1.1"]);
-+ assert_match_none(r, &["0.9.1", "2.9.0", "0.0.9"]);
-+
-+ let ref r = req("~1.2");
-+ assert_match_all(r, &["1.2.0", "1.2.1"]);
-+ assert_match_none(r, &["1.1.1", "1.3.0", "0.0.9"]);
-+
-+ let ref r = req("~1.2.2");
-+ assert_match_all(r, &["1.2.2", "1.2.4"]);
-+ assert_match_none(r, &["1.2.1", "1.9.0", "1.0.9", "2.0.1", "0.1.3"]);
-+
-+ let ref r = req("~1.2.3-beta.2");
-+ assert_match_all(r, &["1.2.3", "1.2.4", "1.2.3-beta.2", "1.2.3-beta.4"]);
-+ assert_match_none(r, &["1.3.3", "1.1.4", "1.2.3-beta.1", "1.2.4-beta.2"]);
-+}
-+
-+#[test]
-+pub fn test_caret() {
-+ let ref r = req("^1");
-+ assert_match_all(r, &["1.1.2", "1.1.0", "1.2.1", "1.0.1"]);
-+ assert_match_none(r, &["0.9.1", "2.9.0", "0.1.4"]);
-+ assert_match_none(r, &["1.0.0-beta1", "0.1.0-alpha", "1.0.1-pre"]);
-+
-+ let ref r = req("^1.1");
-+ assert_match_all(r, &["1.1.2", "1.1.0", "1.2.1"]);
-+ assert_match_none(r, &["0.9.1", "2.9.0", "1.0.1", "0.1.4"]);
-+
-+ let ref r = req("^1.1.2");
-+ assert_match_all(r, &["1.1.2", "1.1.4", "1.2.1"]);
-+ assert_match_none(r, &["0.9.1", "2.9.0", "1.1.1", "0.0.1"]);
-+ assert_match_none(r, &["1.1.2-alpha1", "1.1.3-alpha1", "2.9.0-alpha1"]);
-+
-+ let ref r = req("^0.1.2");
-+ assert_match_all(r, &["0.1.2", "0.1.4"]);
-+ assert_match_none(r, &["0.9.1", "2.9.0", "1.1.1", "0.0.1"]);
-+ assert_match_none(r, &["0.1.2-beta", "0.1.3-alpha", "0.2.0-pre"]);
-+
-+ let ref r = req("^0.5.1-alpha3");
-+ assert_match_all(
-+ r,
-+ &[
-+ "0.5.1-alpha3",
-+ "0.5.1-alpha4",
-+ "0.5.1-beta",
-+ "0.5.1",
-+ "0.5.5",
-+ ],
-+ );
-+ assert_match_none(
-+ r,
-+ &[
-+ "0.5.1-alpha1",
-+ "0.5.2-alpha3",
-+ "0.5.5-pre",
-+ "0.5.0-pre",
-+ "0.6.0",
-+ ],
-+ );
-+
-+ let ref r = req("^0.0.2");
-+ assert_match_all(r, &["0.0.2"]);
-+ assert_match_none(r, &["0.9.1", "2.9.0", "1.1.1", "0.0.1", "0.1.4"]);
-+
-+ let ref r = req("^0.0");
-+ assert_match_all(r, &["0.0.2", "0.0.0"]);
-+ assert_match_none(r, &["0.9.1", "2.9.0", "1.1.1", "0.1.4"]);
-+
-+ let ref r = req("^0");
-+ assert_match_all(r, &["0.9.1", "0.0.2", "0.0.0"]);
-+ assert_match_none(r, &["2.9.0", "1.1.1"]);
-+
-+ let ref r = req("^1.4.2-beta.5");
-+ assert_match_all(
-+ r,
-+ &["1.4.2", "1.4.3", "1.4.2-beta.5", "1.4.2-beta.6", "1.4.2-c"],
-+ );
-+ assert_match_none(
-+ r,
-+ &[
-+ "0.9.9",
-+ "2.0.0",
-+ "1.4.2-alpha",
-+ "1.4.2-beta.4",
-+ "1.4.3-beta.5",
-+ ],
-+ );
-+}
-+
-+#[test]
-+pub fn test_wildcard() {
-+ let err = req_err("");
-+ assert_to_string(
-+ err,
-+ "unexpected end of input while parsing major version number",
-+ );
-+
-+ let ref r = req("*");
-+ assert_match_all(r, &["0.9.1", "2.9.0", "0.0.9", "1.0.1", "1.1.1"]);
-+ assert_match_none(r, &["1.0.0-pre"]);
-+
-+ for s in &["x", "X"] {
-+ assert_eq!(*r, req(s));
-+ }
-+
-+ let ref r = req("1.*");
-+ assert_match_all(r, &["1.2.0", "1.2.1", "1.1.1", "1.3.0"]);
-+ assert_match_none(r, &["0.0.9", "1.2.0-pre"]);
-+
-+ for s in &["1.x", "1.X", "1.*.*"] {
-+ assert_eq!(*r, req(s));
-+ }
-+
-+ let ref r = req("1.2.*");
-+ assert_match_all(r, &["1.2.0", "1.2.2", "1.2.4"]);
-+ assert_match_none(r, &["1.9.0", "1.0.9", "2.0.1", "0.1.3", "1.2.2-pre"]);
-+
-+ for s in &["1.2.x", "1.2.X"] {
-+ assert_eq!(*r, req(s));
-+ }
-+}
-+
-+#[test]
-+pub fn test_logical_or() {
-+ // https://github.com/steveklabnik/semver/issues/57
-+ let err = req_err("=1.2.3 || =2.3.4");
-+ assert_to_string(err, "expected comma after patch version number, found '|'");
-+
-+ let err = req_err("1.1 || =1.2.3");
-+ assert_to_string(err, "expected comma after minor version number, found '|'");
-+
-+ let err = req_err("6.* || 8.* || >= 10.*");
-+ assert_to_string(err, "expected comma after minor version number, found '|'");
-+}
-+
-+#[test]
-+pub fn test_any() {
-+ #[cfg(not(no_const_vec_new))]
-+ let ref r = VersionReq::STAR;
-+ #[cfg(no_const_vec_new)]
-+ let ref r = VersionReq {
-+ comparators: Vec::new(),
-+ };
-+ assert_match_all(r, &["0.0.1", "0.1.0", "1.0.0"]);
-+}
-+
-+#[test]
-+pub fn test_pre() {
-+ let ref r = req("=2.1.1-really.0");
-+ assert_match_all(r, &["2.1.1-really.0"]);
-+}
-+
-+#[test]
-+pub fn test_parse_errors() {
-+ let err = req_err("\0");
-+ assert_to_string(
-+ err,
-+ "unexpected character '\\0' while parsing major version number",
-+ );
-+
-+ let err = req_err(">= >= 0.0.2");
-+ assert_to_string(
-+ err,
-+ "unexpected character '>' while parsing major version number",
-+ );
-+
-+ let err = req_err(">== 0.0.2");
-+ assert_to_string(
-+ err,
-+ "unexpected character '=' while parsing major version number",
-+ );
-+
-+ let err = req_err("a.0.0");
-+ assert_to_string(
-+ err,
-+ "unexpected character 'a' while parsing major version number",
-+ );
-+
-+ let err = req_err("1.0.0-");
-+ assert_to_string(err, "empty identifier segment in pre-release identifier");
-+
-+ let err = req_err(">=");
-+ assert_to_string(
-+ err,
-+ "unexpected end of input while parsing major version number",
-+ );
-+}
-+
-+#[test]
-+fn test_cargo3202() {
-+ let ref r = req("0.*.*");
-+ assert_to_string(r, "0.*");
-+ assert_match_all(r, &["0.5.0"]);
-+
-+ let ref r = req("0.0.*");
-+ assert_to_string(r, "0.0.*");
-+}
-+
-+#[test]
-+fn test_digit_after_wildcard() {
-+ let err = req_err("*.1");
-+ assert_to_string(err, "unexpected character after wildcard in version req");
-+
-+ let err = req_err("1.*.1");
-+ assert_to_string(err, "unexpected character after wildcard in version req");
-+
-+ let err = req_err(">=1.*.1");
-+ assert_to_string(err, "unexpected character after wildcard in version req");
-+}
-+
-+#[test]
-+fn test_eq_hash() {
-+ fn calculate_hash(value: impl Hash) -> u64 {
-+ let mut hasher = DefaultHasher::new();
-+ value.hash(&mut hasher);
-+ hasher.finish()
-+ }
-+
-+ assert!(req("^1") == req("^1"));
-+ assert!(calculate_hash(req("^1")) == calculate_hash(req("^1")));
-+ assert!(req("^1") != req("^2"));
-+}
-+
-+#[test]
-+fn test_leading_digit_in_pre_and_build() {
-+ for op in &["=", ">", ">=", "<", "<=", "~", "^"] {
-+ // digit then alpha
-+ req(&format!("{} 1.2.3-1a", op));
-+ req(&format!("{} 1.2.3+1a", op));
-+
-+ // digit then alpha (leading zero)
-+ req(&format!("{} 1.2.3-01a", op));
-+ req(&format!("{} 1.2.3+01", op));
-+
-+ // multiple
-+ req(&format!("{} 1.2.3-1+1", op));
-+ req(&format!("{} 1.2.3-1-1+1-1-1", op));
-+ req(&format!("{} 1.2.3-1a+1a", op));
-+ req(&format!("{} 1.2.3-1a-1a+1a-1a-1a", op));
-+ }
-+}
-+
-+#[test]
-+fn test_wildcard_and_another() {
-+ let err = req_err("*, 0.20.0-any");
-+ assert_to_string(
-+ err,
-+ "wildcard req (*) must be the only comparator in the version req",
-+ );
-+
-+ let err = req_err("0.20.0-any, *");
-+ assert_to_string(
-+ err,
-+ "wildcard req (*) must be the only comparator in the version req",
-+ );
-+
-+ let err = req_err("0.20.0-any, *, 1.0");
-+ assert_to_string(
-+ err,
-+ "wildcard req (*) must be the only comparator in the version req",
-+ );
-+}
-diff --git a/third_party/rust/semver/tests/util/mod.rs b/third_party/rust/semver/tests/util/mod.rs
-new file mode 100644
---- /dev/null
-+++ b/third_party/rust/semver/tests/util/mod.rs
-@@ -0,0 +1,39 @@
-+#![allow(dead_code)]
-+
-+use semver::{BuildMetadata, Error, Prerelease, Version, VersionReq};
-+use std::fmt::Display;
-+
-+#[cfg_attr(not(no_track_caller), track_caller)]
-+pub(super) fn version(text: &str) -> Version {
-+ Version::parse(text).unwrap()
-+}
-+
-+#[cfg_attr(not(no_track_caller), track_caller)]
-+pub(super) fn version_err(text: &str) -> Error {
-+ Version::parse(text).unwrap_err()
-+}
-+
-+#[cfg_attr(not(no_track_caller), track_caller)]
-+pub(super) fn req(text: &str) -> VersionReq {
-+ VersionReq::parse(text).unwrap()
-+}
-+
-+#[cfg_attr(not(no_track_caller), track_caller)]
-+pub(super) fn req_err(text: &str) -> Error {
-+ VersionReq::parse(text).unwrap_err()
-+}
-+
-+#[cfg_attr(not(no_track_caller), track_caller)]
-+pub(super) fn prerelease(text: &str) -> Prerelease {
-+ Prerelease::new(text).unwrap()
-+}
-+
-+#[cfg_attr(not(no_track_caller), track_caller)]
-+pub(super) fn build_metadata(text: &str) -> BuildMetadata {
-+ BuildMetadata::new(text).unwrap()
-+}
-+
-+#[cfg_attr(not(no_track_caller), track_caller)]
-+pub(super) fn assert_to_string(value: impl Display, expected: &str) {
-+ assert_eq!(value.to_string(), expected);
-+}
-diff --git a/toolkit/library/rust/shared/Cargo.toml b/toolkit/library/rust/shared/Cargo.toml
---- a/toolkit/library/rust/shared/Cargo.toml
-+++ b/toolkit/library/rust/shared/Cargo.toml
-@@ -16,17 +16,17 @@ nsstring = { path = "../../../../xpcom/r
- netwerk_helper = { path = "../../../../netwerk/base/rust-helper" }
- xpcom = { path = "../../../../xpcom/rust/xpcom" }
- prefs_parser = { path = "../../../../modules/libpref/parser" }
- static_prefs = { path = "../../../../modules/libpref/init/static_prefs" }
- profiler_helper = { path = "../../../../tools/profiler/rust-helper", optional = true }
- mozurl = { path = "../../../../netwerk/base/mozurl" }
- webrender_bindings = { path = "../../../../gfx/webrender_bindings" }
- cubeb-coreaudio = { git = "https://github.com/mozilla/cubeb-coreaudio-rs", rev = "44eca95823bb57e964cf7b6d9791ed2ccb4b2108", optional = true }
--cubeb-pulse = { git = "https://github.com/mozilla/cubeb-pulse-rs", rev="df4dc0288b07b865440f4c7e41ca49ca9ccffc63", optional = true, features=["pulse-dlopen"] }
-+cubeb-pulse = { git = "https://github.com/mozilla/cubeb-pulse-rs", rev="1f1fe1e08e01a9a534ec7f079702a583a0899ce7", optional = true, features=["pulse-dlopen"] }
- cubeb-sys = { version = "0.10", optional = true, features=["gecko-in-tree"] }
- audioipc2-client = { git = "https://github.com/kinetiknz/audioipc-2", rev = "85e9839059f4bf8f68130825b8fd02c39a6a51b9", optional = true } # macos (v2) branch
- audioipc2-server = { git = "https://github.com/kinetiknz/audioipc-2", rev = "85e9839059f4bf8f68130825b8fd02c39a6a51b9", optional = true } # macos (v2) branch
- audioipc-client = { git = "https://github.com/mozilla/audioipc-2", rev = "c144368c4e084ec0f076af6262970655c2d99e8d", optional = true }
- audioipc-server = { git = "https://github.com/mozilla/audioipc-2", rev = "c144368c4e084ec0f076af6262970655c2d99e8d", optional = true }
- encoding_glue = { path = "../../../../intl/encoding_glue" }
- authenticator = "0.3.1"
- gkrust_utils = { path = "../../../../xpcom/rust/gkrust_utils" }
-diff --git a/xpcom/rust/gkrust_utils/Cargo.toml b/xpcom/rust/gkrust_utils/Cargo.toml
---- a/xpcom/rust/gkrust_utils/Cargo.toml
-+++ b/xpcom/rust/gkrust_utils/Cargo.toml
-@@ -1,8 +1,8 @@
- [package]
- name = "gkrust_utils"
- version = "0.1.0"
- authors = ["Jonathan Kingston <jkt(a)mozilla.com>"]
-
- [dependencies]
--semver = "0.9"
-+semver = "1.0"
- nsstring = { path = "../nsstring" }
-
1
0
commit 5de17b299cc233955bb63e4ce4b5a7e4b4a6872d
Author: Tim Biermann <tbier(a)posteo.de>
Date: Sat Oct 29 19:32:30 2022 +0000
ttf-twemoji-color: 13.1.0 -> 14.0.2
diff --git a/ttf-twemoji-color/.footprint b/ttf-twemoji-color/.footprint
index 89d3a600f..b771d46f1 100644
--- a/ttf-twemoji-color/.footprint
+++ b/ttf-twemoji-color/.footprint
@@ -1,9 +1,8 @@
-drwxr-xr-x root/root etc/
-drwxr-xr-x root/root etc/fonts/
-drwxr-xr-x root/root etc/fonts/conf.avail/
--rw-r--r-- root/root etc/fonts/conf.avail/46-twemoji-color.conf
drwxr-xr-x root/root usr/
drwxr-xr-x root/root usr/share/
+drwxr-xr-x root/root usr/share/fontconfig/
+drwxr-xr-x root/root usr/share/fontconfig/conf.avail/
+-rw-r--r-- root/root usr/share/fontconfig/conf.avail/46-twemoji-color.conf
drwxr-xr-x root/root usr/share/fonts/
drwxr-xr-x root/root usr/share/fonts/TTF/
drwxr-xr-x root/root usr/share/fonts/TTF/Twitter Color Emoji/
diff --git a/ttf-twemoji-color/.signature b/ttf-twemoji-color/.signature
index a74fa2b52..98ce4242b 100644
--- a/ttf-twemoji-color/.signature
+++ b/ttf-twemoji-color/.signature
@@ -1,5 +1,5 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF31X64/Qld6ZLJAgLvUZxmcSWF3wjBGVEXmmHk48h+kX6zwFL0DPzG+tr4M0L1sFepfO6iEs6bfHCW82nc7FpQQU=
-SHA256 (Pkgfile) = c01bf26a365dc944c7432c936e9e297184cc6bc8b0fcffd016e447ad3c6e67c8
-SHA256 (.footprint) = 9c5ded4dbed6747302c864880aef2b9db9556dd6fa304ced7a5a50ed6b2a8dfe
-SHA256 (TwitterColorEmoji-SVGinOT-Linux-13.1.0.tar.gz) = 57c0d651400af872c33dcab78b33ecd7be0f7d49da49e2c1c83a59c215085f94
+RWSagIOpLGJF36DYA8jtELiSYYmwac3CrSKXP01WXoJhjyKsrqDepDixhfsWqDuwzBh1Bho6mfK/g3J+B58fpHKliPWTCYrvbw8=
+SHA256 (Pkgfile) = 698eb37c6b58bcfa394ae8ed8010ef94f6a08e0e6e38eba2fe66e08891a7634e
+SHA256 (.footprint) = ea96b3196c769bcb648023ea9cd4e36484e772002dd0367e84c12e60da273acf
+SHA256 (TwitterColorEmoji-SVGinOT-Linux-14.0.2.tar.gz) = 6826e21ea08dc5df26c887ae4e56046987e0f4909df8c02c73de05714a0353c1
diff --git a/ttf-twemoji-color/Pkgfile b/ttf-twemoji-color/Pkgfile
index 81f72a94b..b3a34f2c6 100644
--- a/ttf-twemoji-color/Pkgfile
+++ b/ttf-twemoji-color/Pkgfile
@@ -4,12 +4,13 @@
# Depends on: fontconfig xorg-font-bitstream-vera
name=ttf-twemoji-color
-version=13.1.0
-release=2
+version=14.0.2
+release=1
source=(https://github.com/eosrei/twemoji-color-font/releases/download/v$ve…
build() {
cd TwitterColorEmoji-SVGinOT-Linux-$version
+
install -Dm644 TwitterColorEmoji-SVGinOT.ttf -t $PKG/usr/share/fonts/TTF/"Twitter Color Emoji"/
- install -Dm644 fontconfig/46-twemoji-color.conf $PKG/etc/fonts/conf.avail/46-twemoji-color.conf
+ install -Dm644 fontconfig/46-twemoji-color.conf $PKG/usr/share/fontconfig/conf.avail/46-twemoji-color.conf
}
1
0
commit e2a9d7d6ce9c3699688385b5c0dfdd3bbb0c2275
Author: Tim Biermann <tbier(a)posteo.de>
Date: Sat Oct 29 19:31:53 2022 +0000
ucl: add pc file
diff --git a/ucl/.footprint b/ucl/.footprint
index 37fa5dee3..fffb9855c 100644
--- a/ucl/.footprint
+++ b/ucl/.footprint
@@ -10,3 +10,5 @@ drwxr-xr-x root/root usr/lib/
lrwxrwxrwx root/root usr/lib/libucl.so -> libucl.so.1.0.0
lrwxrwxrwx root/root usr/lib/libucl.so.1 -> libucl.so.1.0.0
-rwxr-xr-x root/root usr/lib/libucl.so.1.0.0
+drwxr-xr-x root/root usr/lib/pkgconfig/
+-rw-r--r-- root/root usr/lib/pkgconfig/ucl.pc
diff --git a/ucl/.signature b/ucl/.signature
index 2b29a82d4..75e57a950 100644
--- a/ucl/.signature
+++ b/ucl/.signature
@@ -1,5 +1,6 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF3xiLe7ZNgEbdVpj4L85hRD622LUQNb66Ib6is+8/2ORUJTZ3tOHbMWaG3nvF045kaHgzJ0wBT7ShrRlVLCj0Gw0=
-SHA256 (Pkgfile) = 5e2aad4b394de0c348dc53afd22293bbfeaa9d49b92bc9c6bd099fbd5a964311
-SHA256 (.footprint) = af844c18c836ac347a23092b1f276941a988205e5cccbd508404ad789e4b2408
+RWSagIOpLGJF3/bBFFqFtnatEkT0rLUk4ORTlhfSeABmUrfRAFWsrdyvMgNdW+NYGvATAZL7O406vsbwMupGfSUC59qSITAiFg4=
+SHA256 (Pkgfile) = 14f315f1fd2ff563f9fa2206036653db56eefe144e74d38941a9c69dacee0145
+SHA256 (.footprint) = 78702059aacbbc0602f0298dcc448fd1498ec75756c70ec02e7721e090e00936
SHA256 (ucl-1.03.tar.gz) = b865299ffd45d73412293369c9754b07637680e5c826915f097577cd27350348
+SHA256 (ucl.pc.in) = 668f47e7fdfa75d6c3b06542d89d2b368131ccbcef5f94174ad3af89eb95ae4a
diff --git a/ucl/Pkgfile b/ucl/Pkgfile
index a3dac1303..3b6fdfd9e 100644
--- a/ucl/Pkgfile
+++ b/ucl/Pkgfile
@@ -6,8 +6,9 @@
name=ucl
version=1.03
-release=2
-source=(http://www.oberhumer.com/opensource/ucl/download/ucl-$version.tar.gz)
+release=3
+source=(http://www.oberhumer.com/opensource/ucl/download/ucl-$version.tar.gz
+ ucl.pc.in)
build() {
cd ucl-$version
@@ -15,9 +16,12 @@ build() {
CFLAGS+=" -std=gnu90 -fPIC"
./configure \
--prefix=/usr \
- --enable-shared
+ --enable-shared \
+ --enable-static
make
make prefix=$PKG/usr install
-}
+ mkdir -p $PKG/usr/lib/pkgconfig/
+ sed "s|@VERSION@|$version|" $SRC/ucl.pc.in > $PKG/usr/lib/pkgconfig/ucl.pc
+}
diff --git a/ucl/ucl.pc.in b/ucl/ucl.pc.in
new file mode 100644
index 000000000..d6e3ddc3b
--- /dev/null
+++ b/ucl/ucl.pc.in
@@ -0,0 +1,7 @@
+prefix=/usr
+includedir=${prefix}/include
+
+Name: ucl
+Description: Portable lossless data compression library written in ANSI C
+Version: @VERSION@
+Cflags: -I${includedir}
1
0
commit 1bcfe9b2b814c3e0b99567612038a9d8523289ad
Author: Tim Biermann <tbier(a)posteo.de>
Date: Sat Oct 29 19:28:56 2022 +0000
upx: 3.96 -> 4.0.0
diff --git a/upx/.footprint b/upx/.footprint
index 02137e3b1..c7b9a2a43 100644
--- a/upx/.footprint
+++ b/upx/.footprint
@@ -2,6 +2,14 @@ drwxr-xr-x root/root usr/
drwxr-xr-x root/root usr/bin/
-rwxr-xr-x root/root usr/bin/upx
drwxr-xr-x root/root usr/share/
+drwxr-xr-x root/root usr/share/doc/
+drwxr-xr-x root/root usr/share/doc/upx/
+-rw-r--r-- root/root usr/share/doc/upx/COPYING
+-rw-r--r-- root/root usr/share/doc/upx/LICENSE
+-rw-r--r-- root/root usr/share/doc/upx/NEWS
+-rw-r--r-- root/root usr/share/doc/upx/README
+-rw-r--r-- root/root usr/share/doc/upx/upx-doc.html
+-rw-r--r-- root/root usr/share/doc/upx/upx-doc.txt
drwxr-xr-x root/root usr/share/man/
drwxr-xr-x root/root usr/share/man/man1/
-rw-r--r-- root/root usr/share/man/man1/upx.1.gz
diff --git a/upx/.signature b/upx/.signature
index bcbcb3665..3bd1b39ba 100644
--- a/upx/.signature
+++ b/upx/.signature
@@ -1,6 +1,6 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF3zyqMnPnKzyx+rETvISGrYEU15/61nGYsgt+PUGp/6BHnK6hYvJaLAgkG+AVHd3KoGtfyI/lLzi9v4iT3LwfbgQ=
-SHA256 (Pkgfile) = 15bb33c4ad792f2b84803e7a9cc0db576b330a3a4f31c7e6983dfa23fa9e3834
-SHA256 (.footprint) = 4c1267857f05230db56e631d77bd98e5e15f48f232b4a188bc1eed8a5320ebad
-SHA256 (upx-3.96-src.tar.xz) = 47774df5c958f2868ef550fb258b97c73272cb1f44fe776b798e393465993714
-SHA256 (lzma465.tar.bz2) = c935fd04dd8e0e8c688a3078f3675d699679a90be81c12686837e0880aa0fa1e
+RWSagIOpLGJF3xUb8PGldfPlH0YC+Vl4iKPWbSEsHZ8ZNp0v9qyFC+zk/uHfTT4GZQCGyOhKuHSn01ym6l1uMlX18l5KOljjZgM=
+SHA256 (Pkgfile) = dc38af7fe9d7a32fdf9bc648e867b9de29f09e4517b8b29e315de8482c7a2253
+SHA256 (.footprint) = eafcf5d42a5e4db6a1c1da6b0cf425357368b8a4b1e1565adf8c4500145918fa
+SHA256 (upx-4.0.0-src.tar.xz) = eaf938f8824e65f06852142fda97f8349ad660612979fa311618109c819f36ea
+SHA256 (system-deps.patch) = 3afbbf23b7e902a00c96a27036188566a8405dc54abe2d57d444a1fe748adb1c
diff --git a/upx/Pkgfile b/upx/Pkgfile
index 94c06026c..04ac8c5d8 100644
--- a/upx/Pkgfile
+++ b/upx/Pkgfile
@@ -1,21 +1,26 @@
# Description: Ultimate Packer for eXecutables.
# URL: http://upx.sourceforge.net/
# Maintainer: Danny Rawlins, crux at romster dot me
-# Packager: Younes Hafri, ycrux at club-internet dot fr
-# Depends on: ucl zlib
+# Depends on: lz4 ucl zlib
name=upx
-version=3.96
+version=4.0.0
release=1
-source=(https://github.com/upx/upx/releases/download/v$version/$name-$version-src.tar.xz
- http://downloads.sourceforge.net/sevenzip/lzma465.tar.bz2)
+source=(https://github.com/upx/upx/releases/download/v$version/upx-$version-src.tar.xz
+ system-deps.patch)
build() {
- cd $name-$version-src
+ patch -Np1 -d $name-$version-src -i $SRC/system-deps.patch
+ rm -rf $name-$version-src/vendor/ucl
- sed -i 's/bool warn = true/bool warn = false/' src/main.cpp
- make UPX_LZMA_VERSION=0x465 UPX_LZMADIR=$SRC all
+ cmake -S $name-$version-src -B build -G Ninja \
+ -D CMAKE_INSTALL_PREFIX=/usr \
+ -D CMAKE_INSTALL_LIBDIR=lib \
+ -D CMAKE_BUILD_TYPE=Release \
+ -D CMAKE_CXX_FLAGS_RELEASE="$CXXFLAGS" \
+ -D CMAKE_C_FLAGS_RELEASE="$CFLAGS" \
+ -Wno-dev
- install -m 0644 -D doc/upx.1 $PKG/usr/share/man/man1/upx.1
- install -m 0755 -D src/upx.out $PKG/usr/bin/upx
+ cmake --build build
+ DESTDIR=$PKG cmake --install build
}
diff --git a/upx/system-deps.patch b/upx/system-deps.patch
new file mode 100644
index 000000000..390dde38a
--- /dev/null
+++ b/upx/system-deps.patch
@@ -0,0 +1,71 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 22db99a..abf8f65 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -70,21 +70,18 @@ endif()
+ # targets and compilation flags
+ #***********************************************************************
+
+-file(GLOB ucl_SOURCES "vendor/ucl/src/*.c")
+-list(SORT ucl_SOURCES)
+-add_library(upx_vendor_ucl STATIC ${ucl_SOURCES})
+-set_property(TARGET upx_vendor_ucl PROPERTY C_STANDARD 11)
+-
+ file(GLOB zlib_SOURCES "vendor/zlib/*.c")
+ list(SORT zlib_SOURCES)
+ add_library(upx_vendor_zlib STATIC ${zlib_SOURCES})
+ set_property(TARGET upx_vendor_zlib PROPERTY C_STANDARD 11)
++find_package(PkgConfig REQUIRED)
++pkg_check_modules(upx_vendor_ucl REQUIRED ucl IMPORTED_TARGET GLOBAL)
+
+ file(GLOB upx_SOURCES "src/*.cpp" "src/util/*.cpp")
+ list(SORT upx_SOURCES)
+ add_executable(upx ${upx_SOURCES})
+ set_property(TARGET upx PROPERTY CXX_STANDARD 14)
+-target_link_libraries(upx upx_vendor_ucl upx_vendor_zlib)
++target_link_libraries(upx ucl upx_vendor_zlib)
+
+ if(UPX_CONFIG_DISABLE_WERROR)
+ set(warn_Werror "")
+@@ -118,25 +115,8 @@ else()
+ add_definitions(-fno-tree-vectorize)
+ endif()
+
+-set(t upx_vendor_ucl)
+-target_include_directories(${t} PRIVATE vendor/ucl/include vendor/ucl)
+-if(MSVC)
+- target_compile_options(${t} PRIVATE -J -W4 ${warn_WX})
+-else()
+- target_compile_options(${t} PRIVATE -Wall -Wextra -Wvla ${warn_Werror})
+-endif()
+-
+-set(t upx_vendor_zlib)
+-if(MSVC)
+- target_compile_options(${t} PRIVATE -DHAVE_STDARG_H -DHAVE_VSNPRINTF -J -W3 ${warn_WX})
+-else()
+- target_compile_options(${t} PRIVATE -DHAVE_STDARG_H -DHAVE_UNISTD_H -DHAVE_VSNPRINTF)
+- # clang-15: -Wno-strict-prototypes is needed to silence the new -Wdeprecated-non-prototype warning
+- target_compile_options(${t} PRIVATE -Wall -Wextra -Wvla -Wno-strict-prototypes ${warn_Werror})
+-endif()
+-
+ set(t upx)
+-target_include_directories(${t} PRIVATE vendor)
++target_include_directories(${t} PRIVATE upx_vendor_ucl_INCLUDE_DIRS vendor)
+ target_compile_definitions(${t} PRIVATE $<$<CONFIG:Debug>:DEBUG=1>)
+ if(GITREV_SHORT)
+ target_compile_definitions(${t} PRIVATE UPX_VERSION_GITREV="${GITREV_SHORT}${GITREV_PLUS}")
+diff --git a/src/conf.h b/src/conf.h
+index e50b250..449161d 100644
+--- a/src/conf.h
++++ b/src/conf.h
+@@ -161,8 +161,8 @@ typedef unsigned char upx_byte;
+ #define WITH_ZLIB 1
+ #if (WITH_UCL)
+ # define ucl_compress_config_t REAL_ucl_compress_config_t
+-# include <ucl/include/ucl/uclconf.h>
+-# include <ucl/include/ucl/ucl.h>
++# include <ucl/uclconf.h>
++# include <ucl/ucl.h>
+ # undef ucl_compress_config_t
+ # undef ucl_compress_config_p
+ #endif
1
0
commit f7907018cd86367a6f216184953f67648ccbcd7d
Author: Tim Biermann <tbier(a)posteo.de>
Date: Sat Oct 29 19:21:39 2022 +0000
xmlsec: 1.2.34 -> 1.2.36
diff --git a/xmlsec/.footprint b/xmlsec/.footprint
index 6ccdf5b2f..1e4b56726 100644
--- a/xmlsec/.footprint
+++ b/xmlsec/.footprint
@@ -42,14 +42,14 @@ drwxr-xr-x root/root usr/include/xmlsec1/xmlsec/openssl/
drwxr-xr-x root/root usr/lib/
-rw-r--r-- root/root usr/lib/libxmlsec1-openssl.a
-rwxr-xr-x root/root usr/lib/libxmlsec1-openssl.la
-lrwxrwxrwx root/root usr/lib/libxmlsec1-openssl.so -> libxmlsec1-openssl.so.1.2.34
-lrwxrwxrwx root/root usr/lib/libxmlsec1-openssl.so.1 -> libxmlsec1-openssl.so.1.2.34
--rwxr-xr-x root/root usr/lib/libxmlsec1-openssl.so.1.2.34
+lrwxrwxrwx root/root usr/lib/libxmlsec1-openssl.so -> libxmlsec1-openssl.so.1.2.36
+lrwxrwxrwx root/root usr/lib/libxmlsec1-openssl.so.1 -> libxmlsec1-openssl.so.1.2.36
+-rwxr-xr-x root/root usr/lib/libxmlsec1-openssl.so.1.2.36
-rw-r--r-- root/root usr/lib/libxmlsec1.a
-rwxr-xr-x root/root usr/lib/libxmlsec1.la
-lrwxrwxrwx root/root usr/lib/libxmlsec1.so -> libxmlsec1.so.1.2.34
-lrwxrwxrwx root/root usr/lib/libxmlsec1.so.1 -> libxmlsec1.so.1.2.34
--rwxr-xr-x root/root usr/lib/libxmlsec1.so.1.2.34
+lrwxrwxrwx root/root usr/lib/libxmlsec1.so -> libxmlsec1.so.1.2.36
+lrwxrwxrwx root/root usr/lib/libxmlsec1.so.1 -> libxmlsec1.so.1.2.36
+-rwxr-xr-x root/root usr/lib/libxmlsec1.so.1.2.36
drwxr-xr-x root/root usr/lib/pkgconfig/
-rw-r--r-- root/root usr/lib/pkgconfig/xmlsec1-openssl.pc
-rw-r--r-- root/root usr/lib/pkgconfig/xmlsec1.pc
diff --git a/xmlsec/.signature b/xmlsec/.signature
index cddaa8083..b016c707e 100644
--- a/xmlsec/.signature
+++ b/xmlsec/.signature
@@ -1,5 +1,5 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF3xP+Hq/O4o9EuAe5/aveCkHp2ItWIq5VOfKRoTG0evHpbUy6S5p+ZfmKzTM9QyB6FPwDd6aej1PE7V4SQK2qSA8=
-SHA256 (Pkgfile) = 267f33f268b59fe690c8b398f1430d147e54c21ec7ba41d7eb49bec970f25ac3
-SHA256 (.footprint) = 8869263c5bacd22588b23c59fb9292b3f6c53f47ab7bc4a862618654ce9666e4
-SHA256 (xmlsec1-1.2.34.tar.gz) = 52ced4943f35bd7d0818a38298c1528ca4ac8a54440fd71134a07d2d1370a262
+RWSagIOpLGJF3+Nu5eAsZm2xqMhUbe3SpDuRqV6MZPP3GBfnSsgkMgn132hhtDjM69m8uoMHfyM99dmQkAiv+SR8iP6eTHxn9wk=
+SHA256 (Pkgfile) = 8f2876f664be0cf602048660917a81a9ed0e3e40ae872f3eeae81e6363b7b23c
+SHA256 (.footprint) = 5ea32fee7884b5eb54796d9983205f30422590738ee8989a1919e23b7cf9b771
+SHA256 (xmlsec1-1.2.36.tar.gz) = f0d97e008b211d85808f038326d42e7f5cf46648e176f07406a323e7e8d41c80
diff --git a/xmlsec/Pkgfile b/xmlsec/Pkgfile
index 90ef4c6e4..b0e91e32f 100644
--- a/xmlsec/Pkgfile
+++ b/xmlsec/Pkgfile
@@ -5,9 +5,9 @@
# Optional: gnutls libgcrypt nss
name=xmlsec
-version=1.2.34
+version=1.2.36
release=1
-source=(https://www.aleksey.com/xmlsec/download/"$name"1-$version.tar.gz)
+source=(https://www.aleksey.com/xmlsec/download/${name}1-$version.tar.gz)
build() {
cd ${name}1-$version
1
0
commit 0c57efbd7e16df2d0c166718713e37b073157b0d
Author: Tim Biermann <tbier(a)posteo.de>
Date: Sat Oct 29 19:19:06 2022 +0000
zellij: 0.31.4 -> 0.32.0
diff --git a/zellij/.signature b/zellij/.signature
index 54d70524e..ab842e80f 100644
--- a/zellij/.signature
+++ b/zellij/.signature
@@ -1,5 +1,5 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF33Wo4eZ24AGPT2cfNK+0EGRyWsfRmRWhRbLhCU+iP05Eja3W4peU0xUXRe8hXx12ERsIIUzHdayv5Wdy2ATQBAY=
-SHA256 (Pkgfile) = ec43f9e064d79cb523414641beb715dbd92978740177d8b952fb0c83f3775fb8
+RWSagIOpLGJF35qNaNtt+ylO/yqJfIII8aqTRoTgmP3KOgpn76uR3KfH/r3gafMAyVv/k9D+5zX6g7zQEBDqIUh1K/kOVcvZ3wg=
+SHA256 (Pkgfile) = 6655c00ca6c69faca57dda90f9e8b28ed1f80de722c79e6cd860572a64a5eb9e
SHA256 (.footprint) = 537a7725ad8d6bec80c3a23dcfe06ad71a7a7f2ff4a32e05142522fc42a355c0
-SHA256 (zellij-0.31.4.tar.gz) = 286b08523457cdadee89bb1839f8d08ac402af00f3e27063520a7ed9ee7afc8a
+SHA256 (zellij-0.32.0.tar.gz) = e81cfc94bc15faeb1cacaddcea20e6f8220e6d288b84dfdf221c17d4868de2c0
diff --git a/zellij/Pkgfile b/zellij/Pkgfile
index 4f6fa3f9b..a67c6d9c9 100644
--- a/zellij/Pkgfile
+++ b/zellij/Pkgfile
@@ -4,7 +4,7 @@
# Depends on: rust
name=zellij
-version=0.31.4
+version=0.32.0
release=1
source=(https://github.com/zellij-org/zellij/archive/v$version/$name-$versi…
1
0
ports/contrib (3.7): nodejs-lts-hydrogen: initial commit, version 18.12.0
by crux@crux.nu 30 Oct '22
by crux@crux.nu 30 Oct '22
30 Oct '22
commit 74196cee04f26d9a7ae22b200f0df1730178961c
Author: Tim Biermann <tbier(a)posteo.de>
Date: Sat Oct 29 19:03:49 2022 +0000
nodejs-lts-hydrogen: initial commit, version 18.12.0
diff --git a/nodejs-lts-hydrogen/.footprint b/nodejs-lts-hydrogen/.footprint
new file mode 100644
index 000000000..9c3a8968f
--- /dev/null
+++ b/nodejs-lts-hydrogen/.footprint
@@ -0,0 +1,140 @@
+drwxr-xr-x root/root usr/
+drwxr-xr-x root/root usr/opt/
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/bin/
+lrwxrwxrwx root/root usr/opt/nodejs-lts-hydrogen/bin/corepack -> ../lib/node_modules/corepack/dist/corepack.js
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/bin/node
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/include/
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/include/node/
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/common.gypi
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/config.gypi
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/include/node/cppgc/
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/cppgc/common.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/js_native_api.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/js_native_api_types.h
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/include/node/libplatform/
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/libplatform/libplatform-export.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/libplatform/libplatform.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/libplatform/v8-tracing.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/node.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/node_api.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/node_api_types.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/node_buffer.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/node_object_wrap.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/node_version.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-array-buffer.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-callbacks.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-container.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-context.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-data.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-date.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-debug.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-embedder-heap.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-embedder-state-scope.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-exception.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-extension.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-external.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-forward.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-function-callback.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-function.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-initialization.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-internal.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-isolate.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-json.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-local-handle.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-locker.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-maybe.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-memory-span.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-message.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-microtask-queue.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-microtask.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-object.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-persistent-handle.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-platform.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-primitive-object.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-primitive.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-profiler.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-promise.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-proxy.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-regexp.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-script.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-snapshot.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-statistics.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-template.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-traced-handle.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-typed-array.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-unwinder.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-value-serializer.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-value.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-version.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-wasm.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8-weak-callback-info.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8.h
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/include/node/v8config.h
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/CHANGELOG.md
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/LICENSE.md
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/dist/
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/dist/corepack.js
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/dist/npm.js
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/dist/npx.js
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/dist/pnpm.js
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/dist/pnpx.js
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/dist/vcc.js
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/dist/vendors-_yarn_berry_cache_proxy-agent-npm-5_0_0-41772f4b01-9_zip_node_modules_proxy-agent_index_js.js
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/dist/yarn.js
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/dist/yarnpkg.js
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/package.json
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/corepack
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/corepack.cmd
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/corepack.ps1
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/corepack
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/corepack.cmd
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/corepack.ps1
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/npm
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/npm.cmd
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/npm.ps1
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/npx
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/npx.cmd
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/npx.ps1
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/pnpm
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/pnpm.cmd
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/pnpm.ps1
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/pnpx
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/pnpx.cmd
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/pnpx.ps1
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/yarn
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/yarn.cmd
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/yarn.ps1
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/yarnpkg
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/yarnpkg.cmd
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/nodewin/yarnpkg.ps1
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/npm
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/npm.cmd
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/npm.ps1
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/npx
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/npx.cmd
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/npx.ps1
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/pnpm
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/pnpm.cmd
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/pnpm.ps1
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/pnpx
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/pnpx.cmd
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/pnpx.ps1
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/yarn
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/yarn.cmd
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/yarn.ps1
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/yarnpkg
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/yarnpkg.cmd
+-rwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/lib/node_modules/corepack/shims/yarnpkg.ps1
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/share/
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/share/man/
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/share/man/man1/
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/share/man/man1/node.1.gz
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/share/systemtap/
+drwxr-xr-x root/root usr/opt/nodejs-lts-hydrogen/share/systemtap/tapset/
+-rw-r--r-- root/root usr/opt/nodejs-lts-hydrogen/share/systemtap/tapset/node.stp
diff --git a/nodejs-lts-hydrogen/.signature b/nodejs-lts-hydrogen/.signature
new file mode 100644
index 000000000..3ac796fff
--- /dev/null
+++ b/nodejs-lts-hydrogen/.signature
@@ -0,0 +1,5 @@
+untrusted comment: verify with /etc/ports/contrib.pub
+RWSagIOpLGJF30L+27yF9fvZoweiUnjWn1YciCfhUNGhJ+zp3EyvQEJNXEuK7di3tKEB7NgUR9KMW0L6+nxDG7cFt3ofKap3ewE=
+SHA256 (Pkgfile) = 18df0e1b9bb190f6af016d93fb102d13413943ae439e4a2b709ebe210f68fd8e
+SHA256 (.footprint) = 22844a6acca50e46a95dbe0edc77ac43906ac3a0fe0ff8d86c3399c7ee31b082
+SHA256 (node-v18.12.0.tar.xz) = 73a7f01e2999eb197763ced666a6cd544ad580eaefb73e0a849603b3e804f42e
diff --git a/nodejs-lts-hydrogen/Pkgfile b/nodejs-lts-hydrogen/Pkgfile
new file mode 100644
index 000000000..a45ad0b9d
--- /dev/null
+++ b/nodejs-lts-hydrogen/Pkgfile
@@ -0,0 +1,42 @@
+# Description: Evented I/O for V8 javascript (LTS release: Gallium)
+# URL: https://nodejs.org/
+# Maintainer: Tim Biermann, tbier at posteo dot de
+# Depends on: libnghttp2 libuv openssl11 zlib
+# Optional: brotli c-ares icu
+
+name=nodejs-lts-hydrogen
+version=18.12.0
+release=1
+source=(https://nodejs.org/dist/v$version/node-v$version.tar.xz)
+
+build() {
+ cd node-v$version
+
+ export PKG_CONFIG_PATH="/usr/lib/openssl-1.1/pkgconfig:/usr/lib/pkgconfig"
+
+ prt-get isinst brotli && PKGMK_NODEJS+=' --shared-brotli'
+ prt-get isinst c-ares && PKGMK_NODEJS+=' --shared-cares'
+ prt-get isinst icu && PKGMK_NODEJS+=' --with-intl=system-icu'
+
+ ./configure ${PKGMK_NODEJS} \
+ --prefix=/usr/opt/$name \
+ --ninja \
+ --shared-libuv \
+ --shared-nghttp2 \
+ --shared-openssl \
+ --shared-zlib \
+ --without-npm
+
+ make
+ make DESTDIR=$PKG install
+
+ # clean up
+ rm -r $PKG/usr/opt/$name/share/doc
+ find $PKG -type f \( \
+ -name 'README.md' -o \
+ -name 'AUTHORS.md' -o \
+ -name 'INSTALL.md' -o \
+ -name 'TODO.org' -o \
+ -name 'ChangeLog' -o \
+ -name 'NEWS' \) -delete
+}
1
0
commit 42eee860849dfdc97eda71ce2557ed2c4bd4d4cb
Author: Tim Biermann <tbier(a)posteo.de>
Date: Sun Oct 30 10:30:09 2022 +0000
acorn: 8.8.0 -> 8.8.1
diff --git a/acorn/.signature b/acorn/.signature
index e8997152d..166d4e182 100644
--- a/acorn/.signature
+++ b/acorn/.signature
@@ -1,5 +1,5 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF39PbEXnUUVaI75OJSnIV2E7DIIAxQmTcLLs0LB6dYO5rPlsoJZkb6LYem8YFL8+c6njKro21fkx24BPX47uixAc=
-SHA256 (Pkgfile) = 28f7a1008e59ad499116ddcc482a5c9b0f02d039cb388083a0a11487264ecdd1
+RWSagIOpLGJF33Lnh6H3pZnWeXaWo6rE/0HyNGFZiz9+CU3T519Up76xE7QWltFhC1tEUjN/OjcTk5MfAZ10pSbOCXqcR6Ma/Aw=
+SHA256 (Pkgfile) = 28041aceb5c7b4204883797bf01db180d9e6b94bc2626dc991b8b53ef77a2571
SHA256 (.footprint) = ea773f577ad113d5aa033ed58795c038be8894fd60f5cc281a93f4886442a073
-SHA256 (acorn-8.8.0.tgz) = aa1c78ebf841c7fcbd7d599ce425a843a12652135a19e4a8ac8d5fd73dd26c88
+SHA256 (acorn-8.8.1.tgz) = b52270bf752c8282b69e9d1ce1d0f653b63c7541f3523405d34a934389dc36b1
diff --git a/acorn/Pkgfile b/acorn/Pkgfile
index 87dd35310..a661b598f 100644
--- a/acorn/Pkgfile
+++ b/acorn/Pkgfile
@@ -4,7 +4,7 @@
# Depends on: npm
name=acorn
-version=8.8.0
+version=8.8.1
release=1
source=(https://registry.npmjs.org/$name/-/$name-$version.tgz)
1
0
commit f9c5c67f1e3774e36ed738d7b4df32df7b98d863
Author: Tim Biermann <tbier(a)posteo.de>
Date: Sun Oct 30 10:28:25 2022 +0000
asciidoctor: 2.0.17 -> 2.0.18
diff --git a/asciidoctor/.signature b/asciidoctor/.signature
index 010ece101..5cef61478 100644
--- a/asciidoctor/.signature
+++ b/asciidoctor/.signature
@@ -1,5 +1,5 @@
untrusted comment: verify with /etc/ports/contrib.pub
-RWSagIOpLGJF3/HojxUVPUu52D0yR6JR/wcKQa9CeQmEBPdk8w9caUGk2deh/2V25M7rnPrR0fPRhg7gAW/NzCnDpBftWQ7GbQk=
-SHA256 (Pkgfile) = c7efa518373f7e101083db707bf45a600a9efeb4f1e8079829b29be8017ea2d3
+RWSagIOpLGJF3604gMyhuq3egoqztv23Q1w88nGd7AdVpK7x0RTFPYbRE75V/1WUZE9N8230/5BvLlZs650QkC8afd6SbL8CiA0=
+SHA256 (Pkgfile) = b8861654ee40cf1286bbbdc545bd4793bd860cc2e8d5f2e51538d74445f6e2c0
SHA256 (.footprint) = 3c53cf78e00e8f6702b6142aa03f07459c5eb97dff4a74d76d687cb84d9f66cf
-SHA256 (asciidoctor-v2.0.17.tar.gz) = ca939b978d5d3bfe0cfcf1bcf5513f199aa77813e4a19f568dc6b6f17b892728
+SHA256 (asciidoctor-v2.0.18.tar.gz) = fad34373023f3212090635d7b793c2528e64c0593b2ba5c38b59f3fb6fd517f5
diff --git a/asciidoctor/Pkgfile b/asciidoctor/Pkgfile
index 6129b91c1..9a408f967 100644
--- a/asciidoctor/Pkgfile
+++ b/asciidoctor/Pkgfile
@@ -4,7 +4,7 @@
# Depends on: ruby
name=asciidoctor
-version=2.0.17
+version=2.0.18
release=1
source=(https://github.com/$name/$name/archive/v$version/$name-v$version.ta…
1
0