[foreign-jextract] Generated getters and setters do not include offsets

Filip Krakowski krakowski at hhu.de
Mon Aug 31 10:35:11 UTC 2020


Hi,

I just noticed that jextract's generated getters and setters always 
access the provided MemorySegment at offset 0. This looks like a bug to me.

This is the struct I used to reproduce this issue.

    struct coordinate {
       int x;
       int y;
    };


And this is the code jextract generated from it (source mode).

    private static final MemoryLayout coordinate$struct$LAYOUT_ =MemoryLayout.ofStruct(
         C_INT.withName("x"),
         C_INT.withName("y")
    ).withName("coordinate");

    public static jdk.incubator.foreign.MemoryLayout
    coordinate$struct$LAYOUT() {return coordinate$struct$LAYOUT_; }

    private static final MemoryLayout coordinate$x$LAYOUT_ =C_INT;
    public static jdk.incubator.foreign.MemoryLayout coordinate$x$LAYOUT() {return coordinate$x$LAYOUT_; }

    private static final VarHandle coordinate$x$VH_ =coordinate$x$LAYOUT_.varHandle(int.class);
    public static java.lang.invoke.VarHandle coordinate$x$VH() {return coordinate$x$VH_; }

    private static final MemoryLayout coordinate$y$LAYOUT_ =C_INT;
    public static jdk.incubator.foreign.MemoryLayout coordinate$y$LAYOUT() {return coordinate$y$LAYOUT_; }

    private static final VarHandle coordinate$y$VH_ =coordinate$y$LAYOUT_.varHandle(int.class);
    public static java.lang.invoke.VarHandle coordinate$y$VH() {return coordinate$y$VH_; }


Here I allocate the struct, set both fields and print them afterwards.

    try (var segment =coordinate.allocate()) {
         coordinate.x$set(segment,1);
         coordinate.y$set(segment,2);

         System.out.println(coordinate.x$get(segment));
         System.out.println(coordinate.y$get(segment));
    }


This will print "2" twice, although "x" should be set to "1" in my 
understanding.

I am using the latest build (commit 
4d7888c040767760b6250130ef6024ea16b43461).


Best regards,
Filip


More information about the panama-dev mailing list