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