{$modeswitch nestedprocvars}
type
intfunctor = function(x: integer): integer is nested;
function compose(f, g: intfunctor): intfunctor;
function h(x: integer): integer;
begin
h := f(g(x))
end;
begin
compose := intfunctor(@h)
end;
function dbl(x: integer): integer;
begin
dbl := x * 2
end;
function square(x: integer): integer;
begin
square := x * x
end;
begin
write(compose(@dbl, @square)(5))
end.
eyRtb2Rlc3dpdGNoIG5lc3RlZHByb2N2YXJzfSAgCnR5cGUKICBpbnRmdW5jdG9yID0gZnVuY3Rpb24oeDogaW50ZWdlcik6IGludGVnZXIgaXMgbmVzdGVkOwoKZnVuY3Rpb24gY29tcG9zZShmLCBnOiBpbnRmdW5jdG9yKTogaW50ZnVuY3RvcjsKICBmdW5jdGlvbiBoKHg6IGludGVnZXIpOiBpbnRlZ2VyOwogIGJlZ2luCiAgICBoIDo9IGYoZyh4KSkKICBlbmQ7CmJlZ2luCiAgY29tcG9zZSA6PSBpbnRmdW5jdG9yKEBoKQplbmQ7CgpmdW5jdGlvbiBkYmwoeDogaW50ZWdlcik6IGludGVnZXI7CmJlZ2luCiAgZGJsIDo9IHggKiAyCmVuZDsKCmZ1bmN0aW9uIHNxdWFyZSh4OiBpbnRlZ2VyKTogaW50ZWdlcjsKYmVnaW4KICBzcXVhcmUgOj0geCAqIHgKZW5kOwoKYmVnaW4KICB3cml0ZShjb21wb3NlKEBkYmwsIEBzcXVhcmUpKDUpKQplbmQu