85 lines
2.9 KiB
Diff
85 lines
2.9 KiB
Diff
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
|