summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKai Stevenson <kai@kaistevenson.com>2025-11-03 23:41:31 -0800
committerKai Stevenson <kai@kaistevenson.com>2025-11-03 23:41:31 -0800
commit8b610f2bcfc223333254ce9679730c42dce6d26e (patch)
treeac1eab726395523f8725bda3d040e22214cba409
parent56040f3ff85e77311f0c864a89afd63fcf1bdb50 (diff)
add createFn
-rw-r--r--src/index.ts3
-rw-r--r--src/lang/index.ts3
-rw-r--r--src/lang/js-lang/builtin/builtin.ts (renamed from src/js-lang/builtin/builtin.ts)0
-rw-r--r--src/lang/js-lang/builtin/index.ts (renamed from src/js-lang/builtin/index.ts)0
-rw-r--r--src/lang/js-lang/builtin/sbuiltin.ts (renamed from src/js-lang/builtin/sbuiltin.ts)0
-rw-r--r--src/lang/js-lang/core/eval.ts (renamed from src/js-lang/core/eval.ts)0
-rw-r--r--src/lang/js-lang/core/index.ts (renamed from src/js-lang/core/index.ts)0
-rw-r--r--src/lang/js-lang/core/lexer.ts (renamed from src/js-lang/core/lexer.ts)0
-rw-r--r--src/lang/js-lang/core/parser.ts (renamed from src/js-lang/core/parser.ts)0
-rw-r--r--src/lang/js-lang/index.ts (renamed from src/js-lang/index.ts)0
-rw-r--r--src/lang/ks-lang/index.ts27
-rw-r--r--src/lang/ts-lang/builtin/builtin.ts (renamed from src/ts-lang/builtin/builtin.ts)0
-rw-r--r--src/lang/ts-lang/builtin/index.ts (renamed from src/ts-lang/builtin/index.ts)0
-rw-r--r--src/lang/ts-lang/builtin/sbuiltin.ts (renamed from src/ts-lang/builtin/sbuiltin.ts)0
-rw-r--r--src/lang/ts-lang/core/common.ts (renamed from src/ts-lang/core/common.ts)0
-rw-r--r--src/lang/ts-lang/core/eval.ts (renamed from src/ts-lang/core/eval.ts)0
-rw-r--r--src/lang/ts-lang/core/index.ts (renamed from src/ts-lang/core/index.ts)0
-rw-r--r--src/lang/ts-lang/core/lexer.ts (renamed from src/ts-lang/core/lexer.ts)0
-rw-r--r--src/lang/ts-lang/core/parser.ts (renamed from src/ts-lang/core/parser.ts)0
-rw-r--r--src/lang/ts-lang/index.ts (renamed from src/ts-lang/index.ts)0
-rw-r--r--src/lang/ts-lang/util/index.ts (renamed from src/ts-lang/util/index.ts)0
-rw-r--r--src/lang/ts-lang/util/number.ts (renamed from src/ts-lang/util/number.ts)0
-rw-r--r--src/lang/ts-lang/util/string.ts (renamed from src/ts-lang/util/string.ts)0
-rw-r--r--src/lang/ts-lang/util/utils.ts (renamed from src/ts-lang/util/utils.ts)0
-rw-r--r--src/test.ts7
25 files changed, 38 insertions, 2 deletions
diff --git a/src/index.ts b/src/index.ts
index ab79901..923d0b5 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,2 +1 @@
-export * from "./ts-lang";
-export * from "./js-lang";
+export * from "./lang";
diff --git a/src/lang/index.ts b/src/lang/index.ts
new file mode 100644
index 0000000..e9325ad
--- /dev/null
+++ b/src/lang/index.ts
@@ -0,0 +1,3 @@
+export * from "./ts-lang";
+export * from "./ks-lang";
+export * from "./js-lang";
diff --git a/src/js-lang/builtin/builtin.ts b/src/lang/js-lang/builtin/builtin.ts
index dde91b6..dde91b6 100644
--- a/src/js-lang/builtin/builtin.ts
+++ b/src/lang/js-lang/builtin/builtin.ts
diff --git a/src/js-lang/builtin/index.ts b/src/lang/js-lang/builtin/index.ts
index 00e77f7..00e77f7 100644
--- a/src/js-lang/builtin/index.ts
+++ b/src/lang/js-lang/builtin/index.ts
diff --git a/src/js-lang/builtin/sbuiltin.ts b/src/lang/js-lang/builtin/sbuiltin.ts
index 44c969d..44c969d 100644
--- a/src/js-lang/builtin/sbuiltin.ts
+++ b/src/lang/js-lang/builtin/sbuiltin.ts
diff --git a/src/js-lang/core/eval.ts b/src/lang/js-lang/core/eval.ts
index 60a2059..60a2059 100644
--- a/src/js-lang/core/eval.ts
+++ b/src/lang/js-lang/core/eval.ts
diff --git a/src/js-lang/core/index.ts b/src/lang/js-lang/core/index.ts
index 22ac2d2..22ac2d2 100644
--- a/src/js-lang/core/index.ts
+++ b/src/lang/js-lang/core/index.ts
diff --git a/src/js-lang/core/lexer.ts b/src/lang/js-lang/core/lexer.ts
index 95e0e19..95e0e19 100644
--- a/src/js-lang/core/lexer.ts
+++ b/src/lang/js-lang/core/lexer.ts
diff --git a/src/js-lang/core/parser.ts b/src/lang/js-lang/core/parser.ts
index f193d6a..f193d6a 100644
--- a/src/js-lang/core/parser.ts
+++ b/src/lang/js-lang/core/parser.ts
diff --git a/src/js-lang/index.ts b/src/lang/js-lang/index.ts
index 8d119de..8d119de 100644
--- a/src/js-lang/index.ts
+++ b/src/lang/js-lang/index.ts
diff --git a/src/lang/ks-lang/index.ts b/src/lang/ks-lang/index.ts
new file mode 100644
index 0000000..c60203f
--- /dev/null
+++ b/src/lang/ks-lang/index.ts
@@ -0,0 +1,27 @@
+import { callFn, emptyStackFrame, evaluate, lex, parse } from "../js-lang";
+import {
+ Evaluate,
+ FnPrim,
+ Lex,
+ Parse,
+ EvalError,
+ CallFn,
+ EmptyStackFrame,
+} from "../ts-lang";
+
+export const createFn = <Program extends string>(
+ program: Program
+): Evaluate<Parse<Lex<Program>>> extends [infer ProgramFn extends FnPrim]
+ ? <const Args extends any[]>(
+ ...args: Args
+ ) => CallFn<ProgramFn, Args, EmptyStackFrame>
+ : EvalError<"Cannot create a function from a program that does not eval to a function"> => {
+ const [programFn] = evaluate(parse(lex(program))) as Array<FnPrim>;
+ if (!programFn.fn) {
+ throw new Error(
+ "Cannot create a function from a program that does not eval to a function"
+ );
+ }
+
+ return ((...args: any[]) => callFn(programFn, args, emptyStackFrame)) as any;
+};
diff --git a/src/ts-lang/builtin/builtin.ts b/src/lang/ts-lang/builtin/builtin.ts
index a289867..a289867 100644
--- a/src/ts-lang/builtin/builtin.ts
+++ b/src/lang/ts-lang/builtin/builtin.ts
diff --git a/src/ts-lang/builtin/index.ts b/src/lang/ts-lang/builtin/index.ts
index de2bee3..de2bee3 100644
--- a/src/ts-lang/builtin/index.ts
+++ b/src/lang/ts-lang/builtin/index.ts
diff --git a/src/ts-lang/builtin/sbuiltin.ts b/src/lang/ts-lang/builtin/sbuiltin.ts
index 01f197e..01f197e 100644
--- a/src/ts-lang/builtin/sbuiltin.ts
+++ b/src/lang/ts-lang/builtin/sbuiltin.ts
diff --git a/src/ts-lang/core/common.ts b/src/lang/ts-lang/core/common.ts
index fa5cb7c..fa5cb7c 100644
--- a/src/ts-lang/core/common.ts
+++ b/src/lang/ts-lang/core/common.ts
diff --git a/src/ts-lang/core/eval.ts b/src/lang/ts-lang/core/eval.ts
index 5f22299..5f22299 100644
--- a/src/ts-lang/core/eval.ts
+++ b/src/lang/ts-lang/core/eval.ts
diff --git a/src/ts-lang/core/index.ts b/src/lang/ts-lang/core/index.ts
index 881cacf..881cacf 100644
--- a/src/ts-lang/core/index.ts
+++ b/src/lang/ts-lang/core/index.ts
diff --git a/src/ts-lang/core/lexer.ts b/src/lang/ts-lang/core/lexer.ts
index bcd5785..bcd5785 100644
--- a/src/ts-lang/core/lexer.ts
+++ b/src/lang/ts-lang/core/lexer.ts
diff --git a/src/ts-lang/core/parser.ts b/src/lang/ts-lang/core/parser.ts
index db6f3aa..db6f3aa 100644
--- a/src/ts-lang/core/parser.ts
+++ b/src/lang/ts-lang/core/parser.ts
diff --git a/src/ts-lang/index.ts b/src/lang/ts-lang/index.ts
index 8d119de..8d119de 100644
--- a/src/ts-lang/index.ts
+++ b/src/lang/ts-lang/index.ts
diff --git a/src/ts-lang/util/index.ts b/src/lang/ts-lang/util/index.ts
index 00a3e54..00a3e54 100644
--- a/src/ts-lang/util/index.ts
+++ b/src/lang/ts-lang/util/index.ts
diff --git a/src/ts-lang/util/number.ts b/src/lang/ts-lang/util/number.ts
index 6e4e360..6e4e360 100644
--- a/src/ts-lang/util/number.ts
+++ b/src/lang/ts-lang/util/number.ts
diff --git a/src/ts-lang/util/string.ts b/src/lang/ts-lang/util/string.ts
index 5772f40..5772f40 100644
--- a/src/ts-lang/util/string.ts
+++ b/src/lang/ts-lang/util/string.ts
diff --git a/src/ts-lang/util/utils.ts b/src/lang/ts-lang/util/utils.ts
index ac36ca1..ac36ca1 100644
--- a/src/ts-lang/util/utils.ts
+++ b/src/lang/ts-lang/util/utils.ts
diff --git a/src/test.ts b/src/test.ts
new file mode 100644
index 0000000..56b8eb9
--- /dev/null
+++ b/src/test.ts
@@ -0,0 +1,7 @@
+import { evaluate, lex, parse } from "./lang";
+import { createFn } from "./lang";
+
+const adder = createFn("fn(x, add(x, 5))");
+
+const result = adder(5);
+console.log(result);