summaryrefslogtreecommitdiff
path: root/src/eval/node.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/eval/node.rs')
-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)]
+ }
+ })
}
}