|
|
|
|
@ -188,8 +188,21 @@ function evaluateBuiltIn(op: string, left: Value, right: Value): Value {
|
|
|
|
|
return evaluate(right.body, callEnv);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (op === '&')
|
|
|
|
|
throw new Error('TODO Not implemented yet');
|
|
|
|
|
if (op === '&') {
|
|
|
|
|
if (left.kind == 'list' && right.kind === 'list') {
|
|
|
|
|
return {
|
|
|
|
|
kind: 'list',
|
|
|
|
|
elements: [...left.elements, ...right.elements]
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (left.kind == 'string' && right.kind === 'string') {
|
|
|
|
|
return {
|
|
|
|
|
kind: 'string',
|
|
|
|
|
value: left.value + right.value
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
throw new Error(`Unknown built-in: ${op}`);
|
|
|
|
|
}
|
|
|
|
|
|