[fpc-pascal]Minimum size of parameters

Jonas Maebe jonas at zeus.rug.ac.be
Thu Dec 6 18:34:00 CET 2001

On donderdag, december 6, 2001, at 05:42 , Aitor Santamaria Merino wrote:

> This would be, then
>      Pt: Procedure (args: array of const);
>      Arg: args;
> END;
> right?

I suppose you mean "args: array of const". But that won't work, an 
"array of const" can only be an argument, not a variable type. I also 
didn't realise you wanted to store the arguments together with the 
procedure to call, because in that case you can't use an array of const. 
You'll have to create your own variant type (FCP variant support isn't 
complete yet), like this:

{$mode objfpc}

   tmyvariant = record
     case typ: longint of
       0: (i: integer);
       1: (s: string);

   tproccallrec = record
     pt: procedure (const args: array of tmyvariant);
     args: array of tmyvariant;

procedure test(const a: array of tmyvariant);

   pcr: tproccallrec;
   v: tmyvariant;
   pcr.pt := @test;
   v.typ := vtInteger; { you can also create your own constants for
denoting the type, but since these already exist... }
   v.i := 5;
   pcr.args[0] := v;
   v.typ := vtString;
   v.s := 'test';
   pcr.args[1] := v;

Note however that

a) you need a 1.1 snapshot to compile this
b) it DOES NOT WORK :)

The reason for b is that there are apparently bugs in the compiler for a 
conversion of a "dynamic array" to an open array...

>> I suppose this is all explained in the reference manual, though I'm 
>> not sure.
> I coulnd't find it as a first glance... (I looked at the open arrays 
> section, although my compiler version is still rather outdated...

An "array of const" is something completely different from an "open 
array" (and both are different from a "dynamic array"). I assume "array 
of const" will only be explained in the 1.1 manual.


More information about the fpc-pascal mailing list