Skip to content

Commit b7cd170

Browse files
committed
feat: adding String concatenation
1 parent 8d79842 commit b7cd170

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

src/evaluator/expression/infix/mod.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,13 @@ impl Evaluator {
8282
true => Ok(Object::True),
8383
false => Ok(Object::False),
8484
},
85+
Token::Plus => {
86+
let mut concatenated = left_value;
87+
concatenated.push_str(&right_value);
88+
Ok(Object::String {
89+
value: concatenated,
90+
})
91+
}
8592
_ => Err(EvaluationError::UnknownOperator),
8693
},
8794
_ => Err(EvaluationError::TypeMismatch),

src/evaluator/expression/infix/tests/mod.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,15 @@ fn test_evaluator_infix_boolean_expressions(code: &str, snapshot_name: &str) {
7070
assert_expected_returned_object!(code, snapshot_name);
7171
}
7272

73+
#[rstest(
74+
code,
75+
snapshot_name,
76+
case("\"123\" + \"456\"", "test_evaluator_infix_string_expressions_case1")
77+
)]
78+
fn test_evaluator_infix_string_expressions(code: &str, snapshot_name: &str) {
79+
assert_expected_returned_object!(code, snapshot_name);
80+
}
81+
7382
#[rstest(
7483
code,
7584
snapshot_name,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
---
2+
source: src/evaluator/expression/infix/tests/mod.rs
3+
expression: "evaluator.evaluate(crate::syntax_analysis::SyntaxAnalysis::from(crate::lexical_analysis::LexicalAnalysis::from(code).unwrap()).unwrap())"
4+
5+
---
6+
Ok(
7+
String {
8+
value: "123456",
9+
},
10+
)

0 commit comments

Comments
 (0)