codetools: linkscanner: add link for skipped code

git-svn-id: trunk@38525 -
This commit is contained in:
mattias 2012-09-05 11:28:37 +00:00
parent 04176d39b8
commit 4a5400aa16
2 changed files with 25 additions and 10 deletions

View File

@ -2649,14 +2649,14 @@ begin
CleanPos:=0;
exit(-2);
end;
//DebugLn(['TCustomCodeTool.CaretToCleanPos A ',Caret.Code.Filename,' ',Caret.Y,',',Caret.X,' ',Caret.Code.SourceLength]);
//DebugLn(['TCustomCodeTool.CaretToCleanPos A ',Caret.Code.Filename,' ',Caret.Y,',',Caret.X,' SourceLength=',Caret.Code.SourceLength]);
Caret.Code.LineColToPosition(Caret.Y,Caret.X,CleanPos);
//DebugLn(['TCustomCodeTool.CaretToCleanPos B ',CleanPos,',',Caret.Y,',',Caret.X,' ',dbgstr(copy(Caret.Code.Source,CleanPos-20,20)),'|',dbgstr(copy(Caret.Code.Source,CleanPos,20))]);
//DebugLn(['TCustomCodeTool.CaretToCleanPos B Clean=',CleanPos,',Y=',Caret.Y,',X=',Caret.X,' ',dbgstr(copy(Caret.Code.Source,CleanPos-20,20)),'|',dbgstr(copy(Caret.Code.Source,CleanPos,20))]);
if (CleanPos>=1) then
Result:=Scanner.CursorToCleanPos(CleanPos,Caret.Code,CleanPos)
else
Result:=-2; // x,y beyond source
//DebugLn('TCustomCodeTool.CaretToCleanPos C CleanPos=',CleanPos,' Result=',Result);
//DebugLn(['TCustomCodeTool.CaretToCleanPos C CleanPos=',CleanPos,' Result=',Result]);
end;
function TCustomCodeTool.CodePosToCleanPos(const CodePos: TCodePosition; out

View File

@ -53,7 +53,7 @@ uses
{$IFDEF MEM_CHECK}
MemCheck,
{$ENDIF}
Classes, SysUtils, CodeToolsStrConsts, CodeToolMemManager, FileProcs,
Classes, SysUtils, math, CodeToolsStrConsts, CodeToolMemManager, FileProcs,
AVL_Tree, ExprEval, SourceLog, KeywordFuncLists, BasicCodeTools;
const
@ -755,8 +755,6 @@ begin
Result:=true;
end;
{ TLinkScanner }
procedure TLinkScanner.AddLink(ASrcPos: integer; ACode: Pointer;
@ -1698,11 +1696,13 @@ begin
end;
// links
for i:=0 to LinkCount-1 do begin
DebugLn(' Link ',dbgs(i),':'
,' CleanedPos=',dbgs(FLinks[i].CleanedPos)
,' SrcPos=',dbgs(FLinks[i].SrcPos)
DebugLn([' Link ',i,':'
,' CleanedPos=',FLinks[i].CleanedPos
,' SrcPos=',FLinks[i].SrcPos
,' Code=',dbgs(FLinks[i].Code)
);
,' Kind=',dbgs(FLinks[i].Kind)
,' Src="',dbgstr(CleanedSrc,FLinks[i].CleanedPos,Min(50,LinkSize(i))),'"'
]);
end;
end;
@ -3554,6 +3554,20 @@ begin
inc(CleanedLen);
FCleanedSrc[CleanedLen]:=#3;
end else begin
if (LinkCount>0) and (FLinks[FLinkCount-1].CleanedPos=CleanedLen+1) then begin
// last link is empty
dec(FLinkCount);
{$IFDEF ShowUpdateCleanedSrc}
debugln(['TLinkScanner.AddSkipComment SkipEnd: removing empty link: ',dbgs(FLinks[FLinkCount].Kind)]);
{$ENDIF}
if (LinkCount>0) and (FLinks[FLinkCount-1].Kind=slkSkipStart) then begin
// remove unneeded SkipStart
dec(FLinkCount);
CleanedLen:=FLinks[FLinkCount].CleanedPos;
exit;
end;
end;
AddLink(1,nil,slkSkipEnd);
inc(CleanedLen);
FCleanedSrc[CleanedLen]:=#3;
@ -3740,6 +3754,7 @@ begin
{$ENDIF}
UpdateCleanedSource(SrcPos-1);
AddSkipComment(true);
AddLink(SrcPos,Code);
// parse till $else, $elseif or $endif
FSkipIfLevel:=IfLevel;