comp.lang.ada
 help / color / mirror / Atom feed
From: "Yannick Duchêne (Hibou57)" <yannick_duchene@yahoo.fr>
Subject: Weird behavior with modular type
Date: Tue, 07 Feb 2012 18:24:57 +0100
Date: 2012-02-07T18:24:57+01:00	[thread overview]
Message-ID: <op.v9bjzvhzule2fv@douda-yannick> (raw)

Hi all,

I expect the test to be shortened enough.


The following compiles and run without an error:


    with Ada.Text_IO;
    procedure Bug is

       type Modular_Type is mod 256;
       subtype Index_Type is Natural range 1 .. 3;

       E : Modular_Type := 255;
       I : Index_Type := 3;
       B : Boolean;

    begin
       B := E < 10 ** I;
       Ada.Text_IO.Put_Line (Boolean'Image (B));
    end Bug;


It prints "FALSE"

Now, the following, with added “Natural'Pos (...)”, did not even compile:


    with Ada.Text_IO;
    procedure Bug is

       type Modular_Type is mod 256;
       subtype Index_Type is Natural range 1 .. 3;

       E : Modular_Type := 255;
       I : Index_Type := 3;
       B : Boolean;

    begin
       B := E < Natural'Pos (10 ** I);
       Ada.Text_IO.Put_Line (Boolean'Image (B));
    end Bug;


That's counter intuitive. I would expect the first to behave as the  
second, with either a failure to compile or range error at run‑time.

Someone remember a pointer to the most relevant part in the RM? I may be a  
bit tired, could not find it.

Seems in the first case, the left‑side of “E < 10 ** I” has a modulo  
applied, or else, I see no way to explain the result, "FALSE". But why  
would this modulo be applied with a subtype of Natural and not with an  
Universal_Integer?

I don't like it (and must be idiot in some way, don't you think?).


-- 
“Syntactic sugar causes cancer of the semi-colons.” [1]
“Structured Programming supports the law of the excluded muddle.” [1]
[1]: Epigrams on Programming — Alan J. — P. Yale University



             reply	other threads:[~2012-02-07 17:24 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-02-07 17:24 Yannick Duchêne (Hibou57) [this message]
2012-02-07 17:49 ` Weird behavior with modular type Jeffrey Carter
2012-02-07 18:06   ` Adam Beneschan
2012-02-07 18:21     ` Yannick Duchêne (Hibou57)
2012-02-08  6:53       ` J-P. Rosen
2012-02-08 15:29         ` Adam Beneschan
2012-02-09  3:37       ` Randy Brukardt
2012-02-07 18:15   ` Yannick Duchêne (Hibou57)
2012-02-07 17:53 ` Adam Beneschan
2012-02-07 17:54 ` Gautier write-only
2012-02-07 18:23   ` Yannick Duchêne (Hibou57)
2012-02-09  3:40     ` Randy Brukardt
2012-02-07 18:02 ` Adam Beneschan
2012-02-07 18:32   ` Georg Bauhaus
2012-02-07 18:13 ` Yannick Duchêne (Hibou57)
2012-02-07 18:15 ` Adam Beneschan
2012-02-07 18:35   ` Yannick Duchêne (Hibou57)
2012-02-07 18:40     ` Adam Beneschan
2012-02-07 19:22       ` Yannick Duchêne (Hibou57)
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox