dupIgnore has no effect when list not sorted

This commit is contained in:
Basile Burg 2016-10-30 12:51:20 +01:00
parent 73b4b4a9e5
commit 905d8395b0
No known key found for this signature in database
GPG Key ID: 1868039F415CB8CF
6 changed files with 45 additions and 23 deletions

View File

@ -154,9 +154,7 @@ begin
fProjectSubject := TCEProjectSubject.create; fProjectSubject := TCEProjectSubject.create;
// //
fLibAliases := TStringList.Create; fLibAliases := TStringList.Create;
fLibAliases.Duplicates:=TDuplicates.dupIgnore;
fSrcs := TStringList.Create; fSrcs := TStringList.Create;
fSrcs.Duplicates:=TDuplicates.dupIgnore;
fSrcs.OnChange := @subMemberChanged; fSrcs.OnChange := @subMemberChanged;
fConfigs := TCollection.create(TCompilerConfiguration); fConfigs := TCollection.create(TCompilerConfiguration);
// //

View File

@ -299,11 +299,11 @@ begin
fBuildTypes := TStringList.Create; fBuildTypes := TStringList.Create;
fConfigs := TStringList.Create; fConfigs := TStringList.Create;
fSrcs := TStringList.Create; fSrcs := TStringList.Create;
fSrcs.Sorted:=true;
fSrcs.Duplicates:=dupIgnore;
fImportPaths := TStringList.Create; fImportPaths := TStringList.Create;
fSrcs.Duplicates:=TDuplicates.dupIgnore; fImportPaths.Sorted:=true;
fImportPaths.Duplicates:=TDuplicates.dupIgnore; fImportPaths.Duplicates:=dupIgnore;
fConfigs.Duplicates:=TDuplicates.dupIgnore;
fBuildTypes.Duplicates:=TDuplicates.dupIgnore;
// //
json.Add('name', ''); json.Add('name', '');
endModification; endModification;
@ -771,6 +771,8 @@ begin
fBuildTypes.Add(itemname); fBuildTypes.Add(itemname);
end; end;
end; end;
deleteDups(fConfigs);
deleteDups(fBuildTypes);
fConfigsCount := fConfigs.Count * fBuildTypes.Count; fConfigsCount := fConfigs.Count * fBuildTypes.Count;
end; end;
@ -912,6 +914,7 @@ begin
finally finally
lst.Free; lst.Free;
end; end;
deleteDups(fSrcs);
end; end;
function TCEDubProject.findTargetKindInd(value: TJSONObject): boolean; function TCEDubProject.findTargetKindInd(value: TJSONObject): boolean;

View File

@ -1,46 +1,46 @@
inherited CEGdbWidget: TCEGdbWidget inherited CEGdbWidget: TCEGdbWidget
Left = 640 Left = 640
Height = 625 Height = 668
Top = 213 Top = 213
Width = 517 Width = 517
ActiveControl = Back ActiveControl = Back
Caption = 'GDB commander' Caption = 'GDB commander'
ClientHeight = 625 ClientHeight = 668
ClientWidth = 517 ClientWidth = 517
inherited Back: TPanel inherited Back: TPanel
Height = 619 Height = 662
Top = 6 Top = 6
Width = 517 Width = 517
ClientHeight = 619 ClientHeight = 662
ClientWidth = 517 ClientWidth = 517
inherited Content: TPanel inherited Content: TPanel
Height = 583 Height = 626
Width = 517 Width = 517
ClientHeight = 583 ClientHeight = 626
ClientWidth = 517 ClientWidth = 517
object Panel1: TPanel[0] object Panel1: TPanel[0]
Left = 0 Left = 0
Height = 381 Height = 424
Top = 166 Top = 166
Width = 517 Width = 517
Align = alClient Align = alClient
BevelOuter = bvNone BevelOuter = bvNone
ClientHeight = 381 ClientHeight = 424
ClientWidth = 517 ClientWidth = 517
TabOrder = 0 TabOrder = 0
object GroupBox3: TGroupBox object GroupBox3: TGroupBox
Left = 0 Left = 0
Height = 184 Height = 227
Top = 197 Top = 197
Width = 517 Width = 517
Align = alClient Align = alClient
Caption = 'CPU' Caption = 'CPU'
ClientHeight = 154 ClientHeight = 197
ClientWidth = 513 ClientWidth = 513
TabOrder = 0 TabOrder = 0
object cpuVIewer: TTIPropertyGrid object cpuVIewer: TTIPropertyGrid
Left = 0 Left = 0
Height = 154 Height = 197
Hint = 'cpu registers' Hint = 'cpu registers'
Top = 0 Top = 0
Width = 513 Width = 513
@ -110,7 +110,7 @@ inherited CEGdbWidget: TCEGdbWidget
object Panel3: TPanel[1] object Panel3: TPanel[1]
Left = 4 Left = 4
Height = 28 Height = 28
Top = 551 Top = 594
Width = 509 Width = 509
Align = alBottom Align = alBottom
BorderSpacing.Around = 4 BorderSpacing.Around = 4

