Ast editor unit refactoring

This commit is contained in:
Michael Schimmel
2025-11-28 14:03:49 +01:00
parent 833ce8aada
commit 0b4201fe9b
6 changed files with 284 additions and 275 deletions
+80 -80
View File
@@ -14,60 +14,60 @@ uses
Myc.Fmx.AstEditor.Handlers;
type
// Inherits from the generic TAstVisitor<TAuraNode>
TAstVisualizer = class(TAstVisitor<TAuraNode>, IAstVisualizer)
// Inherits from the generic TAstVisitor<TAstViewNode>
TAstVisualizer = class(TAstVisitor<TAstViewNode>, IAstVisualizer)
private
FExprDepth: Integer;
FParentControl: TControl;
FWorkspace: TAuraWorkspace;
function CallAccept(const Node: IAstNode): TAuraNode;
FWorkspace: TAstWorkspace;
function CallAccept(const Node: IAstNode): TAstViewNode;
function GetExprDepth: Integer;
function GetParentControl: TControl;
function GetWorkspace: TAuraWorkspace;
function GetWorkspace: TAstWorkspace;
procedure SetExprDepth(const Value: Integer);
procedure SetParentControl(const Value: TControl);
protected
// Visitor implementations for each AST node type.
function VisitConstant(const Node: IConstantNode): TAuraNode; override;
function VisitIdentifier(const Node: IIdentifierNode): TAuraNode; override;
function VisitKeyword(const Node: IKeywordNode): TAuraNode; override;
function VisitIfExpression(const Node: IIfExpressionNode): TAuraNode; override;
function VisitTernaryExpression(const Node: ITernaryExpressionNode): TAuraNode; override;
function VisitLambdaExpression(const Node: ILambdaExpressionNode): TAuraNode; override;
function VisitFunctionCall(const Node: IFunctionCallNode): TAuraNode; override;
function VisitMacroExpansionNode(const Node: IMacroExpansionNode): TAuraNode; override;
function VisitBlockExpression(const Node: IBlockExpressionNode): TAuraNode; override;
function VisitVariableDeclaration(const Node: IVariableDeclarationNode): TAuraNode; override;
function VisitAssignment(const Node: IAssignmentNode): TAuraNode; override;
function VisitMacroDefinition(const Node: IMacroDefinitionNode): TAuraNode; override;
function VisitQuasiquote(const Node: IQuasiquoteNode): TAuraNode; override;
function VisitUnquote(const Node: IUnquoteNode): TAuraNode; override;
function VisitUnquoteSplicing(const Node: IUnquoteSplicingNode): TAuraNode; override;
function VisitIndexer(const Node: IIndexerNode): TAuraNode; override;
function VisitMemberAccess(const Node: IMemberAccessNode): TAuraNode; override;
function VisitRecordLiteral(const Node: IRecordLiteralNode): TAuraNode; override;
function VisitCreateSeries(const Node: ICreateSeriesNode): TAuraNode; override;
function VisitAddSeriesItem(const Node: IAddSeriesItemNode): TAuraNode; override;
function VisitSeriesLength(const Node: ISeriesLengthNode): TAuraNode; override;
function VisitRecurNode(const Node: IRecurNode): TAuraNode; override;
function VisitNop(const Node: INopNode): TAuraNode; override;
function VisitConstant(const Node: IConstantNode): TAstViewNode; override;
function VisitIdentifier(const Node: IIdentifierNode): TAstViewNode; override;
function VisitKeyword(const Node: IKeywordNode): TAstViewNode; override;
function VisitIfExpression(const Node: IIfExpressionNode): TAstViewNode; override;
function VisitTernaryExpression(const Node: ITernaryExpressionNode): TAstViewNode; override;
function VisitLambdaExpression(const Node: ILambdaExpressionNode): TAstViewNode; override;
function VisitFunctionCall(const Node: IFunctionCallNode): TAstViewNode; override;
function VisitMacroExpansionNode(const Node: IMacroExpansionNode): TAstViewNode; override;
function VisitBlockExpression(const Node: IBlockExpressionNode): TAstViewNode; override;
function VisitVariableDeclaration(const Node: IVariableDeclarationNode): TAstViewNode; override;
function VisitAssignment(const Node: IAssignmentNode): TAstViewNode; override;
function VisitMacroDefinition(const Node: IMacroDefinitionNode): TAstViewNode; override;
function VisitQuasiquote(const Node: IQuasiquoteNode): TAstViewNode; override;
function VisitUnquote(const Node: IUnquoteNode): TAstViewNode; override;
function VisitUnquoteSplicing(const Node: IUnquoteSplicingNode): TAstViewNode; override;
function VisitIndexer(const Node: IIndexerNode): TAstViewNode; override;
function VisitMemberAccess(const Node: IMemberAccessNode): TAstViewNode; override;
function VisitRecordLiteral(const Node: IRecordLiteralNode): TAstViewNode; override;
function VisitCreateSeries(const Node: ICreateSeriesNode): TAstViewNode; override;
function VisitAddSeriesItem(const Node: IAddSeriesItemNode): TAstViewNode; override;
function VisitSeriesLength(const Node: ISeriesLengthNode): TAstViewNode; override;
function VisitRecurNode(const Node: IRecurNode): TAstViewNode; override;
function VisitNop(const Node: INopNode): TAstViewNode; override;
public
constructor Create(AWorkspace: TAuraWorkspace; AParentControl: TControl; AExprDepth: Integer);
constructor Create(AWorkspace: TAstWorkspace; AParentControl: TControl; AExprDepth: Integer);
destructor Destroy; override;
function Clone(ParentControl: TControl; ExprDepth: Integer): IAstVisualizer;
property ExprDepth: Integer read GetExprDepth write SetExprDepth;
property ParentControl: TControl read GetParentControl write SetParentControl;
property Workspace: TAuraWorkspace read GetWorkspace;
property Workspace: TAstWorkspace read GetWorkspace;
end;
implementation
{ TAstVisualizer }
constructor TAstVisualizer.Create(AWorkspace: TAuraWorkspace; AParentControl: TControl; AExprDepth: Integer);
constructor TAstVisualizer.Create(AWorkspace: TAstWorkspace; AParentControl: TControl; AExprDepth: Integer);
begin
inherited Create;
FWorkspace := AWorkspace;
@@ -80,7 +80,7 @@ begin
inherited;
end;
function TAstVisualizer.CallAccept(const Node: IAstNode): TAuraNode;
function TAstVisualizer.CallAccept(const Node: IAstNode): TAstViewNode;
var
dataValue: TDataValue;
begin
@@ -91,7 +91,7 @@ begin
if dataValue.Kind = TDataValueKind.vkGeneric then
begin
Result := dataValue.AsGeneric<TAuraNode>;
Result := dataValue.AsGeneric<TAstViewNode>;
end
else
begin
@@ -114,7 +114,7 @@ begin
Result := FParentControl;
end;
function TAstVisualizer.GetWorkspace: TAuraWorkspace;
function TAstVisualizer.GetWorkspace: TAstWorkspace;
begin
Result := FWorkspace;
end;
@@ -131,119 +131,119 @@ end;
// --- Visitor Implementations ---
function TAstVisualizer.VisitConstant(const Node: IConstantNode): TAuraNode;
function TAstVisualizer.VisitConstant(const Node: IConstantNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TConstantNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TConstantNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitIdentifier(const Node: IIdentifierNode): TAuraNode;
function TAstVisualizer.VisitIdentifier(const Node: IIdentifierNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TIdentifierNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TIdentifierNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitKeyword(const Node: IKeywordNode): TAuraNode;
function TAstVisualizer.VisitKeyword(const Node: IKeywordNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TKeywordNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TKeywordNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitBlockExpression(const Node: IBlockExpressionNode): TAuraNode;
function TAstVisualizer.VisitBlockExpression(const Node: IBlockExpressionNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TBlockExpressionNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TBlockExpressionNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitIfExpression(const Node: IIfExpressionNode): TAuraNode;
function TAstVisualizer.VisitIfExpression(const Node: IIfExpressionNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TIfExpressionNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TIfExpressionNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitTernaryExpression(const Node: ITernaryExpressionNode): TAuraNode;
function TAstVisualizer.VisitTernaryExpression(const Node: ITernaryExpressionNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TTernaryExpressionNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TTernaryExpressionNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitLambdaExpression(const Node: ILambdaExpressionNode): TAuraNode;
function TAstVisualizer.VisitLambdaExpression(const Node: ILambdaExpressionNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TLambdaExpressionNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TLambdaExpressionNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitFunctionCall(const Node: IFunctionCallNode): TAuraNode;
function TAstVisualizer.VisitFunctionCall(const Node: IFunctionCallNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TFunctionCallNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TFunctionCallNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitMacroExpansionNode(const Node: IMacroExpansionNode): TAuraNode;
function TAstVisualizer.VisitMacroExpansionNode(const Node: IMacroExpansionNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TMacroExpansionNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TMacroExpansionNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitVariableDeclaration(const Node: IVariableDeclarationNode): TAuraNode;
function TAstVisualizer.VisitVariableDeclaration(const Node: IVariableDeclarationNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TVariableDeclarationNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TVariableDeclarationNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitAssignment(const Node: IAssignmentNode): TAuraNode;
function TAstVisualizer.VisitAssignment(const Node: IAssignmentNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TAssignmentNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TAssignmentNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitMacroDefinition(const Node: IMacroDefinitionNode): TAuraNode;
function TAstVisualizer.VisitMacroDefinition(const Node: IMacroDefinitionNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TMacroDefinitionNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TMacroDefinitionNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitQuasiquote(const Node: IQuasiquoteNode): TAuraNode;
function TAstVisualizer.VisitQuasiquote(const Node: IQuasiquoteNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TQuasiquoteNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TQuasiquoteNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitUnquote(const Node: IUnquoteNode): TAuraNode;
function TAstVisualizer.VisitUnquote(const Node: IUnquoteNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TUnquoteNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TUnquoteNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitUnquoteSplicing(const Node: IUnquoteSplicingNode): TAuraNode;
function TAstVisualizer.VisitUnquoteSplicing(const Node: IUnquoteSplicingNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TUnquoteSplicingNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TUnquoteSplicingNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitIndexer(const Node: IIndexerNode): TAuraNode;
function TAstVisualizer.VisitIndexer(const Node: IIndexerNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TIndexerNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TIndexerNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitMemberAccess(const Node: IMemberAccessNode): TAuraNode;
function TAstVisualizer.VisitMemberAccess(const Node: IMemberAccessNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TMemberAccessNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TMemberAccessNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitRecordLiteral(const Node: IRecordLiteralNode): TAuraNode;
function TAstVisualizer.VisitRecordLiteral(const Node: IRecordLiteralNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TRecordLiteralNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TRecordLiteralNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitCreateSeries(const Node: ICreateSeriesNode): TAuraNode;
function TAstVisualizer.VisitCreateSeries(const Node: ICreateSeriesNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TCreateSeriesNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TCreateSeriesNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitAddSeriesItem(const Node: IAddSeriesItemNode): TAuraNode;
function TAstVisualizer.VisitAddSeriesItem(const Node: IAddSeriesItemNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TAddSeriesItemNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TAddSeriesItemNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitSeriesLength(const Node: ISeriesLengthNode): TAuraNode;
function TAstVisualizer.VisitSeriesLength(const Node: ISeriesLengthNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TSeriesLengthNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TSeriesLengthNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitRecurNode(const Node: IRecurNode): TAuraNode;
function TAstVisualizer.VisitRecurNode(const Node: IRecurNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TRecurNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TRecurNodeHandler.Create(Node));
end;
function TAstVisualizer.VisitNop(const Node: INopNode): TAuraNode;
function TAstVisualizer.VisitNop(const Node: INopNode): TAstViewNode;
begin
Result := TAuraNode.Create(Self, TNopNodeHandler.Create(Node));
Result := TAstViewNode.Create(Self, TNopNodeHandler.Create(Node));
end;
end.