summaryrefslogtreecommitdiff
path: root/src/lang/core/common.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/lang/core/common.ts')
-rw-r--r--src/lang/core/common.ts15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/lang/core/common.ts b/src/lang/core/common.ts
index c1a1dc3..9e3840b 100644
--- a/src/lang/core/common.ts
+++ b/src/lang/core/common.ts
@@ -55,3 +55,18 @@ export type ParserCtx = {
lastToken: Token | null;
stack: readonly ASTNode[];
};
+
+export type StackFrame<
+ Bindings extends Record<ASTNode["name"], any> = Record<ASTNode["name"], any>,
+ Parent extends StackFrame | null = any
+> = {
+ bindings: Bindings;
+ parent: Parent;
+};
+
+export type EmptyStackFrame = StackFrame<{}, null>;
+
+export type WithPushedBindings<
+ OldFrame extends StackFrame,
+ Bindings extends StackFrame["bindings"]
+> = StackFrame<Bindings, OldFrame>;