!standard 10.1.1(1) 02-05-03 AC95-00033/01 !class amendment 02-05-03 !status received no action 02-05-03 !subject Child packages of nested packages !summary !appendix !topic : Child packages of nested packages !reference : RM95-10.1.1(1) !from : Oliver Kellogg 02-04-25 !keywords : nested package, child package, parent unit !discussion : For Ada0Y I propose to permit child packages not only for library level packages, but also for packages nested in library level packages. This would provide for better integration between nested packages and child packages. The two constructs currently exist side by side without the possibility of mixing them. A motivation for using nested packages instead of child packages is when the library level package depends on declarations in its subsidiary packages. Child packages are not suitable for the subsidiary packages as the parent package may not "with" its own child packages. Nevertheless it should be possible to extend any of these interdependent packages using child packages. A specific case where it is necessary to extend only a nested package via a child package is the CORBA IDL to Ada mapping. Example: module Outer { interface Inner { typedef short inner_t; void mymethod (); }; typedef Inner::inner_t outer_t; }; Here the interface Inner must inevitably be mapped to a nested package as a later declaration in package Outer depends on a declaration from Inner. However, the interface Inner also requires an implementation. According to the current IDL to Ada mapping, this implementation should be hosted in a child package, Outer.Inner.Impl. This child package is human written while the code for Outer (and thus Inner) is generated by an IDL to Ada translator. Further, according to CORBA it is possible to bind a main program as a pure proxy (client), i.e. without the Outer.Inner.Impl child package. Outer.Inner must therefore not depend on the existence of Outer.Inner.Impl. Visibility: A child package should have visibility of the private parts of its ancestors, be they child packages or nested packages.