codetools: improved FixAliasDefinitions for type casts

git-svn-id: trunk@12121 -
This commit is contained in:
mattias 2007-09-21 21:49:14 +00:00
parent d95149bc3a
commit 6808002ecd
4 changed files with 28 additions and 12 deletions

View File

@ -1430,7 +1430,7 @@ var
if (NeededType<>Node.Desc) or (not OnlyWrongType) then begin
// add alias
if NeededType<>Node.Desc then begin
DebugLn(['TCodeCompletionCodeTool.FindAliasDefinitions Wrong: ',Node.DescAsString,' ',ExtractNode(Node,[]),' ',Node.DescAsString,'<>',ReferingNode.DescAsString]);
DebugLn(['TCodeCompletionCodeTool.FindAliasDefinitions Wrong: ',Node.DescAsString,' ',ExtractNode(Node,[]),' ',Node.DescAsString,'<>',NodeDescToStr(NeededType)]);
end;
if TreeOfCodeTreeNodeExt=nil then
TreeOfCodeTreeNodeExt:=TAVLTree.Create(@CompareCodeTreeNodeExt);
@ -1543,7 +1543,6 @@ var
AVLNode: TAVLTreeNode;
NodeExt: TCodeTreeNodeExtension;
DefNode: TCodeTreeNode;
ReferingNode: TCodeTreeNode;
NextAVLNode: TAVLTreeNode;
ReferingNodeInFront: TCodeTreeNode;
ReferingNodeBehind: TCodeTreeNode;
@ -1563,12 +1562,11 @@ begin
NextAVLNode:=TreeOfCodeTreeNodeExt.FindSuccessor(AVLNode);
NodeExt:=TCodeTreeNodeExtension(AVLNode.Data);
DefNode:=NodeExt.Node;
ReferingNode:=TCodeTreeNode(NodeExt.Data);
ReferingType:=TCodeTreeNodeDesc(NodeExt.Flags);
if (ReferingNode=nil)
or (not (ReferingNode.Desc in [ctnTypeDefinition,ctnConstDefinition]))
if (not (ReferingType in [ctnTypeDefinition,ctnConstDefinition]))
or (DefNode.Desc=ReferingType) then begin
TreeOfCodeTreeNodeExt.Delete(AVLNode);
NodeExtMemManager.DisposeNode(NodeExt);
end;
AVLNode:=NextAVLNode;
end;
@ -1578,10 +1576,9 @@ begin
while AVLNode<>nil do begin
NodeExt:=TCodeTreeNodeExtension(AVLNode.Data);
DefNode:=NodeExt.Node;
ReferingNode:=TCodeTreeNode(NodeExt.Data);
ReferingType:=TCodeTreeNodeDesc(NodeExt.Flags);
//DebugLn(['TCodeCompletionCodeTool.FixAliasDefinitions Old=',DefNode.DescAsString,' New=',NodeDescToStr(ReferingType)]);
DebugLn(['TCodeCompletionCodeTool.FixAliasDefinitions Old=',DefNode.DescAsString,' New=',NodeDescToStr(ReferingType)]);
case ReferingType of
ctnTypeDefinition: NewSrc:='type';

View File

@ -26,18 +26,28 @@
</RunParams>
<RequiredPackages Count="2">
<Item1>
<PackageName Value="CodeTools"/>
<PackageName Value="LCL"/>
</Item1>
<Item2>
<PackageName Value="LCL"/>
<PackageName Value="CodeTools"/>
</Item2>
</RequiredPackages>
<Units Count="1">
<Units Count="3">
<Unit0>
<Filename Value="fixdefinitionorder.lpr"/>
<IsPartOfProject Value="True"/>
<UnitName Value="FixDefinitionOrder"/>
</Unit0>
<Unit1>
<Filename Value="scanexamples/simplefunctions.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="SimpleFunctions"/>
</Unit1>
<Unit2>
<Filename Value="scanexamples/wrongforwarddefinitions.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="WrongForwardDefinitions"/>
</Unit2>
</Units>
</ProjectOptions>
<CompilerOptions>

View File

@ -47,12 +47,17 @@ begin
if Code=nil then
raise Exception.Create('loading failed '+Filename);
// fix constants
if not CodeToolBoss.FixForwardDefinitions(Code) then begin
if not CodeToolBoss.FixAllAliasDefinitions(Code) then begin
writeln('FixAllAliasDefinitions failed');
exit;
end;
// fix constants
{if not CodeToolBoss.FixForwardDefinitions(Code) then begin
writeln('FixForwardDefinitions failed');
exit;
end;}
// write the new source:
writeln('-----------------------------------');
writeln(Code.Source);

View File

@ -26,6 +26,10 @@ const EndValue = TMyInteger(1);
type
TMyInteger = longint;
PMyRecord = ^TMyRecord;
TMyFunc = procedure(i: integer);
MyNilFunc = TMyFunc(0);
Func2 = MyNilFunc;
Func3 = Func2;
implementation