I've run up against a problem with reusing the GNAT trees: Apparently during semantic analysis entity names are expanded to their fully qualified names in the tree.
For example, when compiling the following file with the node for System already installed by a previous compilation, -- file: ext.ads with System; procedure Ext (Addr : System.Address); I get the following error from sem_ch8.adb Find_Expanded_Name during semantic analysis of the above System.Address, ext.ads:3:29: "Address" is not a visible entity of "System" This is because in sem_ch8.adb:4482, if No (Id) or else Chars (Id) /= Chars (Selector) then ... the second part of the condition becomes true as Chars(Id) is "system__address" [and Chars(Selector) is "address"]. When compiling the same file afresh without preinstalled nodes, Chars(Id) is just "address" and all is fine. Oliver On 2009-04-12 at 19:29 +0200, Oliver Kellogg wrote: > Picking up an old thread, > http://gcc.gnu.org/ml/gcc/2003-03/msg00281.html > > > On Tue, 4 Mar 2003, Geert Bosch <bosch at gnat dot com> wrote: > > [...] > > Best would be to first post a design overview, > > before doing a lot of work in order to prevent spending time > > on implementing something that may turn out to have fundamental > > problems. > > I've done a little experimenting to get a feel for this. > > I've looked at the work done toward the GCC compile server but > decided that I want to concentrate on GNAT trees (whereas the > compile server targets the GNU trees.) > > Also I am aiming somewhat lower - not making a separate compile > server process but rather extending gnat1 to handle multiple > files in a single invocation. > > The current GNAT code makes a strong assumption that there be > only one main unit, and this Main_Unit be located at index 0 of > Lib.Units.Table (see procedure Lib.Load.Load_Main_Source). > > I am currently looking at having each main unit supplied on > the gnat1 command line overwrite the Main_Unit in the Units table. > > What do you think of this approach? > > The attached patch sets the stage for passing multiple source > files to a single gnat1 invocation. (Beware, this is a rough cut. > Best use "svn diff --diff-cmd diff -x -uw" after applying as > there are many changes that only affect indentation.) > > Thanks, > > Oliver > >