summaryrefslogtreecommitdiff
path: root/src/eval
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-02-02 10:40:33 +0100
committerLaurenz <laurmaedje@gmail.com>2022-02-02 10:40:33 +0100
commit7c33c1e691d23fbed6db99f54750f7538f5f1c25 (patch)
tree28395f58ff75b91bc37e1513398c0c533e2eaa66 /src/eval
parenta3f151df82f832668a6c71e6ac47117f3c6bacce (diff)
Make `Add` for `Node` a bit more efficient
Diffstat (limited to 'src/eval')
-rw-r--r--src/eval/node.rs19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/eval/node.rs b/src/eval/node.rs
index 665550b0..e6985faa 100644
--- a/src/eval/node.rs
+++ b/src/eval/node.rs
@@ -155,8 +155,23 @@ impl Add for Node {
type Output = Self;
fn add(self, rhs: Self) -> Self::Output {
- // TODO(style): Make more efficient.
- Self::Sequence(vec![Styled::bare(self), Styled::bare(rhs)])
+ Self::Sequence(match (self, rhs) {
+ (Self::Sequence(mut left), Self::Sequence(right)) => {
+ left.extend(right);
+ left
+ }
+ (Self::Sequence(mut left), right) => {
+ left.push(Styled::bare(right));
+ left
+ }
+ (left, Self::Sequence(mut right)) => {
+ right.insert(0, Styled::bare(left));
+ right
+ }
+ (left, right) => {
+ vec![Styled::bare(left), Styled::bare(right)]
+ }
+ })
}
}