From 7c33c1e691d23fbed6db99f54750f7538f5f1c25 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Wed, 2 Feb 2022 10:40:33 +0100 Subject: [PATCH] Make `Add` for `Node` a bit more efficient --- src/eval/node.rs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/eval/node.rs b/src/eval/node.rs index 665550b07..e6985faaf 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)] + } + }) } }