rl_lang/interpreter/stdlib/array/
arr_concat.rs1use crate::{
2 interpreter::{evaluator::Evaluator, values::Value},
3 utils::{errors::Error, span::Span},
4};
5
6pub fn std_arr_concat(
7 eval: &mut Evaluator,
8 array1: Value,
9 array2: Value,
10 span: Span,
11) -> Result<Value, Error> {
12 match (array1, array2) {
13 (
14 Value::Values {
15 items_type: it_1,
16 items: i1,
17 },
18 Value::Values {
19 items_type: it_2,
20 items: i2,
21 },
22 ) => {
23 if it_1 != it_2 {
24 return Err(eval.err(
25 format!(
26 "type mismatch: array type {:?}, cannot concat {:?}",
27 it_1, it_2
28 ),
29 span,
30 ));
31 }
32 let mut v = i1;
33 v.extend(i2);
34 Ok(Value::Values {
35 items_type: it_1,
36 items: v,
37 })
38 }
39 _ => Err(eval.err("arr_concat() accepts only arrays".to_string(), span)),
40 }
41}