mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-13 15:59:38 +02:00
DBg: Disassembler, show all changes of src-info
git-svn-id: trunk@28264 -
This commit is contained in:
parent
c60d4f0b6f
commit
2228bf61f3
@ -556,21 +556,23 @@ procedure TAssemblerDlg.UpdateLineDataEx(ALineMap: TAsmDlgLineEntries; AFirstLin
|
||||
end;
|
||||
|
||||
function IsSourceBeforeItem(AItm: PDisassemblerEntry;
|
||||
APrvItm: PDisassemblerEntry = nil): Boolean;
|
||||
APrvItm: PDisassemblerEntry): Boolean;
|
||||
begin
|
||||
Result := (AItm <> nil)
|
||||
and ( ( (AItm^.SrcFileName <> '') and (AItm^.SrcStatementIndex = 0) )
|
||||
or ( (AItm^.FuncName <> '')
|
||||
and ( (AItm^.Offset = 0)
|
||||
or ( (APrvItm <> nil) and (AItm^.FuncName <> APrvItm^.FuncName) )
|
||||
)
|
||||
)
|
||||
);
|
||||
end;
|
||||
if AItm = nil
|
||||
then exit(False);
|
||||
|
||||
function IsSourceBeforeItem(AIdx: Integer): Boolean;
|
||||
begin
|
||||
Result := IsSourceBeforeItem(GetItem(AIdx));
|
||||
if AItm^.SrcFileName <> '' then begin
|
||||
Result := AItm^.SrcStatementIndex = 0;
|
||||
if (not Result) and (APrvItm <> nil)
|
||||
then Result := (AItm^.SrcFileName <> APrvItm^.SrcFileName)
|
||||
or (AItm^.SrcFileLine <> APrvItm^.SrcFileLine);
|
||||
end
|
||||
else begin
|
||||
Result := (AItm^.FuncName <> '');
|
||||
if Result
|
||||
then Result := (AItm^.Offset = 0)
|
||||
or ( (APrvItm <> nil) and (AItm^.FuncName <> APrvItm^.FuncName) );
|
||||
end;
|
||||
end;
|
||||
|
||||
var
|
||||
@ -578,7 +580,7 @@ var
|
||||
DoneTopLine, DoneLineCount: Integer;
|
||||
DoneCountBefore, DoneCountAfter: Integer;
|
||||
Line, Idx: Integer;
|
||||
Itm, NextItm: PDisassemblerEntry;
|
||||
Itm, NextItm, PrevItm: PDisassemblerEntry;
|
||||
LineIsSrc, HasLineOutOfRange: Boolean;
|
||||
begin
|
||||
if (FDebugger = nil) or (FDisassembler = nil) or (FDebugger.State <> dsPause)
|
||||
@ -619,35 +621,50 @@ begin
|
||||
LineIsSrc := ACachedIsSrc;
|
||||
end;
|
||||
|
||||
Itm := GetItem(Idx);
|
||||
NextItm := GetItem(Idx + 1);
|
||||
|
||||
while AFirstLine > Line
|
||||
do begin
|
||||
NextItm := GetItem(Idx+1);
|
||||
if LineIsSrc
|
||||
then begin
|
||||
LineIsSrc := False;
|
||||
end
|
||||
else if IsSourceBeforeItem(Idx+1)
|
||||
else if IsSourceBeforeItem(NextItm, Itm)
|
||||
then begin
|
||||
inc(Idx);
|
||||
Itm := NextItm;
|
||||
NextItm := GetItem(Idx + 1);
|
||||
LineIsSrc := True;
|
||||
end
|
||||
else begin
|
||||
inc(Idx);
|
||||
Itm := NextItm;
|
||||
NextItm := GetItem(Idx + 1);
|
||||
end;
|
||||
inc(Line);
|
||||
end;
|
||||
|
||||
Itm := GetItem(Idx);
|
||||
PrevItm := GetItem(Idx - 1);
|
||||
while AFirstLine < line
|
||||
do begin
|
||||
if LineIsSrc
|
||||
then begin
|
||||
dec(Idx);
|
||||
Itm := PrevItm;
|
||||
PrevItm := GetItem(Idx - 1);
|
||||
LineIsSrc := False;
|
||||
end
|
||||
else if IsSourceBeforeItem(Idx)
|
||||
else if IsSourceBeforeItem(Itm, PrevItm)
|
||||
then begin
|
||||
LineIsSrc := True;
|
||||
end
|
||||
else begin
|
||||
dec(Idx);
|
||||
Itm := PrevItm;
|
||||
PrevItm := GetItem(Idx - 1);
|
||||
end;
|
||||
Dec(Line);
|
||||
end;
|
||||
@ -663,8 +680,10 @@ begin
|
||||
// Fill LineMap
|
||||
HasLineOutOfRange := False;
|
||||
Line := 0;
|
||||
PrevItm := GetItem(Idx - 1);
|
||||
NextItm := GetItem(Idx);
|
||||
while Line <= ALineCount do begin
|
||||
PrevItm := Itm;
|
||||
Itm := NextItm;
|
||||
NextItm := GetItem(Idx+1);
|
||||
|
||||
@ -678,7 +697,7 @@ begin
|
||||
end;
|
||||
|
||||
if ( (Line = 0) and LineIsSrc )
|
||||
or ( (Line <> 0) and IsSourceBeforeItem(Itm) )
|
||||
or ( (Line <> 0) and IsSourceBeforeItem(Itm, PrevItm) )
|
||||
then begin
|
||||
ALineMap[Line].Dump := '';
|
||||
ALineMap[Line].Statement := '';
|
||||
|
Loading…
Reference in New Issue
Block a user