prevent cases of superfluous indirections on `Items[i]`

This commit is contained in:
Basile Burg 2019-02-03 21:05:53 +01:00
parent c9fac84dab
commit 6750020d16
4 changed files with 69 additions and 40 deletions

View File

@ -903,7 +903,7 @@ begin
end; end;
{$ENDREGION --------------------------------------------------------------------} {$ENDREGION --------------------------------------------------------------------}
{$REGION ICommonProject: sources ---------------------------------------------} {$REGION ICommonProject: sources -----------------------------------------------}
function TDubProject.isSource(const fname: string): boolean; function TDubProject.isSource(const fname: string): boolean;
var var
str: string; str: string;

View File

@ -481,16 +481,20 @@ end;
procedure TMessagesWidget.ListKeyDown(Sender: TObject; var Key: Word; procedure TMessagesWidget.ListKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); Shift: TShiftState);
var var
i: Integer; i: integer;
n: TTreeNode;
begin begin
case Key of case Key of
VK_BACK, VK_DELETE: VK_BACK, VK_DELETE:
begin begin
if List.SelectionCount > 0 then if List.SelectionCount > 0 then
begin begin
for i := List.Items.Count-1 downto 0 do for i := List.Items.Count-1 downto 0 do
if List.Items[i].MultiSelected then begin
List.Items.Delete(List.Items[i]); n := List.Items[i];
if n.MultiSelected then
List.Items.Delete(n);
end;
end end
else clearbyContext(amcAll); else clearbyContext(amcAll);
end; end;
@ -720,23 +724,31 @@ end;
procedure TMessagesWidget.actCopyMsgExecute(Sender: TObject); procedure TMessagesWidget.actCopyMsgExecute(Sender: TObject);
var var
i: Integer; i: integer;
str: string = ''; s: string = '';
n: TTreeNode;
begin begin
for i := 0 to List.Items.Count-1 do for i := 0 to List.Items.Count-1 do
if List.Items[i].MultiSelected then begin
str += List.Items[i].Text + LineEnding; n := List.Items[i];
Clipboard.AsText := str; if n.MultiSelected then
s += n.Text + LineEnding;
end;
Clipboard.AsText := s;
end; end;
procedure TMessagesWidget.actSelAllExecute(Sender: TObject); procedure TMessagesWidget.actSelAllExecute(Sender: TObject);
var var
i: Integer; i: integer;
n: TTreeNode;
begin begin
List.BeginUpdate; List.BeginUpdate;
for i := 0 to List.Items.Count-1 do for i := 0 to List.Items.Count-1 do
if List.Items[i].Visible then begin
List.Items[i].MultiSelected := true; n := List.Items[i];
if n.Visible then
n.MultiSelected := true;
end;
List.EndUpdate; List.EndUpdate;
end; end;
@ -933,8 +945,9 @@ end;
procedure TMessagesWidget.clearByContext(aCtxt: TAppMessageCtxt); procedure TMessagesWidget.clearByContext(aCtxt: TAppMessageCtxt);
var var
i: Integer; i: integer;
msgdt: PMessageData; d: PMessageData;
n: TTreeNode;
begin begin
list.BeginUpdate; list.BeginUpdate;
TreeFilterEdit1.Filter := ''; TreeFilterEdit1.Filter := '';
@ -942,17 +955,19 @@ begin
List.Items.Clear List.Items.Clear
else for i := List.Items.Count-1 downto 0 do else for i := List.Items.Count-1 downto 0 do
begin begin
msgdt := PMessageData(List.Items[i].Data); n := List.Items[i];
if msgdt^.ctxt = aCtxt then d := PMessageData(n.Data);
List.Items.Delete(List.Items[i]); if d^.ctxt = aCtxt then
List.Items.Delete(n);
end; end;
list.EndUpdate; list.EndUpdate;
end; end;
procedure TMessagesWidget.clearByData(data: Pointer); procedure TMessagesWidget.clearByData(data: Pointer);
var var
i: Integer; i: integer;
msgdt: PMessageData; d: PMessageData;
n: TTreeNode;
begin begin
if data.isNil then if data.isNil then
exit; exit;
@ -962,9 +977,10 @@ begin
TreeFilterEdit1.Filter := ''; TreeFilterEdit1.Filter := '';
for i := List.Items.Count-1 downto 0 do for i := List.Items.Count-1 downto 0 do
begin begin
msgdt := PMessageData(List.Items[i].Data); n := List.Items[i];
if (msgdt^.data = data) then d := PMessageData(n.Data);
List.Items.Delete(List.Items[i]); if (d^.data = data) then
List.Items.Delete(n);
end; end;
list.EndUpdate; list.EndUpdate;
end; end;

