The compiler creates at least two data sections for any package spec/body combination: ADA#GLOBAL and ADA#OWN. The first data section will contain all elaboration flags for package level sub-programs, as well as any package specification variables. The second data section will contain any global variables, local to the package body. The compiler also uses two elaboration routines, to elaborate this package spec/body: $$DECLARE and $$BODY. The first elaboration routine will initialize all the package specification variables and zero out all of the sub-program elaboration flags. The second routine will initialize all package body variables and set the sub-program elaboration flags. When package spec/body are compiled with "-SE", all elaboration checks for the current module are suppressed, meaning that if package A was compiled with "-SE" and package B called a sub-program in A, then B would not check the elaboration flag for the corresponding sub-program in A. If the librarian is used to link, it will determine the "closure" of the main compilation unit and generate .etof, which will contain a code section, which will contain calls to the ordered elaboration routines for all packages specifications/bodies. When the compiler generates code to check sub-program elaboration, all that is performed is a check of the elaboration flag, which is a direct data reference. Using the 1750a expanded memory runtimes, this check can be problematic, due to a limitation that data references have to be in the same Address State. This limitation is not present in the other targets supported by TADS.
Customer Quote:
"DDC-I has a good solution for us and your willingness to get down to the issues and help us get what we need has made it a clear choice."