From: "andrew...@gmail.com" <andrew.shvets@gmail.com>
Subject: Re: "subprogram must not be deeper than access type"
Date: Mon, 5 Oct 2020 21:00:30 -0700 (PDT) [thread overview]
Message-ID: <3139cefa-f8e1-4fc1-be15-2615eeaa89fdn@googlegroups.com> (raw)
In-Reply-To: <rl96fk$sh2$1@gioia.aioe.org>
On Saturday, October 3, 2020 at 2:42:01 AM UTC-4, Dmitry A. Kazakov wrote:
> On 03/10/2020 06:39, andrew...@gmail.com wrote:
> > Hello,
> >
> > I'm trying my hand at a small rosettacode.org example:
> >
> > https://codeshare.io/an080j
> >
> > What I don't understand is when I'm creating the various packages to serve as handlers, I get the following compile-time errors:
> >
> > gprbuild : event_handlers_window.adb:13:03: instantiation error at gtk-handlers.ads:1039
> > event_handlers_window.adb:13:03: subprogram must not be deeper than access type
> > event_handlers_window.adb:14:03: instantiation error at gtk-handlers.ads:437
> > event_handlers_window.adb:14:03: subprogram must not be deeper than access type
> >
> > How am I making a subprogram deeper than an access type exactly?
> The access type to the handler function is declared at the library
> level. Your handler subprogram is declared inside the body of
> Event_Handlers_Window, which is one step deeper than the library level.
>
> You can:
>
> 1. Move the handler function into a package. A library package would be
> on the same level with the access type declaration. That is the
> recommended way.
>
> 2. You can circumvent accessibility checks by declaring a local access
> type to the function in the procedure (which would be same level) and
> then convert from this type to the handler type using
> Unchecked_Conversion. This is not recommended, obviously.
>
> 3. Specifically for delete and destroy events in GtkAda Contributions
> the package Gtk.Missed defines ready-to-use handlers as in the solution #1.
>
> --
> Regards,
> Dmitry A. Kazakov
> http://www.dmitry-kazakov.de
Hi Dmitry,
Thanks for writing back.
I guess I'm not sure what you mean by #1. The handler package contains another package, Callback. And the compiler never really gets to the methods (Destroy and Delete_Event), it stops when I try to create a new package from an existing one. Could you please show me an example of what you mean?
Also, I looked through the docs and couldn't find Gtk.Missed... did you mean some other method/package?
Thank you,
--Andrew
next prev parent reply other threads:[~2020-10-06 4:00 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-03 4:39 "subprogram must not be deeper than access type" andrew...@gmail.com
2020-10-03 6:41 ` Dmitry A. Kazakov
2020-10-06 4:00 ` andrew...@gmail.com [this message]
2020-10-06 6:08 ` Dmitry A. Kazakov
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox