Generic Visitors

This commit is contained in:
Michael Schimmel
2026-01-02 13:54:27 +01:00
parent 2395cb1e70
commit 13d8a21de7
3 changed files with 39 additions and 431 deletions
+38 -232
View File
@@ -515,45 +515,6 @@ type
IAstVisitor = interface
// --- Central Dispatch Method (New) ---
function Visit(const Node: IAstNode): TDataValue;
// --- Specific Methods (Legacy / Hybrid Support) ---
function VisitConstant(const Node: IConstantNode): TDataValue;
function VisitIdentifier(const Node: IIdentifierNode): TDataValue;
function VisitKeyword(const Node: IKeywordNode): TDataValue;
// List Visits
function VisitParameterList(const Node: IParameterList): TDataValue;
function VisitArgumentList(const Node: IArgumentList): TDataValue;
function VisitExpressionList(const Node: IExpressionList): TDataValue;
function VisitRecordFieldList(const Node: IRecordFieldList): TDataValue;
function VisitRecordField(const Node: IRecordFieldNode): TDataValue;
function VisitIfExpression(const Node: IIfExpressionNode): TDataValue;
function VisitCondExpression(const Node: ICondExpressionNode): TDataValue;
function VisitLambdaExpression(const Node: ILambdaExpressionNode): TDataValue;
function VisitFunctionCall(const Node: IFunctionCallNode): TDataValue;
function VisitMacroExpansionNode(const Node: IMacroExpansionNode): TDataValue;
function VisitBlockExpression(const Node: IBlockExpressionNode): TDataValue;
function VisitVariableDeclaration(const Node: IVariableDeclarationNode): TDataValue;
function VisitAssignment(const Node: IAssignmentNode): TDataValue;
function VisitMacroDefinition(const Node: IMacroDefinitionNode): TDataValue;
function VisitQuasiquote(const Node: IQuasiquoteNode): TDataValue;
function VisitUnquote(const Node: IUnquoteNode): TDataValue;
function VisitUnquoteSplicing(const Node: IUnquoteSplicingNode): TDataValue;
function VisitIndexer(const Node: IIndexerNode): TDataValue;
function VisitMemberAccess(const Node: IMemberAccessNode): TDataValue;
function VisitRecordLiteral(const Node: IRecordLiteralNode): TDataValue;
function VisitCreateSeries(const Node: ICreateSeriesNode): TDataValue;
function VisitAddSeriesItem(const Node: IAddSeriesItemNode): TDataValue;
function VisitSeriesLength(const Node: ISeriesLengthNode): TDataValue;
function VisitRecurNode(const Node: IRecurNode): TDataValue;
function VisitNop(const Node: INopNode): TDataValue;
// Pipes
function VisitPipeInput(const Node: IPipeInputNode): TDataValue;
function VisitPipeSelectorList(const Node: IPipeSelectorList): TDataValue;
function VisitPipeInputList(const Node: IPipeInputList): TDataValue;
function VisitPipe(const Node: IPipeNode): TDataValue;
end;
IEvaluatorVisitor = interface(IAstVisitor)
@@ -571,7 +532,8 @@ type
function GetIsTyped: Boolean; virtual;
public
constructor Create(const AIdentity: IAstIdentity);
function Accept(const Visitor: IAstVisitor): TDataValue; virtual; abstract;
function Accept(const Visitor: IAstVisitor): TDataValue; virtual;
function AsConstant: IConstantNode; virtual;
function AsIdentifier: IIdentifierNode; virtual;
@@ -661,7 +623,6 @@ type
protected
function GetKind: TAstNodeKind; override;
public
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsParameterList: IParameterList; override;
end;
@@ -669,7 +630,6 @@ type
protected
function GetKind: TAstNodeKind; override;
public
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsArgumentList: IArgumentList; override;
end;
@@ -677,7 +637,6 @@ type
protected
function GetKind: TAstNodeKind; override;
public
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsExpressionList: IExpressionList; override;
end;
@@ -691,7 +650,6 @@ type
function GetKind: TAstNodeKind; override;
public
constructor Create(const AKey: IKeywordNode; const AValue: IAstNode; const AIdentity: IAstIdentity);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsRecordField: IRecordFieldNode; override;
end;
@@ -699,7 +657,6 @@ type
protected
function GetKind: TAstNodeKind; override;
public
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsRecordFieldList: IRecordFieldList; override;
end;
@@ -713,7 +670,6 @@ type
function GetKind: TAstNodeKind; override;
public
constructor Create(const AIdentity: IConstantIdentity; const AStaticType: IStaticType);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsConstant: IConstantNode; override;
end;
@@ -727,7 +683,6 @@ type
function GetKind: TAstNodeKind; override;
public
constructor Create(const AIdentity: INamedIdentity; const AAddress: TResolvedAddress; const AStaticType: IStaticType);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsIdentifier: IIdentifierNode; override;
end;
@@ -739,7 +694,6 @@ type
function GetKind: TAstNodeKind; override;
public
constructor Create(const AIdentity: IKeywordIdentity);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsKeyword: IKeywordNode; override;
end;
@@ -751,7 +705,6 @@ type
function GetKind: TAstNodeKind; override;
public
constructor Create(const AIdentity: IDefinitionIdentity; const AStaticType: IStaticType);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsCreateSeries: ICreateSeriesNode; override;
end;
@@ -771,7 +724,6 @@ type
const AStaticType: IStaticType;
const AIdentity: IAstIdentity
);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsIfExpression: IIfExpressionNode; override;
end;
@@ -790,7 +742,6 @@ type
const AStaticType: IStaticType;
const AIdentity: IAstIdentity
);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsCondExpression: ICondExpressionNode; override;
end;
@@ -822,7 +773,6 @@ type
const AHasNestedLambdas, AIsPure: Boolean;
const AIdentity: IAstIdentity
);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsLambdaExpression: ILambdaExpressionNode; override;
end;
@@ -850,7 +800,6 @@ type
const AIsTargetPure: Boolean;
const AIdentity: IAstIdentity
);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsFunctionCall: IFunctionCallNode; override;
end;
@@ -871,7 +820,6 @@ type
const ABody: IAstNode;
const AIdentity: IAstIdentity
);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsMacroDefinition: IMacroDefinitionNode; override;
end;
@@ -885,7 +833,6 @@ type
function GetKind: TAstNodeKind; override;
public
constructor Create(const ACallNode: IFunctionCallNode; const AExpandedBody: IAstNode; const AIdentity: IAstIdentity);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsMacroExpansion: IMacroExpansionNode; override;
end;
@@ -897,7 +844,6 @@ type
function GetKind: TAstNodeKind; override;
public
constructor Create(const AExpression: IAstNode; const AIdentity: IAstIdentity);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsQuasiquote: IQuasiquoteNode; override;
end;
@@ -909,7 +855,6 @@ type
function GetKind: TAstNodeKind; override;
public
constructor Create(const AExpression: IAstNode; const AIdentity: IAstIdentity);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsUnquote: IUnquoteNode; override;
end;
@@ -921,7 +866,6 @@ type
function GetKind: TAstNodeKind; override;
public
constructor Create(const AExpression: IQuasiquoteNode; const AIdentity: IAstIdentity);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsUnquoteSplicing: IUnquoteSplicingNode; override;
end;
@@ -933,7 +877,6 @@ type
function GetKind: TAstNodeKind; override;
public
constructor Create(const AArguments: IArgumentList; const AStaticType: IStaticType; const AIdentity: IAstIdentity);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsRecur: IRecurNode; override;
end;
@@ -945,7 +888,6 @@ type
function GetKind: TAstNodeKind; override;
public
constructor Create(const AExpressions: IExpressionList; const AStaticType: IStaticType; const AIdentity: IAstIdentity);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsBlockExpression: IBlockExpressionNode; override;
end;
@@ -966,7 +908,6 @@ type
const AIsBoxed: Boolean;
const AIdentity: IAstIdentity
);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsVariableDeclaration: IVariableDeclarationNode; override;
end;
@@ -979,7 +920,6 @@ type
function GetKind: TAstNodeKind; override;
public
constructor Create(const ATarget, AValue: IAstNode; const AStaticType: IStaticType; const AIdentity: IAstIdentity);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsAssignment: IAssignmentNode; override;
end;
@@ -992,7 +932,6 @@ type
function GetKind: TAstNodeKind; override;
public
constructor Create(const ABase, AIndex: IAstNode; const AStaticType: IStaticType; const AIdentity: IAstIdentity);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsIndexer: IIndexerNode; override;
end;
@@ -1011,7 +950,6 @@ type
const AStaticType: IStaticType;
const AIdentity: IAstIdentity
);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsMemberAccess: IMemberAccessNode; override;
end;
@@ -1033,7 +971,6 @@ type
const AStaticType: IStaticType;
const AIdentity: IAstIdentity
);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsRecordLiteral: IRecordLiteralNode; override;
end;
@@ -1053,7 +990,6 @@ type
const AStaticType: IStaticType;
const AIdentity: IAstIdentity
);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsAddSeriesItem: IAddSeriesItemNode; override;
end;
@@ -1065,7 +1001,6 @@ type
function GetKind: TAstNodeKind; override;
public
constructor Create(const ASeries: IIdentifierNode; const AStaticType: IStaticType; const AIdentity: IAstIdentity);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsSeriesLength: ISeriesLengthNode; override;
end;
@@ -1074,7 +1009,6 @@ type
function GetKind: TAstNodeKind; override;
public
constructor Create(const AStaticType: IStaticType; const AIdentity: IAstIdentity);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsNop: INopNode; override;
end;
@@ -1082,7 +1016,6 @@ type
protected
function GetKind: TAstNodeKind; override;
public
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsPipeSelectorList: IPipeSelectorList; override;
end;
@@ -1101,7 +1034,6 @@ type
const AIdentity: IAstIdentity;
const AStaticType: IStaticType
);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsPipeInput: IPipeInputNode; override;
end;
@@ -1109,7 +1041,6 @@ type
protected
function GetKind: TAstNodeKind; override;
public
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsPipeInputList: IPipeInputList; override;
end;
@@ -1128,7 +1059,6 @@ type
const AIdentity: IAstIdentity;
const AStaticType: IStaticType
);
function Accept(const Visitor: IAstVisitor): TDataValue; override;
function AsPipe: IPipeNode; override;
end;
@@ -1303,15 +1233,24 @@ begin
Result := False;
end;
function TAstNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
// Central Dispatch: Delegate to the generic Visit method of the visitor.
// The visitor uses Node.Kind to look up the correct handler.
Result := Visitor.Visit(Self);
end;
// Default implementations for As... casting methods (Return nil)
function TAstNode.AsConstant: IConstantNode;
begin
Result := nil;
end;
function TAstNode.AsIdentifier: IIdentifierNode;
begin
Result := nil;
end;
function TAstNode.AsKeyword: IKeywordNode;
begin
Result := nil;
@@ -1321,18 +1260,22 @@ function TAstNode.AsParameterList: IParameterList;
begin
Result := nil;
end;
function TAstNode.AsArgumentList: IArgumentList;
begin
Result := nil;
end;
function TAstNode.AsExpressionList: IExpressionList;
begin
Result := nil;
end;
function TAstNode.AsRecordFieldList: IRecordFieldList;
begin
Result := nil;
end;
function TAstNode.AsRecordField: IRecordFieldNode;
begin
Result := nil;
@@ -1342,82 +1285,102 @@ function TAstNode.AsIfExpression: IIfExpressionNode;
begin
Result := nil;
end;
function TAstNode.AsCondExpression: ICondExpressionNode;
begin
Result := nil;
end;
function TAstNode.AsLambdaExpression: ILambdaExpressionNode;
begin
Result := nil;
end;
function TAstNode.AsFunctionCall: IFunctionCallNode;
begin
Result := nil;
end;
function TAstNode.AsMacroExpansion: IMacroExpansionNode;
begin
Result := nil;
end;
function TAstNode.AsBlockExpression: IBlockExpressionNode;
begin
Result := nil;
end;
function TAstNode.AsVariableDeclaration: IVariableDeclarationNode;
begin
Result := nil;
end;
function TAstNode.AsAssignment: IAssignmentNode;
begin
Result := nil;
end;
function TAstNode.AsMacroDefinition: IMacroDefinitionNode;
begin
Result := nil;
end;
function TAstNode.AsQuasiquote: IQuasiquoteNode;
begin
Result := nil;
end;
function TAstNode.AsUnquote: IUnquoteNode;
begin
Result := nil;
end;
function TAstNode.AsUnquoteSplicing: IUnquoteSplicingNode;
begin
Result := nil;
end;
function TAstNode.AsIndexer: IIndexerNode;
begin
Result := nil;
end;
function TAstNode.AsMemberAccess: IMemberAccessNode;
begin
Result := nil;
end;
function TAstNode.AsRecordLiteral: IRecordLiteralNode;
begin
Result := nil;
end;
function TAstNode.AsCreateSeries: ICreateSeriesNode;
begin
Result := nil;
end;
function TAstNode.AsAddSeriesItem: IAddSeriesItemNode;
begin
Result := nil;
end;
function TAstNode.AsSeriesLength: ISeriesLengthNode;
begin
Result := nil;
end;
function TAstNode.AsRecur: IRecurNode;
begin
Result := nil;
end;
function TAstNode.AsNop: INopNode;
begin
Result := nil;
end;
function TAstNode.AsTypedNode: IAstTypedNode;
begin
Result := nil;
@@ -1427,14 +1390,17 @@ function TAstNode.AsPipeInput: IPipeInputNode;
begin
Result := nil;
end;
function TAstNode.AsPipeSelectorList: IPipeSelectorList;
begin
Result := nil;
end;
function TAstNode.AsPipeInputList: IPipeInputList;
begin
Result := nil;
end;
function TAstNode.AsPipe: IPipeNode;
begin
Result := nil;
@@ -1493,11 +1459,6 @@ end;
{ TParameterList }
function TParameterList.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitParameterList(Self);
end;
function TParameterList.AsParameterList: IParameterList;
begin
Result := Self;
@@ -1510,11 +1471,6 @@ end;
{ TArgumentList }
function TArgumentList.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitArgumentList(Self);
end;
function TArgumentList.AsArgumentList: IArgumentList;
begin
Result := Self;
@@ -1527,11 +1483,6 @@ end;
{ TExpressionList }
function TExpressionList.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitExpressionList(Self);
end;
function TExpressionList.AsExpressionList: IExpressionList;
begin
Result := Self;
@@ -1551,11 +1502,6 @@ begin
FValue := AValue;
end;
function TRecordFieldNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitRecordField(Self);
end;
function TRecordFieldNode.AsRecordField: IRecordFieldNode;
begin
Result := Self;
@@ -1578,11 +1524,6 @@ end;
{ TRecordFieldList }
function TRecordFieldList.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitRecordFieldList(Self);
end;
function TRecordFieldList.AsRecordFieldList: IRecordFieldList;
begin
Result := Self;
@@ -1601,11 +1542,6 @@ begin
FConstIdentity := AIdentity;
end;
function TConstantNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitConstant(Self);
end;
function TConstantNode.AsConstant: IConstantNode;
begin
Result := Self;
@@ -1630,11 +1566,6 @@ begin
FAddress := AAddress;
end;
function TIdentifierNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitIdentifier(Self);
end;
function TIdentifierNode.AsIdentifier: IIdentifierNode;
begin
Result := Self;
@@ -1663,11 +1594,6 @@ begin
FKeywordIdentity := AIdentity;
end;
function TKeywordNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitKeyword(Self);
end;
function TKeywordNode.AsKeyword: IKeywordNode;
begin
Result := Self;
@@ -1691,11 +1617,6 @@ begin
FDefIdentity := AIdentity;
end;
function TCreateSeriesNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitCreateSeries(Self);
end;
function TCreateSeriesNode.AsCreateSeries: ICreateSeriesNode;
begin
Result := Self;
@@ -1725,11 +1646,6 @@ begin
FElseBranch := AElseBranch;
end;
function TIfExpressionNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitIfExpression(Self);
end;
function TIfExpressionNode.AsIfExpression: IIfExpressionNode;
begin
Result := Self;
@@ -1766,11 +1682,6 @@ begin
FElseBranch := AElseBranch;
end;
function TCondExpressionNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitCondExpression(Self);
end;
function TCondExpressionNode.AsCondExpression: ICondExpressionNode;
begin
Result := Self;
@@ -1814,11 +1725,6 @@ begin
FIsPure := AIsPure;
end;
function TLambdaExpressionNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitLambdaExpression(Self);
end;
function TLambdaExpressionNode.AsLambdaExpression: ILambdaExpressionNode;
begin
Result := Self;
@@ -1877,11 +1783,6 @@ begin
FIsTargetPure := AIsTargetPure;
end;
function TFunctionCallNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitFunctionCall(Self);
end;
function TFunctionCallNode.AsFunctionCall: IFunctionCallNode;
begin
Result := Self;
@@ -1927,11 +1828,6 @@ begin
FBody := ABody;
end;
function TMacroDefinitionNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitMacroDefinition(Self);
end;
function TMacroDefinitionNode.AsMacroDefinition: IMacroDefinitionNode;
begin
Result := Self;
@@ -1966,11 +1862,6 @@ begin
FExpandedBody := AExpandedBody;
end;
function TMacroExpansionNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitMacroExpansionNode(Self);
end;
function TMacroExpansionNode.AsMacroExpansion: IMacroExpansionNode;
begin
Result := Self;
@@ -1997,11 +1888,6 @@ begin
FExpression := AExpression;
end;
function TQuasiquoteNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitQuasiquote(Self);
end;
function TQuasiquoteNode.AsQuasiquote: IQuasiquoteNode;
begin
Result := Self;
@@ -2024,11 +1910,6 @@ begin
FExpression := AExpression;
end;
function TUnquoteNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitUnquote(Self);
end;
function TUnquoteNode.AsUnquote: IUnquoteNode;
begin
Result := Self;
@@ -2051,11 +1932,6 @@ begin
FExpression := AExpression;
end;
function TUnquoteSplicingNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitUnquoteSplicing(Self);
end;
function TUnquoteSplicingNode.AsUnquoteSplicing: IUnquoteSplicingNode;
begin
Result := Self;
@@ -2078,11 +1954,6 @@ begin
FArguments := AArguments;
end;
function TRecurNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitRecurNode(Self);
end;
function TRecurNode.AsRecur: IRecurNode;
begin
Result := Self;
@@ -2105,11 +1976,6 @@ begin
FExpressions := AExpressions;
end;
function TBlockExpressionNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitBlockExpression(Self);
end;
function TBlockExpressionNode.AsBlockExpression: IBlockExpressionNode;
begin
Result := Self;
@@ -2140,11 +2006,6 @@ begin
FIsBoxed := AIsBoxed;
end;
function TVariableDeclarationNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitVariableDeclaration(Self);
end;
function TVariableDeclarationNode.AsVariableDeclaration: IVariableDeclarationNode;
begin
Result := Self;
@@ -2176,11 +2037,6 @@ begin
FValue := AValue;
end;
function TAssignmentNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitAssignment(Self);
end;
function TAssignmentNode.AsAssignment: IAssignmentNode;
begin
Result := Self;
@@ -2208,11 +2064,6 @@ begin
FIndex := AIndex;
end;
function TIndexerNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitIndexer(Self);
end;
function TIndexerNode.AsIndexer: IIndexerNode;
begin
Result := Self;
@@ -2245,11 +2096,6 @@ begin
FMember := AMember;
end;
function TMemberAccessNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitMemberAccess(Self);
end;
function TMemberAccessNode.AsMemberAccess: IMemberAccessNode;
begin
Result := Self;
@@ -2284,11 +2130,6 @@ begin
FGenericDef := AGenericDef;
end;
function TRecordLiteralNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitRecordLiteral(Self);
end;
function TRecordLiteralNode.AsRecordLiteral: IRecordLiteralNode;
begin
Result := Self;
@@ -2326,11 +2167,6 @@ begin
FLookback := ALookback;
end;
function TAddSeriesItemNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitAddSeriesItem(Self);
end;
function TAddSeriesItemNode.AsAddSeriesItem: IAddSeriesItemNode;
begin
Result := Self;
@@ -2361,11 +2197,6 @@ begin
FSeries := ASeries;
end;
function TSeriesLengthNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitSeriesLength(Self);
end;
function TSeriesLengthNode.AsSeriesLength: ISeriesLengthNode;
begin
Result := Self;
@@ -2387,11 +2218,6 @@ begin
inherited Create(AStaticType, AIdentity);
end;
function TNopNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitNop(Self);
end;
function TNopNode.AsNop: INopNode;
begin
Result := Self;
@@ -2433,11 +2259,6 @@ end;
{ TPipeSelectorList }
function TPipeSelectorList.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitPipeSelectorList(Self);
end;
function TPipeSelectorList.AsPipeSelectorList: IPipeSelectorList;
begin
Result := Self;
@@ -2462,11 +2283,6 @@ begin
FSelectors := ASelectors;
end;
function TPipeInputNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitPipeInput(Self);
end;
function TPipeInputNode.AsPipeInput: IPipeInputNode;
begin
Result := Self;
@@ -2489,11 +2305,6 @@ end;
{ TPipeInputList }
function TPipeInputList.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitPipeInputList(Self);
end;
function TPipeInputList.AsPipeInputList: IPipeInputList;
begin
Result := Self;
@@ -2518,11 +2329,6 @@ begin
FTransformation := ATransformation;
end;
function TPipeNode.Accept(const Visitor: IAstVisitor): TDataValue;
begin
Result := Visitor.VisitPipe(Self);
end;
function TPipeNode.AsPipe: IPipeNode;
begin
Result := Self;
-198
View File
@@ -25,77 +25,8 @@ type
// IAstVisitor explicit implementation (bridge methods)
function IAstVisitor.Visit = VisitBridge;
// Legacy bridge methods for IAstVisitor interface compliance
function IAstVisitor.VisitConstant = DoVisitConstant;
function IAstVisitor.VisitIdentifier = DoVisitIdentifier;
function IAstVisitor.VisitKeyword = DoVisitKeyword;
function IAstVisitor.VisitParameterList = DoVisitParameterList;
function IAstVisitor.VisitArgumentList = DoVisitArgumentList;
function IAstVisitor.VisitExpressionList = DoVisitExpressionList;
function IAstVisitor.VisitRecordFieldList = DoVisitRecordFieldList;
function IAstVisitor.VisitRecordField = DoVisitRecordField;
function IAstVisitor.VisitIfExpression = DoVisitIfExpression;
function IAstVisitor.VisitCondExpression = DoVisitCondExpression;
function IAstVisitor.VisitLambdaExpression = DoVisitLambdaExpression;
function IAstVisitor.VisitFunctionCall = DoVisitFunctionCall;
function IAstVisitor.VisitMacroExpansionNode = DoVisitMacroExpansionNode;
function IAstVisitor.VisitBlockExpression = DoVisitBlockExpression;
function IAstVisitor.VisitVariableDeclaration = DoVisitVariableDeclaration;
function IAstVisitor.VisitAssignment = DoVisitAssignment;
function IAstVisitor.VisitMacroDefinition = DoVisitMacroDefinition;
function IAstVisitor.VisitQuasiquote = DoVisitQuasiquote;
function IAstVisitor.VisitUnquote = DoVisitUnquote;
function IAstVisitor.VisitUnquoteSplicing = DoVisitUnquoteSplicing;
function IAstVisitor.VisitIndexer = DoVisitIndexer;
function IAstVisitor.VisitMemberAccess = DoVisitMemberAccess;
function IAstVisitor.VisitRecordLiteral = DoVisitRecordLiteral;
function IAstVisitor.VisitCreateSeries = DoVisitCreateSeries;
function IAstVisitor.VisitAddSeriesItem = DoVisitAddSeriesItem;
function IAstVisitor.VisitSeriesLength = DoVisitSeriesLength;
function IAstVisitor.VisitRecurNode = DoVisitRecurNode;
function IAstVisitor.VisitNop = DoVisitNop;
function IAstVisitor.VisitPipeInput = DoVisitPipeInput;
function IAstVisitor.VisitPipeSelectorList = DoVisitPipeSelectorList;
function IAstVisitor.VisitPipeInputList = DoVisitPipeInputList;
function IAstVisitor.VisitPipe = DoVisitPipe;
// Private helpers to wrap T into TDataValue for the non-generic interface
function VisitBridge(const Node: IAstNode): TDataValue;
function DoVisitConstant(const Node: IConstantNode): TDataValue;
function DoVisitIdentifier(const Node: IIdentifierNode): TDataValue;
function DoVisitKeyword(const Node: IKeywordNode): TDataValue;
function DoVisitParameterList(const Node: IParameterList): TDataValue;
function DoVisitArgumentList(const Node: IArgumentList): TDataValue;
function DoVisitExpressionList(const Node: IExpressionList): TDataValue;
function DoVisitRecordFieldList(const Node: IRecordFieldList): TDataValue;
function DoVisitRecordField(const Node: IRecordFieldNode): TDataValue;
function DoVisitIfExpression(const Node: IIfExpressionNode): TDataValue;
function DoVisitCondExpression(const Node: ICondExpressionNode): TDataValue;
function DoVisitLambdaExpression(const Node: ILambdaExpressionNode): TDataValue;
function DoVisitFunctionCall(const Node: IFunctionCallNode): TDataValue;
function DoVisitMacroExpansionNode(const Node: IMacroExpansionNode): TDataValue;
function DoVisitBlockExpression(const Node: IBlockExpressionNode): TDataValue;
function DoVisitVariableDeclaration(const Node: IVariableDeclarationNode): TDataValue;
function DoVisitAssignment(const Node: IAssignmentNode): TDataValue;
function DoVisitMacroDefinition(const Node: IMacroDefinitionNode): TDataValue;
function DoVisitQuasiquote(const Node: IQuasiquoteNode): TDataValue;
function DoVisitUnquote(const Node: IUnquoteNode): TDataValue;
function DoVisitUnquoteSplicing(const Node: IUnquoteSplicingNode): TDataValue;
function DoVisitIndexer(const Node: IIndexerNode): TDataValue;
function DoVisitMemberAccess(const Node: IMemberAccessNode): TDataValue;
function DoVisitRecordLiteral(const Node: IRecordLiteralNode): TDataValue;
function DoVisitCreateSeries(const Node: ICreateSeriesNode): TDataValue;
function DoVisitAddSeriesItem(const Node: IAddSeriesItemNode): TDataValue;
function DoVisitSeriesLength(const Node: ISeriesLengthNode): TDataValue;
function DoVisitRecurNode(const Node: IRecurNode): TDataValue;
function DoVisitNop(const Node: INopNode): TDataValue;
function DoVisitPipeInput(const Node: IPipeInputNode): TDataValue;
function DoVisitPipeSelectorList(const Node: IPipeSelectorList): TDataValue;
function DoVisitPipeInputList(const Node: IPipeInputList): TDataValue;
function DoVisitPipe(const Node: IPipeNode): TDataValue;
protected
// Registers a handler for a specific node kind.
@@ -293,135 +224,6 @@ begin
Result := TDataValue.FromGeneric<T>(Visit(Node));
end;
function TAstVisitor<T>.DoVisitConstant(const Node: IConstantNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitConstant(Node));
end;
function TAstVisitor<T>.DoVisitIdentifier(const Node: IIdentifierNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitIdentifier(Node));
end;
function TAstVisitor<T>.DoVisitKeyword(const Node: IKeywordNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitKeyword(Node));
end;
function TAstVisitor<T>.DoVisitParameterList(const Node: IParameterList): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitParameterList(Node));
end;
function TAstVisitor<T>.DoVisitArgumentList(const Node: IArgumentList): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitArgumentList(Node));
end;
function TAstVisitor<T>.DoVisitExpressionList(const Node: IExpressionList): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitExpressionList(Node));
end;
function TAstVisitor<T>.DoVisitRecordFieldList(const Node: IRecordFieldList): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitRecordFieldList(Node));
end;
function TAstVisitor<T>.DoVisitRecordField(const Node: IRecordFieldNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitRecordField(Node));
end;
function TAstVisitor<T>.DoVisitIfExpression(const Node: IIfExpressionNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitIfExpression(Node));
end;
function TAstVisitor<T>.DoVisitCondExpression(const Node: ICondExpressionNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitCondExpression(Node));
end;
function TAstVisitor<T>.DoVisitLambdaExpression(const Node: ILambdaExpressionNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitLambdaExpression(Node));
end;
function TAstVisitor<T>.DoVisitFunctionCall(const Node: IFunctionCallNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitFunctionCall(Node));
end;
function TAstVisitor<T>.DoVisitMacroExpansionNode(const Node: IMacroExpansionNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitMacroExpansionNode(Node));
end;
function TAstVisitor<T>.DoVisitBlockExpression(const Node: IBlockExpressionNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitBlockExpression(Node));
end;
function TAstVisitor<T>.DoVisitVariableDeclaration(const Node: IVariableDeclarationNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitVariableDeclaration(Node));
end;
function TAstVisitor<T>.DoVisitAssignment(const Node: IAssignmentNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitAssignment(Node));
end;
function TAstVisitor<T>.DoVisitMacroDefinition(const Node: IMacroDefinitionNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitMacroDefinition(Node));
end;
function TAstVisitor<T>.DoVisitQuasiquote(const Node: IQuasiquoteNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitQuasiquote(Node));
end;
function TAstVisitor<T>.DoVisitUnquote(const Node: IUnquoteNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitUnquote(Node));
end;
function TAstVisitor<T>.DoVisitUnquoteSplicing(const Node: IUnquoteSplicingNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitUnquoteSplicing(Node));
end;
function TAstVisitor<T>.DoVisitIndexer(const Node: IIndexerNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitIndexer(Node));
end;
function TAstVisitor<T>.DoVisitMemberAccess(const Node: IMemberAccessNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitMemberAccess(Node));
end;
function TAstVisitor<T>.DoVisitRecordLiteral(const Node: IRecordLiteralNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitRecordLiteral(Node));
end;
function TAstVisitor<T>.DoVisitCreateSeries(const Node: ICreateSeriesNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitCreateSeries(Node));
end;
function TAstVisitor<T>.DoVisitAddSeriesItem(const Node: IAddSeriesItemNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitAddSeriesItem(Node));
end;
function TAstVisitor<T>.DoVisitSeriesLength(const Node: ISeriesLengthNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitSeriesLength(Node));
end;
function TAstVisitor<T>.DoVisitRecurNode(const Node: IRecurNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitRecurNode(Node));
end;
function TAstVisitor<T>.DoVisitNop(const Node: INopNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitNop(Node));
end;
function TAstVisitor<T>.DoVisitPipeInput(const Node: IPipeInputNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitPipeInput(Node));
end;
function TAstVisitor<T>.DoVisitPipeSelectorList(const Node: IPipeSelectorList): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitPipeSelectorList(Node));
end;
function TAstVisitor<T>.DoVisitPipeInputList(const Node: IPipeInputList): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitPipeInputList(Node));
end;
function TAstVisitor<T>.DoVisitPipe(const Node: IPipeNode): TDataValue;
begin
Result := TDataValue.FromGeneric<T>(VisitPipe(Node));
end;
// --- Default implementations (analogous to original abstract class stubs) ---
function TAstVisitor<T>.VisitConstant(const Node: IConstantNode): T;