View File

@ -10,7 +10,7 @@ uses
StdCtrls, ValEdit, process, fpjson, typinfo, {$IFDEF UNIX}Unix,{$ENDIF} StdCtrls, ValEdit, process, fpjson, typinfo, {$IFDEF UNIX}Unix,{$ENDIF}
ce_common, ce_interfaces, ce_widget, ce_processes, ce_observer, ce_synmemo, ce_common, ce_interfaces, ce_widget, ce_processes, ce_observer, ce_synmemo,
ce_sharedres, ce_stringrange, ce_dsgncontrols, ce_dialogs, ce_dbgitf, ce_sharedres, ce_stringrange, ce_dsgncontrols, ce_dialogs, ce_dbgitf,
ce_ddemangle, ce_writableComponent, ce_symstring; ce_ddemangle, ce_writableComponent;
type type
@ -504,8 +504,10 @@ begin
fShowGdbOutput:=true; fShowGdbOutput:=true;
fIgnoredSignals := TStringList.Create; fIgnoredSignals := TStringList.Create;
fIgnoredSignals.Duplicates:= dupIgnore; fIgnoredSignals.Duplicates:= dupIgnore;
fIgnoredSignals.Sorted:=true;
fCommandsHistory := TStringList.Create; fCommandsHistory := TStringList.Create;
fCommandsHistory.Duplicates:= dupIgnore; fCommandsHistory.Duplicates:= dupIgnore;
fCommandsHistory.Sorted:=true;
fShortcuts := TCEDebugShortcuts.Create; fShortcuts := TCEDebugShortcuts.Create;
end; end;
@ -2111,6 +2113,11 @@ begin
edit1.Text := ''; edit1.Text := '';
end; end;
//TODO-cGDB: copy from call stack list
//TODO-cGDB: replace value list editor by TListView
//to set focus on variable of a triggered watchpoint.
procedure TCEGdbWidget.setGpr(reg: TCpuRegister; val: TCpuGprValue); procedure TCEGdbWidget.setGpr(reg: TCpuRegister; val: TCpuGprValue);
const const
spec = 'set $%s = 0x%X'; spec = 'set $%s = 0x%X';

View File

