Snap for 7487883 from c66cc18cf8c724425086f2e105eee9ad010cb7b9 to sdk-release

Change-Id: I18aa34dc6d1ac4431417aa140886f3ea74add2dd
diff --git a/.cargo_vcs_info.json b/.cargo_vcs_info.json
index 2d990ac..8481d95 100644
--- a/.cargo_vcs_info.json
+++ b/.cargo_vcs_info.json
@@ -1,5 +1,5 @@
 {
   "git": {
-    "sha1": "2979eee12f92d1903a53f820664c65735b010e0e"
+    "sha1": "6a43efb32cf14b8dc4cd294429d3de259d37e279"
   }
 }
diff --git a/Android.bp b/Android.bp
index 7d07606..95aa797 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,4 +1,5 @@
 // This file is generated by cargo2android.py --run --dependencies --device.
+// Do not modify this file as changes will be overridden on upgrade.
 
 package {
     default_applicable_licenses: ["external_rust_crates_cexpr_license"],
@@ -48,6 +49,11 @@
 }
 
 // dependent_library ["feature_list"]
-//   memchr-2.3.3 "std,use_std"
-//   nom-5.1.2 "alloc,std"
-//   version_check-0.9.2
+//   bitvec-0.19.5 "alloc,std"
+//   funty-1.1.0
+//   memchr-2.3.4 "std,use_std"
+//   nom-6.2.0 "alloc,bitvec,funty,std"
+//   radium-0.5.3
+//   tap-1.0.1
+//   version_check-0.9.3
+//   wyz-0.2.0 "alloc"
diff --git a/Cargo.toml b/Cargo.toml
index 9ae350d..8f6dcc2 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -13,7 +13,7 @@
 [package]
 edition = "2018"
 name = "cexpr"
-version = "0.4.0"
+version = "0.5.0"
 authors = ["Jethro Beekman <jethro@jbeekman.nl>"]
 description = "A C expression parser and evaluator"
 documentation = "https://docs.rs/cexpr/"
@@ -21,7 +21,7 @@
 license = "Apache-2.0/MIT"
 repository = "https://github.com/jethrogb/rust-cexpr"
 [dependencies.nom]
-version = "5"
+version = "6"
 features = ["std"]
 default-features = false
 [dev-dependencies.clang-sys]
diff --git a/Cargo.toml.orig b/Cargo.toml.orig
index d6ab0de..acbe572 100644
--- a/Cargo.toml.orig
+++ b/Cargo.toml.orig
@@ -1,6 +1,6 @@
 [package]
 name = "cexpr"
-version = "0.4.0"
+version = "0.5.0"
 edition = "2018"
 authors = ["Jethro Beekman <jethro@jbeekman.nl>"]
 license = "Apache-2.0/MIT"
@@ -13,7 +13,7 @@
 travis-ci = { repository = "jethrogb/rust-cexpr" }
 
 [dependencies]
-nom = { version = "5", default-features = false, features = ["std"] }
+nom = { version = "6", default-features = false, features = ["std"] }
 
 [dev-dependencies]
 clang-sys = ">= 0.13.0, < 0.29.0"
diff --git a/METADATA b/METADATA
index 8f79fa2..ea007fa 100644
--- a/METADATA
+++ b/METADATA
@@ -7,13 +7,13 @@
   }
   url {
     type: ARCHIVE
-    value: "https://static.crates.io/crates/cexpr/cexpr-0.4.0.crate"
+    value: "https://static.crates.io/crates/cexpr/cexpr-0.5.0.crate"
   }
-  version: "0.4.0"
+  version: "0.5.0"
   license_type: NOTICE
   last_upgrade_date {
-    year: 2020
-    month: 3
-    day: 31
+    year: 2021
+    month: 6
+    day: 21
   }
 }
diff --git a/TEST_MAPPING b/TEST_MAPPING
index 6716814..a731acb 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -1,8 +1,14 @@
-// Generated by cargo2android.py for tests in Android.bp
+// Generated by update_crate_tests.py for tests that depend on this crate.
 {
   "presubmit": [
     {
+      "name": "keystore2_test"
+    },
+    {
       "name": "libsqlite3-sys_device_test_src_lib"
+    },
+    {
+      "name": "vpnprofilestore_test"
     }
   ]
 }
diff --git a/src/expr.rs b/src/expr.rs
index b1fbfb2..5dce3c7 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -31,7 +31,7 @@
 use crate::ToCexprResult;
 use nom::branch::alt;
 use nom::combinator::{complete, map, map_opt};
-use nom::multi::{fold_many0, many0, separated_list};
+use nom::multi::{fold_many0, many0, separated_list0};
 use nom::sequence::{delimited, pair, preceded};
 use nom::*;
 
