diff --git a/components/codetools/codecache.pas b/components/codetools/codecache.pas index 284ac6c3e1..8f648c86be 100644 --- a/components/codetools/codecache.pas +++ b/components/codetools/codecache.pas @@ -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); diff --git a/components/codetools/customcodetool.pas b/components/codetools/customcodetool.pas index 256f72b3c2..932f8f41ee 100644 --- a/components/codetools/customcodetool.pas +++ b/components/codetools/customcodetool.pas @@ -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; diff --git a/components/codetools/finddeclarationtool.pas b/components/codetools/finddeclarationtool.pas index 4ef8dd5795..923e6f6646 100644 --- a/components/codetools/finddeclarationtool.pas +++ b/components/codetools/finddeclarationtool.pas @@ -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; diff --git a/components/codetools/linkscanner.pas b/components/codetools/linkscanner.pas index ac8aeea132..77118a426d 100644 --- a/components/codetools/linkscanner.pas +++ b/components/codetools/linkscanner.pas @@ -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 cACode 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 (cnil) 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 diff --git a/components/codetools/stdcodetools.pas b/components/codetools/stdcodetools.pas index 60a5b45fd5..8fa667f53b 100644 --- a/components/codetools/stdcodetools.pas +++ b/components/codetools/stdcodetools.pas @@ -2061,7 +2061,7 @@ begin // special replace i:=0; while (iPointer(ResourceCode)) do + and (Scanner.Links[i].Code<>ResourceCode) do inc(i); if i>=Scanner.LinkCount then exit; FromPos:=Scanner.Links[i].CleanedPos;