> The next paragraph (9.5.1(2)) says that it
> is illegal to write components of a protected object in a protected
> function.
> His code does so in four places. Thus it is out and out illegal. It doesn't
> compile with GNAT, but it does compile with at least one other compiler I
> tried. (And presumably the one he is using as well).

The Rational Apex compiler also correctly flags the four violations. But
if he's using the compiler I think he is, the solution is to stay away
from "single_protected_declarations", ie, use only a protected type for
declaring a protected object; for some reason this avoids the bug. Thus,
after making the following changes, the compiler should correctly flag
the illegal assignments (the added word TYPE is capitalized below):

    protected TYPE Protected_Collection_TYPE is --> make into type
        function Destroy return natural;
        procedure Dispose_Item(the_Pointer : in out Pointer);
        function New_Item return Pointer;
        function Size return natural;
        garbage_Collector       : Pointer := null;
        garbage_Collector_Count : natural := 0;
    end Protected_Collection;

    Protected_Collection : Protected_Collection_TYPE; --> use the type

C. Daniel Cooper ==========v=================v=======================v
Adv Computing Technologist | processes       | All opinions are mine |
206-655-3519               | + architectures | and may not represent |
[log in to unmask]  |   = systems     | those of my employer. |