ITupleNode signature change
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user