Nop-Node
This commit is contained in:
@@ -37,6 +37,7 @@ type
|
||||
function IAstVisitor.VisitAddSeriesItem = DoVisitAddSeriesItem;
|
||||
function IAstVisitor.VisitSeriesLength = DoVisitSeriesLength;
|
||||
function IAstVisitor.VisitRecurNode = DoVisitRecurNode;
|
||||
function IAstVisitor.VisitNop = DoVisitNop; // Added Nop
|
||||
|
||||
// Private bridge method implementations
|
||||
function DoVisitConstant(const Node: IConstantNode): TDataValue;
|
||||
@@ -63,6 +64,7 @@ type
|
||||
function DoVisitAddSeriesItem(const Node: IAddSeriesItemNode): TDataValue;
|
||||
function DoVisitSeriesLength(const Node: ISeriesLengthNode): TDataValue;
|
||||
function DoVisitRecurNode(const Node: IRecurNode): TDataValue;
|
||||
function DoVisitNop(const Node: INopNode): TDataValue; // Added Nop
|
||||
|
||||
protected
|
||||
// Visit a node.
|
||||
@@ -92,6 +94,7 @@ type
|
||||
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; // Added Nop
|
||||
end;
|
||||
|
||||
TAstTransformer = class abstract(TAstVisitor<IAstNode>)
|
||||
@@ -123,6 +126,7 @@ type
|
||||
function VisitAddSeriesItem(const Node: IAddSeriesItemNode): IAstNode; override;
|
||||
function VisitSeriesLength(const Node: ISeriesLengthNode): IAstNode; override;
|
||||
function VisitRecurNode(const Node: IRecurNode): IAstNode; override;
|
||||
function VisitNop(const Node: INopNode): IAstNode; override; // Added Nop
|
||||
end;
|
||||
|
||||
TAstVisitor = class abstract(TInterfacedObject, IAstVisitor)
|
||||
@@ -152,6 +156,7 @@ type
|
||||
function IAstVisitor.VisitAddSeriesItem = DoVisitAddSeriesItem;
|
||||
function IAstVisitor.VisitSeriesLength = DoVisitSeriesLength;
|
||||
function IAstVisitor.VisitRecurNode = DoVisitRecurNode;
|
||||
function IAstVisitor.VisitNop = DoVisitNop; // Added Nop
|
||||
|
||||
// Private bridge method implementations
|
||||
function DoVisitConstant(const Node: IConstantNode): TDataValue;
|
||||
@@ -178,6 +183,7 @@ type
|
||||
function DoVisitAddSeriesItem(const Node: IAddSeriesItemNode): TDataValue;
|
||||
function DoVisitSeriesLength(const Node: ISeriesLengthNode): TDataValue;
|
||||
function DoVisitRecurNode(const Node: IRecurNode): TDataValue;
|
||||
function DoVisitNop(const Node: INopNode): TDataValue; // Added Nop
|
||||
|
||||
protected
|
||||
// Virtual procedures for descendants (Interpreters/Side-effects) to override
|
||||
@@ -205,6 +211,7 @@ type
|
||||
procedure VisitAddSeriesItem(const Node: IAddSeriesItemNode); virtual; abstract;
|
||||
procedure VisitSeriesLength(const Node: ISeriesLengthNode); virtual; abstract;
|
||||
procedure VisitRecurNode(const Node: IRecurNode); virtual; abstract;
|
||||
procedure VisitNop(const Node: INopNode); virtual; abstract; // Added Nop
|
||||
end;
|
||||
|
||||
implementation
|
||||
@@ -341,6 +348,12 @@ begin
|
||||
Result := TDataValue.FromGeneric<T>(VisitRecurNode(Node));
|
||||
end;
|
||||
|
||||
function TAstVisitor<T>.DoVisitNop(const Node: INopNode): TDataValue;
|
||||
begin
|
||||
// Added Nop implementation
|
||||
Result := TDataValue.FromGeneric<T>(VisitNop(Node));
|
||||
end;
|
||||
|
||||
function TAstTransformer.AcceptParameters(const Nodes: TArray<IIdentifierNode>): TArray<IIdentifierNode>;
|
||||
var
|
||||
i: Integer;
|
||||
@@ -418,6 +431,12 @@ begin
|
||||
Result := Node; // Leaf node
|
||||
end;
|
||||
|
||||
function TAstTransformer.VisitNop(const Node: INopNode): IAstNode;
|
||||
begin
|
||||
// Added Nop implementation
|
||||
Result := Node; // Leaf node
|
||||
end;
|
||||
|
||||
function TAstTransformer.VisitBinaryExpression(const Node: IBinaryExpressionNode): IAstNode;
|
||||
var
|
||||
N: TBinaryExpressionNode;
|
||||
@@ -753,4 +772,10 @@ begin
|
||||
VisitRecurNode(Node);
|
||||
end;
|
||||
|
||||
function TAstVisitor.DoVisitNop(const Node: INopNode): TDataValue;
|
||||
begin
|
||||
// Added Nop implementation
|
||||
VisitNop(Node);
|
||||
end;
|
||||
|
||||
end.
|
||||
|
||||
Reference in New Issue
Block a user