summaryrefslogtreecommitdiff
path: root/src/lang/js-lang/builtin/builtin.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lang/js-lang/builtin/builtin.ts')
-rw-r--r--src/lang/js-lang/builtin/builtin.ts15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/lang/js-lang/builtin/builtin.ts b/src/lang/js-lang/builtin/builtin.ts
index dde91b6..d54c439 100644
--- a/src/lang/js-lang/builtin/builtin.ts
+++ b/src/lang/js-lang/builtin/builtin.ts
@@ -31,9 +31,24 @@ export const V_BUILTIN_Mul: BUILTIN = (args) => {
);
};
+export const V_BUILTIN_IfElse: BUILTIN = (args) => {
+ if (args.length !== 3) {
+ throw new Error(`Invalid args for "if": ${JSON.stringify(args)}`);
+ }
+
+ const [cond, trueVal, falseVal] = args;
+
+ if (typeof cond !== "boolean") {
+ throw new Error(`Condition value ${JSON.stringify(cond)} is not a boolean`);
+ }
+
+ return cond ? trueVal : falseVal;
+};
+
export const nameToBUILTIN: Record<string, BUILTIN> = {
arr: V_BUILTIN_Arr,
tostring: V_BUILTIN_ToString,
add: V_BUILTIN_Add,
mul: V_BUILTIN_Mul,
+ "?": V_BUILTIN_IfElse,
};