From f0ec687197f38e1ab52f3e69bd76849a51ed6436 Mon Sep 17 00:00:00 2001 From: Kai Stevenson Date: Wed, 29 Oct 2025 20:44:59 -0700 Subject: literals --- src/lib/core/common.ts | 2 -- src/lib/core/lexer.ts | 19 +++---------------- src/lib/core/parser.ts | 23 ++++++++++++++++++----- 3 files changed, 21 insertions(+), 23 deletions(-) (limited to 'src/lib/core') diff --git a/src/lib/core/common.ts b/src/lib/core/common.ts index a17eff4..b5f494e 100644 --- a/src/lib/core/common.ts +++ b/src/lib/core/common.ts @@ -15,11 +15,9 @@ export enum TokenSubType { export type Token< Type extends TokenType = TokenType, - Subtype extends TokenSubType = TokenSubType, Name extends string = string > = { type: Type; - subType: Subtype; name: Name; }; diff --git a/src/lib/core/lexer.ts b/src/lib/core/lexer.ts index e9756bd..33a408a 100644 --- a/src/lib/core/lexer.ts +++ b/src/lib/core/lexer.ts @@ -7,7 +7,7 @@ export type BreakingToken = | TokenType.SEMICOLON | TokenType.SPACE; -export type IsWhitespace = T extends `${TokenType.SPACE}` +export type IsWhitespace = T extends `${TokenType.SPACE}` ? true : T extends `${TokenType.COMMA}` ? true @@ -27,26 +27,13 @@ export type ProcessNameCollection< ...Ctx["tokens"], ...(Ctx["nameCollection"] extends "" ? [] - : [ - Token< - TokenType.NAME, - TokenSubType.REFERENCE, - Ctx["nameCollection"] - > - ]) + : [Token]) ] : [ ...Ctx["tokens"], ...(Ctx["nameCollection"] extends "" ? [_Token] - : [ - Token< - TokenType.NAME, - TokenSubType.REFERENCE, - Ctx["nameCollection"] - >, - _Token - ]) + : [Token, _Token]) ]; }; 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 [ ? [] : never; -export type ResolveNodeFromToken<_Token extends Token> = - _Token["subType"] extends TokenSubType.LITERAL - ? ASTNode - : ASTNode; +type NULL_SENTINEL = { + NULL: true; +}; + +export type ParseNumberLiteral = + T extends `${infer Inner extends number}` ? Inner : NULL_SENTINEL; + +export type ParseStringLiteral = + T extends `"${infer Inner extends string}"` ? Inner : NULL_SENTINEL; + +export type ResolveNodeFromToken<_Token extends Token> = ParseNumberLiteral< + _Token["name"] +> extends number + ? ASTNode, []> + : ParseStringLiteral<_Token["name"]> extends string + ? ASTNode, []> + : ASTNode; export type _Parse = Ctx["remainingTokens"] extends [ infer Head extends Token, @@ -194,4 +207,4 @@ export type Parse = _Parse<{ stack: [ASTNode]; }>; -const test_result = null as unknown as Parse>; +const test_result = null as unknown as Parse>; -- cgit v1.2.3-70-g09d2