aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/parser.rs14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/parser.rs b/src/parser.rs
index c0f3a9b..4a87fda 100644
--- a/src/parser.rs
+++ b/src/parser.rs
@@ -46,23 +46,16 @@ impl<'a> Parser<'a> {
}
fn parse_num(&mut self) -> Option<Num> {
- let negative = self.symbol("-");
let t = self.next()?;
if t.contains('.') || t.contains('e') || t.contains('E') {
let Ok(f) = f64::from_str(t) else {
return None;
};
- if negative {
- return Some(eval::float(-f));
- }
return Some(eval::float(f));
}
let Ok(i) = i64::from_str(t) else {
return None;
};
- if negative {
- return Some(eval::int(-i));
- }
Some(eval::int(i))
}
@@ -77,6 +70,13 @@ impl<'a> Parser<'a> {
}
fn parse_fun(&mut self) -> bool {
+ if self.symbol("-") {
+ self.stack.push(Op::Op {
+ prec: 0,
+ eval: Box::new(|n| eval::int(0).sub(n)),
+ });
+ return true;
+ }
if self.symbol("sin") {
self.stack.push(Op::Op {
prec: 3,