This commit is contained in:
Michael Schimmel
2025-11-03 00:35:23 +01:00
parent eb42a4ef3b
commit ec76b78b39
9 changed files with 234 additions and 32 deletions
+10 -1
View File
@@ -37,6 +37,7 @@ type
IAddSeriesItemNode = interface;
ISeriesLengthNode = interface;
IRecurNode = interface;
INopNode = interface; // Added Nop
// Defines the concrete kinds of AST nodes
TAstNodeKind = (
@@ -63,7 +64,8 @@ type
akCreateSeries,
akAddSeriesItem,
akSeriesLength,
akRecur
akRecur,
akNop // Added Nop
);
// --- Concrete Type Definitions ---
@@ -113,6 +115,7 @@ type
function VisitAddSeriesItem(const Node: IAddSeriesItemNode): TDataValue;
function VisitSeriesLength(const Node: ISeriesLengthNode): TDataValue;
function VisitRecurNode(const Node: IRecurNode): TDataValue;
function VisitNop(const Node: INopNode): TDataValue; // Added Nop
end;
IAstNode = interface(IInterface)
@@ -145,10 +148,16 @@ type
function AsAddSeriesItem: IAddSeriesItemNode;
function AsSeriesLength: ISeriesLengthNode;
function AsRecur: IRecurNode;
function AsNop: INopNode; // Added Nop
property Kind: TAstNodeKind read GetKind;
end;
INopNode = interface(IAstNode)
// A placeholder node for the UI (e.g., drag target).
// This node is illegal during compilation.
end;
IConstantNode = interface(IAstNode)
// Represents a constant value in the AST (Scalar, Text, or Void).
{$region 'private'}