symlist, minor perf improvment

This commit is contained in:
Basile Burg 2020-05-27 15:27:38 +02:00
parent a4b604a60b
commit 015bdd6062
2 changed files with 41 additions and 27 deletions

View File

@ -3,7 +3,7 @@ module symlist;
import import
core.stdc.string; core.stdc.string;
import import
std.array, std.traits, std.conv, std.json, std.format, std.array, std.conv, std.json, std.format,
std.algorithm, std.string; std.algorithm, std.string;
import import
iz.memory: construct, destruct, MustAddGcRange, TellRangeAdded, NoGc; iz.memory: construct, destruct, MustAddGcRange, TellRangeAdded, NoGc;
@ -85,6 +85,7 @@ enum SymbolType
string makeSymbolTypeArray() string makeSymbolTypeArray()
{ {
import std.traits : EnumMembers;
string result = "string[SymbolType.max + 1] symbolTypeStrings = ["; string result = "string[SymbolType.max + 1] symbolTypeStrings = [";
foreach(st; EnumMembers!SymbolType) foreach(st; EnumMembers!SymbolType)
result ~= `"` ~ to!string(st) ~ `",`; result ~= `"` ~ to!string(st) ~ `",`;
@ -306,11 +307,6 @@ static assert (!MustAddGcRange!(SymbolListBuilder!(ListFmt.Pas)));
namedVisitorImpl!(AnonymousEnumMember, SymbolType._enum)(decl); namedVisitorImpl!(AnonymousEnumMember, SymbolType._enum)(decl);
} }
override void visit(const AnonymousEnumDeclaration decl)
{
decl.accept(this);
}
override void visit(const AutoDeclarationPart decl) override void visit(const AutoDeclarationPart decl)
{ {
otherVisitorImpl(decl, SymbolType._variable, decl.identifier.text, otherVisitorImpl(decl, SymbolType._variable, decl.identifier.text,
@ -437,21 +433,38 @@ static assert (!MustAddGcRange!(SymbolListBuilder!(ListFmt.Pas)));
otherVisitorImpl(decl, SymbolType._function, "shared static dtor", decl.line, decl.column); otherVisitorImpl(decl, SymbolType._function, "shared static dtor", decl.line, decl.column);
} }
override void visit(const AliasInitializer) {}
override void visit(const AlignAttribute) {}
override void visit(const ArrayInitializer) {}
override void visit(const AsmStatement) {}
override void visit(const AtAttribute) {}
override void visit(const Attribute) {}
override void visit(const AttributeDeclaration) {}
override void visit(const BaseClassList) {}
override void visit(const BreakStatement) {}
override void visit(const Catches) {}
override void visit(const Constraint) {}
override void visit(const ContinueStatement) {}
override void visit(const Deprecated) {}
override void visit(const Expression) {} override void visit(const Expression) {}
override void visit(const ExpressionNode) {} override void visit(const ExpressionNode) {}
override void visit(const ExpressionStatement) {} override void visit(const ExpressionStatement) {}
override void visit(const PragmaStatement) {} override void visit(const FunctionAttribute) {}
override void visit(const Initializer) {}
override void visit(const FunctionContract) {} override void visit(const FunctionContract) {}
override void visit(const AsmStatement) {}
override void visit(const ReturnStatement) {}
override void visit(const BreakStatement) {}
override void visit(const ContinueStatement) {}
override void visit(const GotoStatement) {} override void visit(const GotoStatement) {}
override void visit(const Initializer) {}
override void visit(const LabeledStatement) {}
override void visit(const MemberFunctionAttribute){}
override void visit(const MixinDeclaration) {} override void visit(const MixinDeclaration) {}
override void visit(const NamespaceList) {}
override void visit(const PragmaStatement) {}
override void visit(const ReturnStatement) {}
override void visit(const StaticAssertDeclaration){}
override void visit(const StaticAssertStatement){}
override void visit(const StructInitializer) {}
override void visit(const SynchronizedStatement){}
override void visit(const ThrowStatement) {}
override void visit(const Type) {} override void visit(const Type) {}
override void visit(const Type2) {} override void visit(const Type2) {}
override void visit(const StaticAssertStatement){}
override void visit(const StaticAssertDeclaration){}
} }

View File

@ -847,12 +847,12 @@ begin
if fTreeDataFromThread.isEmpty or ndAlias.isNil then if fTreeDataFromThread.isEmpty or ndAlias.isNil then
exit; exit;
tree.BeginUpdate;
clearTree; clearTree;
updateVisibleCat; updateVisibleCat;
fSyms.LoadFromString(fTreeDataFromThread); fSyms.LoadFromString(fTreeDataFromThread);
f := TreeFilterEdit1.Filter; f := TreeFilterEdit1.Filter;
TreeFilterEdit1.Text := ''; TreeFilterEdit1.Text := '';
tree.BeginUpdate;
for i := 0 to fSyms.symbols.Count-1 do for i := 0 to fSyms.symbols.Count-1 do
symbolToTreeNode(nil, fSyms.symbols[i]); symbolToTreeNode(nil, fSyms.symbols[i]);
if fAutoExpandErrors then if fAutoExpandErrors then
@ -871,9 +871,9 @@ begin
end; end;
if fSmartExpander then if fSmartExpander then
smartExpand; smartExpand;
tree.EndUpdate;
if f.isNotEmpty then if f.isNotEmpty then
TreeFilterEdit1.Text := f; TreeFilterEdit1.Text := f;
tree.EndUpdate;
minimizeGcHeap(); minimizeGcHeap();
end; end;
@ -881,14 +881,14 @@ procedure TSymbolListWidget.smartExpand;
var var
i: integer; i: integer;
n: TTreeNode; n: TTreeNode;
target: NativeUint; target: PtrUInt;
nearest: NativeUint = 0; nearest: PtrUInt = 0;
toExpand: TTreeNode = nil; toExpand: TTreeNode = nil;
procedure look(root: TTreeNode); procedure look(root: TTreeNode);
var var
i: integer; i: integer;
line: NativeUint; j: PtrUInt;
begin begin
for i := 0 to root.Count-1 do for i := 0 to root.Count-1 do
begin begin
@ -897,18 +897,19 @@ var
continue; continue;
if n.Parent.isNil then if n.Parent.isNil then
continue; continue;
case n.Parent.Text of if (n.Parent = ndAlias)
'Alias', 'Enum', 'Import', 'Variable': or (n.Parent = ndEnum)
or (n.Parent = ndImp)
or (n.Parent = ndVar) then
continue; continue;
end;
{$PUSH}{$WARNINGS OFF}{$HINTS OFF} {$PUSH}{$WARNINGS OFF}{$HINTS OFF}
line := NativeUInt(n.Data); j := NativeUInt(n.Data);
{$POP} {$POP}
if line > target then if j > target then
continue; continue;
if line > nearest then if j > nearest then
begin begin
nearest := line; nearest := j;
toExpand := n; toExpand := n;
end; end;
end; end;