[fpc-pascal] Property with no default value
Michael Van Canneyt
michael.vancanneyt at wisa.be
Mon Apr 18 09:27:01 CEST 2005
On Mon, 18 Apr 2005, Michalis Kamburelis wrote:
> Hi
>
> While converting some Delphi project to Lazarus I noticed that in FPC RTTI
> there is no way to mark a property as having *no* default value. This
> particular Delphi project depends on it (it relies on the fact that when
> saving some object to the stream, some of the properties will *always* be
> saved in the stream (this way it knows that "Set" methods of these properties
> will *always* be called when this object will be read from the stream)).
>
> Looking at FPC typinfo unit, and implementation of TWriter class, and
> reaction on 'nodefault' directive in compiler/pdecvar.pas, there is no
> equivalent possibility in FPC. Every property has "implicit" default of false
> / 0 / [] / #0 etc. This means that I can never guarantee that when TWriter
> writes an object with e.g. some boolean property, it will *always* write that
> boolean property value, regardless of it's value (whether it's true or
> false).
>
> The question is: did FPC decided to not implement this ?
No, just there wasn't time yet.
> Or is it just not
> done yet ? In case it's planned to do this in FPC in a Delphi-compatible way,
> below is 1-paragraph description how it's done in Delphi (I don't describe
> here Delphi's implementation, only visible interface, so I guess that FPC
> devels may read this without any legal concerns :)
>
> Delphi uses special value for TPropInfo.Default field: $80000000. It's used
> only when TPropInfo.Kind is one of tkInteger, tkChar, tkEnumeration, tkSet
> (in case of FPC this should also include tkBool). Then when TPropInfo.Default
> of this property is $80000000, the TWriter will always write this property
> value to the stream. The funny consequence is that an integer property with a
> "default $80000000" will always be saved to a stream, even if it doesn't have
> to be. So this is not very elegant solution from Borland (some field in
> TPropInfo like IsDefault would be better), but it's probably too late to
> change such things now, even for Borland, not to mention FPC if it tries to
> keep typinfo unit absolutely compatible.
I think we'll change the propinfo, because that is the proper solution.
The Borland way is very messy indeed.
But this will be after 2.0, unless you can send a patch.
Michael.
More information about the fpc-pascal
mailing list