From 218bd9f506e6d27f2caff52a1ef6d96e03ed69a8 Mon Sep 17 00:00:00 2001 From: Michael Schimmel Date: Wed, 5 Nov 2025 13:48:10 +0100 Subject: [PATCH] Refactoring --- Src/AST/Myc.Ast.Compiler.TCO.pas | 2 +- Src/AST/Myc.Ast.Scope.pas | 16 ++++++++-------- Src/AST/Myc.Ast.Visitor.pas | 2 +- Src/AST/Myc.Ast.pas | 30 +++++++++++++++--------------- 4 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Src/AST/Myc.Ast.Compiler.TCO.pas b/Src/AST/Myc.Ast.Compiler.TCO.pas index b49b8c4..2e0a84e 100644 --- a/Src/AST/Myc.Ast.Compiler.TCO.pas +++ b/Src/AST/Myc.Ast.Compiler.TCO.pas @@ -246,7 +246,7 @@ begin Result := Node else // Rebuild, preserving the original CallNode metadata - Result := TMacroExpansionNode.Create(Node.CallNode, newBody.AsTypedNode); + Result := TAst.MacroExpansionNode(Node.CallNode, newBody); end; function TAstTCO.VisitFunctionCall(const Node: IFunctionCallNode): IAstNode; diff --git a/Src/AST/Myc.Ast.Scope.pas b/Src/AST/Myc.Ast.Scope.pas index be7d863..b28fe60 100644 --- a/Src/AST/Myc.Ast.Scope.pas +++ b/Src/AST/Myc.Ast.Scope.pas @@ -112,7 +112,7 @@ type TScopeItem = record Value: TDataValue; IsBoxed: Boolean; - function GetContent: TDataValue; + function GetContent: TDataValue; inline; end; private @@ -485,6 +485,13 @@ begin end; end; +function TExecutionScope.TScopeItem.GetContent: TDataValue; +begin + Result := Value; + if IsBoxed then + Result := Result.AsIntf.Value; +end; + { TScopeDescriptor } constructor TScopeDescriptor.Create(const AParent: IScopeDescriptor); @@ -657,11 +664,4 @@ begin Result := TExecutionScope.Create(Parent, Descriptor, CapturedUpvalues); end; -function TExecutionScope.TScopeItem.GetContent: TDataValue; -begin - Result := Value; - if IsBoxed then - Result := Result.AsIntf.Value; -end; - end. diff --git a/Src/AST/Myc.Ast.Visitor.pas b/Src/AST/Myc.Ast.Visitor.pas index db6485b..9163787 100644 --- a/Src/AST/Myc.Ast.Visitor.pas +++ b/Src/AST/Myc.Ast.Visitor.pas @@ -579,7 +579,7 @@ begin exit(Node); // The body changed. Create a NEW wrapper node. - Result := TMacroExpansionNode.Create(Node.CallNode, newBody); + Result := TAst.MacroExpansionNode(Node.CallNode, newBody); end; function TAstTransformer.VisitBlockExpression(const Node: IBlockExpressionNode): IAstNode; diff --git a/Src/AST/Myc.Ast.pas b/Src/AST/Myc.Ast.pas index 7952eb0..fd68908 100644 --- a/Src/AST/Myc.Ast.pas +++ b/Src/AST/Myc.Ast.pas @@ -252,21 +252,6 @@ type property Arguments: TArray read FArguments write FArguments; // Writeable end; - TMacroExpansionNode = class(TAstTypedNode, IMacroExpansionNode) - private - FCallNode: IFunctionCallNode; - FExpandedBody: IAstTypedNode; - function GetCallNode: IFunctionCallNode; - function GetExpandedBody: IAstNode; - function GetKind: TAstNodeKind; override; - public - constructor Create(const ACallNode: IFunctionCallNode; const AExpandedBody: IAstTypedNode); - function Accept(const Visitor: IAstVisitor): TDataValue; override; - function AsMacroExpansion: IMacroExpansionNode; override; - property CallNode: IFunctionCallNode read GetCallNode; - property ExpandedBody: IAstTypedNode read FExpandedBody; - end; - TBlockExpressionNode = class(TAstTypedNode, IBlockExpressionNode) private FExpressions: TArray; @@ -516,6 +501,21 @@ type property Expression: IQuasiquoteNode read GetExpression; end; + TMacroExpansionNode = class(TAstTypedNode, IMacroExpansionNode) + private + FCallNode: IFunctionCallNode; + FExpandedBody: IAstTypedNode; + function GetCallNode: IFunctionCallNode; + function GetExpandedBody: IAstNode; + function GetKind: TAstNodeKind; override; + public + constructor Create(const ACallNode: IFunctionCallNode; const AExpandedBody: IAstTypedNode); + function Accept(const Visitor: IAstVisitor): TDataValue; override; + function AsMacroExpansion: IMacroExpansionNode; override; + property CallNode: IFunctionCallNode read GetCallNode; + property ExpandedBody: IAstTypedNode read FExpandedBody; + end; + TNopNode = class(TAstNode, INopNode) private function GetKind: TAstNodeKind; override;