[fpc-devel] Thoughts on being able to declare "pointer-to-type" parameters directly in method signatures?
Bernd Oppolzer
bernd.oppolzer at t-online.de
Mon Jun 10 15:25:43 CEST 2019
FYI:
I thought a little bit more about your answer and decided to try it with
my Stanford compiler;
in fact, your pointer parameter is a VALUE parameter, and because it is
copied into the procedure's
local stack, it should be treated much like a local variable IMO, and
there it is indeed possible to use
the ^basetype notation and all the other type notations, too. Therefore
IMO it should also be possible
to define new types with value parameters, be it useful or not. The
normal Pascal assignment
rules apply (parameter passing to value parameters is much like normal
assignment, with some
tolerance regarding types).
So I decided to allow it, but for value parameters only. For var and
const parameter, different rules
apply, because there we have conformant strings for example (strings
without length) etc.;
so I call a different parsing function, when I have a var or const
keyword. Without var or const,
I call the same parsing function for types which I call in var
declarations etc, too.
So now the following program compiles (and runs) without problem:
program TESTPTR ( OUTPUT ) ;
//**********************************************************************
//$A+
//**********************************************************************
type CFORW = record
SOMEV : INTEGER ;
C : -> CHAIN ;
end ;
CHAIN = record
N : INTEGER ;
NEXT : -> CHAIN ;
end ;
var K : -> CHAIN ;
X : CFORW ;
procedure PRINT ( X : -> CHAIN ) ;
begin (* PRINT *)
while X <> NIL do
begin
WRITELN ( X -> . N ) ;
X := X -> . NEXT
end (* while *)
end (* PRINT *) ;
begin (* HAUPTPROGRAMM *)
NEW ( K ) ;
X . C := K ;
K -> . N := 1 ;
NEW ( K -> . NEXT ) ;
K := K -> . NEXT ;
K -> . N := 2 ;
NEW ( K -> . NEXT ) ;
K := K -> . NEXT ;
K -> . N := 3 ;
K -> . NEXT := NIL ;
PRINT ( X . C ) ;
end (* HAUPTPROGRAMM *) .
- I use a different notation for the pointer symbol; ^ is possible, too
- there is no declaration for the -> CHAIN pointer type, nowhere
- it is even possible to use it in the CFORW record, prior to the
definition of CHAIN
(those forward references are checked later)
Kind regards
Bernd
Am 10.06.2019 um 03:26 schrieb Ben Grasset:
>
> On Sun, Jun 9, 2019 at 8:37 PM Bernd Oppolzer
> <bernd.oppolzer at t-online.de <mailto:bernd.oppolzer at t-online.de>> wrote:
>
> I am still not sure, if it is a good idea, because this would be
> an exception for pointer types;
> other type constructors like arrays, records, enumerations etc.
> are still not supported ...
> and it does not make sense IMO to support them.
>
>
> People keep saying this as though the *entire concept *of adding even
> the smallest new thing syntactically to FPC is a completely new idea
> (which it obviously is not.)
> Adding this would *not *be any kind of notable "exception" in any
> practical sense, unless you're holding FPC to a purely fictional
> standard for Pascal
> that it does not actually currently follow in reality.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20190610/efb46327/attachment.html>
More information about the fpc-devel
mailing list