comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Rational for not making cursor tagged in Containers
Date: Tue, 24 Apr 2007 22:19:30 +0200
Date: 2007-04-24T22:19:23+02:00	[thread overview]
Message-ID: <1op3ml5q11aa$.vg0a2lyc9dpv$.dlg@40tude.net> (raw)
In-Reply-To: 1177432057.705889.229690@n35g2000prd.googlegroups.com

On 24 Apr 2007 09:27:37 -0700, Adam Beneschan wrote:

> On Apr 24, 3:43 am, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
> wrote:
> 
>>>>> X, Y : GUI_Boolean;
>>
>>>>> If you say X = Y, does it compare just the values, or does it compare
>>>>> the discriminants also?
>>
>>>> That depends on how equality operation were defined for the given type. In
>>>> the concrete case of GUI_Boolean, the user-defined "=" would raise
>>>> Constraint_Error if at least one of the discriminants is false.
>>
>>> OK, I've got it.
>>
>>>    function "=" (X, Y : GUI_Boolean) return Boolean is
>>>    begin
>>>       if not X.Defined or else not Y.Defined then
>>>          raise Constraint_Error;
>>>       else
>>>          return X = Y;
>>>       end if;
>>>     end "=";
>>
>>> Is that how you thought this user-defined "=" would be written?
>>
>> Yup, the predefined "=" should be renamed first.
> 
> So a user-defined  "=" that causes a stack overflow due to infinite
> recursion doesn't bother you?

> You still don't see the issue, do you?

Which issue? As I said if you want to get at the predefined "=" you have to
rename it first:

type GUI_Boolean (Defined : Boolean := True) is (True, False);
function Equal (Left, Right : GUI_Boolean) return Boolean renames "=";
function "=" (Left, Right : GUI_Boolean) return Boolean;

function "=" (Left, Right : GUI_Boolean) return Boolean is
begin
   if not (X.Defined and then Y.Defined) then
      raise Constraint_Error;
   else
      return Equal (X, Y);
   end if;
end "=";

>> I don't see any problems with generation of a predefined "=" and literals
>> (True, False). [True is a literal of the type GUI_Boolean, with all
>> consequences of that.]
> 
> If True has type GUI_Boolean, then it must have a "Defined"
> discriminant.

It does (the GUI_Boolean returned by the literal has it).

> What is True.Defined?  How does the programmer indicate
> what it would be?  (And if you say that True.Defined is "true" because
> "true" is a defined value, then you still don't get it---the Ada
> language isn't going to know that, and you're going to need a way to
> tell it that.)

True is a literal. The rule is quite simple. If the literal is not abstract
and not overridden then its discriminants are defined by the corresponding
default expressions.

If absence of aggregates was your concern, that is not a problem either:

function Undefined return GUI_Boolean is
   Result : GUI_Boolean (False);
begin
   return Result;
end Undefined:

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2007-04-24 20:19 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-04-19 16:05 Rational for not making cursor tagged in Containers Anh Vo
2007-04-19 18:25 ` Robert A Duff
2007-04-19 19:28   ` Anh Vo
2007-04-19 20:45     ` Robert A Duff
2007-04-19 21:43       ` Dmitry A. Kazakov
2007-04-19 23:59         ` Ray Blaak
2007-04-20  7:54           ` Dmitry A. Kazakov
2007-04-20 10:56             ` Georg Bauhaus
2007-04-20 10:39               ` Dmitry A. Kazakov
2007-04-20 14:42                 ` Georg Bauhaus
2007-04-20 14:45                   ` Georg Bauhaus
2007-04-20 15:13                   ` Dmitry A. Kazakov
2007-04-20 19:37                     ` Georg Bauhaus
2007-04-20 19:32                       ` Dmitry A. Kazakov
2007-04-20 20:59                         ` Robert A Duff
2007-04-20 22:14                           ` Dmitry A. Kazakov
2007-04-23 17:38                             ` Adam Beneschan
2007-04-23 19:18                               ` Dmitry A. Kazakov
2007-04-24  0:15                                 ` Adam Beneschan
2007-04-24 10:43                                   ` Dmitry A. Kazakov
2007-04-24 16:27                                     ` Adam Beneschan
2007-04-24 20:19                                       ` Dmitry A. Kazakov [this message]
2007-04-26  0:58                                         ` Adam Beneschan
2007-04-26  7:50                                           ` Dmitry A. Kazakov
2007-04-26  8:09                                             ` Markus E Leypold
2007-04-27  8:46                                               ` Dmitry A. Kazakov
2007-04-27 11:37                                                 ` Markus E Leypold
2007-04-28 17:35                                                   ` Dmitry A. Kazakov
2007-04-29  2:31                                                     ` Randy Brukardt
2007-04-29  8:45                                                       ` Dmitry A. Kazakov
2007-04-27 20:44                                               ` Robert A Duff
2007-04-26  8:33                                             ` Markus E Leypold
2007-04-26 11:09                                               ` Markus E Leypold
2007-04-20 19:55                       ` Randy Brukardt
2007-04-22  9:54                         ` Georg Bauhaus
2007-04-22 11:19                           ` Dmitry A. Kazakov
2007-04-20 20:44                       ` Robert A Duff
2007-04-21  5:38                         ` Randy Brukardt
2007-04-22  1:14                           ` Robert A Duff
2007-04-22  4:08                             ` Randy Brukardt
2007-04-20 20:11                     ` Randy Brukardt
2007-04-20 21:28                       ` Dmitry A. Kazakov
2007-04-21  5:33                         ` Randy Brukardt
2007-04-21  9:39                           ` Dmitry A. Kazakov
2007-04-22  4:28                             ` Randy Brukardt
2007-04-22  8:38                               ` Dmitry A. Kazakov
2007-04-23 23:26                                 ` Randy Brukardt
2007-04-24 10:43                                   ` Dmitry A. Kazakov
2007-04-24  8:58                                 ` Georg Bauhaus
2007-04-24 12:21                                   ` Dmitry A. Kazakov
2007-04-21  4:48                       ` unifying arrays and records (was Re: Rational for not making cursor tagged in Containers) Ray Blaak
2007-04-20 17:05             ` Rational for not making cursor tagged in Containers Ray Blaak
2007-04-20 18:46               ` Dmitry A. Kazakov
2007-04-20 18:52                 ` Ray Blaak
2007-04-20 19:54                   ` Robert A Duff
2007-04-20  1:18         ` Anh Vo
2007-04-20  7:53           ` Dmitry A. Kazakov
2007-04-20  9:26             ` Maciej Sobczak
2007-04-20 10:15               ` Dmitry A. Kazakov
2007-04-20 11:59           ` Jean-Pierre Rosen
2007-04-20 13:23             ` Anh Vo
2007-04-20 16:02               ` Jean-Pierre Rosen
2007-04-21  2:53                 ` Anh Vo
2007-04-20  3:03   ` Randy Brukardt
2007-04-20  2:53 ` Randy Brukardt
2007-04-20 16:08   ` Anh Vo
replies disabled

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