RFR: JDK-8211027 jdb "eval" should perform substitutability test when applying == to inline types

Mandy Chung mandy.chung at oracle.com
Tue Oct 15 17:02:22 UTC 2019


It seems that the debugger backend needs a mechanism to test 
substituability of two object instances in the target VM for example via 
JVM TI (or JNI).

It's okay for this workaround for now.

Mandy

On 10/15/19 5:29 AM, Frederic Parain wrote:
> Thank you for reviewing this.
>
> Spelling fixed, and a few minor additional fixes in the new web rev:
>
> http://cr.openjdk.java.net/~fparain/jdi_substitutability/webrev.01/
>
> ValueBootstrapMethods.isSubstitutable() cannot be used in this particular
> case. The code is executed in the debugger, not in the target VM. The
> isSubstitutable() method doesn’t operate directly on instances of inline
> types, but on instances of ObjectReferenceImpl which represent objects
> in the target VM.
>
>   152     private boolean isSubstitutable(ObjectReferenceImpl other) {
>   153         if (referenceType() != other.referenceType()) return false;
>   154         List<Field> fields = referenceType().fields();
>   155         for (Field f : fields) {
>   156             if (f.isStatic()) {
>   157                 fields.remove(f);
>   158             }
>   159         }
>   160         Map<Field,Value> thisFields = getValues(fields);
>   161         Map<Field,Value> otherFields = other.getValues(fields);
>   162         for (Field f : fields) {
>   163             if (!thisFields.get(f).equals(otherFields.get(f))) return false;
>   164         }
>   165         return true;
>   166     }
>
>
> In this code, the type Field is not java.lang.reflect.Field but the
> interface com.sun.jdi.Field.
>
> Regards,
>
> Fred
>
>
>> On Oct 15, 2019, at 04:53, David Simms <david.simms at oracle.com> wrote:
>>
>>
>> Look good, with two minor comments:
>>
>> * Spelling "isSubtituable()" => "isSubstitutable()"
>> * An alternative is to use ValueBootstrapMethods.isSubstitutable()
>>    rather than re-implement ?
>>
>> Cheers
>>
>> /Mr. Simms
>>
>>
>>
>> On 11/10/19 10:21 PM, Frederic Parain wrote:
>>> Please review this change in JDI to implement the substitutability test
>>> when jdb “eval” applies the ‘==‘ operator to inline types.
>>>
>>> CR:
>>> https://bugs.openjdk.java.net/browse/JDK-8211027
>>>
>>> Webrev:
>>> http://cr.openjdk.java.net/~fparain/jdi_substitutability/webrev.00/index.html
>>>
>>> Regards,
>>>
>>> Fred
>>>



More information about the valhalla-dev mailing list