Re: Interfaces and private types
- From: Philippe Tarroux <philippe.tarroux@xxxxxxxx>
- Date: Tue, 29 Jan 2008 10:35:40 +0100
Randy Brukardt wrote:
Specifically, it violates 7.3(7.3/2): "the partial view shall be aAs it is written the compiler i use doesn't mention any error and i interpreted this construct as legal because :
descendant of an interface type (see 3.9.4) if and only if the full type is
a descendant of the interface type."
As written, this is illegal because type T does not have the interface Int.
1/ the interface is synchronized thus allowing to derive concurrent or non concurrent types
2/ The partial view is a descendant of the interface type
3/ The full view precises that the partial view correspond to a concurrent type but hides this detail to the user
Writing, as you propose
task type T is new Int with private;
tells the user that T is a concurrent type, what precisely i wanted to avoid.
Assuming that this is just a mistake in your interface and you meantBut the overriding procedure Init needs to be redefined both as an entry of T and as a procedure. I assume that when i will be trying to call O.Init with O a type T task there will be a mistake due to the double definition.
task type T is new Int with
then your program is legal, and you should complain your your compiler
vendor about the bug. In no case should there be an error on the declaration
of the object, so that makes it pretty clear that there is a compiler bug.
You could work around the bug with something like:
package Test_Interfaces is
type Int is synchronized interface;
procedure Init (I : in out Int) is abstract;
type T is new Int with private;
overriding procedure Init (I : in out T);
private
task type T is new Int with
entry Init;
end T;
end Test_Interfaces;
and then have
procedure Init (I : in out T) is
begin
I.Init;
end Init;
in the body. (But note that this runs into a known bug in the Ada standard,
so it isn't clear that the code will work right.)
But, anyway, thanks a lot for the comments. I am waiting for comments from the guys who are in charge of the gnat compiler.
Philippe Tarroux
.
- Follow-Ups:
- Re: Interfaces and private types
- From: Randy Brukardt
- Re: Interfaces and private types
- From: Georg Bauhaus
- Re: Interfaces and private types
- References:
- Interfaces and private types
- From: Philippe Tarroux
- Re: Interfaces and private types
- From: Randy Brukardt
- Interfaces and private types
- Prev by Date: Re: ANN: GNAT/GPL Solaris 10: 2007-solaris-x86
- Next by Date: Re: Allocators and memory reclamation
- Previous by thread: Re: Interfaces and private types
- Next by thread: Re: Interfaces and private types
- Index(es):
Relevant Pages
|