[foreign] RFR 8218153: Read/Write of Value layout should honor declared endianness
Maurizio Cimadamore
maurizio.cimadamore at oracle.com
Wed Feb 27 19:06:15 UTC 2019
Henry I think what we were suggesting was to add a new interface method
to Layout
e.g.
interface Layout
Layout withEndianness(Endianness)
}
and have the subtypes override accordingly. We want this to be usable by
clients.
Maurizio
On 27/02/2019 18:47, Henry Jen wrote:
> Updated webrev[1] to have withEndianness(Endianness) for Value and Group based layouts. The helper function is now protected static function in Group instead of Util.
>
> As the jextract change, it’s quite simple, basically as following(I need to see if AsmCodeFactoryExt needs same treatment), but we need to fix Runner test templates, other tests seems passing just fine as we expected.
>
> However, since I am not a fan of this, I like to keep that separate so we clearly know what changes are made for that purpose. Regarding to your EA concern, it won’t be long before I complete review and fixes for jextract. Sounds fair?
>
> Cheers,
> Henry
>
>
>> @@ -235,6 +220,12 @@
>>
>> @Override
>> public Boolean visitVar(VarTree varTree, JType jt) {
>> + Layout layout = varTree.layout();
>> + if (layout instanceof Value) {
>> + layout = ((Value) layout).withEndianness(Value.Endianness.hostEndian());
>> + } else if (layout instanceof Group) {
>> + layout = ((Group) layout).withEndianness(Value.Endianness.hostEndian());
>> + }
>> global_layouts.add(varTree.layout().withAnnotation(Layout.NAME, varTree.name()));
>> return addField(global_cw, varTree, null);
>> }
>> @@ -295,6 +286,9 @@
>>
>> AnnotationVisitor av = cw.visitAnnotation(NATIVE_STRUCT, true);
>> Layout structLayout = structTree.layout();
>> + if (structLayout instanceof Group) {
>> + structLayout = ((Group) structLayout).withEndianness(Value.Endianness.hostEndian());
>> + }
>> av.visit("value", structLayout.toString());
>> av.visitEnd();
>> cw.visitInnerClass(name, headerClassName, intf, ACC_PUBLIC | ACC_STATIC | ACC_ABSTRACT | ACC_INTERFACE);
> [1] http://cr.openjdk.java.net/~henryjen/panama/8218153/2/webrev/
>
>
>> On Feb 27, 2019, at 2:55 AM, Maurizio Cimadamore <maurizio.cimadamore at oracle.com> wrote:
>>
>>
>> On 27/02/2019 03:31, John Rose wrote:
>>> The use case of reversing a previous set layout
>>> suggested by Henry can be covered by reassembling
>>> the layout from scratch. And the use case of detecting
>>> that there is some subpart that already has > or <
>>> can be covered by traversing from scratch. Both of
>>> those use cases seem less interesting to me than
>>> composing a perfectly nice layout with a prepended
>> Exactly - this is the use case I was after!
>>
>> Maurizio
>>
More information about the panama-dev
mailing list