summaryrefslogtreecommitdiff
path: root/src/lang/js-lang/builtin
diff options
context:
space:
mode:
authorKai Stevenson <kai@kaistevenson.com>2025-11-04 20:53:37 -0800
committerKai Stevenson <kai@kaistevenson.com>2025-11-04 21:01:45 -0800
commite86c68dffaffee6ba44d98ba06761245f6d5b670 (patch)
tree507922cde204c414d3a6072aef704859639aebb8 /src/lang/js-lang/builtin
parentb8fd8f0672c289ff43e501f430b76de1c7b0440a (diff)
add branching
Diffstat (limited to 'src/lang/js-lang/builtin')
-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,
};