Subj silently produces invalid codegen:
-------8<-------
type C = class end;
type H = class helper for C
        class procedure Bar;
end;
class procedure H.Bar;
begin
        writeln('H.Bar(self=', ClassName, ')')
end;

var Z: procedure of object;
begin
        Z := H.Bar; // BadCG: GARBAGE
        // H.Bar; // REJECTED
end.
-------8<-------

What is the consensus on:
A) fixing the codegen?
B) rejecting such access?

DCC does reject both statements, but it is not consistent with rejecting such 
qualifications everywhere.

Practically, allowing such qualifications could be useful for selecting a 
particular method. For example:
-------8<-------
type H2 = class helper (H) for C
        class procedure Bar;
end;
-------8<-------

Also, despite the comment in tcallnode.pass_1 saying:
        CGMessage(parser_e_no_category_as_types);
        { we get an internal error when trying to insert the hidden
        parameters in this case }
when I comment out the call to CGMessage, I get no ICE for
        H.Bar
only EXTDEBUG warnings:
Warning: Expectloc is not set in firstpass: calln
Warning: ExpectLoc is not set before secondpass: calln
Warning: Location (LOC_VOID) not equal to expectloc (LOC_INVALID): calln
and invalid codegen.

--
βþ
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to