summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-03-25 12:31:38 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-03-25 12:31:38 +0000
commita22258f09ce27ebf3d9a63957780cb78396e05f6 (patch)
treee4e9d126386df7b58ad3bf0c7b6ad68537288b11
parentf96e32fad6680d19ba4874ace25a01ed70f5747c (diff)
parent61fbdb4506a7772a21c6f29568fae33fbc63b24b (diff)
downloadcexpr-android13-mainline-go-cellbroadcast-release.tar.gz
Snap for 8358640 from 61fbdb4506a7772a21c6f29568fae33fbc63b24b to mainline-go-cellbroadcast-releaseaml_go_cbr_330912000android13-mainline-go-cellbroadcast-release
Change-Id: I125d59a51d38659d51286885e4af53bbb05cf10a
-rw-r--r--.cargo_vcs_info.json2
-rw-r--r--Android.bp10
-rw-r--r--Cargo.toml4
-rw-r--r--Cargo.toml.orig4
-rw-r--r--METADATA10
-rw-r--r--TEST_MAPPING20
-rw-r--r--cargo2android.json4
-rw-r--r--patches/nom7.patch84
-rw-r--r--src/expr.rs69
-rw-r--r--src/lib.rs11
-rw-r--r--src/literal.rs18
11 files changed, 167 insertions, 69 deletions
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..e0534ba 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1,4 +1,5 @@
-// This file is generated by cargo2android.py --run --dependencies --device.
+// This file is generated by cargo2android.py --config cargo2android.json.
+// Do not modify this file as changes will be overridden on upgrade.
package {
default_applicable_licenses: ["external_rust_crates_cexpr_license"],
@@ -40,14 +41,11 @@ rust_library {
name: "libcexpr",
host_supported: true,
crate_name: "cexpr",
+ cargo_env_compat: true,
+ cargo_pkg_version: "0.5.0",
srcs: ["src/lib.rs"],
edition: "2018",
rustlibs: [
"libnom",
],
}
-
-// dependent_library ["feature_list"]
-// memchr-2.3.3 "std,use_std"
-// nom-5.1.2 "alloc,std"
-// version_check-0.9.2
diff --git a/Cargo.toml b/Cargo.toml
index 9ae350d..a3067d0 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 @@ keywords = ["C", "expression", "parser"]
license = "Apache-2.0/MIT"
repository = "https://github.com/jethrogb/rust-cexpr"
[dependencies.nom]
-version = "5"
+version = "7"
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 @@ keywords = ["C","expression","parser"]
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 @@ third_party {
}
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..e4ec3b3 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -1,8 +1,24 @@
-// Generated by cargo2android.py for tests in Android.bp
+// Generated by update_crate_tests.py for tests that depend on this crate.
{
+ "imports": [
+ {
+ "path": "external/rust/crates/libsqlite3-sys"
+ }
+ ],
"presubmit": [
{
- "name": "libsqlite3-sys_device_test_src_lib"
+ "name": "keystore2_test"
+ },
+ {
+ "name": "legacykeystore_test"
+ }
+ ],
+ "presubmit-rust": [
+ {
+ "name": "keystore2_test"
+ },
+ {
+ "name": "legacykeystore_test"
}
]
}
diff --git a/cargo2android.json b/cargo2android.json
new file mode 100644
index 0000000..bf78496
--- /dev/null
+++ b/cargo2android.json
@@ -0,0 +1,4 @@
+{
+ "device": true,
+ "run": true
+} \ No newline at end of file
diff --git a/patches/nom7.patch b/patches/nom7.patch
new file mode 100644
index 0000000..5ba703d
--- /dev/null
+++ b/patches/nom7.patch
@@ -0,0 +1,84 @@
+diff --git a/Cargo.toml b/Cargo.toml
+index 8f6dcc2..a3067d0 100644
+--- a/Cargo.toml
++++ b/Cargo.toml
+@@ -21,7 +21,7 @@ keywords = ["C", "expression", "parser"]
+ license = "Apache-2.0/MIT"
+ repository = "https://github.com/jethrogb/rust-cexpr"
+ [dependencies.nom]
+-version = "6"
++version = "7"
+ features = ["std"]
+ default-features = false
+ [dev-dependencies.clang-sys]
+diff --git a/src/expr.rs b/src/expr.rs
+index 5dce3c7..7f7e458 100644
+--- a/src/expr.rs
++++ b/src/expr.rs
+@@ -308,7 +308,7 @@ impl<'a> PRef<'a> {
+ pair(complete(one_of_punctuation(&["*", "/", "%"][..])), |i| {
+ self.unary(i)
+ }),
+- acc,
++ move || acc.clone(),
+ |mut acc, (op, val): (&[u8], EvalResult)| {
+ match op[0] as char {
+ '*' => acc *= &val,
+@@ -327,7 +327,7 @@ impl<'a> PRef<'a> {
+ pair(complete(one_of_punctuation(&["+", "-"][..])), |i| {
+ self.mul_div_rem(i)
+ }),
+- acc,
++ move || acc.clone(),
+ |mut acc, (op, val): (&[u8], EvalResult)| {
+ match op[0] as char {
+ '+' => acc += &val,
+@@ -345,7 +345,7 @@ impl<'a> PRef<'a> {
+ pair(complete(one_of_punctuation(&["<<", ">>"][..])), |i| {
+ self.add_sub(i)
+ }),
+- acc,
++ move || acc.clone(),
+ |mut acc, (op, val): (&[u8], EvalResult)| {
+ match op {
+ b"<<" => acc <<= &val,
+@@ -361,7 +361,7 @@ impl<'a> PRef<'a> {
+ let (input, acc) = self.shl_shr(input)?;
+ numeric(fold_many0(
+ preceded(complete(p("&")), |i| self.shl_shr(i)),
+- acc,
++ move || acc.clone(),
+ |mut acc, val: EvalResult| {
+ acc &= &val;
+ acc
+@@ -373,7 +373,7 @@ impl<'a> PRef<'a> {
+ let (input, acc) = self.and(input)?;
+ numeric(fold_many0(
+ preceded(complete(p("^")), |i| self.and(i)),
+- acc,
++ move || acc.clone(),
+ |mut acc, val: EvalResult| {
+ acc ^= &val;
+ acc
+@@ -385,7 +385,7 @@ impl<'a> PRef<'a> {
+ let (input, acc) = self.xor(input)?;
+ numeric(fold_many0(
+ preceded(complete(p("|")), |i| self.xor(i)),
+- acc,
++ move || acc.clone(),
+ |mut acc, val: EvalResult| {
+ acc |= &val;
+ acc
+diff --git a/src/literal.rs b/src/literal.rs
+index b74699f..68e85c7 100644
+--- a/src/literal.rs
++++ b/src/literal.rs
+@@ -224,7 +224,7 @@ fn c_string(i: &[u8]) -> nom::IResult<&[u8], Vec<u8>> {
+ map(escaped_char, |c: CChar| c.into()),
+ map(is_not([b'\\', b'"']), |c: &[u8]| c.into()),
+ )),
+- Vec::new(),
++ Vec::new,
+ |mut v: Vec<u8>, res: Vec<u8>| {
+ v.extend_from_slice(&res);
+ v
diff --git a/src/expr.rs b/src/expr.rs
index b1fbfb2..7f7e458 100644
--- a/src/expr.rs
+++ b/src/expr.rs
@@ -31,7 +31,7 @@ use crate::token::{Kind as TokenKind, Token};
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 @@ macro_rules! exact_token (
($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! exact_token (
});
);
-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 @@ fn one_of_punctuation(c: &'static [&'static str]) -> impl Fn(&[Token]) -> CResul
.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 unary_op(input: (&[u8], EvalResult)) -> Option<EvalResult> {
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)
}
@@ -321,7 +308,7 @@ impl<'a> PRef<'a> {
pair(complete(one_of_punctuation(&["*", "/", "%"][..])), |i| {
self.unary(i)
}),
- acc,
+ move || acc.clone(),
|mut acc, (op, val): (&[u8], EvalResult)| {
match op[0] as char {
'*' => acc *= &val,
@@ -340,7 +327,7 @@ impl<'a> PRef<'a> {
pair(complete(one_of_punctuation(&["+", "-"][..])), |i| {
self.mul_div_rem(i)
}),
- acc,
+ move || acc.clone(),
|mut acc, (op, val): (&[u8], EvalResult)| {
match op[0] as char {
'+' => acc += &val,
@@ -358,7 +345,7 @@ impl<'a> PRef<'a> {
pair(complete(one_of_punctuation(&["<<", ">>"][..])), |i| {
self.add_sub(i)
}),
- acc,
+ move || acc.clone(),
|mut acc, (op, val): (&[u8], EvalResult)| {
match op {
b"<<" => acc <<= &val,
@@ -374,7 +361,7 @@ impl<'a> PRef<'a> {
let (input, acc) = self.shl_shr(input)?;
numeric(fold_many0(
preceded(complete(p("&")), |i| self.shl_shr(i)),
- acc,
+ move || acc.clone(),
|mut acc, val: EvalResult| {
acc &= &val;
acc
@@ -386,7 +373,7 @@ impl<'a> PRef<'a> {
let (input, acc) = self.and(input)?;
numeric(fold_many0(
preceded(complete(p("^")), |i| self.and(i)),
- acc,
+ move || acc.clone(),
|mut acc, val: EvalResult| {
acc ^= &val;
acc
@@ -398,7 +385,7 @@ impl<'a> PRef<'a> {
let (input, acc) = self.xor(input)?;
numeric(fold_many0(
preceded(complete(p("|")), |i| self.xor(i)),
- acc,
+ move || acc.clone(),
|mut acc, val: EvalResult| {
acc |= &val;
acc
@@ -419,7 +406,7 @@ impl<'a> PRef<'a> {
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 @@ impl<'a> PRef<'a> {
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 @@ impl<'a> PRef<'a> {
}
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 @@ impl<'ident> IdentifierParser<'ident> {
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 @@ impl<'ident> IdentifierParser<'ident> {
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 @@ impl<'ident> IdentifierParser<'ident> {
}
}
-/// 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 @@ pub fn expr(input: &[Token]) -> CResult<'_, EvalResult> {
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 macro_definition(input: &[Token]) -> CResult<'_, (&'_ [u8], EvalResult)>
/// ```
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<(I, ErrorKind)> for Error<I> {
}
}
+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..68e85c7 100644
--- a/src/literal.rs
+++ b/src/literal.rs
@@ -70,7 +70,7 @@ impl From<u8> for CChar {
}
// 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 @@ impl Into<Vec<u8>> for CChar {
}
/// 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 @@ where
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 @@ macro_rules! byte {
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))),
}
}
@@ -224,7 +224,7 @@ fn c_string(i: &[u8]) -> nom::IResult<&[u8], Vec<u8>> {
map(escaped_char, |c: CChar| c.into()),
map(is_not([b'\\', b'"']), |c: &[u8]| c.into()),
)),
- Vec::new(),
+ Vec::new,
|mut v: Vec<u8>, res: Vec<u8>| {
v.extend_from_slice(&res);
v
@@ -272,7 +272,7 @@ fn c_int(i: &[u8]) -> nom::IResult<&[u8], i64> {
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),
),