diff options
| author | Laurenz <laurmaedje@gmail.com> | 2022-02-02 10:40:33 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2022-02-02 10:40:33 +0100 |
| commit | 7c33c1e691d23fbed6db99f54750f7538f5f1c25 (patch) | |
| tree | 28395f58ff75b91bc37e1513398c0c533e2eaa66 /src | |
| parent | a3f151df82f832668a6c71e6ac47117f3c6bacce (diff) | |
Make `Add` for `Node` a bit more efficient
Diffstat (limited to 'src')
| -rw-r--r-- | src/eval/node.rs | 19 |
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)] + } + }) } } |
