On Tue, 21 Mar 2023 12:12:15 GMT, Maurizio Cimadamore <[email protected]>
wrote:
>> src/java.base/share/classes/java/lang/foreign/Linker.java line 621:
>>
>>> 619: * to a downcall handle linked with {@link
>>> #captureCallState(String...)}}
>>> 620: *
>>> 621: * @see #captureCallState(String...)
>>
>> How does a caller know what the structure may contain? Should we document
>> the platform specific structures?
>
> Back to @PaulSandoz question - "how does the caller know what the structure
> contains?". The caller typically doesn't care too much about what the
> returned struct is. But it might care about which "values" can be captured.
> That said, the set of such interesting values, is not too surprising. As
> demonstrated in the example in the `Linker.capturedCallState` method, once
> the client knows the name (and "errno" is likely to be 90% case), everything
> else follows from there - as the layout can be used to obtain var handles for
> the required values.
>
> But, perhaps, now that I write this, I realize that what @PaulSandoz might
> _really_ be asking is: how do I know that e.g. the returned struct will not
> contain e.g. nested structs, sequences, or other non-sense. So we might
> specify (in a normative way) that the returned layout is a struct layout,
> whose member layouts are one or more value layouts (possibly with some added
> padding layouts). The names of the value layouts reflect the names of the
> values that can be captured.
>
> And _then_ we show an example of the layout we return for Windows/x64 (as
> that's more interesting).
I've updated the specs as per how I interpret the comments above. Let me know
your thoughts on this.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/13079#discussion_r1144872865