summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/eval/ops.rs6
-rw-r--r--tests/typ/code/dict.typ2
-rw-r--r--tests/typ/code/ops.typ2
3 files changed, 6 insertions, 4 deletions
diff --git a/src/eval/ops.rs b/src/eval/ops.rs
index 57390a65..b3f2f3b4 100644
--- a/src/eval/ops.rs
+++ b/src/eval/ops.rs
@@ -61,6 +61,9 @@ pub fn neg(value: Value) -> StrResult<Value> {
/// Compute the sum of two values.
pub fn add(lhs: Value, rhs: Value) -> StrResult<Value> {
Ok(match (lhs, rhs) {
+ (a, None) => a,
+ (None, b) => b,
+
(Int(a), Int(b)) => Int(a + b),
(Int(a), Float(b)) => Float(a as f64 + b),
(Float(a), Int(b)) => Float(a + b as f64),
@@ -83,9 +86,6 @@ pub fn add(lhs: Value, rhs: Value) -> StrResult<Value> {
(Fraction(a), Fraction(b)) => Fraction(a + b),
(Str(a), Str(b)) => Str(a + b),
-
- (Content(a), None) => Content(a),
- (None, Content(b)) => Content(b),
(Content(a), Content(b)) => Content(a + b),
(Content(a), Str(b)) => Content(a + model::Content::Text(b)),
(Str(a), Content(b)) => Content(model::Content::Text(a) + b),
diff --git a/tests/typ/code/dict.typ b/tests/typ/code/dict.typ
index 182f53d9..344d8efc 100644
--- a/tests/typ/code/dict.typ
+++ b/tests/typ/code/dict.typ
@@ -39,8 +39,8 @@
// Missing lvalue is automatically none-initialized.
{
let dict = (:)
- // Error: 3-17 cannot add none and integer
dict("b") += 1
+ test(dict, (b: 1))
}
---
diff --git a/tests/typ/code/ops.typ b/tests/typ/code/ops.typ
index 33a1a4a4..012b8c87 100644
--- a/tests/typ/code/ops.typ
+++ b/tests/typ/code/ops.typ
@@ -27,6 +27,8 @@
// Addition.
#test(2 + 4, 6)
#test("a" + "b", "ab")
+#test("a" + if false { "b" }, "a")
+#test("a" + if true { "b" }, "ab")
#test(13 * "a" + "bbbbbb", "aaaaaaaaaaaaabbbbbb")
#test((1, 2) + (3, 4), (1, 2, 3, 4))
#test((a: 1) + (b: 2, c: 3), (a: 1, b: 2, c: 3))