@@ -100,7 +100,7 @@
 	($k:ident, $c:expr) => ({
         move |input: &[Token]| {
 		if input.is_empty() {
-			let res: CResult<'_, &[u8]> = Err(crate::nom::Err::Incomplete(Needed::Size($c.len())));
+			let res: CResult<'_, &[u8]> = Err(crate::nom::Err::Incomplete(Needed::new($c.len())));
 			res
 		} else {
 			if input[0].kind==TokenKind::$k && &input[0].raw[..]==$c {
@@ -113,29 +113,16 @@
 	});
 );
 
-macro_rules! typed_token (
-	($k:ident) => ({
-        move |input: &[Token]| {
-		if input.is_empty() {
-			let res: CResult<'_, &[u8]> = Err(nom::Err::Incomplete(Needed::Size(1)));
-			res
-		} else {
-			if input[0].kind==TokenKind::$k {
-				Ok((&input[1..], &input[0].raw[..]))
-			} else {
-				Err(crate::nom::Err::Error((input, crate::ErrorKind::TypedToken(TokenKind::$k)).into()))
-			}
-		}
-        }
-	});
-);
-
-#[allow(dead_code)]
-fn any_token(input: &[Token]) -> CResult<'_, &Token> {
+fn identifier_token(input: &[Token]) -> CResult<'_, &[u8]> {
     if input.is_empty() {
-        Err(crate::nom::Err::Incomplete(Needed::Size(1)))
+        let res: CResult<'_, &[u8]> = Err(nom::Err::Incomplete(Needed::new(1)));
+        res
     } else {
-        Ok((&input[1..], &input[0]))
+        if input[0].kind == TokenKind::Identifier {
+            Ok((&input[1..], &input[0].raw[..]))
+        } else {
+            Err(crate::nom::Err::Error((input, crate::ErrorKind::TypedToken(TokenKind::Identifier)).into()))
+        }
     }
 }
 
@@ -151,7 +138,7 @@
                 .map(|opt| opt.len())
                 .min()
                 .expect("at least one option");
-            Err(crate::nom::Err::Incomplete(Needed::Size(min)))
+            Err(crate::nom::Err::Incomplete(Needed::new(min)))
         } else if input[0].kind == TokenKind::Punctuation
             && c.iter().any(|opt| opt.as_bytes() == &input[0].raw[..])
         {
@@ -295,9 +282,9 @@
 
 fn numeric<I: Clone, E: nom::error::ParseError<I>, F>(
     f: F,
-) -> impl Fn(I) -> nom::IResult<I, EvalResult, E>
+) -> impl FnMut(I) -> nom::IResult<I, EvalResult, E>
 where
-    F: Fn(I) -> nom::IResult<I, EvalResult, E>,
+    F: FnMut(I) -> nom::IResult<I, EvalResult, E>,
 {
     nom::combinator::map_opt(f, EvalResult::as_numeric)
 }
