[fpc-pascal] compile time init'ing records
Ryan Joseph
ryan at thealchemistguild.com
Fri Apr 13 05:02:49 CEST 2018
It’s a real pain setting default values for records in Pascal at compile time. Every other language seems to get this right but it’s a constant issue in Pascal. The new "class operator Initialize” feature goes a long way in helping this but it’s still a little annoying that the function is down in the implementation and taking up space plus requires scrolling etc… Static class methods help also but again the function is detached from the record and needs to be called manually.
Why can’t we just do something simple like this? A simple meta programming hack to dump the “default” section at the start of the scope the variable is declared in so we don’t have to do this ourselves every time. It probably breaks down for init’ing records but for compiler types it seems pretty simple.
type
TMyRecord = record
public
i: integer;
s: string;
default
i := 1;
s := 'foo';
end;
var
myRec: TMyRecord; default; // if no default section is specified then use FillChar(this, sizeof(this), 0);
begin
// the compiler copy/pastes the variables "default" section at start of the scope
myRec.i := 1;
myRec.s := 'foo';
end;
Regards,
Ryan Joseph
More information about the fpc-pascal
mailing list