From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.3 required=5.0 tests=BAYES_00, REPLYTO_WITHOUT_TO_CC autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: a07f3367d7,caabf5265fad78e5 X-Google-Attributes: gida07f3367d7,public,usenet X-Google-NewGroupId: yes X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news2.google.com!news1.google.com!news.glorb.com!wn11feed!worldnet.att.net!bgtnsc05-news.ops.worldnet.att.net.POSTED!53ab2750!not-for-mail Newsgroups: comp.lang.ada From: anon@anon.org (anon) Subject: Re: unsigned type Reply-To: anon@anon.org (anon) References: <273dedb7-8d68-42d2-8602-aa44c79f3708@b9g2000yqm.googlegroups.com> <4b83m.98382$d36.15650@bgtnsc04-news.ops.worldnet.att.net> <4a4e7705$0$31863$9b4e6d93@newsspool3.arcor-online.net> X-Newsreader: IBM NewsReader/2 2.0 Message-ID: Date: Sat, 04 Jul 2009 09:09:50 GMT NNTP-Posting-Host: 12.65.222.160 X-Complaints-To: abuse@worldnet.att.net X-Trace: bgtnsc05-news.ops.worldnet.att.net 1246698590 12.65.222.160 (Sat, 04 Jul 2009 09:09:50 GMT) NNTP-Posting-Date: Sat, 04 Jul 2009 09:09:50 GMT Organization: AT&T Worldnet Xref: g2news2.google.com comp.lang.ada:6830 Date: 2009-07-04T09:09:50+00:00 List-Id: A String literal is define in RM 4.2 ( 4, 11 ) with the String type defined in RM 3.6.3 ( 4 ) and its index type (Positive) is define in RM 3.6.3 ( 3 ) and RM 3.5.4 ( 13 ). With the Positive base range being Natural defined by RM 3.5.4 ( 13..14 ). So to create a "null range" Strings aka a null String literal, the type and range must be check! In the following hierarchical outline, based on RM 3.2: 1. RM 4.2 ( 11 ) : Check if Lower bound > Base_Range'First. (Lower bound must be a member of the "subtype" or Base_Range type in order to preform the comparison, so Lower Bound type is checked) 2. RM 3.6.1 ( 4 ) : Check if both indexes values are within subtype or range type. (Upper bound is now verified to be a valid type of the range) 3. RM 3.5 : Check if Lower bounds > Upper bounds (verify the "null range" definition) 4. Else it is not a valid null range String and a Constraint_Error will be raised. So, is "A : String ( 1..0 )" legal. Yes maybe! Yes, because RM 4.2 ( 11 ) states that "for the evaluation of a null string literal, a check is made that its lower bound is greater than the lower bound of the base range of the index type. And the Lower bound ( 1 ) > ( 0 ) aka Natural'First which fills the definition in RM 4.2 ( 11 ). And the Lower bound ( 1 ) > Upper bound ( 0 ) RM 3.5 ( 4 ). But there is a problem from RM 3.6.1 ( 4 ) it states that both indexes must be a member of the subtype for the arrays range. Since, Strings are just a predefined one-dimensional character array using Positives as indexes. That means for a String that both indexes must be a member of the Positive type making the ( 1..0 ) invalid, since 0 is not define as a Positive type. So, from RM 3.6.1 ( 4 ) this null range String is not valid. Now, is "B : String := ( -5 .. -7 => ' ' ) ;" legal? First, it violates RM 4.2 ( 11 ), that is, the lower bound ( -5 ) is not greater than the lower bound of the base range of the index type Natural aka Natural'First or 0. So, from RM 4.2 ( 11 ) this should raise a Constraint_Error. But it does not! And then both indexes are not valid members of either the index type Positive or even its base range type aka Natural. So, from RM 3.6.1 ( 4 ) this is an error. But, it does comply with the "null range" in RM 3.5 ( 4 ), where the lower bounds must be greater than upper bounds, but that does not replace the other two requirements, for a null String literal. So, this should raise a Constraint_Error. In <4a4e7705$0$31863$9b4e6d93@newsspool3.arcor-online.net>, Georg Bauhaus writes: >anon wrote: > >> Since the RM does not directly >> give one permission to use an illegal index value, then one should assume >> that all index must be valid before checking for a null array. > >To "assume" formal properties like index validity seems inadequate: >this is about index ranges, not index values, and about what the RM >has to say about the formal notion of a "null range" (as has now been >said many times). > >> Actually, >> Ada RM 0 ( 29 ) states that it is illegal and the program shall create >> an exception if the program "access an array component by using an >> incorrect index value". > >There isn't any access to an array component through a null range. >For indexing an array component, one must have an index value. >There is no value in a null range. Therefore, there is no >access to an array component. > > >> Also, a number of ACATS test suggest this as well >> and the program below will illustrate this. With that stated from the RM >> the program shall >> >> if S'First in S'Range and then S'Last in S'Range then >> if S'First <= S'Last then >> -- access/create an array bound by ( S'First .. S'Last ) >> else >> -- return a null created array access >> end if ; >> else >> raise Constraint_Error ; >> end if ; >> >> You have to look at the whole RM to find out if there are other sections >> that may clarify a statements or allow an exception. But there is no >> RM rules that allows an out of bounds index to be used. > >Maybe the verse and illustrations given by J.-P. Rosen and >Adam Beneschan have slipped: There are RM rules regarding >null ranges. The construct "Greater .. Smaller" as used in, say, >initializing a null string refers to null ranges, so not to any >index value at all. >