Skip to content

Commit 1f4844c

Browse files
authored
support subtraction operation in array symbolic value (#251)
* support subtraction in symbolic value
1 parent 1bcd765 commit 1f4844c

File tree

2 files changed

+5
-1
lines changed

2 files changed

+5
-1
lines changed

src/mast/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -414,6 +414,7 @@ impl Symbolic {
414414
}
415415
Symbolic::Generic(g) => gens.get(&g.value),
416416
Symbolic::Add(a, b) => a.eval(gens, tast) + b.eval(gens, tast),
417+
Symbolic::Sub(a, b) => a.eval(gens, tast) - b.eval(gens, tast),
417418
Symbolic::Mul(a, b) => a.eval(gens, tast) * b.eval(gens, tast),
418419
}
419420
}

src/parser/types.rs

+4-1
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,7 @@ pub enum Symbolic {
188188
/// Generic parameter
189189
Generic(Ident),
190190
Add(Box<Symbolic>, Box<Symbolic>),
191+
Sub(Box<Symbolic>, Box<Symbolic>),
191192
Mul(Box<Symbolic>, Box<Symbolic>),
192193
}
193194

@@ -198,6 +199,7 @@ impl Display for Symbolic {
198199
Symbolic::Constant(ident) => write!(f, "{}", ident.value),
199200
Symbolic::Generic(ident) => write!(f, "{}", ident.value),
200201
Symbolic::Add(lhs, rhs) => write!(f, "{} + {}", lhs, rhs),
202+
Symbolic::Sub(lhs, rhs) => write!(f, "{} - {}", lhs, rhs),
201203
Symbolic::Mul(lhs, rhs) => write!(f, "{} * {}", lhs, rhs),
202204
}
203205
}
@@ -219,7 +221,7 @@ impl Symbolic {
219221
Symbolic::Generic(ident) => {
220222
generics.insert(ident.value.clone());
221223
}
222-
Symbolic::Add(lhs, rhs) | Symbolic::Mul(lhs, rhs) => {
224+
Symbolic::Add(lhs, rhs) | Symbolic::Mul(lhs, rhs) | Symbolic::Sub(lhs, rhs) => {
223225
generics.extend(lhs.extract_generics());
224226
generics.extend(rhs.extract_generics());
225227
}
@@ -251,6 +253,7 @@ impl Symbolic {
251253
// no protected flags are needed, as this is based on expression nodes which already ordered the operations
252254
match op {
253255
Op2::Addition => Ok(Symbolic::Add(Box::new(lhs), Box::new(rhs?))),
256+
Op2::Subtraction => Ok(Symbolic::Sub(Box::new(lhs), Box::new(rhs?))),
254257
Op2::Multiplication => Ok(Symbolic::Mul(Box::new(lhs), Box::new(rhs?))),
255258
_ => Err(Error::new(
256259
"mast",

0 commit comments

Comments
 (0)