Mercurial > hg > CbC > CbC_gcc
comparison gcc/ada/libgnat/s-valuns.ads @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | |
children | 84e7813d76e9 |
comparison
equal
deleted
inserted
replaced
68:561a7518be6b | 111:04ced10e8804 |
---|---|
1 ------------------------------------------------------------------------------ | |
2 -- -- | |
3 -- GNAT COMPILER COMPONENTS -- | |
4 -- -- | |
5 -- S Y S T E M . V A L _ U N S -- | |
6 -- -- | |
7 -- S p e c -- | |
8 -- -- | |
9 -- Copyright (C) 1992-2017, 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 3, 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. -- | |
17 -- -- | |
18 -- As a special exception under Section 7 of GPL version 3, you are granted -- | |
19 -- additional permissions described in the GCC Runtime Library Exception, -- | |
20 -- version 3.1, as published by the Free Software Foundation. -- | |
21 -- -- | |
22 -- You should have received a copy of the GNU General Public License and -- | |
23 -- a copy of the GCC Runtime Library Exception along with this program; -- | |
24 -- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- | |
25 -- <http://www.gnu.org/licenses/>. -- | |
26 -- -- | |
27 -- GNAT was originally developed by the GNAT team at New York University. -- | |
28 -- Extensive contributions were provided by Ada Core Technologies Inc. -- | |
29 -- -- | |
30 ------------------------------------------------------------------------------ | |
31 | |
32 -- This package contains routines for scanning modular Unsigned | |
33 -- values for use in Text_IO.Modular_IO, and the Value attribute. | |
34 | |
35 with System.Unsigned_Types; | |
36 | |
37 package System.Val_Uns is | |
38 pragma Pure; | |
39 | |
40 function Scan_Raw_Unsigned | |
41 (Str : String; | |
42 Ptr : not null access Integer; | |
43 Max : Integer) return System.Unsigned_Types.Unsigned; | |
44 -- This function scans the string starting at Str (Ptr.all) for a valid | |
45 -- integer according to the syntax described in (RM 3.5(43)). The substring | |
46 -- scanned extends no further than Str (Max). Note: this does not scan | |
47 -- leading or trailing blanks, nor leading sign. | |
48 -- | |
49 -- There are three cases for the return: | |
50 -- | |
51 -- If a valid integer is found, then Ptr.all is updated past the last | |
52 -- character of the integer. | |
53 -- | |
54 -- If no valid integer is found, then Ptr.all points either to an initial | |
55 -- non-digit character, or to Max + 1 if the field is all spaces and the | |
56 -- exception Constraint_Error is raised. | |
57 -- | |
58 -- If a syntactically valid integer is scanned, but the value is out of | |
59 -- range, or, in the based case, the base value is out of range or there | |
60 -- is an out of range digit, then Ptr.all points past the integer, and | |
61 -- Constraint_Error is raised. | |
62 -- | |
63 -- Note: these rules correspond to the requirements for leaving the pointer | |
64 -- positioned in Text_IO.Get. Note that the rules as stated in the RM would | |
65 -- seem to imply that for a case like: | |
66 -- | |
67 -- 8#12345670009# | |
68 -- | |
69 -- the pointer should be left at the first # having scanned out the longest | |
70 -- valid integer literal (8), but in fact in this case the pointer points | |
71 -- past the final # and Constraint_Error is raised. This is the behavior | |
72 -- expected for Text_IO and enforced by the ACATS tests. | |
73 -- | |
74 -- If a based literal is malformed in that a character other than a valid | |
75 -- hexadecimal digit is encountered during scanning out the digits after | |
76 -- the # (this includes the case of using the wrong terminator, : instead | |
77 -- of # or vice versa) there are two cases. If all the digits before the | |
78 -- non-digit are in range of the base, as in | |
79 -- | |
80 -- 8#100x00# | |
81 -- 8#100: | |
82 -- | |
83 -- then in this case, the "base" value before the initial # is returned as | |
84 -- the result, and the pointer points to the initial # character on return. | |
85 -- | |
86 -- If an out of range digit has been detected before the invalid character, | |
87 -- as in: | |
88 -- | |
89 -- 8#900x00# | |
90 -- 8#900: | |
91 -- | |
92 -- then the pointer is also left at the initial # character, but constraint | |
93 -- error is raised reflecting the encounter of an out of range digit. | |
94 -- | |
95 -- Finally if we have an unterminated fixed-point constant where the final | |
96 -- # or : character is missing, Constraint_Error is raised and the pointer | |
97 -- is left pointing past the last digit, as in: | |
98 -- | |
99 -- 8#22 | |
100 -- | |
101 -- This string results in a Constraint_Error with the pointer pointing | |
102 -- past the second 2. | |
103 -- | |
104 -- Note: if Str is empty, i.e. if Max is less than Ptr, then this is a | |
105 -- special case of an all-blank string, and Ptr is unchanged, and hence | |
106 -- is greater than Max as required in this case. | |
107 -- | |
108 -- Note: this routine should not be called with Str'Last = Positive'Last. | |
109 -- If this occurs Program_Error is raised with a message noting that this | |
110 -- case is not supported. Most such cases are eliminated by the caller. | |
111 | |
112 function Scan_Unsigned | |
113 (Str : String; | |
114 Ptr : not null access Integer; | |
115 Max : Integer) return System.Unsigned_Types.Unsigned; | |
116 -- Same as Scan_Raw_Unsigned, except scans optional leading | |
117 -- blanks, and an optional leading plus sign. | |
118 -- | |
119 -- Note: if a minus sign is present, Constraint_Error will be raised. | |
120 -- Note: trailing blanks are not scanned. | |
121 | |
122 function Value_Unsigned | |
123 (Str : String) return System.Unsigned_Types.Unsigned; | |
124 -- Used in computing X'Value (Str) where X is a modular integer type whose | |
125 -- modulus does not exceed the range of System.Unsigned_Types.Unsigned. Str | |
126 -- is the string argument of the attribute. Constraint_Error is raised if | |
127 -- the string is malformed, or if the value is out of range. | |
128 | |
129 end System.Val_Uns; |