RFR: 8266017: Refactor the *klass::array_klass_impl code to separate the non-exception-throwing API

Ioi Lam iklam at openjdk.java.net
Tue Apr 27 20:50:05 UTC 2021


On Tue, 27 Apr 2021 12:46:56 GMT, Coleen Phillimore <coleenp at openjdk.org> wrote:

>> We currently have array_klass() and array_klass_or_null(), where the former can throw exceptions and the latter can not. But they both delegate to:
>> 
>> array_klass_impl(bool or_null, TRAPS)
>> 
>> which combines both the exception-throwing and non-exception-throwing code into one method declared with TRAPS. To make progress with the change of TRAPS to JavaThread (JDK-8252685) we need to separate these code paths into distinct methods.
>> 
>> Testing: tiers 1-3 (in progress)
>> 
>> Thanks,
>> David
>
> src/hotspot/share/oops/klass.hpp line 525:
> 
>> 523:   virtual Klass* array_klass_impl(TRAPS);
>> 524:   virtual Klass* array_klass_or_null_impl(int rank);
>> 525:   virtual Klass* array_klass_or_null_impl();
> 
> I think you should make these pure virtual functions (=0) and remove the bodies in klass.cpp.

I think now we can get rid of the `array_klass_or_null_impl()` function altogether. Instead, `array_klass_or_null` should be declared as `virtual ... = 0` in `Klass` and implemented by the concrete subclasses.

-------------

PR: https://git.openjdk.java.net/jdk/pull/3711


More information about the hotspot-runtime-dev mailing list