String & list concatenation

master
Dustin Swan 5 days ago
parent c44a6858ff
commit d81318333e
Signed by: dustinswan
GPG Key ID: 30D46587E2100467

@ -188,8 +188,21 @@ function evaluateBuiltIn(op: string, left: Value, right: Value): Value {
return evaluate(right.body, callEnv); return evaluate(right.body, callEnv);
} }
if (op === '&') if (op === '&') {
throw new Error('TODO Not implemented yet'); 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}`); throw new Error(`Unknown built-in: ${op}`);
} }

@ -19,3 +19,5 @@ e('c = 5; { a = 3, b = c }');
e('rec = { a = 3, b = 5 }; rec.a'); e('rec = { a = 3, b = 5 }; rec.a');
e('rec = { a = 3, b = 5 }; rec{ a = 10 }'); e('rec = { a = 3, b = 5 }; rec{ a = 10 }');
e('add1 = (x \\ x + 1); 3 > add1'); e('add1 = (x \\ x + 1); 3 > add1');
e('[1, 2] & [3, 4]');
e('"abc" & "def"');

Loading…
Cancel
Save