added macro quoting nodes
This commit is contained in:
@@ -25,6 +25,9 @@ type
|
||||
function VisitVariableDeclaration(const Node: IVariableDeclarationNode): TDataValue; virtual; abstract;
|
||||
function VisitAssignment(const Node: IAssignmentNode): TDataValue; virtual; abstract;
|
||||
function VisitMacroDefinition(const Node: IMacroDefinitionNode): TDataValue; virtual; abstract;
|
||||
function VisitQuasiquote(const Node: IQuasiquoteNode): TDataValue; virtual; abstract;
|
||||
function VisitUnquote(const Node: IUnquoteNode): TDataValue; virtual; abstract;
|
||||
function VisitUnquoteSplicing(const Node: IUnquoteSplicingNode): TDataValue; virtual; abstract;
|
||||
function VisitIndexer(const Node: IIndexerNode): TDataValue; virtual; abstract;
|
||||
function VisitMemberAccess(const Node: IMemberAccessNode): TDataValue; virtual; abstract;
|
||||
function VisitCreateSeries(const Node: ICreateSeriesNode): TDataValue; virtual; abstract;
|
||||
@@ -59,6 +62,9 @@ type
|
||||
function VisitVariableDeclaration(const Node: IVariableDeclarationNode): TDataValue; override; final;
|
||||
function VisitAssignment(const Node: IAssignmentNode): TDataValue; override; final;
|
||||
function VisitMacroDefinition(const Node: IMacroDefinitionNode): TDataValue; override; final;
|
||||
function VisitQuasiquote(const Node: IQuasiquoteNode): TDataValue; override; final;
|
||||
function VisitUnquote(const Node: IUnquoteNode): TDataValue; override; final;
|
||||
function VisitUnquoteSplicing(const Node: IUnquoteSplicingNode): TDataValue; override; final;
|
||||
function VisitIndexer(const Node: IIndexerNode): TDataValue; override; final;
|
||||
function VisitMemberAccess(const Node: IMemberAccessNode): TDataValue; override; final;
|
||||
function VisitCreateSeries(const Node: ICreateSeriesNode): TDataValue; override; final;
|
||||
@@ -79,6 +85,9 @@ type
|
||||
function TransformVariableDeclaration(const Node: IVariableDeclarationNode): IVariableDeclarationNode; virtual;
|
||||
function TransformAssignment(const Node: IAssignmentNode): IAssignmentNode; virtual;
|
||||
function TransformMacroDefinition(const Node: IMacroDefinitionNode): IMacroDefinitionNode; virtual;
|
||||
function TransformQuasiquote(const Node: IQuasiquoteNode): IQuasiquoteNode; virtual;
|
||||
function TransformUnquote(const Node: IUnquoteNode): IUnquoteNode; virtual;
|
||||
function TransformUnquoteSplicing(const Node: IUnquoteSplicingNode): IUnquoteSplicingNode; virtual;
|
||||
function TransformIndexer(const Node: IIndexerNode): IIndexerNode; virtual;
|
||||
function TransformMemberAccess(const Node: IMemberAccessNode): IMemberAccessNode; virtual;
|
||||
function TransformCreateSeries(const Node: ICreateSeriesNode): ICreateSeriesNode; virtual;
|
||||
@@ -249,6 +258,33 @@ begin
|
||||
Result := TAst.MacroDef(name, parameters, body);
|
||||
end;
|
||||
|
||||
function TAstTransformer.TransformQuasiquote(const Node: IQuasiquoteNode): IQuasiquoteNode;
|
||||
begin
|
||||
var expr := Accept(Node.Expression).AsIntf<IAstNode>;
|
||||
if expr = Node.Expression then
|
||||
Result := Node
|
||||
else
|
||||
Result := TAst.Quasiquote(expr);
|
||||
end;
|
||||
|
||||
function TAstTransformer.TransformUnquote(const Node: IUnquoteNode): IUnquoteNode;
|
||||
begin
|
||||
var expr := Accept(Node.Expression).AsIntf<IAstNode>;
|
||||
if expr = Node.Expression then
|
||||
Result := Node
|
||||
else
|
||||
Result := TAst.Unquote(expr);
|
||||
end;
|
||||
|
||||
function TAstTransformer.TransformUnquoteSplicing(const Node: IUnquoteSplicingNode): IUnquoteSplicingNode;
|
||||
begin
|
||||
var expr := Accept(Node.Expression).AsIntf<IAstNode>;
|
||||
if expr = Node.Expression then
|
||||
Result := Node
|
||||
else
|
||||
Result := TAst.UnquoteSplicing(expr);
|
||||
end;
|
||||
|
||||
function TAstTransformer.TransformIndexer(const Node: IIndexerNode): IIndexerNode;
|
||||
begin
|
||||
var base := Accept(Node.Base).AsIntf<IAstNode>;
|
||||
@@ -377,10 +413,24 @@ end;
|
||||
|
||||
function TAstTransformer.VisitMacroDefinition(const Node: IMacroDefinitionNode): TDataValue;
|
||||
begin
|
||||
// Added visit method for macro definitions.
|
||||
Result := TDataValue.FromIntf<IMacroDefinitionNode>(TransformMacroDefinition(Node));
|
||||
end;
|
||||
|
||||
function TAstTransformer.VisitQuasiquote(const Node: IQuasiquoteNode): TDataValue;
|
||||
begin
|
||||
Result := TDataValue.FromIntf<IQuasiquoteNode>(TransformQuasiquote(Node));
|
||||
end;
|
||||
|
||||
function TAstTransformer.VisitUnquote(const Node: IUnquoteNode): TDataValue;
|
||||
begin
|
||||
Result := TDataValue.FromIntf<IUnquoteNode>(TransformUnquote(Node));
|
||||
end;
|
||||
|
||||
function TAstTransformer.VisitUnquoteSplicing(const Node: IUnquoteSplicingNode): TDataValue;
|
||||
begin
|
||||
Result := TDataValue.FromIntf<IUnquoteSplicingNode>(TransformUnquoteSplicing(Node));
|
||||
end;
|
||||
|
||||
function TAstTransformer.VisitIndexer(const Node: IIndexerNode): TDataValue;
|
||||
begin
|
||||
Result := TDataValue.FromIntf<IIndexerNode>(TransformIndexer(Node));
|
||||
|
||||
Reference in New Issue
Block a user