Generic Visitors
This commit is contained in:
File diff suppressed because one or more lines are too long
+38
-232
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user