View File

@ -850,7 +850,8 @@ procedure TSymbolListWidget.toolTerminated(sender: TObject);
var var
i: Integer; i: Integer;
flt: string; f: string;
n: TTreeNode;
begin begin
if ndAlias.isNil then if ndAlias.isNil then
exit; exit;
@ -866,7 +867,7 @@ begin
exit; exit;
fSyms.LoadFromTool(fToolProc.StdoutEx); fSyms.LoadFromTool(fToolProc.StdoutEx);
flt := TreeFilterEdit1.Filter; f := TreeFilterEdit1.Filter;
TreeFilterEdit1.Text := ''; TreeFilterEdit1.Text := '';
tree.BeginUpdate; tree.BeginUpdate;
for i := 0 to fSyms.symbols.Count-1 do for i := 0 to fSyms.symbols.Count-1 do
@ -880,18 +881,22 @@ begin
end; end;
if fSortSymbols then if fSortSymbols then
for i:= 0 to tree.Items.Count-1 do for i:= 0 to tree.Items.Count-1 do
if Tree.Items[i].Count > 0 then begin
tree.Items[i].CustomSort(nil); n := Tree.Items[i];
if n.Count > 0 then
n.CustomSort(nil);
end;
if fSmartExpander then if fSmartExpander then
smartExpand; smartExpand;
tree.EndUpdate; tree.EndUpdate;
if flt.isNotEmpty then if f.isNotEmpty then
TreeFilterEdit1.Text := flt; TreeFilterEdit1.Text := f;
end; end;
procedure TSymbolListWidget.smartExpand; procedure TSymbolListWidget.smartExpand;
var var
i: integer; i: integer;
n: TTreeNode;
target: NativeUint; target: NativeUint;
nearest: NativeUint = 0; nearest: NativeUint = 0;
toExpand: TTreeNode = nil; toExpand: TTreeNode = nil;
@ -903,23 +908,24 @@ var
begin begin
for i := 0 to root.Count-1 do for i := 0 to root.Count-1 do
begin begin
if root.Items[i].Data.isNil then n := root.Items[i];
if n.Data.isNil then
continue; continue;
if root.Items[i].Parent.isNil then if n.Parent.isNil then
continue; continue;
case root.Items[i].Parent.Text of case n.Parent.Text of
'Alias', 'Enum', 'Import', 'Variable': 'Alias', 'Enum', 'Import', 'Variable':
continue; continue;
end; end;
{$PUSH}{$WARNINGS OFF}{$HINTS OFF} {$PUSH}{$WARNINGS OFF}{$HINTS OFF}
line := NativeUInt(root.Items[i].Data); line := NativeUInt(n.Data);
{$POP} {$POP}
if line > target then if line > target then
continue; continue;
if line > nearest then if line > nearest then
begin begin
nearest := line; nearest := line;
toExpand := root.Items[i]; toExpand := n;
end; end;
end; end;
end; end;

View File

@ -3056,11 +3056,13 @@ begin
IncPaintLock; IncPaintLock;
fDscannerResults.clear; fDscannerResults.clear;
for i:= Marks.Count-1 downto 0 do for i:= Marks.Count-1 downto 0 do
if marks.Items[i].ImageIndex = longint(giWarn) then
begin begin
n := marks.Items[i]; n := marks.Items[i];
marks.Delete(i); if n.ImageIndex = longint(giWarn) then
FreeAndNil(n); begin
marks.Delete(i);
FreeAndNil(n);
end;
end; end;
DecPaintLock; DecPaintLock;
repaint; repaint;
@ -3851,10 +3853,14 @@ end;
procedure TDexedMemo.removeDebugTimeMarks; procedure TDexedMemo.removeDebugTimeMarks;
var var
i: integer; i: integer;
n: TSynEditMark;
begin begin
IncPaintLock; IncPaintLock;
for i:= marks.Count-1 downto 0 do for i:= marks.Count-1 downto 0 do
Marks.Items[i].Visible := not (TGutterIcon(Marks.Items[i].ImageIndex) in debugTimeGutterIcons); begin
n := Marks.Items[i];
n.Visible := not (TGutterIcon(n.ImageIndex) in debugTimeGutterIcons);
end;
DecPaintLock; DecPaintLock;
end; end;
@ -3898,8 +3904,9 @@ begin
if m.isNotNil then if m.isNotNil then
for i := 0 to m.Count-1 do for i := 0 to m.Count-1 do
begin begin
s := m.Items[i].ImageIndex = longint(value); n := m.Items[i];
m.Items[i].Visible := s; s := n.ImageIndex = longint(value);
n.Visible := s;
end; end;
if not s then if not s then
begin begin