@ -166,8 +166,6 @@ begin
fModulesByName := TModulesByName.create; fModulesByName := TModulesByName.create;
fDependencies := TStringList.Create; fDependencies := TStringList.Create;
fClients := TStringList.Create; fClients := TStringList.Create;
fDependencies.Duplicates := dupIgnore;
fClients.Duplicates := dupIgnore;
fEnabled:=true; fEnabled:=true;
end; end;
@ -438,11 +436,15 @@ procedure TLibraryManager.FPOObservedChanged(ASender: TObject; Operation:
TFPObservedOperation; Data: Pointer); TFPObservedOperation; Data: Pointer);
var var
i,j: integer; i,j: integer;
obj: TObject;
lib: TLibraryItem; lib: TLibraryItem;
cli: TLibraryItem; cli: TLibraryItem;
begin begin
if data.isNil then if data.isNil then
exit; exit;
obj := TObject(data);
if not (obj is TLibraryItem) then
exit;
lib := TLibraryItem(data); lib := TLibraryItem(data);
case operation of case operation of
ooDeleteItem: if fItemsByAlias.contains(lib.libAlias) then ooDeleteItem: if fItemsByAlias.contains(lib.libAlias) then
@ -462,7 +464,8 @@ begin
ooAddItem: ooAddItem:
begin begin
fItemsByAlias.insert(lib.libAlias, lib); fItemsByAlias.insert(lib.libAlias, lib);
updateCrossDependencies; // TODO-cupdate on addition, item ctor is not yet finished !
//updateCrossDependencies;
end; end;
end; end;
end; end;
@ -705,6 +708,12 @@ begin
dep.clients.Add(lib.libAlias); dep.clients.Add(lib.libAlias);
end; end;
end; end;
for i := 0 to fCollection.Count-1 do
begin
lib := libraryByIndex[i];
deleteDups(lib.clients);
deleteDups(lib.dependencies);
end;
end; end;
initialization initialization

View File

@ -597,6 +597,7 @@ begin
inherited; inherited;
fStaticSwitches := TStringList.create; fStaticSwitches := TStringList.create;
fStaticSwitches.Duplicates := TDuplicates.dupIgnore; fStaticSwitches.Duplicates := TDuplicates.dupIgnore;
fStaticSwitches.Sorted:=true;
end; end;
@ -1282,6 +1283,7 @@ begin
accept := GetKeyShiftState = [ssCtrl]; accept := GetKeyShiftState = [ssCtrl];
end; end;
//TODO-cdocking: remove the usage of TAnchorDockSplitterEx from Laz 1.8 RC1 (OnMouseWheel public)
procedure TCEMainForm.DockSplitterMw(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean); procedure TCEMainForm.DockSplitterMw(Sender: TObject; Shift: TShiftState; WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
var var
offs: integer; offs: integer;
@ -2193,6 +2195,9 @@ begin
openFile(TMenuItem(Sender).Hint); openFile(TMenuItem(Sender).Hint);
end; end;
//TODO-cbugfix: OpenDialogs, double path separator when shortcuts resolved
// i.e when ofNoDereferenceLinks is not set.
procedure TCEMainForm.actFileOpenExecute(Sender: TObject); procedure TCEMainForm.actFileOpenExecute(Sender: TObject);
var var
fname: string; fname: string;
@ -2602,7 +2607,6 @@ begin
ldc: dmdProc.Executable :='ldmd2' + exeExt; ldc: dmdProc.Executable :='ldmd2' + exeExt;
gdc: dmdProc.Executable :='gdmd' + exeExt; gdc: dmdProc.Executable :='gdmd' + exeExt;
end; end;
TStringList(dmdproc.Parameters).Duplicates:=TDuplicates.dupIgnore;
dmdproc.Parameters.Add(fDoc.fileName); dmdproc.Parameters.Add(fDoc.fileName);
if not asObj then if not asObj then
dmdproc.Parameters.Add('-of' + fname + exeExt) dmdproc.Parameters.Add('-of' + fname + exeExt)
@ -2640,6 +2644,7 @@ begin
LibMan.getLibFiles(nil, dmdproc.Parameters); LibMan.getLibFiles(nil, dmdproc.Parameters);
LibMan.getLibSourcePath(nil, dmdproc.Parameters); LibMan.getLibSourcePath(nil, dmdproc.Parameters);
end; end;
deleteDups(dmdproc.Parameters);
dmdproc.Execute; dmdproc.Execute;
while dmdproc.Running do while dmdproc.Running do
application.ProcessMessages; application.ProcessMessages;