summaryrefslogtreecommitdiff
path: root/src/lang/ts-lang/core/eval.ts
diff options
context:
space:
mode:
authorKai Stevenson <kai@kaistevenson.com>2025-11-09 13:29:28 -0800
committerKai Stevenson <kai@kaistevenson.com>2025-11-09 13:29:28 -0800
commit92cc395e2eee1e0d7e051775a795e5f83e45c5e9 (patch)
tree315d0a59f8f5d4d28ac7fce9d4e310e02e130193 /src/lang/ts-lang/core/eval.ts
parent93992029bd349185d15de02e0f633e95c62695a9 (diff)
wip error handlingkai/errors
Diffstat (limited to 'src/lang/ts-lang/core/eval.ts')
-rw-r--r--src/lang/ts-lang/core/eval.ts17
1 files changed, 10 insertions, 7 deletions
diff --git a/src/lang/ts-lang/core/eval.ts b/src/lang/ts-lang/core/eval.ts
index ebc58e7..fa11f3c 100644
--- a/src/lang/ts-lang/core/eval.ts
+++ b/src/lang/ts-lang/core/eval.ts
@@ -1,3 +1,4 @@
+import { AnySoaRecord } from "dns";
import {
BUILTIN_Add,
BUILTIN_Arr,
@@ -13,11 +14,15 @@ import { ToString } from "../util";
import {
ASTNode,
EmptyStackFrame,
+ KSError,
MergeStackFrames,
NodeType,
StackFrame,
} from "./common";
+export type EvalError<Message extends string> =
+ KSError<`Eval error: ${Message}`>;
+
export type RECURSION_DEPTH_LIMIT = 7;
export type SENTINEL_NO_BUILTIN = "__NO_BUILTIN__";
@@ -51,8 +56,6 @@ export type MapBuiltins<
: SENTINEL_NO_BUILTIN
: never;
-export type EvalError<T extends string> = `Eval error: ${T}`;
-
export type FindInStack<
Frame extends StackFrame,
NameToFind
@@ -168,8 +171,8 @@ export type GetEvaluatedChildren<
}
: never;
-export type Evaluate<Node extends ASTNode> = _Evaluate<
- Node,
- EmptyStackFrame,
- []
->;
+export type Evaluate<Node> = Node extends ASTNode
+ ? _Evaluate<Node, EmptyStackFrame, []>
+ : Node extends KSError<infer E>
+ ? E
+ : EvalError<`Cannot evaluate ${ToString<Node>}`>;