diff options
| author | Kai Stevenson <kai@kaistevenson.com> | 2025-10-29 20:44:59 -0700 |
|---|---|---|
| committer | Kai Stevenson <kai@kaistevenson.com> | 2025-10-29 20:44:59 -0700 |
| commit | f0ec687197f38e1ab52f3e69bd76849a51ed6436 (patch) | |
| tree | acb9bf4712ad49a19409efade6332188c32908e0 /src/lib/core/parser.ts | |
| parent | c20434533887618820985cbb25081255475852f2 (diff) | |
literals
Diffstat (limited to 'src/lib/core/parser.ts')
| -rw-r--r-- | src/lib/core/parser.ts | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/lib/core/parser.ts b/src/lib/core/parser.ts index 0f095fe..d608eca 100644 --- a/src/lib/core/parser.ts +++ b/src/lib/core/parser.ts @@ -107,10 +107,23 @@ export type StackWithoutLast<Stack extends ParserCtx["stack"]> = Stack extends [ ? [] : never; -export type ResolveNodeFromToken<_Token extends Token> = - _Token["subType"] extends TokenSubType.LITERAL - ? ASTNode<NodeType.INT, "UNNAMED", _Token["name"], []> - : ASTNode<NodeType.EXT, _Token["name"], null, []>; +type NULL_SENTINEL = { + NULL: true; +}; + +export type ParseNumberLiteral<T extends string> = + T extends `${infer Inner extends number}` ? Inner : NULL_SENTINEL; + +export type ParseStringLiteral<T extends string> = + T extends `"${infer Inner extends string}"` ? Inner : NULL_SENTINEL; + +export type ResolveNodeFromToken<_Token extends Token> = ParseNumberLiteral< + _Token["name"] +> extends number + ? ASTNode<NodeType.INT, "", ParseNumberLiteral<_Token["name"]>, []> + : ParseStringLiteral<_Token["name"]> extends string + ? ASTNode<NodeType.INT, "", ParseStringLiteral<_Token["name"]>, []> + : ASTNode<NodeType.EXT, _Token["name"], null, []>; export type _Parse<Ctx extends ParserCtx> = Ctx["remainingTokens"] extends [ infer Head extends Token, @@ -194,4 +207,4 @@ export type Parse<Raw extends readonly Token[]> = _Parse<{ stack: [ASTNode<NodeType.ROOT, "ROOT", null, []>]; }>; -const test_result = null as unknown as Parse<Lex<"test(a)">>; +const test_result = null as unknown as Parse<Lex<`test(135)`>>; |
