ITupleNode signature change

This commit is contained in:
Michael Schimmel
2026-01-06 11:37:18 +01:00
parent 264314cd93
commit 40ed51aef8
23 changed files with 340 additions and 270 deletions
+15 -7
View File
@@ -123,19 +123,22 @@ var
i: Integer;
item, newItem: IAstNode;
hasChanged: Boolean;
elements: TArray<IAstNode>;
begin
B := Node.AsBlockExpression;
isContextTail := FIsTailStack.Peek;
exprsTuple := B.Expressions;
elements := exprsTuple.Elements;
SetLength(newExprs, exprsTuple.Count);
var count := Length(elements);
SetLength(newExprs, count);
hasChanged := False;
var nTail := exprsTuple.Count - 1;
var nTail := count - 1;
for i := 0 to nTail do
begin
item := exprsTuple.Items[i];
item := elements[i];
// Only the last expression in the block inherits the tail position status
FNextIsTail := isContextTail and (i = nTail);
@@ -150,8 +153,10 @@ begin
if not hasChanged then
Result := Node
else
begin
// Create new Tuple for expressions
Result := TAst.Block(Node.Identity, TAst.Tuple(B.Expressions.Identity, newExprs), B.StaticType);
end;
end;
function TAstTCO.VisitIfExpression(const Node: IAstNode): IAstNode;
@@ -324,6 +329,7 @@ var
i: Integer;
hasChanged: Boolean;
savedNextIsTail: Boolean;
elements: TArray<IAstNode>;
begin
T := Node.AsTuple;
savedNextIsTail := FNextIsTail; // Zustand sichern
@@ -332,13 +338,15 @@ begin
FNextIsTail := False;
hasChanged := False;
SetLength(newElements, T.Count);
elements := T.Elements;
var count := Length(elements);
SetLength(newElements, count);
try
for i := 0 to T.Count - 1 do
for i := 0 to count - 1 do
begin
newElements[i] := Accept(T.Items[i]);
if newElements[i] <> T.Items[i] then
newElements[i] := Accept(elements[i]);
if newElements[i] <> elements[i] then
hasChanged := True;
end;
finally