comp.lang.ada
 help / color / mirror / Atom feed
From: "Jeffrey R. Carter" <spam.jrcarter.not@spam.not.acm.org>
Subject: Non_Primitive Operations and Object.Operation Resolution
Date: Wed, 20 Apr 2016 16:59:04 -0700
Date: 2016-04-20T16:59:04-07:00	[thread overview]
Message-ID: <nf94tt$9iv$1@dont-email.me> (raw)

Some pertinent code from PragmARC.Unbounded_Integers:

package PragmARC.Unbounded_Integers is
    ...
private -- PragmARC.Unbounded_Integers
    type Calculation_Value is mod System.Max_Binary_Modulus;

    Digit_Size : constant := Calculation_Value'Size / 2;

    type Digit_Value is mod 2 ** Digit_Size;

    package Digit_Lists is new Ada.Containers.Vectors (Index_Type => Positive, 
Element_Type => Digit_Value);

    subtype Digit_List is Digit_Lists.Vector;
    ...
end PragmARC.Unbounded_Integers;

package body PragmARC.Unbounded_Integers is
    ...
    use type Digit_List;

    function Element (List : Digit_List; Index : Positive) return Digit_Value;
    -- If Index is a valid index into List, returns the value stored there; 
otherwise, returns 0
    ...
    ... List.Element (Index) ... -- Index is known to be a valid index for List
    ...
    ... Element (Left.Digit, I) ... I may not be a valid index for Left.Digit

Until recently, this was no problem. Calls like the 1st example called the 
primitive Element declared in Digit_Lists. Calls like the 2nd called the 
non-primitive Element declared in Unbounded_Integers, the only one directly visible.

Recently I've received a couple of reports that this code fails to compile with 
GNAT GPL 2015. It complains, for calls like List.Element, that it can't resolve 
Element, pointing to the primitive one in Digit_Lists and the non-primitive one 
in Unbounded_Integers. I dismissed this as a compiler error, since 
Object.Operation notation may only be used for primitive operations.

However, I've more recently been informed that "gcc 6" on FreeBSD gives the same 
error. While I still think this is a compiler error, I thought I'd ask the 
language lawyers and ARG members on here to make sure.

Note that Unbounded_Integers is written to ISO/IEC 8652:2007, and so may not 
compile with an Ada-12 compiler. For GNAT, that means it should be compiled with 
the -gnat05 option. However, I see no reason why it should not also be valid Ada 
12, and it was reported that ggc 6 gives the same error with or without that option.

-- 
Jeff Carter
"[M]any were collected near them, ... to
enjoy the sight of a dead young lady, nay,
two dead young ladies, for it proved twice
as fine as the first report."
Persuasion
155

             reply	other threads:[~2016-04-20 23:59 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-20 23:59 Jeffrey R. Carter [this message]
2016-04-21 20:28 ` Non_Primitive Operations and Object.Operation Resolution Randy Brukardt
2016-04-21 21:13   ` Jeffrey R. Carter
2016-04-22  6:27     ` AdaMagica
2016-04-22 18:24       ` Jeffrey R. Carter
2016-04-22 22:24     ` Randy Brukardt
2016-04-23  0:37       ` Jeffrey R. Carter
2016-04-22 23:49 ` ytomino
2016-04-23  0:38   ` Jeffrey R. Carter
replies disabled

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