Browse Source

fcl-passrc: resolver: TPasIdentifierScope.GetLocalIdentifiers

git-svn-id: trunk@38159 -
Mattias Gaertner 7 years ago
parent
commit
9fb9939464
1 changed files with 25 additions and 3 deletions
  1. 25 3
      packages/fcl-passrc/src/pasresolver.pp

+ 25 - 3
packages/fcl-passrc/src/pasresolver.pp

@@ -243,6 +243,13 @@ uses
 const
 const
   ParserMaxEmbeddedColumn = 2048;
   ParserMaxEmbeddedColumn = 2048;
   ParserMaxEmbeddedRow = $7fffffff div ParserMaxEmbeddedColumn;
   ParserMaxEmbeddedRow = $7fffffff div ParserMaxEmbeddedColumn;
+  po_Resolver = [
+    po_ResolveStandardTypes,
+    po_NoOverloadedProcs,
+    po_KeepClassForward,
+    po_ArrayRangeExpr,
+    po_CheckModeswitches,
+    po_CheckCondFunction];
 
 
 type
 type
   TResolverBaseType = (
   TResolverBaseType = (
@@ -569,6 +576,7 @@ type
     destructor Destroy; override;
     destructor Destroy; override;
     property Element: TPasElement read FElement write SetElement;
     property Element: TPasElement read FElement write SetElement;
   end;
   end;
+  TPasIdentifierArray = array of TPasIdentifier;
 
 
   { TPasIdentifierScope - elements with a list of sub identifiers }
   { TPasIdentifierScope - elements with a list of sub identifiers }
 
 
@@ -577,6 +585,7 @@ type
     FItems: TFPHashList;
     FItems: TFPHashList;
     procedure InternalAdd(Item: TPasIdentifier);
     procedure InternalAdd(Item: TPasIdentifier);
     procedure OnClearItem(Item, Dummy: pointer);
     procedure OnClearItem(Item, Dummy: pointer);
+    procedure OnCollectItem(Item, List: pointer);
   protected
   protected
     procedure OnWriteItem(Item, Dummy: pointer);
     procedure OnWriteItem(Item, Dummy: pointer);
   public
   public
@@ -595,6 +604,7 @@ type
       const OnIterateElement: TIterateScopeElement; Data: Pointer;
       const OnIterateElement: TIterateScopeElement; Data: Pointer;
       var Abort: boolean); override;
       var Abort: boolean); override;
     procedure WriteIdentifiers(Prefix: string); override;
     procedure WriteIdentifiers(Prefix: string); override;
+    function GetLocalIdentifiers: TFPList; virtual;
   end;
   end;
 
 
   { TPasDefaultScope - root scope }
   { TPasDefaultScope - root scope }
@@ -2679,6 +2689,14 @@ begin
     end;
     end;
 end;
 end;
 
 
+procedure TPasIdentifierScope.OnCollectItem(Item, List: pointer);
+var
+  PasIdentifier: TPasIdentifier absolute Item;
+  FPList: TFPList absolute List;
+begin
+  FPList.Add(PasIdentifier);
+end;
+
 procedure TPasIdentifierScope.OnWriteItem(Item, Dummy: pointer);
 procedure TPasIdentifierScope.OnWriteItem(Item, Dummy: pointer);
 var
 var
   PasIdentifier: TPasIdentifier absolute Item;
   PasIdentifier: TPasIdentifier absolute Item;
@@ -2874,6 +2892,12 @@ begin
   FItems.ForEachCall(@OnWriteItem,Pointer(Prefix));
   FItems.ForEachCall(@OnWriteItem,Pointer(Prefix));
 end;
 end;
 
 
+function TPasIdentifierScope.GetLocalIdentifiers: TFPList;
+begin
+  Result:=TFPList.Create;
+  FItems.ForEachCall(@OnCollectItem,Pointer(Result));
+end;
+
 { TPasResolver }
 { TPasResolver }
 
 
 // inline
 // inline
@@ -3539,9 +3563,7 @@ begin
   Clear;
   Clear;
   inherited SetCurrentParser(AValue);
   inherited SetCurrentParser(AValue);
   if CurrentParser<>nil then
   if CurrentParser<>nil then
-    CurrentParser.Options:=CurrentParser.Options
-      +[po_resolvestandardtypes,po_nooverloadedprocs,po_keepclassforward,
-        po_arrayrangeexpr,po_CheckModeswitches,po_CheckCondFunction];
+    CurrentParser.Options:=CurrentParser.Options+po_Resolver;
 end;
 end;
 
 
 procedure TPasResolver.CheckTopScope(ExpectedClass: TPasScopeClass;
 procedure TPasResolver.CheckTopScope(ExpectedClass: TPasScopeClass;