Ast visitor refactoring

This commit is contained in:
Michael Schimmel
2025-12-04 11:28:40 +01:00
parent a7290550e7
commit 9ed563bcc1
4 changed files with 331 additions and 569 deletions
+217 -455
View File
@@ -82,36 +82,37 @@ type
// Visit a node.
function Accept(const Node: IAstNode): T; virtual;
function VisitConstant(const Node: IConstantNode): T; virtual; abstract;
function VisitIdentifier(const Node: IIdentifierNode): T; virtual; abstract;
function VisitKeyword(const Node: IKeywordNode): T; virtual; abstract;
// Default visitor functions implemented analogous to TAstVisitor
function VisitConstant(const Node: IConstantNode): T; virtual;
function VisitIdentifier(const Node: IIdentifierNode): T; virtual;
function VisitKeyword(const Node: IKeywordNode): T; virtual;
function VisitParameterList(const Node: IParameterList): T; virtual; abstract;
function VisitArgumentList(const Node: IArgumentList): T; virtual; abstract;
function VisitExpressionList(const Node: IExpressionList): T; virtual; abstract;
function VisitRecordFieldList(const Node: IRecordFieldList): T; virtual; abstract;
function VisitRecordField(const Node: IRecordFieldNode): T; virtual; abstract;
function VisitParameterList(const Node: IParameterList): T; virtual;
function VisitArgumentList(const Node: IArgumentList): T; virtual;
function VisitExpressionList(const Node: IExpressionList): T; virtual;
function VisitRecordFieldList(const Node: IRecordFieldList): T; virtual;
function VisitRecordField(const Node: IRecordFieldNode): T; virtual;
function VisitIfExpression(const Node: IIfExpressionNode): T; virtual; abstract;
function VisitTernaryExpression(const Node: ITernaryExpressionNode): T; virtual; abstract;
function VisitLambdaExpression(const Node: ILambdaExpressionNode): T; virtual; abstract;
function VisitFunctionCall(const Node: IFunctionCallNode): T; virtual; abstract;
function VisitMacroExpansionNode(const Node: IMacroExpansionNode): T; virtual; abstract;
function VisitBlockExpression(const Node: IBlockExpressionNode): T; virtual; abstract;
function VisitVariableDeclaration(const Node: IVariableDeclarationNode): T; virtual; abstract;
function VisitAssignment(const Node: IAssignmentNode): T; virtual; abstract;
function VisitMacroDefinition(const Node: IMacroDefinitionNode): T; virtual; abstract;
function VisitQuasiquote(const Node: IQuasiquoteNode): T; virtual; abstract;
function VisitUnquote(const Node: IUnquoteNode): T; virtual; abstract;
function VisitUnquoteSplicing(const Node: IUnquoteSplicingNode): T; virtual; abstract;
function VisitIndexer(const Node: IIndexerNode): T; virtual; abstract;
function VisitMemberAccess(const Node: IMemberAccessNode): T; virtual; abstract;
function VisitRecordLiteral(const Node: IRecordLiteralNode): T; virtual; abstract;
function VisitCreateSeries(const Node: ICreateSeriesNode): T; virtual; abstract;
function VisitAddSeriesItem(const Node: IAddSeriesItemNode): T; virtual; abstract;
function VisitSeriesLength(const Node: ISeriesLengthNode): T; virtual; abstract;
function VisitRecurNode(const Node: IRecurNode): T; virtual; abstract;
function VisitNop(const Node: INopNode): T; virtual; abstract;
function VisitIfExpression(const Node: IIfExpressionNode): T; virtual;
function VisitTernaryExpression(const Node: ITernaryExpressionNode): T; virtual;
function VisitLambdaExpression(const Node: ILambdaExpressionNode): T; virtual;
function VisitFunctionCall(const Node: IFunctionCallNode): T; virtual;
function VisitMacroExpansionNode(const Node: IMacroExpansionNode): T; virtual;
function VisitBlockExpression(const Node: IBlockExpressionNode): T; virtual;
function VisitVariableDeclaration(const Node: IVariableDeclarationNode): T; virtual;
function VisitAssignment(const Node: IAssignmentNode): T; virtual;
function VisitMacroDefinition(const Node: IMacroDefinitionNode): T; virtual;
function VisitQuasiquote(const Node: IQuasiquoteNode): T; virtual;
function VisitUnquote(const Node: IUnquoteNode): T; virtual;
function VisitUnquoteSplicing(const Node: IUnquoteSplicingNode): T; virtual;
function VisitIndexer(const Node: IIndexerNode): T; virtual;
function VisitMemberAccess(const Node: IMemberAccessNode): T; virtual;
function VisitRecordLiteral(const Node: IRecordLiteralNode): T; virtual;
function VisitCreateSeries(const Node: ICreateSeriesNode): T; virtual;
function VisitAddSeriesItem(const Node: IAddSeriesItemNode): T; virtual;
function VisitSeriesLength(const Node: ISeriesLengthNode): T; virtual;
function VisitRecurNode(const Node: IRecurNode): T; virtual;
function VisitNop(const Node: INopNode): T; virtual;
end;
TAstTransformer = class abstract(TAstVisitor<IAstNode>)
@@ -148,105 +149,11 @@ type
function VisitNop(const Node: INopNode): IAstNode; override;
end;
TAstVisitor = class(TInterfacedObject, IAstVisitor)
strict private
// IAstVisitor explicit implementation (bridge methods)
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.VisitTernaryExpression = DoVisitTernaryExpression;
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;
// Private bridge method implementations
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 DoVisitTernaryExpression(const Node: ITernaryExpressionNode): 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;
protected
// Entry point for traversal
procedure Accept(const Node: IAstNode); virtual;
// Virtual procedures with default traversal implementation
procedure VisitConstant(const Node: IConstantNode); virtual;
procedure VisitIdentifier(const Node: IIdentifierNode); virtual;
procedure VisitKeyword(const Node: IKeywordNode); virtual;
procedure VisitParameterList(const Node: IParameterList); virtual;
procedure VisitArgumentList(const Node: IArgumentList); virtual;
procedure VisitExpressionList(const Node: IExpressionList); virtual;
procedure VisitRecordFieldList(const Node: IRecordFieldList); virtual;
procedure VisitRecordField(const Node: IRecordFieldNode); virtual;
procedure VisitIfExpression(const Node: IIfExpressionNode); virtual;
procedure VisitTernaryExpression(const Node: ITernaryExpressionNode); virtual;
procedure VisitLambdaExpression(const Node: ILambdaExpressionNode); virtual;
procedure VisitFunctionCall(const Node: IFunctionCallNode); virtual;
procedure VisitMacroExpansionNode(const Node: IMacroExpansionNode); virtual;
procedure VisitBlockExpression(const Node: IBlockExpressionNode); virtual;
procedure VisitVariableDeclaration(const Node: IVariableDeclarationNode); virtual;
procedure VisitAssignment(const Node: IAssignmentNode); virtual;
procedure VisitMacroDefinition(const Node: IMacroDefinitionNode); virtual;
procedure VisitQuasiquote(const Node: IQuasiquoteNode); virtual;
procedure VisitUnquote(const Node: IUnquoteNode); virtual;
procedure VisitUnquoteSplicing(const Node: IUnquoteSplicingNode); virtual;
procedure VisitIndexer(const Node: IIndexerNode); virtual;
procedure VisitMemberAccess(const Node: IMemberAccessNode); virtual;
procedure VisitRecordLiteral(const Node: IRecordLiteralNode); virtual;
procedure VisitCreateSeries(const Node: ICreateSeriesNode); virtual;
procedure VisitAddSeriesItem(const Node: IAddSeriesItemNode); virtual;
procedure VisitSeriesLength(const Node: ISeriesLengthNode); virtual;
procedure VisitRecurNode(const Node: IRecurNode); virtual;
procedure VisitNop(const Node: INopNode); virtual;
TVoid = record
end;
TAstVisitor = class(TAstVisitor<TVoid>);
implementation
{ TAstVisitor<T> }
@@ -374,6 +281,191 @@ begin
Result := TDataValue.FromGeneric<T>(VisitNop(Node));
end;
// --- Default implementations (analogous to TAstVisitor) ---
function TAstVisitor<T>.VisitConstant(const Node: IConstantNode): T;
begin
Result := Default(T);
end;
function TAstVisitor<T>.VisitIdentifier(const Node: IIdentifierNode): T;
begin
Result := Default(T);
end;
function TAstVisitor<T>.VisitKeyword(const Node: IKeywordNode): T;
begin
Result := Default(T);
end;
function TAstVisitor<T>.VisitParameterList(const Node: IParameterList): T;
begin
Result := Default(T);
for var Item in Node do
Accept(Item);
end;
function TAstVisitor<T>.VisitArgumentList(const Node: IArgumentList): T;
begin
Result := Default(T);
for var Item in Node do
Accept(Item);
end;
function TAstVisitor<T>.VisitExpressionList(const Node: IExpressionList): T;
begin
Result := Default(T);
for var Item in Node do
Accept(Item);
end;
function TAstVisitor<T>.VisitRecordFieldList(const Node: IRecordFieldList): T;
begin
Result := Default(T);
for var Item in Node do
Accept(Item);
end;
function TAstVisitor<T>.VisitRecordField(const Node: IRecordFieldNode): T;
begin
Result := Default(T);
Accept(Node.Key);
Accept(Node.Value);
end;
function TAstVisitor<T>.VisitIfExpression(const Node: IIfExpressionNode): T;
begin
Result := Default(T);
Accept(Node.Condition);
Accept(Node.ThenBranch);
Accept(Node.ElseBranch);
end;
function TAstVisitor<T>.VisitTernaryExpression(const Node: ITernaryExpressionNode): T;
begin
Result := Default(T);
Accept(Node.Condition);
Accept(Node.ThenBranch);
Accept(Node.ElseBranch);
end;
function TAstVisitor<T>.VisitLambdaExpression(const Node: ILambdaExpressionNode): T;
begin
Result := Default(T);
Accept(Node.Parameters);
Accept(Node.Body);
end;
function TAstVisitor<T>.VisitFunctionCall(const Node: IFunctionCallNode): T;
begin
Result := Default(T);
Accept(Node.Callee);
Accept(Node.Arguments);
end;
function TAstVisitor<T>.VisitMacroExpansionNode(const Node: IMacroExpansionNode): T;
begin
Result := Default(T);
Accept(Node.CallNode);
Accept(Node.ExpandedBody);
end;
function TAstVisitor<T>.VisitBlockExpression(const Node: IBlockExpressionNode): T;
begin
Result := Default(T);
Accept(Node.Expressions);
end;
function TAstVisitor<T>.VisitVariableDeclaration(const Node: IVariableDeclarationNode): T;
begin
Result := Default(T);
Accept(Node.Target);
Accept(Node.Initializer);
end;
function TAstVisitor<T>.VisitAssignment(const Node: IAssignmentNode): T;
begin
Result := Default(T);
Accept(Node.Target);
Accept(Node.Value);
end;
function TAstVisitor<T>.VisitMacroDefinition(const Node: IMacroDefinitionNode): T;
begin
Result := Default(T);
Accept(Node.Name);
Accept(Node.Parameters);
Accept(Node.Body);
end;
function TAstVisitor<T>.VisitQuasiquote(const Node: IQuasiquoteNode): T;
begin
Result := Default(T);
Accept(Node.Expression);
end;
function TAstVisitor<T>.VisitUnquote(const Node: IUnquoteNode): T;
begin
Result := Default(T);
Accept(Node.Expression);
end;
function TAstVisitor<T>.VisitUnquoteSplicing(const Node: IUnquoteSplicingNode): T;
begin
Result := Default(T);
Accept(Node.Expression);
end;
function TAstVisitor<T>.VisitIndexer(const Node: IIndexerNode): T;
begin
Result := Default(T);
Accept(Node.Base);
Accept(Node.Index);
end;
function TAstVisitor<T>.VisitMemberAccess(const Node: IMemberAccessNode): T;
begin
Result := Default(T);
Accept(Node.Base);
Accept(Node.Member);
end;
function TAstVisitor<T>.VisitRecordLiteral(const Node: IRecordLiteralNode): T;
begin
Result := Default(T);
Accept(Node.Fields);
end;
function TAstVisitor<T>.VisitCreateSeries(const Node: ICreateSeriesNode): T;
begin
Result := Default(T);
end;
function TAstVisitor<T>.VisitAddSeriesItem(const Node: IAddSeriesItemNode): T;
begin
Result := Default(T);
Accept(Node.Series);
Accept(Node.Value);
Accept(Node.Lookback);
end;
function TAstVisitor<T>.VisitSeriesLength(const Node: ISeriesLengthNode): T;
begin
Result := Default(T);
Accept(Node.Series);
end;
function TAstVisitor<T>.VisitRecurNode(const Node: IRecurNode): T;
begin
Result := Default(T);
Accept(Node.Arguments);
end;
function TAstVisitor<T>.VisitNop(const Node: INopNode): T;
begin
Result := Default(T);
end;
{ TAstTransformer }
// --- Base Virtual Implementations ---
@@ -767,334 +859,4 @@ begin
Result := TRecurNode.Create(newArgs, Node.StaticType, Node.Identity);
end;
{ TAstVisitor }
procedure TAstVisitor.Accept(const Node: IAstNode);
begin
if Assigned(Node) then
Node.Accept(Self);
end;
procedure TAstVisitor.VisitConstant(const Node: IConstantNode);
begin
end;
procedure TAstVisitor.VisitIdentifier(const Node: IIdentifierNode);
begin
end;
procedure TAstVisitor.VisitKeyword(const Node: IKeywordNode);
begin
end;
procedure TAstVisitor.VisitNop(const Node: INopNode);
begin
end;
procedure TAstVisitor.VisitCreateSeries(const Node: ICreateSeriesNode);
begin
end;
// List visitors iterate children by default
procedure TAstVisitor.VisitParameterList(const Node: IParameterList);
begin
for var item in Node do
Accept(item);
end;
procedure TAstVisitor.VisitArgumentList(const Node: IArgumentList);
begin
for var item in Node do
Accept(item);
end;
procedure TAstVisitor.VisitExpressionList(const Node: IExpressionList);
begin
for var item in Node do
Accept(item);
end;
procedure TAstVisitor.VisitRecordFieldList(const Node: IRecordFieldList);
begin
for var item in Node do
Accept(item);
end;
procedure TAstVisitor.VisitRecordField(const Node: IRecordFieldNode);
begin
Accept(Node.Key);
Accept(Node.Value);
end;
procedure TAstVisitor.VisitIfExpression(const Node: IIfExpressionNode);
begin
Accept(Node.Condition);
Accept(Node.ThenBranch);
Accept(Node.ElseBranch);
end;
procedure TAstVisitor.VisitTernaryExpression(const Node: ITernaryExpressionNode);
begin
Accept(Node.Condition);
Accept(Node.ThenBranch);
Accept(Node.ElseBranch);
end;
procedure TAstVisitor.VisitLambdaExpression(const Node: ILambdaExpressionNode);
begin
Accept(Node.Parameters);
Accept(Node.Body);
end;
procedure TAstVisitor.VisitFunctionCall(const Node: IFunctionCallNode);
begin
Accept(Node.Callee);
Accept(Node.Arguments);
end;
procedure TAstVisitor.VisitMacroExpansionNode(const Node: IMacroExpansionNode);
begin
Accept(Node.CallNode);
Accept(Node.ExpandedBody);
end;
procedure TAstVisitor.VisitBlockExpression(const Node: IBlockExpressionNode);
begin
Accept(Node.Expressions);
end;
procedure TAstVisitor.VisitVariableDeclaration(const Node: IVariableDeclarationNode);
begin
Accept(Node.Target);
Accept(Node.Initializer);
end;
procedure TAstVisitor.VisitAssignment(const Node: IAssignmentNode);
begin
Accept(Node.Target);
Accept(Node.Value);
end;
procedure TAstVisitor.VisitMacroDefinition(const Node: IMacroDefinitionNode);
begin
Accept(Node.Name);
Accept(Node.Parameters);
Accept(Node.Body);
end;
procedure TAstVisitor.VisitQuasiquote(const Node: IQuasiquoteNode);
begin
Accept(Node.Expression);
end;
procedure TAstVisitor.VisitUnquote(const Node: IUnquoteNode);
begin
Accept(Node.Expression);
end;
procedure TAstVisitor.VisitUnquoteSplicing(const Node: IUnquoteSplicingNode);
begin
Accept(Node.Expression);
end;
procedure TAstVisitor.VisitIndexer(const Node: IIndexerNode);
begin
Accept(Node.Base);
Accept(Node.Index);
end;
procedure TAstVisitor.VisitMemberAccess(const Node: IMemberAccessNode);
begin
Accept(Node.Base);
Accept(Node.Member);
end;
procedure TAstVisitor.VisitRecordLiteral(const Node: IRecordLiteralNode);
begin
Accept(Node.Fields);
end;
procedure TAstVisitor.VisitAddSeriesItem(const Node: IAddSeriesItemNode);
begin
Accept(Node.Series);
Accept(Node.Value);
Accept(Node.Lookback);
end;
procedure TAstVisitor.VisitSeriesLength(const Node: ISeriesLengthNode);
begin
Accept(Node.Series);
end;
procedure TAstVisitor.VisitRecurNode(const Node: IRecurNode);
begin
Accept(Node.Arguments);
end;
// --- TAstVisitor (Non-Generic) Bridge Implementations ---
function TAstVisitor.DoVisitConstant(const Node: IConstantNode): TDataValue;
begin
VisitConstant(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitIdentifier(const Node: IIdentifierNode): TDataValue;
begin
VisitIdentifier(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitKeyword(const Node: IKeywordNode): TDataValue;
begin
VisitKeyword(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitParameterList(const Node: IParameterList): TDataValue;
begin
VisitParameterList(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitArgumentList(const Node: IArgumentList): TDataValue;
begin
VisitArgumentList(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitExpressionList(const Node: IExpressionList): TDataValue;
begin
VisitExpressionList(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitRecordFieldList(const Node: IRecordFieldList): TDataValue;
begin
VisitRecordFieldList(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitRecordField(const Node: IRecordFieldNode): TDataValue;
begin
VisitRecordField(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitIfExpression(const Node: IIfExpressionNode): TDataValue;
begin
VisitIfExpression(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitTernaryExpression(const Node: ITernaryExpressionNode): TDataValue;
begin
VisitTernaryExpression(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitLambdaExpression(const Node: ILambdaExpressionNode): TDataValue;
begin
VisitLambdaExpression(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitFunctionCall(const Node: IFunctionCallNode): TDataValue;
begin
VisitFunctionCall(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitMacroExpansionNode(const Node: IMacroExpansionNode): TDataValue;
begin
VisitMacroExpansionNode(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitBlockExpression(const Node: IBlockExpressionNode): TDataValue;
begin
VisitBlockExpression(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitVariableDeclaration(const Node: IVariableDeclarationNode): TDataValue;
begin
VisitVariableDeclaration(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitAssignment(const Node: IAssignmentNode): TDataValue;
begin
VisitAssignment(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitMacroDefinition(const Node: IMacroDefinitionNode): TDataValue;
begin
VisitMacroDefinition(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitQuasiquote(const Node: IQuasiquoteNode): TDataValue;
begin
VisitQuasiquote(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitUnquote(const Node: IUnquoteNode): TDataValue;
begin
VisitUnquote(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitUnquoteSplicing(const Node: IUnquoteSplicingNode): TDataValue;
begin
VisitUnquoteSplicing(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitIndexer(const Node: IIndexerNode): TDataValue;
begin
VisitIndexer(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitMemberAccess(const Node: IMemberAccessNode): TDataValue;
begin
VisitMemberAccess(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitRecordLiteral(const Node: IRecordLiteralNode): TDataValue;
begin
VisitRecordLiteral(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitCreateSeries(const Node: ICreateSeriesNode): TDataValue;
begin
VisitCreateSeries(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitAddSeriesItem(const Node: IAddSeriesItemNode): TDataValue;
begin
VisitAddSeriesItem(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitSeriesLength(const Node: ISeriesLengthNode): TDataValue;
begin
VisitSeriesLength(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitRecurNode(const Node: IRecurNode): TDataValue;
begin
VisitRecurNode(Node);
Result := TDataValue.Void;
end;
function TAstVisitor.DoVisitNop(const Node: INopNode): TDataValue;
begin
VisitNop(Node);
Result := TDataValue.Void;
end;
end.