[fpc-devel] csInlin how is it suppossed to work?

Martin lazarus at mfriebe.de
Sun Aug 16 20:20:19 CEST 2009


Paul Ishenin wrote:
> Martin wrote:
>   
>> http://bugs.freepascal.org/view.php?id=14364  saving frames with 
>> anchorsides (or rather the inability of doing so)  
>>
>>     
> Either we do something wrong with csInline flag or it is a but in the FPC.
>
> Best regards,
> Paul Ishenin.
>   
Yes it is strange.....

I am down to
  rtl\objpas\classes\writer.inc
  line 599

   if (FAncestor is TComponent) then
       begin
       FAncestors:=TStringList.Create;
       if csInline in TComponent(FAncestor).ComponentState then
         FRootAncestor := TComponent(FAncestor);
       TComponent(FAncestor).GetChildren(@AddToAncestorList,FRootAncestor);
       FAncestors.Sorted:=True;
       end;
    try
      Component.GetChildren(@WriteComponent, FRoot);


A Frame has csInline => so Frame.Getchildren is called with 
FRootAncestor (which is the frame itself?)

But ALL the children are added to the AnchestorList => is that supposed 
to be?

Because then later:
  procedure TWriter.WriteComponent(Component: TComponent);
      DetermineAncestor(Component);

will find a random children there and that seems wrong.


Martin





More information about the fpc-devel mailing list