This commit is contained in:
Michael Schimmel
2025-10-30 18:00:58 +01:00
parent dfe1f04333
commit 798aa08f02
12 changed files with 710 additions and 27 deletions
+26
View File
@@ -31,6 +31,7 @@ type
protected
function VisitConstant(const Node: IConstantNode): TDataValue; override;
function VisitIdentifier(const Node: IIdentifierNode): TDataValue; override;
function VisitKeyword(const Node: IKeywordNode): TDataValue; override;
function VisitBinaryExpression(const Node: IBinaryExpressionNode): TDataValue; override;
function VisitUnaryExpression(const Node: IUnaryExpressionNode): TDataValue; override;
function VisitIfExpression(const Node: IIfExpressionNode): TDataValue; override;
@@ -48,6 +49,7 @@ type
function VisitUnquoteSplicing(const Node: IUnquoteSplicingNode): TDataValue; override;
function VisitIndexer(const Node: IIndexerNode): TDataValue; override;
function VisitMemberAccess(const Node: IMemberAccessNode): TDataValue; override;
function VisitRecordLiteral(const Node: IRecordLiteralNode): TDataValue; override;
function VisitCreateSeries(const Node: ICreateSeriesNode): TDataValue; override;
function VisitAddSeriesItem(const Node: IAddSeriesItemNode): TDataValue; override;
function VisitSeriesLength(const Node: ISeriesLengthNode): TDataValue; override;
@@ -65,6 +67,7 @@ type
implementation
uses
Myc.Data.Keyword,
Myc.Ast.Binding; // For TBound...Node classes
{ TAstDumper }
@@ -144,6 +147,12 @@ begin
Result := TDataValue.Void;
end;
function TAstDumper.VisitKeyword(const Node: IKeywordNode): TDataValue;
begin
LogFmt('Keyword: :%s', [Node.Value.Name]);
Result := TDataValue.Void;
end;
function TAstDumper.VisitBinaryExpression(const Node: IBinaryExpressionNode): TDataValue;
begin
LogFmt('BinaryExpression: %s', [Node.Operator.ToString]);
@@ -432,6 +441,23 @@ begin
Result := TDataValue.Void;
end;
function TAstDumper.VisitRecordLiteral(const Node: IRecordLiteralNode): TDataValue;
var
field: TRecordFieldLiteral;
begin
LogFmt('RecordLiteral (%d fields)', [Length(Node.Fields)]);
Indent;
for field in Node.Fields do
begin
LogFmt('Field :%s', [field.Name]);
Indent;
field.Value.Accept(Self);
Unindent;
end;
Unindent;
Result := TDataValue.Void;
end;
function TAstDumper.VisitCreateSeries(const Node: ICreateSeriesNode): TDataValue;
begin
LogFmt('CreateSeries: %s', [Node.Definition]);