OSDN Git Service

* 1aexcept.adb, 1aexcept.ads, 1ic.ads, 1ssecsta.adb,
[pf3gnuchains/gcc-fork.git] / gcc / ada / validsw.adb
1 ------------------------------------------------------------------------------
2 --                                                                          --
3 --                         GNAT COMPILER COMPONENTS                         --
4 --                                                                          --
5 --                              V A L I D S W                               --
6 --                                                                          --
7 --                                 B o d y                                  --
8 --                                                                          --
9 --          Copyright (C) 2001-2002 Free Software Foundation, Inc.          --
10 --                                                                          --
11 -- GNAT is free software;  you can  redistribute it  and/or modify it under --
12 -- terms of the  GNU General Public License as published  by the Free Soft- --
13 -- ware  Foundation;  either version 2,  or (at your option) any later ver- --
14 -- sion.  GNAT is distributed in the hope that it will be useful, but WITH- --
15 -- OUT ANY WARRANTY;  without even the  implied warranty of MERCHANTABILITY --
16 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
17 -- for  more details.  You should have  received  a copy of the GNU General --
18 -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
19 -- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
20 -- MA 02111-1307, USA.                                                      --
21 --                                                                          --
22 -- GNAT was originally developed  by the GNAT team at  New York University. --
23 -- Extensive contributions were provided by Ada Core Technologies Inc.      --
24 --                                                                          --
25 ------------------------------------------------------------------------------
26
27 with Opt; use Opt;
28
29 package body Validsw is
30
31    ----------------------------------
32    -- Reset_Validity_Check_Options --
33    ----------------------------------
34
35    procedure Reset_Validity_Check_Options is
36    begin
37       Validity_Check_Copies         := False;
38       Validity_Check_Default        := True;
39       Validity_Check_Floating_Point := False;
40       Validity_Check_In_Out_Params  := False;
41       Validity_Check_In_Params      := False;
42       Validity_Check_Operands       := False;
43       Validity_Check_Returns        := False;
44       Validity_Check_Subscripts     := False;
45       Validity_Check_Tests          := False;
46    end Reset_Validity_Check_Options;
47
48    ---------------------------------
49    -- Save_Validity_Check_Options --
50    ---------------------------------
51
52    procedure Save_Validity_Check_Options
53      (Options : out Validity_Check_Options)
54    is
55       P : Natural := 0;
56
57       procedure Add (C : Character; S : Boolean);
58       --  Add given character C to string if switch S is true
59
60       procedure Add (C : Character; S : Boolean) is
61       begin
62          if S then
63             P := P + 1;
64             Options (P) := C;
65          end if;
66       end Add;
67
68    --  Start of processing for Save_Validity_Check_Options
69
70    begin
71       for K in Options'Range loop
72          Options (K) := ' ';
73       end loop;
74
75       Add ('n', not Validity_Check_Default);
76
77       Add ('c', Validity_Check_Copies);
78       Add ('f', Validity_Check_Floating_Point);
79       Add ('i', Validity_Check_In_Params);
80       Add ('m', Validity_Check_In_Out_Params);
81       Add ('o', Validity_Check_Operands);
82       Add ('r', Validity_Check_Returns);
83       Add ('s', Validity_Check_Subscripts);
84       Add ('t', Validity_Check_Tests);
85    end Save_Validity_Check_Options;
86
87    ----------------------------------------
88    -- Set_Default_Validity_Check_Options --
89    ----------------------------------------
90
91    procedure Set_Default_Validity_Check_Options is
92    begin
93       Reset_Validity_Check_Options;
94       Set_Validity_Check_Options ("d");
95    end Set_Default_Validity_Check_Options;
96
97    --------------------------------
98    -- Set_Validity_Check_Options --
99    --------------------------------
100
101    --  Version used when no error checking is required
102
103    procedure Set_Validity_Check_Options (Options : String) is
104       OK : Boolean;
105       EC : Natural;
106
107    begin
108       Set_Validity_Check_Options (Options, OK, EC);
109    end Set_Validity_Check_Options;
110
111    --  Normal version with error checking
112
113    procedure Set_Validity_Check_Options
114      (Options  : String;
115       OK       : out Boolean;
116       Err_Col  : out Natural)
117    is
118       J : Natural;
119       C : Character;
120
121    begin
122       Reset_Validity_Check_Options;
123
124       J := Options'First;
125       while J <= Options'Last loop
126          C := Options (J);
127          J := J + 1;
128
129          --  Turn on validity checking (gets turned off by Vn)
130
131          Validity_Checks_On := True;
132
133          case C is
134
135             when 'c' =>
136                Validity_Check_Copies         := True;
137
138             when 'd' =>
139                Validity_Check_Default        := True;
140
141             when 'f' =>
142                Validity_Check_Floating_Point := True;
143
144             when 'i' =>
145                Validity_Check_In_Params      := True;
146
147             when 'm' =>
148                Validity_Check_In_Out_Params  := True;
149
150             when 'o' =>
151                Validity_Check_Operands       := True;
152
153             when 'r' =>
154                Validity_Check_Returns        := True;
155
156             when 's' =>
157                Validity_Check_Subscripts     := True;
158
159             when 't' =>
160                Validity_Check_Tests          := True;
161
162             when 'C' =>
163                Validity_Check_Copies         := False;
164
165             when 'D' =>
166                Validity_Check_Default        := False;
167
168             when 'I' =>
169                Validity_Check_In_Params      := False;
170
171             when 'F' =>
172                Validity_Check_Floating_Point := False;
173
174             when 'M' =>
175                Validity_Check_In_Out_Params  := False;
176
177             when 'O' =>
178                Validity_Check_Operands       := False;
179
180             when 'R' =>
181                Validity_Check_Returns        := False;
182
183             when 'S' =>
184                Validity_Check_Subscripts     := False;
185
186             when 'T' =>
187                Validity_Check_Tests          := False;
188
189             when 'a' =>
190                Validity_Check_Copies         := True;
191                Validity_Check_Default        := True;
192                Validity_Check_Floating_Point := True;
193                Validity_Check_In_Out_Params  := True;
194                Validity_Check_In_Params      := True;
195                Validity_Check_Operands       := True;
196                Validity_Check_Returns        := True;
197                Validity_Check_Subscripts     := True;
198                Validity_Check_Tests          := True;
199
200             when 'n' =>
201                Validity_Check_Copies         := False;
202                Validity_Check_Default        := False;
203                Validity_Check_Floating_Point := False;
204                Validity_Check_In_Out_Params  := False;
205                Validity_Check_In_Params      := False;
206                Validity_Check_Operands       := False;
207                Validity_Check_Returns        := False;
208                Validity_Check_Subscripts     := False;
209                Validity_Check_Tests          := False;
210                Validity_Checks_On            := False;
211
212             when ' ' =>
213                null;
214
215             when others =>
216                OK      := False;
217                Err_Col := J - 1;
218                return;
219          end case;
220       end loop;
221
222       OK := True;
223       Err_Col := Options'Last + 1;
224    end Set_Validity_Check_Options;
225
226 end Validsw;