mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-19 11:19:15 +02:00
codetools: improved FixAliasDefinitions for type casts
git-svn-id: trunk@12121 -
This commit is contained in:
parent
d95149bc3a
commit
6808002ecd
@ -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';
|
||||
|
@ -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>
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user