[fpc-pascal] Record operator for assignment
Mark Morgan Lloyd
markMLl.fpc-pascal at telemetry.co.uk
Fri Apr 28 14:09:38 CEST 2017
On 28/04/17 04:30, Ryan Joseph wrote:
> Instead of making constructors and doing busy work It would be nice if Free Pascal could let you assign records outside of type blocks like:
> rec := (x: 0; y: 0; z: 0);
> Why isn’t this possible btw? I saw some C++ code do this and it seems like an obvious solution that should have existed 20 years ago. The feature exists for type blocks so why not just enable it for other parts of code?
> I had another idea to make this a little simpler by using open arrays and operator overloading. The compiler doesn’t permit this however. Is it a bug, my code or just a limitation?
Curiously, I was up against exactly the same thing yesterday when
setting up an array for GetLongOpts() and a table for tokenising some
other text elements.
I ended up using a dynamic array and overloading + for the first of
those since it allowed me to do
with option do begin
name := 'block';
value := name[1] <===
end;
theOpts += option;
which wouldn't be available at compilation time, and also since
build-time directives could easily include/exclude options. For the
other one I used an array of records.
The problem with arrays of records as I see it is that the number of
elements has to be predefined:
const TopMatchItem= 10;
type TMatchItem= record
name: string;
field: TCSVField
end;
TAMatchItem= array[0..TopMatchItem] of TMatchItem;
const matchItems: TAMatchItem= ((name: ''; field: CSVBad),
(name: 'block'; field: CSVBlock),
..
Or from the FPC compiler itself:
ttokenarray=array[ttoken] of tokenrec;
ptokenarray=^ttokenarray;
..
const
arraytokeninfo : ttokenarray =(
(str:'' ;special:true ;keyword:[m_none];op:NOTOKEN),
..
Is there any way that the length of an array being used for that sort of
job can be defined by what's put into it, rather than having to be
predefined?
--
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk
[Opinions above are the author's, not those of his employers or colleagues]
More information about the fpc-pascal
mailing list