/** * Parser Extension: Expression Parsing * Expressions, precedence chain, pipe chains, and pipe targets */ import type { AnnotationAccessNode, ArithHead, BinaryOp, BlockNode, CaptureNode, ClosureSigLiteralNode, ConditionalNode, DoWhileLoopNode, ExpressionNode, WhileLoopNode, GroupedExprNode, IndexAccessNode, InvokeNode, MethodCallNode, PassBlockNode, TimeoutBlockNode, PipeChainNode, PipeTargetNode, PostfixExprNode, PrimaryNode, SourceLocation, SourceSpan, UnaryExprNode, UseExprNode } from '../types.js'; import { type TokenType } from '../types.js'; /** Constructs valid as both primary expressions and pipe targets */ type CommonConstruct = ConditionalNode | WhileLoopNode | DoWhileLoopNode | BlockNode | GroupedExprNode; /** * Mutable state shared between parsePostfixExprBase and its dispatch handlers. * Handlers mutate this object in place (void return). */ interface PostfixLoopState { primary: PrimaryNode; methods: (MethodCallNode | InvokeNode | AnnotationAccessNode | IndexAccessNode)[]; receiverEnd: SourceLocation; } declare module './parser.js' { interface Parser { parseExpression(): ExpressionNode; parsePipeChain(): PipeChainNode; parsePostfixExpr(): PostfixExprNode; parsePostfixExprBase(): PostfixExprNode; parsePrimary(): PrimaryNode; parsePipeTarget(): PipeTargetNode; parseCapture(): CaptureNode; parseGrouped(): GroupedExprNode; parseCommonConstruct(): CommonConstruct | null; parseLogicalOr(): ArithHead; parseLogicalAnd(): ArithHead; parseComparison(): ArithHead; parseAdditive(): ArithHead; parseMultiplicative(): ArithHead; parseUnary(): UnaryExprNode | PostfixExprNode; parseInvoke(): InvokeNode; implicitPipeVar(span: { start: SourceLocation; end: SourceLocation; }): PostfixExprNode; isComparisonOp(): boolean; tokenToComparisonOp(tokenType: string): '==' | '!=' | '<' | '>' | '<=' | '>='; wrapConditionalInPostfixExpr(conditional: ConditionalNode, span: SourceSpan): PostfixExprNode; wrapLoopInPostfixExpr(loop: WhileLoopNode | DoWhileLoopNode, span: SourceSpan): PostfixExprNode; parseClosureSigLiteral(): ClosureSigLiteralNode; parseUseExpr(): UseExprNode; parseBinaryExprChain(nextParser: (this: Parser) => ArithHead, opTokens: TokenType[], opMap: Map, maxChain?: number): ArithHead; parsePipeTargetDot(): PipeTargetNode; parsePipeTargetBracket(): PipeTargetNode; parsePipeTargetDictLiteral(): PipeTargetNode; parsePostfixDotBang(loopState: PostfixLoopState, start: SourceLocation): void; parsePostfixColon(loopState: PostfixLoopState, start: SourceLocation): void; parsePassBlock(): PassBlockNode; parseTimeoutBlock(): TimeoutBlockNode; } } export {};