fcl-passrc: added TPasResolver.IsClassField

git-svn-id: trunk@40166 -
This commit is contained in:
Mattias Gaertner 2018-11-01 22:36:46 +00:00
parent 2070df21ac
commit 3f50c51225

View File

@ -576,7 +576,7 @@ type
constructor Create; reintroduce; constructor Create; reintroduce;
procedure Add(const aName: string; Item: Pointer); procedure Add(const aName: string; Item: Pointer);
function Find(const aName: string): Pointer; function Find(const aName: string): Pointer;
procedure ForEachCall(Proc: TPasResIterate; Arg: Pointer); procedure ForEachCall(const Proc: TPasResIterate; Arg: Pointer);
procedure Clear; procedure Clear;
procedure Remove(const aName: string); procedure Remove(const aName: string);
end; end;
@ -810,7 +810,7 @@ type
TPasInitialFinalizationScope = Class(TPasScope) TPasInitialFinalizationScope = Class(TPasScope)
public public
References: TPasScopeReferences; // created by TPasAnalyzer References: TPasScopeReferences; // created by TPasAnalyzer, not used by resolver
function AddReference(El: TPasElement; Access: TPSRefAccess): TPasScopeReference; function AddReference(El: TPasElement; Access: TPSRefAccess): TPasScopeReference;
destructor Destroy; override; destructor Destroy; override;
end; end;
@ -1063,6 +1063,8 @@ type
TPRResolveVarAccesses = set of TResolvedRefAccess; TPRResolveVarAccesses = set of TResolvedRefAccess;
const const
rraAllWrite = [rraAssign,rraReadAndAssign,rraVarParam,rraOutParam];
ResolvedToPSRefAccess: array[TResolvedRefAccess] of TPSRefAccess = ( ResolvedToPSRefAccess: array[TResolvedRefAccess] of TPSRefAccess = (
psraNone, // rraNone psraNone, // rraNone
psraRead, // rraRead psraRead, // rraRead
@ -1837,6 +1839,7 @@ type
function IsVarInit(Expr: TPasExpr): boolean; function IsVarInit(Expr: TPasExpr): boolean;
function IsEmptyArrayExpr(const ResolvedEl: TPasResolverResult): boolean; function IsEmptyArrayExpr(const ResolvedEl: TPasResolverResult): boolean;
function IsClassMethod(El: TPasElement): boolean; function IsClassMethod(El: TPasElement): boolean;
function IsClassField(El: TPasElement): boolean;
function IsExternalClass_Name(aClass: TPasClassType; const ExtName: string): boolean; function IsExternalClass_Name(aClass: TPasClassType; const ExtName: string): boolean;
function IsProcedureType(const ResolvedEl: TPasResolverResult; HasValue: boolean): boolean; function IsProcedureType(const ResolvedEl: TPasResolverResult; HasValue: boolean): boolean;
function IsArrayType(const ResolvedEl: TPasResolverResult): boolean; function IsArrayType(const ResolvedEl: TPasResolverResult): boolean;
@ -2567,7 +2570,7 @@ begin
Result:=nil; Result:=nil;
end; end;
procedure TPasResHashList.ForEachCall(Proc: TPasResIterate; Arg: Pointer); procedure TPasResHashList.ForEachCall(const Proc: TPasResIterate; Arg: Pointer);
var var
key: string; key: string;
begin begin
@ -20176,6 +20179,13 @@ begin
or (C=TPasClassOperator); or (C=TPasClassOperator);
end; end;
function TPasResolver.IsClassField(El: TPasElement): boolean;
begin
Result:=((El.ClassType=TPasVariable) or (El.ClassType=TPasConst))
and ([vmClass,vmStatic]*TPasVariable(El).VarModifiers<>[])
and (El.Parent is TPasClassType);
end;
function TPasResolver.IsExternalClass_Name(aClass: TPasClassType; function TPasResolver.IsExternalClass_Name(aClass: TPasClassType;
const ExtName: string): boolean; const ExtName: string): boolean;
var var