From: Jeff Carter <jrcarter001@my-deja.com>
Subject: Instantiating a generic formal procedure with an access procedure value
Date: 1999/12/31
Date: 1999-12-31T00:00:00+00:00 [thread overview]
Message-ID: <84guh6$emh$1@nnrp1.deja.com> (raw)
Here's something that I haven't been able to figure out from the ARM.
No doubt I haven't looked in the right place yet.
Suppose I have a package that provides an unprotected structure
(normally this would be a generic package, but that's not important for
this example):
package S_U is
type Handle is limited private;
procedure Op (Item : in out Handle; Item : in Integer);
generic -- Iterate
with procedure Action
(Element : in out Integer; Continue : out Boolean);
procedure Iterate (Over : in out Handle);
private -- S_U
...
end S_U;
Suppose I now want to use this package to create a protected structure:
with S_U;
package S is
type Action_Ptr is access procedure
(Element : in out Integer; Continue : out Boolean);
protected type Handle is
procedure Op (Element : in Integer);
procedure Iterate (Action : in Action_Ptr);
private -- Handle
Data : S_U.Handle;
end Handle;
end S;
package body S is
protected body Handle is
procedure Op (Element : in Integer) is
begin -- Op
S_U.Op (Item => Data, Element => Element);
end Op;
procedure Iterate (Action : in Action_Ptr) is
procedure Local is new S_U.Iterate (Action => ???);
-- What do I use here?
begin -- Iterate
Local (Over => Data);
end Iterate;
end Handle;
end S;
Neither Action nor Action.all will compile here. The only thing I've
found that will compile is
procedure Iterate (...) is
procedure Dummy (Element : in out Integer; Continue : out Boolean) is
begin -- Dummy
Action (Element => Element, Continue => Continue);
end Dummy;
procedure Local is new S_U.Iterate (Action => Dummy);
begin -- Iterate
Local (Over => Data);
end Iterate;
Hopefully there's a way to avoid this extra procedure call.
--
Jeff Carter
"Now go away or I shall taunt you a second time."
-- Monty Python and the Holy Grail
Sent via Deja.com http://www.deja.com/
Before you buy.
next reply other threads:[~1999-12-31 0:00 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
1999-12-31 0:00 Jeff Carter [this message]
2000-01-03 0:00 ` Instantiating a generic formal procedure with an access procedure value Tucker Taft
2000-01-04 0:00 ` Jeff Carter
2000-01-04 0:00 ` Tucker Taft
2000-01-05 0:00 ` Jeff Carter
2000-01-05 0:00 ` Ed Falis
2000-01-12 0:00 ` Jeff Carter
2000-01-12 0:00 ` Simon Wright
2000-01-13 0:00 ` Jeff Carter
2000-01-13 0:00 ` Tucker Taft
2000-01-14 0:00 ` Jeff Carter
2000-01-13 0:00 ` Simon Wright
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox