[foreign-memaccess] RFR 8223768: Rethink relationship between Sequence vs. Group layouts

Jorn Vernee jbvernee at xs4all.nl
Mon May 13 13:40:50 UTC 2019


Hi,

One comment:

- LayoutPathImpl::sequenceElement

   Currently, looking up sequence elements as contents of a Value does 
not work. e.g.

   Value v = Value.ofUnsignedInt(64).withContents(Sequence.of(8, 
Value.ofUnsignedInt(8)));
   VarHandle vh = 
v.toPath().sequenceElement().dereferenceHandle(byte.class); // Boom! 
IllegalStateException in LayoutPathImpl::sequenceElement

   If this case is not meant to be supported, I think the type of 
Value::contents should just be Optional<Group> instead of 
Optional<Sequence>.

Cheers,
Jorn

Maurizio Cimadamore schreef op 2019-05-13 14:14:
> Hi,
> as discussed previously, the relationship between sequences and groups
> is a bit shaky, as there are sequences that cannot be expressed as
> groups (sequences whose size is unbound).
> 
> This patch models groups and sequences independently:
> 
> * they all have a (minimal) common supertype called Compound (which
> supports only a Stream<Layout> elements() method)
> 
> * Group implements Iterable, always has a size, and you can access
> elements by index
> 
> * Sequence doesn't implement Iterable, has an optional size, and has
> an accessor to retrieve the element layout (there's only one of them,
> regardless of the size)
> 
> I think this is much saner.
> 
> Webrev:
> 
> http://cr.openjdk.java.net/~mcimadamore/panama/8223768/
> 
> P.S.
> of course Compound should be renamed to CompoundLayout in a later
> webrev (as for all other layout names).
> 
> P.P.S.
> in a separate patch I'll explore generalizing this method:
> 
> LayoutPath::groupElement(long index)
> 
> with this:
> 
> LayoutPath::compoundElement(long index)
> 
> Since now we should be able to implement indexed access on both group
> and sequences.
> 
> Maurizio


More information about the panama-dev mailing list