[fpc-devel]A question about old style objects

Peter Vreman peter at freepascal.org
Mon Oct 29 09:56:36 CET 2001


> Hello all,
> I found in Russian-language forum (FPC community) a question about possibility to use
RTTI
with
> BP-style objects. First my idea was to answer "no" but I made a smallest test:
> 
> {$ifdef FPC}
> {$smartlink on}
> {$typeinfo off}
> {$endif}
> type
>  t1=object
>   constructor Create;
>   procedure Test;virtual;
>  end;
>  t2=object(t1)
>   procedure Test;virtual;
>  end;
> constructor t1.Create;
>  begin
>  end;
> procedure t1.Test;
>  begin
>   writeln('11111111111111111111111111');
>  end;
> procedure t2.Test;
>  begin
>   writeln('22222222222222222222222222');
>  end;
> type
>  p2=^t2;
> var
>  t:^t1;
> begin
>  t:=new(p2,create);
>  t^.Test;
> end.
> 
> I became very surprised when I looked into created .exe file and found in it
11111111111111111111111111 string.
> BP7, Delphi 3, Delphi 6 cutted unused t1.test method out from .exe, FPC 1.1 (and also VP
2.1) kept it in .exe.
> What is the mean, to keep unused BP-objects methods in .exe although old objects are not
designed for RTTI?
> Or FPC does support RTTI for these objects? Then, IMHO, it is a unnecessary feature
because then old-style
> objects will be useless (but in Borland products they are useful because allow to write
compact high-optimized
> applications; a good demonstration is KOL - free Key Object Library for Delphi).

The VMT of t2 contains a reference to the VMT of t1. And that one contains a reference to
t1.Test.

I don't know an easy solution to remove this kind of unused code. And IMHO it has a very
low priority to be solved.







More information about the fpc-devel mailing list