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
+23 -20
View File
@@ -196,9 +196,11 @@ var
begin
newList := TList<IAstNode>.Create;
try
for i := 0 to ANodes.Count - 1 do
// Optimization: Access Elements array directly
var elements := ANodes.Elements;
for i := 0 to High(elements) do
begin
node := ANodes.Items[i];
node := elements[i];
if node.Kind = akUnquoteSplicing then
begin
var spliceExpr := node.AsUnquoteSplicing.Expression;
@@ -218,15 +220,15 @@ begin
// Unification: Lists are now Tuples.
if nodeToSplice.Kind = akTuple then
begin
var tuple := nodeToSplice.AsTuple;
for var k := 0 to tuple.Count - 1 do
newList.Add(tuple.Items[k]);
var tupleElements := nodeToSplice.AsTuple.Elements;
for var k := 0 to High(tupleElements) do
newList.Add(tupleElements[k]);
end
else if nodeToSplice.Kind = akBlockExpression then
begin
var blkTuple := nodeToSplice.AsBlockExpression.Expressions;
for var k := 0 to blkTuple.Count - 1 do
newList.Add(blkTuple.Items[k]);
var blkElements := nodeToSplice.AsBlockExpression.Expressions.Elements;
for var k := 0 to High(blkElements) do
newList.Add(blkElements[k]);
end
else
begin
@@ -290,15 +292,14 @@ var
newBody: IAstNode;
newName: string;
i: Integer;
paramsTuple: ITupleNode;
begin
L := Node.AsLambdaExpression;
paramsTuple := L.Parameters;
SetLength(newParams, paramsTuple.Count);
var paramsElements := L.Parameters.Elements;
SetLength(newParams, Length(paramsElements));
for i := 0 to paramsTuple.Count - 1 do
for i := 0 to High(paramsElements) do
begin
var param := paramsTuple.Items[i].AsIdentifier; // Binder ensures params are Identifiers
var param := paramsElements[i].AsIdentifier; // Binder ensures params are Identifiers
newName := Gensym(param.Name);
newParams[i] := TAst.Identifier(newName, param.Identity.Location);
end;
@@ -497,16 +498,18 @@ begin
if macroDef <> nil then
begin
var expansionScope := TScope.CreateScope(FInitialScope, nil, nil);
var paramsTuple := macroDef.Parameters;
var argsTuple := C.Arguments;
if argsTuple.Count <> paramsTuple.Count then
raise EMacroException.CreateFmt('Macro %s expects %d arguments.', [calleeIdentifier.Name, paramsTuple.Count]);
// Optimization: Access elements directly
var paramsElements := macroDef.Parameters.Elements;
var argsElements := C.Arguments.Elements;
for i := 0 to paramsTuple.Count - 1 do
if Length(argsElements) <> Length(paramsElements) then
raise EMacroException.CreateFmt('Macro %s expects %d arguments.', [calleeIdentifier.Name, Length(paramsElements)]);
for i := 0 to High(paramsElements) do
begin
var paramName := paramsTuple.Items[i].AsIdentifier.Name;
expansionScope.Define(paramName, TDataValue.FromIntf<IAstNode>(argsTuple.Items[i]));
var paramName := paramsElements[i].AsIdentifier.Name;
expansionScope.Define(paramName, TDataValue.FromIntf<IAstNode>(argsElements[i]));
end;
var expandedBody := TExpansionVisitor.Expand(expansionScope, macroDef.Body.AsQuasiquote.Expression, FMacroEvaluator);