|
@@ -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;
|