File: gnatpp-processing-prepare_context.adb

package info (click to toggle)
asis 2019-5
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 13,848 kB
  • sloc: ada: 156,772; makefile: 296; sh: 81; xml: 48; csh: 10
file content (88 lines) | stat: -rw-r--r-- 3,912 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
------------------------------------------------------------------------------
--                                                                          --
--                            GNATPP COMPONENTS                             --
--                                                                          --
--    G N A T P P . P R O C E S S I N G . P R E P A R E _ C O N T E X T     --
--                                                                          --
--                                 B o d y                                  --
--                                                                          --
--                     Copyright (C) 2004-2013, AdaCore                     --
--                                                                          --
-- GNATPP is free software; you can redistribute it  and/or modify it under --
-- terms of the  GNU General Public License as published  by the Free Soft- --
-- ware  Foundation;  either version 2,  or (at your option) any later ver- --
-- sion.  GNATPP is  distributed in the  hope that it will  be  useful, but --
-- WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABI- --
-- LITY or  FITNESS  FOR A  PARTICULAR  PURPOSE. See the GNU General Public --
-- License  for more details. You  should  have  received a copy of the GNU --
-- General Public License  distributed with GNAT; see file COPYING. If not, --
-- write to the Free Software Foundation,  51 Franklin Street, Fifth Floor, --
-- Boston, MA 02110-1301, USA.                                              --
--                                                                          --
-- GNATPP is maintained by AdaCore (http://www.adacore.com).                --
--                                                                          --
------------------------------------------------------------------------------

--  This version of Prepare_Context is supposed to be used for the non
--  GNSA-based gnatpp version

with Asis.Ada_Environments;    use Asis.Ada_Environments;
with Asis.Errors;
with Asis.Exceptions;          use Asis.Exceptions;

with ASIS_UL.Common;
with ASIS_UL.Compiler_Options; use ASIS_UL.Compiler_Options;

separate (GNATPP.Processing)
procedure Prepare_Context (SF : SF_Id; Success : out Boolean) is
   use type Asis.Errors.Error_Kinds;
begin

   Compile
     (new String'(Source_Name (SF)),
      Arg_List.all,
      Success,
      GCC => ASIS_UL.Common.Gcc_To_Call);

   if Success then

      Associate (The_Context => The_Context,
                 Name        => "",
                 Parameters  =>
                  "-C1 " & To_Wide_String (Suffixless_Name (SF) & ".adt"));

      Open (The_Context);
   end if;

exception
   when Version_Mismatch =>
      raise;

   when Ex : ASIS_Failed =>
      --  The only known situation when we can not open a C1 context for
      --  newly created tree is recompilation of System (see D617-017)

      if Asis.Implementation.Status = Asis.Errors.Use_Error
        and then
         Asis.Implementation.Diagnosis = "Internal implementation error:"
         & " Asis.Ada_Environments.Open - System is recompiled"
      then
         Put (Standard_Error, "gnatpp: can not process redefinition of " &
                 "System in "& Source_Name (SF));
         New_Line (Standard_Error);
         Success := False;
      else
         Put (Standard_Error, "gnatpp: unexpected bug when opening a context");
         Put ("(" & Source_Name (SF) & ")");
         New_Line (Standard_Error);
         GNATPP.Output.Report_Unhandled_ASIS_Exception (Ex);
         raise Fatal_Error;
      end if;

   when Ex : others =>
      Put (Standard_Error, "gnatpp: unexpected bug when opening a context");
      Put ("(" & Source_Name (SF) & ")");
      New_Line (Standard_Error);
      GNATPP.Output.Report_Unhandled_Exception (Ex);
      raise Fatal_Error;
end Prepare_Context;