Behind the scene, the Closures implementation declares classes and interfaces.
And, because I strongly believe it to be conceptually the right way, such
entities are declared in the innermost routine scope. For example,
-------8<-------
procedure Foo;
type Local = reference to procedure;
begin
end;
-------8<-------
is essentially
-------8<-------
procedure Foo;
type Local = interface
procedure Invoke;
end;
begin
end;
-------8<-------
FPC does not allow the user to declare local classes/interfaces†, and this
shall remain so. However, in order to /internally/ support such entities, a
couple of changes is required. I have those implemented, but, firstly, let us
establish that the team is on board with the general idea.
† No idea why, but generic local classes/interfaces are accepted. However, FPC
instantiates them in the global scope, which results in this wonderful bug:
-------8<-------
function Foo: TClass;
type Cls<T> = class end;
begin
result := Cls<Char>
end;
function Bar: TClass;
type Cls<T> = class end;
begin
result := Cls<Char>
end;
begin
// BUG: 'FALSE'
writeln( Foo() <> Bar() )
end.
-------8<-------
--
βþ
_______________________________________________
fpc-devel maillist - [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel