From: Simon Wright <simon@pushface.org>
Subject: Re: class wide iterable (and indexable)
Date: Wed, 02 Jan 2019 17:39:11 +0000
Date: 2019-01-02T17:39:11+00:00 [thread overview]
Message-ID: <lyo98z558g.fsf@pushface.org> (raw)
In-Reply-To: b5c56fdb-94d0-4930-952c-7754ec5dd729@googlegroups.com
George Shapovalov <gshapovalov@gmail.com> writes:
> I would be thankful for any pointers, as I am at a loss what that
> class-wide for loop is getting confused about. Or why it even expects
> the Index type in the "of" loop?
Compiling (a subsection of) your code with -gnatG, which lists the
generated expanded code in an Ada-like syntax, we get
C2220b : test_list_iface__pl__cursor := T2232b!(
test_list_iface__pl__list_iterator_interfaces__reversible_iteratorH!
(I2224b).all (1)).all (I2224b);
L_5 : while test_list_iface__pl__has_element (C2220b) loop
n : test_list_iface__pl__element_type renames
test_list_iface__pl__list_reference (lc, C2220b);
ada__text_io__put__4 (n'img);
C2220b :=
$test_list_iface__pl__list_iterator_interfaces__next__2 (
I2224b, C2220b);
end loop L_5;
which shows that part of the code (correctly) expects an integer, while
another part provides a cursor; so you're right, the compiler is
confused, this is a compiler bug.
However, I think the issue may be that you've only defined one function
List_Reference: if you look at Ada.Containers.Vectors you'll see
function Reference
(Container : aliased in out Vector;
Position : Cursor) return Reference_Type;
pragma Inline (Reference);
...
function Reference
(Container : aliased in out Vector;
Index : Index_Type) return Reference_Type;
pragma Inline (Reference);
so GNAT's "bug" is that it doesn't understand how to cope with your
error. AdaCore are always interested in improving error messages, but
this error does seem rather out of the ordinary!
I had a quick-and-dirty go at fixing this, & got a build, but ended with
testing List_Interface'Class ..
assignin values .. done; values:
Catchpoint 1, CONSTRAINT_ERROR (Ada.Tags.Displace: invalid interface conversion) at 0x00000001000210da in test_list_iface.pld.iterate (container=...,
<iterateBIPalloc>=2, <iterateBIPstoragepool>=0x0,
<iterateBIPfinalizationmaster>=0x0, <iterateBIPaccess>=0x0)
at /Users/simon/tmp/cla/ada_gems/list_iface/src/lists-dynamic.adb:46
46 return List_Iterator_Interfaces.Reversible_Iterator'Class(ACV.Vector(Container).Iterate);
(gdb) l
41 -- end;
42
43 overriding
44 function Iterate (Container : in List) return List_Iterator_Interfaces.Reversible_Iterator'Class is
45 begin
46 return List_Iterator_Interfaces.Reversible_Iterator'Class(ACV.Vector(Container).Iterate);
47 end;
48
49 end Lists.dynamic;
Hope this helps ...
next prev parent reply other threads:[~2019-01-02 17:39 UTC|newest]
Thread overview: 76+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-02 15:48 class wide iterable (and indexable) George Shapovalov
2019-01-02 17:39 ` Simon Wright [this message]
2019-01-02 18:11 ` George Shapovalov
2019-01-03 8:52 ` Simon Wright
2019-01-03 9:30 ` George Shapovalov
2019-01-03 16:45 ` Jeffrey R. Carter
2019-01-04 4:32 ` Shark8
2019-01-05 9:03 ` Randy Brukardt
2019-01-03 22:56 ` Randy Brukardt
2019-01-04 0:00 ` George Shapovalov
2019-01-04 8:43 ` Dmitry A. Kazakov
2019-01-04 12:20 ` George Shapovalov
2019-01-05 23:29 ` Jere
2019-01-05 23:50 ` Jere
2019-01-06 9:34 ` George Shapovalov
2019-01-06 10:19 ` Dmitry A. Kazakov
2019-01-06 11:30 ` George Shapovalov
2019-01-06 12:45 ` Dmitry A. Kazakov
2019-01-06 13:18 ` George Shapovalov
2019-01-06 14:13 ` Dmitry A. Kazakov
2019-01-06 16:33 ` George Shapovalov
2019-01-06 18:29 ` George Shapovalov
2019-01-06 20:32 ` Dmitry A. Kazakov
2019-01-06 21:47 ` George Shapovalov
2019-01-07 9:37 ` Niklas Holsti
2019-01-07 16:24 ` George Shapovalov
2019-01-06 20:18 ` Dmitry A. Kazakov
2019-01-06 21:58 ` George Shapovalov
2019-01-07 8:28 ` Dmitry A. Kazakov
2019-01-05 9:21 ` Randy Brukardt
2019-01-05 10:07 ` Dmitry A. Kazakov
2019-01-05 18:17 ` George Shapovalov
2019-01-05 20:07 ` Simon Wright
2019-01-05 20:41 ` George Shapovalov
2019-01-07 21:07 ` Randy Brukardt
2019-01-08 9:51 ` Dmitry A. Kazakov
2019-01-08 19:25 ` Björn Lundin
2019-01-08 23:26 ` Randy Brukardt
2019-01-09 17:06 ` Dmitry A. Kazakov
2019-01-09 23:38 ` Randy Brukardt
2019-01-10 8:53 ` Dmitry A. Kazakov
2019-01-10 22:14 ` Randy Brukardt
2019-01-11 9:09 ` Dmitry A. Kazakov
2019-01-14 22:59 ` Randy Brukardt
2019-01-15 9:34 ` Dmitry A. Kazakov
2019-01-18 15:48 ` Olivier Henley
2019-01-18 16:08 ` Dmitry A. Kazakov
2019-01-18 16:29 ` Olivier Henley
2019-01-18 16:54 ` Dmitry A. Kazakov
2019-01-18 17:31 ` Olivier Henley
2019-01-18 18:51 ` Shark8
2019-01-18 20:09 ` Dmitry A. Kazakov
2019-01-21 23:15 ` Randy Brukardt
2019-01-22 8:56 ` Dmitry A. Kazakov
2019-01-22 22:00 ` Randy Brukardt
2019-01-23 8:14 ` Dmitry A. Kazakov
2019-01-22 17:04 ` Jeffrey R. Carter
2019-01-22 22:02 ` Randy Brukardt
2019-01-23 18:00 ` Jeffrey R. Carter
2019-01-23 20:14 ` Shark8
2019-01-23 22:47 ` Randy Brukardt
2019-01-24 17:11 ` Dmitry A. Kazakov
2019-01-28 15:54 ` Shark8
2019-01-28 17:23 ` Dmitry A. Kazakov
2019-01-08 18:32 ` G. B.
2019-01-05 17:05 ` Jeffrey R. Carter
2019-01-05 20:18 ` Dmitry A. Kazakov
2019-01-05 21:09 ` Shark8
2019-01-06 10:11 ` Jeffrey R. Carter
2019-01-05 20:46 ` Shark8
2019-01-06 9:43 ` Dmitry A. Kazakov
2019-01-26 22:11 ` George Shapovalov
2019-01-26 22:14 ` George Shapovalov
-- strict thread matches above, loose matches on Subject: below --
2019-01-29 7:45 Randy Brukardt
2019-01-29 19:34 ` Niklas Holsti
2019-01-29 20:26 ` Dmitry A. Kazakov
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox