[fpc-devel] mantis 0038496 custom variants and documentation
Marco van de Voort
fpc at pascalprogramming.org
Sun May 30 00:53:42 CEST 2021
Before the 3.2.2 release I looked into mantis 0038496 and now I come
back to it.
I noticed that custom variants are completely undocumented, is this know
(IOW should I file a bug?). What I wanted to look up are the rules for
implementing binaryop, since that is where the problem is.
The bug is for the following code:
{$ifdef fpc}
{$mode delphi}
{$else}
{$apptype console}
{$endif}
uses variants,fmtbcd;
var
fBCD1: TBcd;
V1, V2, V3:Variant;
L1: Integer;
begin
L1:=123;
fBCD1:=1234.345;
V1:=123;
V2:=VarFmtBCDCreate(fBCD1);
V3:=V1 + V2;
writeln(v3);
readln;
end.
The addition finally ends up in TFMTBcdFactory.BinaryOp which is
declared as follows
procedure TFMTBcdFactory.BinaryOp(var Left: TVarData; const Right:
TVarData; const Operation: TVarOp);
i.e. not a 3 operand action, but a two operand. This probably means
that in the case of v3:=v1+v2 this is encoded as v1:=v1,v2,add,
modifying V1.
The fmtbcd binaryop code however says that the left type (integer) is
not either double or a a FMTBCD custom variant and thus throws an exception.
I think it is allowed to change the result type of the variant passed in
binaryop(), but am not 100% sure, and also not sure if there are other
things to keep an eye for (e.g. finalization of the existing value).
Does anybody know open source custom variant examples other than fmtbcd ?
More information about the fpc-devel
mailing list