home *** CD-ROM | disk | FTP | other *** search
/ Geek Gadgets 1 / ADE-1.bin / ade-dist / gnat-2.06-src.tgz / tar.out / fsf / gnat / ada / back_end.adb < prev    next >
Text File  |  1996-09-28  |  4KB  |  96 lines

  1. ------------------------------------------------------------------------------
  2. --                                                                          --
  3. --                         GNAT COMPILER COMPONENTS                         --
  4. --                                                                          --
  5. --                            B A C K _ E N D                               --
  6. --                                                                          --
  7. --                                 B o d y                                  --
  8. --                                                                          --
  9. --                            $Revision: 1.14 $                             --
  10. --                                                                          --
  11. --           Copyright (c) 1992,1993,1994 NYU, All Rights Reserved          --
  12. --                                                                          --
  13. -- GNAT is free software;  you can  redistribute it  and/or modify it under --
  14. -- terms of the  GNU General Public License as published  by the Free Soft- --
  15. -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
  16. -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
  17. -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
  18. -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
  19. -- for  more details.  You should have  received  a copy of the GNU General --
  20. -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
  21. -- to the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. --
  22. --                                                                          --
  23. ------------------------------------------------------------------------------
  24.  
  25. --  Call the back end with all the information needed
  26.  
  27. with Elists;  use Elists;
  28. with Lib;     use Lib;
  29. with Namet;   use Namet;
  30. with Nlists;  use Nlists;
  31. with Sinput;  use Sinput;
  32. with Stringt; use Stringt;
  33. with System;  use System;
  34. with Atree;   use Atree;
  35. with Types;   use Types;
  36.  
  37. procedure Back_End is
  38.  
  39.    --  The File_Record type has a lot of components that are meaningless
  40.    --  to the back end, so a new record is created here to contain the
  41.    --  needed information for each file.
  42.  
  43.    type Needed_File_Info_Type is record
  44.       File_Name        : File_Name_Type;
  45.       First_Sloc       : Source_Ptr;
  46.       Last_Sloc        : Source_Ptr;
  47.       Num_Source_Lines : Nat;
  48.    end record;
  49.  
  50.    File_Info_Array :
  51.      array (Main_Unit .. Last_Unit) of Needed_File_Info_Type;
  52.  
  53.    procedure gigi (
  54.       gnat_root        : Int;
  55.       max_gnat_node    : Int;
  56.       number_name      : Nat;
  57.       nodes_ptr        : Address;
  58.       elists_ptr       : Address;
  59.       elmts_ptr        : Address;
  60.       names_ptr        : Address;
  61.       strings_ptr      : Address;
  62.       string_chars_ptr : Address;
  63.       list_headers_ptr : Address;
  64.       name_chars_ptr   : Address;
  65.       number_units     : Int;
  66.       file_info_ptr    : Address);
  67.  
  68.    pragma Import (C, gigi);
  69.  
  70.    S : Source_File_Index;
  71.  
  72. begin
  73.    for J in Main_Unit .. Last_Unit loop
  74.       S := Source_Index (J);
  75.       File_Info_Array (J).File_Name        := File_Name (S);
  76.       File_Info_Array (J).First_Sloc       := Source_Text (S)'First;
  77.       File_Info_Array (J).Last_Sloc        := Source_Text (S)'Last;
  78.       File_Info_Array (J).Num_Source_Lines := Num_Source_Lines (S);
  79.    end loop;
  80.  
  81.    gigi (
  82.       gnat_root        => Int (Cunit (Main_Unit)),
  83.       max_gnat_node    => Int (Last_Node_Id - First_Node_Id + 1),
  84.       number_name      => Name_Entries_Count,
  85.       nodes_ptr        => Nodes_Address,
  86.       elists_ptr       => Elists_Address,
  87.       elmts_ptr        => Elmts_Address,
  88.       names_ptr        => Name_Entries_Address,
  89.       strings_ptr      => Strings_Address,
  90.       string_chars_ptr => String_Chars_Address,
  91.       list_headers_ptr => Lists_Address,
  92.       name_chars_ptr   => Name_Chars_Address,
  93.       number_units     => Num_Units,
  94.       file_info_ptr    => File_Info_Array'Address);
  95. end Back_End;
  96.