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