Am 21.12.2020 um 16:22 schrieb Blaise--- via fpc-devel:
On 19.12.2020 16:51, Sven Barth wrote:
Considering that it's only intended for internal use, yes I'm aboard with that.

Here is the first change: http://hg.blaise.ru/public/fpc/rev/7c78bfdaed9a (attached).

Strictly speaking, some local classes and interfaces can be compiled without that -- the ICE 200204175 only occurs when they have their own entities such as nested classes (not used for Closures) and non-abstract methods:
-------8<-------
function Foo: TClass;
    type Local = class
        type Nested = class end;
        procedure Method;
    end;
    procedure Local.Method;
    begin
    end;
begin
    result := Local
end;

begin
    Foo
end.
-------8<-------

To observe the effect, one could temporarily use the second attached patch to force FPC to compile the above test case. The following internal names are generated for it:
VMT_$P$PROGRAM$_$FOO_$$_LOCAL // no change
VMT_$P$PROGRAM$_$FOO_$LOCAL_$__$$_NESTED // was: ICE
P$PROGRAM$_$FOO_$LOCAL_$__$$_METHOD // was: ICE
Please check that such names are in line with the intended format.

The format should indeed be okay. Applied in r47834.


I'd say in this case the bug is that the declaration of those two Cls<> types is allowed.

Looking at the excerpt from object_dec:
        { objects and class types can't be declared local }
        if not(symtablestack.top.symtabletype in [globalsymtable,staticsymtable,objectsymtable,recordsymtable]) and
           not assigned(genericlist) then
          Message(parser_e_no_local_objects);
"assigned(genericlist)" seems intentional. Maybe, it misses a check for generic instantiation

That might probably be a left over from old times when genericlist was a rather reliable check.

; however:

If I remember correctly *specializations* are already placed in the more nested scope if they use local types.

Judging solely by the internal names, that is not what happens.

or at least that was the plan

If you were to implement that, you would encounter the same ICE.

Could be that I only had intended to do that then, but hadn't yet found the time to indeed do so...

Regards,
Sven
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to