From 09bb70e178ebe2eea14797812ac70ab8803d73cf Mon Sep 17 00:00:00 2001 From: mattias Date: Sun, 12 Aug 2007 18:00:35 +0000 Subject: [PATCH] clean up git-svn-id: trunk@11801 - --- components/codetools/directivestree.pas | 56 +++++++++++++++++++------ ideintf/propedits.pp | 8 ++-- 2 files changed, 47 insertions(+), 17 deletions(-) diff --git a/components/codetools/directivestree.pas b/components/codetools/directivestree.pas index 81ee6fb308..115df5f6e1 100644 --- a/components/codetools/directivestree.pas +++ b/components/codetools/directivestree.pas @@ -854,14 +854,13 @@ end; procedure TCompilerDirectivesTree.DisableUnreachableBlocks(Undefines, Defines: TStrings; var Changed: boolean); type - PDefineChange = ^TDefineChange; TDefineChange = record Name: string; OldStatus: TDefineStatus; Next: PDefineChange; end; - + var CurDefines: TAVLTree; Stack: array of PDefineChange;// stack of lists of PDefineChange @@ -895,6 +894,16 @@ var var Change: PDefineChange; begin + // check if MacroName was already changed + Change:=Stack[StackPointer]; + while (Change<>nil) do begin + if (CompareIdentifierPtrs(Pointer(MacroName),Pointer(Change^.Name))=0) then begin + // old status is already saved + exit; + end; + Change:=Change^.Next; + end; + New(Change); FillChar(Change^,SizeOf(TDefineChange),0); Change^.Name:=MacroName; @@ -915,10 +924,12 @@ var end; procedure SetStatus(Identifier: PChar; NewStatus: TDefineStatus; - SaveOnStack: boolean = true); + SaveOnStack, SetGlobal: boolean); var AVLNode: TAVLTreeNode; DefValue: TDefineValue; + i: Integer; + Change: PDefineChange; begin AVLNode:=CurDefines.FindKey(Identifier,@ComparePCharWithDefineValue); if AVLNode=nil then begin @@ -926,7 +937,8 @@ var DefValue:=TDefineValue.Create; DefValue.Name:=GetIdentifier(Identifier); DefValue.Status:=NewStatus; - AddStackChange(DefValue.Name,dsUnknown); + if SaveOnStack then + AddStackChange(DefValue.Name,dsUnknown); end else begin // no change end; @@ -934,15 +946,33 @@ var DefValue:=TDefineValue(AVLNode.Data); if NewStatus<>dsUnknown then begin if NewStatus<>DefValue.Status then begin - AddStackChange(DefValue.Name,DefValue.Status); + if SaveOnStack then + AddStackChange(DefValue.Name,DefValue.Status); DefValue.Status:=NewStatus; end; end else begin - AddStackChange(DefValue.Name,DefValue.Status); + if SaveOnStack then + AddStackChange(DefValue.Name,DefValue.Status); CurDefines.Delete(AVLNode); DefValue.Free; end; end; + if SetGlobal then begin + for i:=StackPointer downto 0 do begin + Change:=Stack[i]; + while Change<>nil do begin + if CompareIdentifiers(PChar(Change^.Name),Identifier)=0 then begin + if (Change^.OldStatus=dsUnknown) + or (Change^.OldStatus=NewStatus) then begin + // ok + end else begin + Change^.OldStatus:=dsUnknown; + end; + end; + Change:=Change^.Next; + end; + end; + end; end; procedure InitDefines; @@ -954,13 +984,13 @@ var if Undefines<>nil then begin for i:=0 to Undefines.Count-1 do if Undefines[i]<>'' then - SetStatus(PChar(Undefines[i]),dsNotDefined); + SetStatus(PChar(Undefines[i]),dsNotDefined,false,false); end; if Defines<>nil then begin for i:=0 to Defines.Count-1 do begin CurName:=Defines.Names[i]; if CurName='' then continue; - SetStatus(PChar(CurName),dsDefined); + SetStatus(PChar(CurName),dsDefined,false,false); end; end; end; @@ -989,7 +1019,7 @@ var // undo all changes while Stack[StackPointer]<>nil do begin Change:=Stack[StackPointer]; - SetStatus(PChar(Change^.Name),Change^.OldStatus,false); + SetStatus(PChar(Change^.Name),Change^.OldStatus,false,false); Stack[StackPointer]:=Change^.Next; Dispose(Change); end; @@ -1023,8 +1053,8 @@ begin if Node.Desc=cdnIf then begin IsIfBlock:=true; end else begin + IsIfBlock:=false; // close prior block - IsIfBlock:=false;// it is an Else-block Pop; end; // start new block @@ -1053,7 +1083,7 @@ begin BlockIsAlwaysReached:=OldStatus=NewStatus; BlockIsNeverReached:=(OldStatus<>dsUnknown) and (OldStatus<>NewStatus); if BlockIsReachable then - SetStatus(Identifier,NewStatus); + SetStatus(Identifier,NewStatus,true,false); if BlockIsAlwaysReached or BlockIsNeverReached then begin // this block can be removed NextNode:=Node.NextBrother; @@ -1094,8 +1124,8 @@ begin NewStatus:=dsDefined else NewStatus:=dsNotDefined; - // TODO: set status not only for stack level, but all levels - SetStatus(@Src[NameStart],NewStatus); + // set status on all levels + SetStatus(@Src[NameStart],NewStatus,false,true); end; end; Node:=NextNode; diff --git a/ideintf/propedits.pp b/ideintf/propedits.pp index 4d7f954a57..92e4fab7ae 100644 --- a/ideintf/propedits.pp +++ b/ideintf/propedits.pp @@ -6082,10 +6082,10 @@ begin nil,'ModalResult',TModalResultPropertyEditor); RegisterPropertyEditor(DummyClassForPropTypes.PTypeInfos('TShortCut'), nil,'',TShortCutPropertyEditor); - RegisterPropertyEditor(DummyClassForPropTypes.PTypeInfos('TDate'), - nil,'',TShortCutPropertyEditor); - RegisterPropertyEditor(DummyClassForPropTypes.PTypeInfos('TTime'), - nil,'',TShortCutPropertyEditor); + //RegisterPropertyEditor(DummyClassForPropTypes.PTypeInfos('TDate'), + // nil,'',TDatePropertyEditor); + //RegisterPropertyEditor(DummyClassForPropTypes.PTypeInfos('TTime'), + // nil,'',TTimePropertyEditor); RegisterPropertyEditor(DummyClassForPropTypes.PTypeInfos('TDateTime'), nil,'',TDateTimePropertyEditor); RegisterPropertyEditor(DummyClassForPropTypes.PTypeInfos('TCursor'),