@@ -419,7 +406,7 @@
 impl<'a> PRef<'a> {
     fn identifier(self, input: &'_ [Token]) -> CResult<'_, EvalResult> {
         match input.split_first() {
-            None => Err(Err::Incomplete(Needed::Size(1))),
+            None => Err(Err::Incomplete(Needed::new(1))),
             Some((
                 &Token {
                     kind: TokenKind::Identifier,
@@ -443,7 +430,7 @@
 
     fn literal(self, input: &'_ [Token]) -> CResult<'_, EvalResult> {
         match input.split_first() {
-            None => Err(Err::Incomplete(Needed::Size(1))),
+            None => Err(Err::Incomplete(Needed::new(1))),
             Some((
                 &Token {
                     kind: TokenKind::Literal,
@@ -496,7 +483,7 @@
     }
 
     fn macro_definition(self, input: &'_ [Token]) -> CResult<'_, (&'_ [u8], EvalResult)> {
-        pair(typed_token!(Identifier), |i| self.expr(i))(input)
+        pair(identifier_token, |i| self.expr(i))(input)
     }
 }
 
@@ -519,7 +506,7 @@
         IdentifierParser { identifiers }
     }
 
-    /// Parse and evalute an expression of a list of tokens.
+    /// Parse and evaluate an expression of a list of tokens.
     ///
     /// Returns an error if the input is not a valid expression or if the token
     /// stream contains comments, keywords or unknown identifiers.
@@ -527,7 +514,7 @@
         self.as_ref().expr(input)
     }
 
-    /// Parse and evaluate a macro definition from of a list of tokens.
+    /// Parse and evaluate a macro definition from a list of tokens.
     ///
     /// Returns the identifier for the macro and its replacement evaluated as an
     /// expression. The input should not include `#define`.
@@ -552,7 +539,7 @@
     }
 }
 
-/// Parse and evalute an expression of a list of tokens.
+/// Parse and evaluate an expression of a list of tokens.
 ///
 /// Returns an error if the input is not a valid expression or if the token
 /// stream contains comments, keywords or identifiers.
@@ -560,7 +547,7 @@
     IdentifierParser::new(&HashMap::new()).expr(input)
 }
 
-/// Parse and evaluate a macro definition from of a list of tokens.
+/// Parse and evaluate a macro definition from a list of tokens.
 ///
 /// Returns the identifier for the macro and its replacement evaluated as an
 /// expression. The input should not include `#define`.
@@ -613,10 +600,10 @@
 /// ```
 pub fn fn_macro_declaration(input: &[Token]) -> CResult<'_, (&[u8], Vec<&[u8]>)> {
     pair(
-        typed_token!(Identifier),
+        identifier_token,
         delimited(
             p("("),
-            separated_list(p(","), typed_token!(Identifier)),
+            separated_list0(p(","), identifier_token),
             p(")"),
         ),
     )(input)
diff --git a/src/lib.rs b/src/lib.rs
index 84e1e83..5170f97 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -19,7 +19,7 @@
 
 pub mod nom {
     //! nom's result types, re-exported.
-    pub use nom::{error::ErrorKind, Err, IResult, Needed};
+    pub use nom::{error::ErrorKind, error::Error, Err, IResult, Needed};
 }
 pub mod expr;
 pub mod literal;
@@ -86,6 +86,15 @@
     }
 }
 
+impl<I> From<::nom::error::Error<I>> for Error<I> {
+    fn from(e: ::nom::error::Error<I>) -> Self {
+        Self {
+            input: e.input,
+            error: e.code.into(),
+        }
+    }
+}
+
 impl<I> ::nom::error::ParseError<I> for Error<I> {
     fn from_error_kind(input: I, kind: nom::ErrorKind) -> Self {
         Self {
diff --git a/src/literal.rs b/src/literal.rs
index 39f07be..b74699f 100644
--- a/src/literal.rs
+++ b/src/literal.rs
@@ -70,7 +70,7 @@
 }
 
 // A non-allocating version of this would be nice...
-impl Into<Vec<u8>> for CChar {
+impl std::convert::Into<Vec<u8>> for CChar {
     fn into(self) -> Vec<u8> {
         match self {
             CChar::Char(c) => {
@@ -88,12 +88,12 @@
 }
 
 /// ensures the child parser consumes the whole input
-pub fn full<I: Clone, O, E: From<nom::error::ErrorKind>, F>(
+pub fn full<I: Clone, O, F>(
     f: F,
-) -> impl Fn(I) -> nom::IResult<I, O, (I, E)>
+) -> impl Fn(I) -> nom::IResult<I, O>
 where
     I: nom::InputLength,
-    F: Fn(I) -> nom::IResult<I, O, (I, E)>,
+    F: Fn(I) -> nom::IResult<I, O>,
 {
     move |input| {
         let res = f(input);
@@ -102,7 +102,7 @@
                 if i.input_len() == 0 {
                     Ok((i, o))
                 } else {
-                    Err(nom::Err::Error((i, nom::error::ErrorKind::Complete.into())))
+                    Err(nom::Err::Error(nom::error::Error::new(i, nom::error::ErrorKind::Complete)))
                 }
             }
             r => r,
@@ -119,8 +119,8 @@
         fn parser(i: &[u8]) -> crate::nom::IResult<&[u8], u8> {
             match i.split_first() {
                 $(Some((&c @ $p,rest)))|* => Ok((rest,c)),
-                Some(_) => Err(nom::Err::Error((i, nom::error::ErrorKind::OneOf))),
-                None => Err(nom::Err::Incomplete(Needed::Size(1))),
+                Some(_) => Err(nom::Err::Error(nom::error::Error::new(i, nom::error::ErrorKind::OneOf))),
+                None => Err(nom::Err::Incomplete(Needed::new(1))),
             }
         }
 
@@ -272,7 +272,7 @@
                     c_int_radix(v, 8)
                 }),
                 map_opt(many1(complete(decimal)), |v| c_int_radix(v, 10)),
-                |input| Err(crate::nom::Err::Error((input, crate::nom::ErrorKind::Fix))),
+                |input| Err(crate::nom::Err::Error(nom::error::Error::new(input, crate::nom::ErrorKind::Fix))),
             )),
             opt(take_ul),
         ),