On 15/12/2023 14:56, Adriaan van Os via fpc-pascal wrote:
I am puzzled by the syntax rule <method-list> in Chapter 6. Classes of
the FreePascal Language Reference (version 3.2.0)
Section 6.1 Class definitions has
method-definition = [ "CLASS" ] ( function-header |
procedure-header | constructor-header | destructor-header ) ";" [ ( (
( "virtual" | "dynamic" ) [ ";" "abstract" ] ) | "override" |
"message" ( integer-constant | string-constant ) ) ";" ] [
call-modifiers ";" ] .
Section 6.6.1 Declaration has:
method-definition = ( function-header | procedure-header |
constructor-header | destructor-header ) ";" method-directives .
method-directives = ( ( "virtual" | "dynamic" ) [ ";" "abstract" ]
| "reintroduce" ";" | "override" ";" | "message" constant-expression )
[ call-modifiers ";" ] .
2. "reintroduce" is in just one of the two definitions.
Another note: "reintroduce" is given as an alternative to "virtual;
[abstract;]".
However, a method can be reintroduced, and be virtual/abstract.
program Project1;{$Mode objfpc}
type
TFoo = class
procedure Bar; virtual; abstract;
end;
TFoo2 = class(TFoo)
procedure Bar; reintroduce; virtual; abstract;
end;
begin
end.
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal