[fpc-devel] RFE: Static virtual variables

Alexander Klenin klenin at gmail.com
Wed Oct 15 16:24:10 CEST 2008


Currently this code:

type
  T1 = class
  public
    FStat: Integer; static;
  end;
  T2 = class(T1);
begin
  T1.FStat := 5;
  T2.FStat := 6;
  Writeln(T1.FStat, T2.FStat);
end.

Outputs '66'. That is (I think) as designed, but is IMO unfortunate ;-)
I'd like to propose a language extension where
adding 'virtual' modifier to a static field declaration, like this:

    FStat: Integer; static; virtual;

Creates one instance of the variable per class, including derived classes.
To implement it, compiler might either reserve a VMT slot for a pointer
to the variable instance or just assign a fixed offset from the VMT.

This would be very useful, for example, when creating object persistency
frameworks. Currently to associate a unique data instance with every
class I have to create a global hash table using class name as a key --
clearly not optimal solution.

-- 
Alexander S. Klenin
Insight Experts Ltd.



More information about the fpc-devel mailing list