diff options
| author | Rose Hogenson <rosehogenson@posteo.net> | 2024-05-29 23:13:50 -0700 |
|---|---|---|
| committer | Rose Hogenson <rosehogenson@posteo.net> | 2024-05-29 23:13:50 -0700 |
| commit | fb2908e33eefdb1d1fd00d272ec9e50fc1843da3 (patch) | |
| tree | ac0b86d56a23da731a56192e426203b701acb640 /src | |
| parent | 74f594d1ecd57973f2976067589a71fdfcedecbe (diff) | |
| download | qc-fb2908e33eefdb1d1fd00d272ec9e50fc1843da3.tar.zst | |
Allow prefix minus.
Diffstat (limited to 'src')
| -rw-r--r-- | src/parser.rs | 14 |
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, |
