mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-09-07 18:21:44 +02:00
codetoolsL TLinkScanenr: using TSourceLog
This commit is contained in:
parent
cece089505
commit
1d74ac6a25
@ -160,9 +160,8 @@ type
|
||||
function FindIncludeLinkAVLNode(const IncludeFilename: string): TAVLTreeNode;
|
||||
function OnScannerCheckFileOnDisk(Code: pointer): boolean; // true if code changed
|
||||
function OnScannerGetFileName(Sender: TObject; Code: pointer): string;
|
||||
function OnScannerGetSource(Sender: TObject; Code: pointer): TSourceLog;
|
||||
function OnScannerLoadSource(Sender: TObject; const AFilename: string;
|
||||
OnlyIfExists: boolean): pointer;
|
||||
OnlyIfExists: boolean): TSourceLog;
|
||||
procedure OnScannerDeleteSource(Sender: TObject; Code: Pointer;
|
||||
Pos, Len: integer);
|
||||
procedure OnScannerGetSourceStatus(Sender: TObject; Code:Pointer;
|
||||
@ -880,7 +879,6 @@ var
|
||||
begin
|
||||
s:=Sender.Scanner;
|
||||
if s=nil then exit;
|
||||
s.OnGetSource:=@Self.OnScannerGetSource;
|
||||
s.OnGetFileName:=@Self.OnScannerGetFileName;
|
||||
s.OnLoadSource:=@Self.OnScannerLoadSource;
|
||||
s.OnCheckFileOnDisk:=@Self.OnScannerCheckFileOnDisk;
|
||||
@ -906,18 +904,8 @@ begin
|
||||
raise Exception.Create('[TCodeCache.OnScannerGetFilename] Code=nil');
|
||||
end;
|
||||
|
||||
function TCodeCache.OnScannerGetSource(Sender: TObject;
|
||||
Code: pointer): TSourceLog;
|
||||
begin
|
||||
//DebugLn('[TCodeCache.OnScannerGetSource] A ',DbgS(Code),'/',Count);
|
||||
if (Code<>nil) then
|
||||
Result:=TSourceLog(Code)
|
||||
else
|
||||
raise Exception.Create('[TCodeCache.OnScannerGetFilename] Code=nil');
|
||||
end;
|
||||
|
||||
function TCodeCache.OnScannerLoadSource(Sender: TObject;
|
||||
const AFilename: string; OnlyIfExists: boolean): pointer;
|
||||
const AFilename: string; OnlyIfExists: boolean): TSourceLog;
|
||||
begin
|
||||
if OnlyIfExists then begin
|
||||
Result:=FindFile(AFilename);
|
||||
|
@ -2303,7 +2303,7 @@ begin
|
||||
for i:=0 to Scanner.LinkCount-1 do begin
|
||||
Link:=Scanner.Links[i];
|
||||
if Link.Code=nil then continue;
|
||||
if Link.Code<>Pointer(CursorPos.Code) then continue;
|
||||
if Link.Code<>CursorPos.Code then continue;
|
||||
if Link.SrcPos>p then continue;
|
||||
NearestScanPos:=Link.SrcPos+Scanner.LinkSize(i);
|
||||
end;
|
||||
|
@ -3595,8 +3595,8 @@ var
|
||||
var
|
||||
DirectiveName, Param: string;
|
||||
NewCode: TCodeBuffer;
|
||||
NewSrcLog: TSourceLog;
|
||||
MissingIncludeFile: TMissingIncludeFile;
|
||||
NewCodePtr: Pointer;
|
||||
begin
|
||||
Result:=false;
|
||||
// cursor in comment in parsed code
|
||||
@ -3625,10 +3625,10 @@ var
|
||||
FoundFilename:=ResolveDots(GetForcedPathDelims(Param));
|
||||
// search include file
|
||||
MissingIncludeFile:=nil;
|
||||
if Scanner.SearchIncludeFile(FoundFilename,NewCodePtr,
|
||||
if Scanner.SearchIncludeFile(FoundFilename,NewSrcLog,
|
||||
MissingIncludeFile)
|
||||
then
|
||||
FoundFilename:=TCodeBuffer(NewCodePtr).Filename;
|
||||
FoundFilename:=TCodeBuffer(NewSrcLog).Filename;
|
||||
end;
|
||||
exit;
|
||||
end;
|
||||
|
@ -76,7 +76,7 @@ type
|
||||
TOnGetSource = function(Sender: TObject; Code: Pointer): TSourceLog
|
||||
of object;
|
||||
TOnLoadSource = function(Sender: TObject; const AFilename: string;
|
||||
OnlyIfExists: boolean): pointer of object;
|
||||
OnlyIfExists: boolean): TSourceLog of object;
|
||||
TOnGetSourceStatus = procedure(Sender: TObject; Code: Pointer;
|
||||
var ReadOnly: boolean) of object;
|
||||
TOnDeleteSource = procedure(Sender: TObject; Code: Pointer; Pos, Len: integer)
|
||||
@ -103,14 +103,14 @@ type
|
||||
TSourceLink = record
|
||||
CleanedPos: integer;
|
||||
SrcPos: integer;
|
||||
Code: Pointer;
|
||||
Code: TSourceLog;
|
||||
Kind: TSourceLinkKind;
|
||||
Next: PSourceLink;
|
||||
end;
|
||||
|
||||
TSourceLinkMacro = record
|
||||
Name: PChar;
|
||||
Code: Pointer;
|
||||
Code: TSourceLog;
|
||||
Src: string;
|
||||
SrcFilename: string;
|
||||
StartPos, EndPos: integer;
|
||||
@ -121,7 +121,7 @@ type
|
||||
A ChangeStep is switching to or from an include file }
|
||||
PSourceChangeStep = ^TSourceChangeStep;
|
||||
TSourceChangeStep = record
|
||||
Code: Pointer;
|
||||
Code: TSourceLog;
|
||||
ChangeStep: integer;
|
||||
Next: PSourceChangeStep;
|
||||
end;
|
||||
@ -557,7 +557,6 @@ type
|
||||
FLinkCapacity: integer;
|
||||
FCleanedSrc: string;
|
||||
FLastCleanedSrcLen: integer;
|
||||
FOnGetSource: TOnGetSource;
|
||||
FOnGetFileName: TOnGetFileName;
|
||||
FOnGetSourceStatus: TOnGetSourceStatus;
|
||||
FOnLoadSource: TOnLoadSource;
|
||||
@ -566,14 +565,14 @@ type
|
||||
FOnGetInitValues: TOnGetInitValues;
|
||||
FOnIncludeCode: TOnIncludeCode;
|
||||
FOnProgress: TLinkScannerProgress;
|
||||
FIgnoreErrorAfterCode: Pointer;
|
||||
FIgnoreErrorAfterCode: TSourceLog;
|
||||
FIgnoreErrorAfterCursorPos: integer;
|
||||
FInitValues: TExpressionEvaluator;
|
||||
FInitValuesChangeStep: integer;
|
||||
FSourceChangeSteps: TFPList; // list of PSourceChangeStep sorted with Code
|
||||
FChangeStep: integer;
|
||||
FMainSourceFilename: string;
|
||||
FMainCode: pointer;
|
||||
FMainCode: TSourceLog;
|
||||
FScanTill: TLinkScannerRange;
|
||||
FNestedComments: boolean; // for speed reasons keep this flag redundant with the CompilerModeSwitches
|
||||
FStates: TLinkScannerStates;
|
||||
@ -586,12 +585,12 @@ type
|
||||
function GetLinks(Index: integer): TSourceLink; inline;
|
||||
function GetLinkP(Index: integer): PSourceLink; inline;
|
||||
procedure SetLinks(Index: integer; const Value: TSourceLink);
|
||||
procedure SetSource(ACode: Pointer); // set current source
|
||||
procedure AddSourceChangeStep(ACode: pointer; AChangeStep: integer);
|
||||
procedure AddLink(ASrcPos: integer; ACode: Pointer;
|
||||
procedure SetSource(ACode: TSourceLog); // set current source
|
||||
procedure AddSourceChangeStep(ACode: TSourceLog; AChangeStep: integer);
|
||||
procedure AddLink(ASrcPos: integer; ACode: TSourceLog;
|
||||
AKind: TSourceLinkKind = slkCode);
|
||||
procedure IncreaseChangeStep; inline;
|
||||
procedure SetMainCode(const Value: pointer);
|
||||
procedure SetMainCode(const Value: TSourceLog);
|
||||
procedure SetScanTill(const Value: TLinkScannerRange);
|
||||
function GetIgnoreMissingIncludeFiles: boolean;
|
||||
procedure SetIgnoreMissingIncludeFiles(const Value: boolean);
|
||||
@ -694,7 +693,7 @@ type
|
||||
function DoDirective(StartPos, DirLen: integer): boolean;
|
||||
|
||||
function IncludeFile(const AFilename: string): boolean;
|
||||
procedure PushIncludeLink(ACleanedPos, ASrcPos: integer; ACode: Pointer);
|
||||
procedure PushIncludeLink(ACleanedPos, ASrcPos: integer; ACode: TSourceLog);
|
||||
function PopIncludeLink: TSourceLink;
|
||||
function GetIncludeFileIsMissing: boolean;
|
||||
function MissingIncludeFilesNeedsUpdate: boolean;
|
||||
@ -709,7 +708,7 @@ type
|
||||
// error: the error is in range Succ(ScannedRange)
|
||||
LastErrorMessage: string;
|
||||
LastErrorSrcPos: integer;
|
||||
LastErrorCode: pointer;
|
||||
LastErrorCode: TSourceLog;
|
||||
LastErrorIsValid: boolean;
|
||||
LastErrorBehindIgnorePosition: boolean;
|
||||
LastErrorCheckedForIgnored: boolean;
|
||||
@ -733,7 +732,7 @@ type
|
||||
TokenStart: integer; // start position of current token
|
||||
TokenType: TLSTokenType;
|
||||
SrcLen: integer; // length of current source
|
||||
Code: pointer; // current code object (TCodeBuffer)
|
||||
Code: TSourceLog; // current code object (TCodeBuffer)
|
||||
Values: TExpressionEvaluator;
|
||||
SrcFilename: string;// current parsed filename (= TCodeBuffer(Code).Filename)
|
||||
IsUnit: boolean;
|
||||
@ -749,7 +748,7 @@ type
|
||||
property LinkP[Index: integer]: PSourceLink read GetLinkP;
|
||||
property LinkCount: integer read FLinkCount;
|
||||
function LinkIndexAtCleanPos(ACleanPos: integer): integer;
|
||||
function LinkIndexAtCursorPos(ACursorPos: integer; ACode: Pointer): integer;
|
||||
function LinkIndexAtCursorPos(ACursorPos: integer; ACode: TSourceLog): integer;
|
||||
function LinkSize(Index: integer): integer;
|
||||
function LinkSize_Inline(Index: integer): integer; inline;
|
||||
function LinkCleanedEndPos(Index: integer): integer;
|
||||
@ -757,7 +756,7 @@ type
|
||||
function LinkSourceLog(Index: integer): TSourceLog;
|
||||
function FindFirstSiblingLink(LinkIndex: integer): integer;
|
||||
function FindParentLink(LinkIndex: integer): integer;
|
||||
function LinkIndexNearCursorPos(ACursorPos: integer; ACode: Pointer;
|
||||
function LinkIndexNearCursorPos(ACursorPos: integer; ACode: TSourceLog;
|
||||
var CursorInLink: boolean): integer;
|
||||
function CreateTreeOfSourceCodes: TAVLTree;
|
||||
|
||||
@ -778,7 +777,7 @@ type
|
||||
|
||||
// source mapping (Cleaned <-> Original)
|
||||
function CleanedSrc: string;
|
||||
function CursorToCleanPos(ACursorPos: integer; ACode: pointer;
|
||||
function CursorToCleanPos(ACursorPos: integer; ACode: TSourceLog;
|
||||
out ACleanPos: integer): integer; // 0=valid CleanPos
|
||||
//-1=CursorPos was skipped, CleanPos between two links
|
||||
// 1=CursorPos beyond scanned code
|
||||
@ -799,17 +798,17 @@ type
|
||||
procedure Scan(Range: TLinkScannerRange; CheckFilesOnDisk: boolean);
|
||||
function UpdateNeeded(Range: TLinkScannerRange;
|
||||
CheckFilesOnDisk: boolean): boolean;
|
||||
procedure SetIgnoreErrorAfter(ACursorPos: integer; ACode: Pointer);
|
||||
procedure SetIgnoreErrorAfter(ACursorPos: integer; ACode: TSourceLog);
|
||||
procedure ClearIgnoreErrorAfter;
|
||||
function IgnoreErrAfterPositionIsInFrontOfLastErrMessage: boolean;
|
||||
function IgnoreErrorAfterCleanedPos: integer;// before using this, check if valid!
|
||||
function IgnoreErrorAfterValid: boolean;
|
||||
function CleanPosIsAfterIgnorePos(CleanPos: integer): boolean;
|
||||
function LoadSourceCaseLoUp(const AFilename: string; AllowVirtual: boolean = false): pointer; // returns a TCodeBuffer
|
||||
function LoadIncludeFile(const AFilename: string; AllowVirtual: boolean = false): pointer; // returns a TCodeBuffer
|
||||
function LoadSourceCaseLoUp(const AFilename: string; AllowVirtual: boolean = false): TSourceLog;
|
||||
function LoadIncludeFile(const AFilename: string; AllowVirtual: boolean = false): TSourceLog;
|
||||
class function GetPascalCompiler(Evals: TExpressionEvaluator): TPascalCompiler;
|
||||
|
||||
function SearchIncludeFile(AFilename: string; out NewCode: Pointer;
|
||||
function SearchIncludeFile(AFilename: string; out NewCode: TSourceLog;
|
||||
var MissingIncludeFile: TMissingIncludeFile): boolean;
|
||||
{$IFDEF GuessMisplacedIfdef}
|
||||
function GuessMisplacedIfdefEndif(StartCursorPos: integer;
|
||||
@ -829,7 +828,6 @@ type
|
||||
read FOnSetGlobalWriteLock write FOnSetGlobalWriteLock;
|
||||
|
||||
// properties
|
||||
property OnGetSource: TOnGetSource read FOnGetSource write FOnGetSource;
|
||||
property OnLoadSource: TOnLoadSource read FOnLoadSource write FOnLoadSource;
|
||||
property OnDeleteSource: TOnDeleteSource read FOnDeleteSource write FOnDeleteSource;
|
||||
property OnGetSourceStatus: TOnGetSourceStatus
|
||||
@ -844,7 +842,7 @@ type
|
||||
property IgnoreMissingIncludeFiles: boolean read GetIgnoreMissingIncludeFiles
|
||||
write SetIgnoreMissingIncludeFiles;
|
||||
property InitialValues: TExpressionEvaluator read FInitValues write FInitValues;
|
||||
property MainCode: pointer read FMainCode write SetMainCode;
|
||||
property MainCode: TSourceLog read FMainCode write SetMainCode;
|
||||
property IncludeFileIsMissing: boolean read GetIncludeFileIsMissing;
|
||||
property NestedComments: boolean read FNestedComments;
|
||||
property CompilerMode: TCompilerMode read FCompilerMode write SetCompilerMode;
|
||||
@ -1414,7 +1412,7 @@ begin
|
||||
@CompareLSDirectiveCodeSrcPosCleanPos);
|
||||
end;
|
||||
|
||||
procedure TLinkScanner.AddLink(ASrcPos: integer; ACode: Pointer;
|
||||
procedure TLinkScanner.AddLink(ASrcPos: integer; ACode: TSourceLog;
|
||||
AKind: TSourceLinkKind);
|
||||
var
|
||||
NewCapacity: Integer;
|
||||
@ -1531,10 +1529,7 @@ end;
|
||||
|
||||
function TLinkScanner.LinkSourceLog(Index: integer): TSourceLog;
|
||||
begin
|
||||
if Assigned(OnGetSource) then
|
||||
Result:=OnGetSource(Self,FLinks[Index].Code)
|
||||
else
|
||||
Result:=nil;
|
||||
Result:=FLinks[Index].Code;
|
||||
end;
|
||||
|
||||
function TLinkScanner.FindFirstSiblingLink(LinkIndex: integer): integer;
|
||||
@ -1578,7 +1573,7 @@ begin
|
||||
end;
|
||||
|
||||
function TLinkScanner.LinkIndexNearCursorPos(ACursorPos: integer;
|
||||
ACode: Pointer; var CursorInLink: boolean): integer;
|
||||
ACode: TSourceLog; var CursorInLink: boolean): integer;
|
||||
// returns the nearest link at cursorpos
|
||||
// (either covering the cursorpos or in front)
|
||||
var
|
||||
@ -1745,8 +1740,8 @@ begin
|
||||
ConsistencyError1;
|
||||
end;
|
||||
|
||||
function TLinkScanner.LinkIndexAtCursorPos(ACursorPos: integer; ACode: Pointer
|
||||
): integer;
|
||||
function TLinkScanner.LinkIndexAtCursorPos(ACursorPos: integer;
|
||||
ACode: TSourceLog): integer;
|
||||
var
|
||||
CurLinkSize: integer;
|
||||
begin
|
||||
@ -1763,31 +1758,17 @@ begin
|
||||
Result:=-1;
|
||||
end;
|
||||
|
||||
procedure TLinkScanner.SetSource(ACode: Pointer);
|
||||
|
||||
procedure RaiseUnableToGetCode;
|
||||
begin
|
||||
RaiseConsistencyException(20170422125957,'unable to get source with Code='+DbgS(Code));
|
||||
end;
|
||||
|
||||
var SrcLog: TSourceLog;
|
||||
procedure TLinkScanner.SetSource(ACode: TSourceLog);
|
||||
begin
|
||||
if Assigned(FOnGetSource) then begin
|
||||
SrcLog:=FOnGetSource(Self,ACode);
|
||||
if SrcLog=nil then
|
||||
RaiseUnableToGetCode;
|
||||
SrcFilename:=FOnGetFileName(Self,ACode);
|
||||
AddSourceChangeStep(ACode,SrcLog.ChangeStep);
|
||||
Src:=SrcLog.Source;
|
||||
Code:=ACode;
|
||||
SrcPos:=1;
|
||||
TokenStart:=1;
|
||||
TokenType:=lsttNone;
|
||||
SrcLen:=length(Src);
|
||||
CopiedSrcPos:=0;
|
||||
end else begin
|
||||
RaiseUnableToGetCode;
|
||||
end;
|
||||
SrcFilename:=FOnGetFileName(Self,ACode);
|
||||
AddSourceChangeStep(ACode,ACode.ChangeStep);
|
||||
Src:=ACode.Source;
|
||||
Code:=ACode;
|
||||
SrcPos:=1;
|
||||
TokenStart:=1;
|
||||
TokenType:=lsttNone;
|
||||
SrcLen:=length(Src);
|
||||
CopiedSrcPos:=0;
|
||||
end;
|
||||
|
||||
procedure TLinkScanner.HandleDirective;
|
||||
@ -2386,16 +2367,17 @@ begin
|
||||
CopiedSrcPos:=NewCopiedSrcPos;
|
||||
end;
|
||||
|
||||
procedure TLinkScanner.AddSourceChangeStep(ACode: pointer; AChangeStep: integer);
|
||||
procedure TLinkScanner.AddSourceChangeStep(ACode: TSourceLog;
|
||||
AChangeStep: integer);
|
||||
|
||||
procedure RaiseCodeNil;
|
||||
begin
|
||||
RaiseConsistencyException(20170422130109,'TLinkScanner.AddSourceChangeStep ACode=nil');
|
||||
end;
|
||||
|
||||
var l,r,m: integer;
|
||||
var l,r,m, cmp: integer;
|
||||
NewSrcChangeStep: PSourceChangeStep;
|
||||
c: pointer;
|
||||
c: TSourceLog;
|
||||
begin
|
||||
//DebugLn('[TLinkScanner.AddSourceChangeStep] ',DbgS(ACode));
|
||||
if ACode=nil then
|
||||
@ -2407,14 +2389,16 @@ begin
|
||||
while (l<=r) do begin
|
||||
m:=(l+r) shr 1;
|
||||
c:=PSourceChangeStep(FSourceChangeSteps[m])^.Code;
|
||||
if c<ACode then l:=m+1
|
||||
else if c>ACode then r:=m-1
|
||||
cmp:=ComparePointers(c,ACode);
|
||||
if cmp<0 then l:=m+1
|
||||
else if cmp>0 then r:=m-1
|
||||
else exit;
|
||||
end;
|
||||
NewSrcChangeStep:=PSourceChangeStepMemManager.NewPSourceChangeStep;
|
||||
NewSrcChangeStep^.Code:=ACode;
|
||||
NewSrcChangeStep^.ChangeStep:=AChangeStep;
|
||||
if (FSourceChangeSteps.Count>0) and (c<ACode) then inc(m);
|
||||
if (c<>nil) and (ComparePointers(c,ACode)<0) then
|
||||
inc(m);
|
||||
FSourceChangeSteps.Insert(m,NewSrcChangeStep);
|
||||
//DebugLn(' ADDING ',DbgS(ACode),',',FSourceChangeSteps.Count);
|
||||
end;
|
||||
@ -2612,18 +2596,16 @@ begin
|
||||
// check all used codebuffers
|
||||
if FGlobalSourcesChangeStep<>CurSourcesChangeStep then begin
|
||||
FGlobalSourcesChangeStep:=CurSourcesChangeStep;
|
||||
if Assigned(FOnGetSource) then begin
|
||||
for i:=0 to FSourceChangeSteps.Count-1 do begin
|
||||
SrcChange:=PSourceChangeStep(FSourceChangeSteps[i]);
|
||||
SrcLog:=FOnGetSource(Self,SrcChange^.Code);
|
||||
//debugln(['TLinkScanner.UpdateNeeded ',ExtractFilename(MainFilename),' i=',i,' File=',FOnGetFileName(Self,SrcLog),' Last=',SrcChange^.ChangeStep,' Now=',SrcLog.ChangeStep]);
|
||||
if SrcChange^.ChangeStep<>SrcLog.ChangeStep then begin
|
||||
{$IFDEF VerboseUpdateNeeded}
|
||||
DebugLn(['TLinkScanner.UpdateNeeded because source buffer changed: ',OnGetFileName(Self,SrcLog),' MainFilename=',MainFilename]);
|
||||
{$ENDIF}
|
||||
Include(FStates,lssSourcesChanged);
|
||||
exit;
|
||||
end;
|
||||
for i:=0 to FSourceChangeSteps.Count-1 do begin
|
||||
SrcChange:=PSourceChangeStep(FSourceChangeSteps[i]);
|
||||
SrcLog:=SrcChange^.Code;
|
||||
//debugln(['TLinkScanner.UpdateNeeded ',ExtractFilename(MainFilename),' i=',i,' File=',FOnGetFileName(Self,SrcLog),' Last=',SrcChange^.ChangeStep,' Now=',SrcLog.ChangeStep]);
|
||||
if SrcChange^.ChangeStep<>SrcLog.ChangeStep then begin
|
||||
{$IFDEF VerboseUpdateNeeded}
|
||||
DebugLn(['TLinkScanner.UpdateNeeded because source buffer changed: ',OnGetFileName(Self,SrcLog),' MainFilename=',MainFilename]);
|
||||
{$ENDIF}
|
||||
Include(FStates,lssSourcesChanged);
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -2632,18 +2614,16 @@ begin
|
||||
if CheckFilesOnDisk then begin
|
||||
if FGlobalFilesChangeStep<>CurFilesChangeStep then begin
|
||||
FGlobalFilesChangeStep:=CurFilesChangeStep;
|
||||
if Assigned(FOnGetSource) then begin
|
||||
// if files changed on disk, reload them
|
||||
for i:=0 to FSourceChangeSteps.Count-1 do begin
|
||||
SrcChange:=PSourceChangeStep(FSourceChangeSteps[i]);
|
||||
SrcLog:=FOnGetSource(Self,SrcChange^.Code);
|
||||
if FOnCheckFileOnDisk(SrcLog) then begin
|
||||
{$IFDEF VerboseUpdateNeeded}
|
||||
DebugLn(['TLinkScanner.UpdateNeeded because file on disk changed: ',OnGetFileName(Self,SrcLog),' MainFilename=',MainFilename]);
|
||||
{$ENDIF}
|
||||
Include(FStates,lssFilesChanged);
|
||||
exit;
|
||||
end;
|
||||
// if files changed on disk, reload them
|
||||
for i:=0 to FSourceChangeSteps.Count-1 do begin
|
||||
SrcChange:=PSourceChangeStep(FSourceChangeSteps[i]);
|
||||
SrcLog:=SrcChange^.Code;
|
||||
if FOnCheckFileOnDisk(SrcLog) then begin
|
||||
{$IFDEF VerboseUpdateNeeded}
|
||||
DebugLn(['TLinkScanner.UpdateNeeded because file on disk changed: ',OnGetFileName(Self,SrcLog),' MainFilename=',MainFilename]);
|
||||
{$ENDIF}
|
||||
Include(FStates,lssFilesChanged);
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
@ -2663,7 +2643,8 @@ begin
|
||||
Result:=false;
|
||||
end;
|
||||
|
||||
procedure TLinkScanner.SetIgnoreErrorAfter(ACursorPos: integer; ACode: Pointer);
|
||||
procedure TLinkScanner.SetIgnoreErrorAfter(ACursorPos: integer;
|
||||
ACode: TSourceLog);
|
||||
begin
|
||||
if (FIgnoreErrorAfterCode=ACode)
|
||||
and (FIgnoreErrorAfterCursorPos=ACursorPos) then exit;
|
||||
@ -3259,7 +3240,7 @@ begin
|
||||
Result:=FHiddenUsedUnits;
|
||||
end;
|
||||
|
||||
procedure TLinkScanner.SetMainCode(const Value: pointer);
|
||||
procedure TLinkScanner.SetMainCode(const Value: TSourceLog);
|
||||
begin
|
||||
if FMainCode=Value then exit;
|
||||
FMainCode:=Value;
|
||||
@ -4029,7 +4010,7 @@ begin
|
||||
end;
|
||||
|
||||
function TLinkScanner.LoadSourceCaseLoUp(const AFilename: string;
|
||||
AllowVirtual: boolean): pointer;
|
||||
AllowVirtual: boolean): TSourceLog;
|
||||
var
|
||||
Path, FileNameOnly: string;
|
||||
SecondaryFileNameOnly: String;
|
||||
@ -4057,12 +4038,12 @@ begin
|
||||
end;
|
||||
|
||||
function TLinkScanner.LoadIncludeFile(const AFilename: string;
|
||||
AllowVirtual: boolean): pointer;
|
||||
AllowVirtual: boolean): TSourceLog;
|
||||
var
|
||||
Path, FileNameOnly: string;
|
||||
SecondaryFileName: String;
|
||||
|
||||
function Search(const ShortFilename: string; var r: Pointer): boolean;
|
||||
function Search(const ShortFilename: string; var r: TSourceLog): boolean;
|
||||
begin
|
||||
Result:=false;
|
||||
|
||||
@ -4121,8 +4102,8 @@ begin
|
||||
Result:=pcFPC;
|
||||
end;
|
||||
|
||||
function TLinkScanner.SearchIncludeFile(AFilename: string;
|
||||
out NewCode: Pointer; var MissingIncludeFile: TMissingIncludeFile): boolean;
|
||||
function TLinkScanner.SearchIncludeFile(AFilename: string; out
|
||||
NewCode: TSourceLog; var MissingIncludeFile: TMissingIncludeFile): boolean;
|
||||
var
|
||||
PathStart, PathEnd: integer;
|
||||
IncludePath, CurPath: string;
|
||||
@ -4150,7 +4131,7 @@ var
|
||||
Result:=NewCode<>nil;
|
||||
end;
|
||||
|
||||
function SearchCasedInIncPath(const RelFilename: string): boolean;
|
||||
function Search(const RelFilename: string): boolean;
|
||||
var
|
||||
IsVirtualUnit: Boolean;
|
||||
begin
|
||||
@ -4248,14 +4229,7 @@ begin
|
||||
{$IFDEF VerboseIncludeSearch}
|
||||
debugln(['TLinkScanner.SearchIncludeFile FMainSourceFilename="',FMainSourceFilename,'" SrcFile="',SrcFilename,'" AFilename="',AFilename,'"']);
|
||||
{$ENDIF}
|
||||
if SearchCasedInIncPath(AFilename) then exit(true);
|
||||
|
||||
if ExtractFileExt(AFilename)='' then begin
|
||||
// search with the default file extensions
|
||||
if SearchCasedInIncPath(AFilename+'.inc') then exit(true);
|
||||
if SearchCasedInIncPath(AFilename+'.pp') then exit(true);
|
||||
if SearchCasedInIncPath(AFilename+'.pas') then exit(true);
|
||||
end;
|
||||
if Search(AFilename) then exit(true);
|
||||
|
||||
SetMissingIncludeFile;
|
||||
Result:=false;
|
||||
@ -4263,7 +4237,7 @@ end;
|
||||
|
||||
function TLinkScanner.IncludeFile(const AFilename: string): boolean;
|
||||
var
|
||||
NewCode: Pointer;
|
||||
NewCode: TSourceLog;
|
||||
MissingIncludeFile: TMissingIncludeFile;
|
||||
begin
|
||||
MissingIncludeFile:=nil;
|
||||
@ -4339,7 +4313,7 @@ begin
|
||||
end;
|
||||
|
||||
procedure TLinkScanner.PushIncludeLink(ACleanedPos, ASrcPos: integer;
|
||||
ACode: Pointer);
|
||||
ACode: TSourceLog);
|
||||
|
||||
procedure RaiseIncludeCircleDetected;
|
||||
begin
|
||||
@ -4379,7 +4353,7 @@ function TLinkScanner.MissingIncludeFilesNeedsUpdate: boolean;
|
||||
var
|
||||
i: integer;
|
||||
MissingIncludeFile: TMissingIncludeFile;
|
||||
NewCode: Pointer;
|
||||
NewCode: TSourceLog;
|
||||
begin
|
||||
Result:=false;
|
||||
if (not IncludeFileIsMissing) or IgnoreMissingIncludeFiles then exit;
|
||||
@ -4478,7 +4452,7 @@ end;
|
||||
procedure TLinkScanner.AddMacroSource(MacroID: integer);
|
||||
var
|
||||
Macro: PSourceLinkMacro;
|
||||
OldCode: Pointer;
|
||||
OldCode: TSourceLog;
|
||||
OldSrc: String;
|
||||
OldSrcFilename: String;
|
||||
begin
|
||||
@ -4825,7 +4799,7 @@ begin
|
||||
FSkipIfLevel:=-1;
|
||||
end;
|
||||
|
||||
function TLinkScanner.CursorToCleanPos(ACursorPos: integer; ACode: pointer;
|
||||
function TLinkScanner.CursorToCleanPos(ACursorPos: integer; ACode: TSourceLog;
|
||||
out ACleanPos: integer): integer;
|
||||
// 0=valid CleanPos
|
||||
//-1=CursorPos was skipped, CleanPos is between two links
|
||||
@ -4987,7 +4961,7 @@ function TLinkScanner.WholeRangeIsWritable(CleanStartPos, CleanEndPos: integer;
|
||||
end;
|
||||
|
||||
var
|
||||
ACode: Pointer;
|
||||
ACode: TSourceLog;
|
||||
LinkIndex: integer;
|
||||
CodeIsReadOnly: boolean;
|
||||
begin
|
||||
@ -5031,7 +5005,8 @@ end;
|
||||
|
||||
procedure TLinkScanner.FindCodeInRange(CleanStartPos, CleanEndPos: integer;
|
||||
UniqueSortedCodeList: TFPList);
|
||||
var ACode: Pointer;
|
||||
var
|
||||
ACode: TSourceLog;
|
||||
LinkIndex: integer;
|
||||
Link: PSourceLink;
|
||||
begin
|
||||
|
@ -2061,7 +2061,7 @@ begin
|
||||
// special replace
|
||||
i:=0;
|
||||
while (i<Scanner.LinkCount)
|
||||
and (Scanner.Links[i].Code<>Pointer(ResourceCode)) do
|
||||
and (Scanner.Links[i].Code<>ResourceCode) do
|
||||
inc(i);
|
||||
if i>=Scanner.LinkCount then exit;
|
||||
FromPos:=Scanner.Links[i].CleanedPos;
|
||||
|
Loading…
Reference in New Issue
Block a user