+ --
+ -- The flag Body_Optional indicates that the call is for an instance
+ -- that precedes the current instance in the same declarative part.
+ -- This call is needed when instantiating a nested generic whose body
+ -- is to be found in the body of an instance. Normally we instantiate
+ -- package bodies only when they appear in the main unit, or when their
+ -- contents are needed for a nested generic G. If unit U contains several
+ -- instances I1, I2, etc. and I2 contains a nested generic, then when U
+ -- appears in the context of some other unit P that contains an instance
+ -- of G, we compile the body of I2, but not that of I1. However, when we
+ -- compile U as the main unit, we compile both bodies. This will lead to
+ -- lead to link-time errors if the compilation of I1 generates public
+ -- symbols, because those in I2 will receive different names in both
+ -- cases. This forces us to analyze the body of I1 even when U is not the
+ -- main unit. We don't want this additional mechanism to generate an error
+ -- when the body of the generic for I1 is not present, and this is the
+ -- reason for the presence of the flag Body_Optional, which is exchanged
+ -- between the current procedure and Load_Parent_Of_Generic.