Scope cells refactoring

This commit is contained in:
Michael Schimmel
2025-09-05 12:46:24 +02:00
parent edf8329b28
commit 100646c7d8
5 changed files with 61 additions and 117 deletions
+4 -16
View File
@@ -436,10 +436,6 @@ constructor TIdentifierNode.Create(AName: string);
begin
inherited Create;
FName := AName;
// Default to unresolved.
FResolvedAddress.Kind := akUnresolved;
FResolvedAddress.ScopeDepth := -1;
FResolvedAddress.SlotIndex := -1;
end;
function TIdentifierNode.Accept(const Visitor: IAstVisitor): TAstValue;
@@ -904,9 +900,7 @@ begin
upvalueMap := FUpvalueMapStack.Peek;
upvalueNodes := FUpvalueNodesStack.Peek;
originalAddress.Kind := akLocalOrParent;
originalAddress.ScopeDepth := originalDepth;
originalAddress.SlotIndex := originalIndex;
originalAddress.Create(akLocalOrParent, originalDepth, originalIndex, identNode.Name);
if not upvalueMap.TryGetValue(originalAddress, upvalueIndex) then
begin
@@ -915,15 +909,11 @@ begin
upvalueNodes.Add(identNode);
end;
identNode.FResolvedAddress.Kind := akUpvalue;
identNode.FResolvedAddress.SlotIndex := upvalueIndex;
identNode.FResolvedAddress.ScopeDepth := 0;
identNode.FResolvedAddress.Create(akUpvalue, 0, upvalueIndex, identNode.Name);
end
else
begin
identNode.FResolvedAddress.Kind := akLocalOrParent;
identNode.FResolvedAddress.ScopeDepth := originalDepth;
identNode.FResolvedAddress.SlotIndex := originalIndex;
identNode.FResolvedAddress.Create(akLocalOrParent, originalDepth, originalIndex, identNode.Name);
end;
end
else
@@ -989,9 +979,7 @@ begin
Node.Initializer.Accept(Self);
slotIndex := (FCurrentDescriptor as TScopeDescriptor).Define(Node.Identifier.Name);
identNode.FResolvedAddress.Kind := akLocalOrParent;
identNode.FResolvedAddress.ScopeDepth := 0;
identNode.FResolvedAddress.SlotIndex := slotIndex;
identNode.FResolvedAddress.Create(akLocalOrParent, 0, slotIndex, Node.Identifier.Name);
end;
{ TAst }