From 5e0bcc45037b6cf9345ed3e290bd8a4b2c387587 Mon Sep 17 00:00:00 2001 From: Kai Stevenson Date: Wed, 29 Oct 2025 21:48:51 -0700 Subject: arrays --- src/lib/core/common.ts | 1 - src/lib/core/eval.ts | 16 +++++++--------- src/lib/core/parser.ts | 2 +- 3 files changed, 8 insertions(+), 11 deletions(-) (limited to 'src/lib/core') diff --git a/src/lib/core/common.ts b/src/lib/core/common.ts index 8cff899..c1a1dc3 100644 --- a/src/lib/core/common.ts +++ b/src/lib/core/common.ts @@ -28,7 +28,6 @@ export type LexerCtx = { }; export enum NodeType { - ROOT = "ROOT", INT = "INT", EXT = "EXT", PARSER_ERROR = "PARSER_ERROR", diff --git a/src/lib/core/eval.ts b/src/lib/core/eval.ts index 10cc23c..74801bf 100644 --- a/src/lib/core/eval.ts +++ b/src/lib/core/eval.ts @@ -26,6 +26,10 @@ export type UnarrayIfOnlyHead = T extends [ ? Head : T; +export type BUILTIN_ARR = { + [Idx in keyof Args]: Args[Idx] extends ASTNode ? Evaluate : never; +}; + export type BUILTIN_ToString = ToStringInner< UnarrayIfOnlyHead<{ [Idx in keyof Args]: Args[Idx] extends ASTNode @@ -38,25 +42,19 @@ export type BUILTIN_ToString = ToStringInner< export type SENTINEL_NO_BUILTIN = "__NO_BUILTIN__"; export type MapBuiltins = Node["name"] extends "tostring" ? BUILTIN_ToString + : Node["name"] extends "arr" + ? BUILTIN_ARR : SENTINEL_NO_BUILTIN; export type EvalError = `Eval error: ${T}`; export type Evaluate = Node["type"] extends NodeType.INT ? Node["value"] - : Node["type"] extends NodeType.ROOT - ? Node["children"] extends infer Children extends readonly ASTNode[] - ? UnarrayIfOnlyHead<{ - [Idx in keyof Children]: Children[Idx] extends ASTNode - ? Evaluate - : never; - }> - : EvalError<`Unexpected error parsing children of ${Node["type"]}`> : Node["type"] extends NodeType.EXT ? MapBuiltins : EvalError<`Unhandled node type ${Node["type"]}`>; -const input = `tostring(5, 2)` as const; +const input = `5, arr(5000)` as const; const lex_result = null as unknown as Lex; const parse_result = null as unknown as Parse; const eval_result = null as unknown as Evaluate; diff --git a/src/lib/core/parser.ts b/src/lib/core/parser.ts index 27133b2..79218e9 100644 --- a/src/lib/core/parser.ts +++ b/src/lib/core/parser.ts @@ -214,7 +214,7 @@ export type _Parse = Ctx["remainingTokens"] extends [ export type Parse = _Parse<{ lastToken: null; remainingTokens: Raw; - stack: [ASTNode]; + stack: [ASTNode]; }>; const test_result = null as unknown as Parse>; -- cgit v1.2.3-70-g09d2