< prev index next >

src/hotspot/share/oops/instanceKlass.hpp

Print this page
rev 58565 : 8238358: Implementation of JEP 371: Hidden Classes
Reviewed-by: duke
Contributed-by: mandy.chung@oracle.com, lois.foltan@oracle.com, david.holmes@oracle.com, harold.seigel@oracle.com, serguei.spitsyn@oracle.com, alex.buckley@oracle.com, jamsheed.c.m@oracle.com

*** 193,203 **** // The NestHost attribute. The class info index for the class // that is the nest-host of this class. This data has not been validated. jushort _nest_host_index; ! // Resolved nest-host klass: either true nest-host or self if we are not nested. // By always being set it makes nest-member access checks simpler. InstanceKlass* _nest_host; // The contents of the Record attribute. Array<RecordComponent*>* _record_components; --- 193,206 ---- // The NestHost attribute. The class info index for the class // that is the nest-host of this class. This data has not been validated. jushort _nest_host_index; ! // Resolved nest-host klass: either true nest-host or self if we are not ! // nested, or an error occurred resolving or validating the nominated ! // nest-host. Can also be set directly by JDK API's that establish nest ! // relationships. // By always being set it makes nest-member access checks simpler. InstanceKlass* _nest_host; // The contents of the Record attribute. Array<RecordComponent*>* _record_components;
*** 467,476 **** --- 470,481 ---- void set_nest_members(Array<u2>* m) { _nest_members = m; } // nest-host index jushort nest_host_index() const { return _nest_host_index; } void set_nest_host_index(u2 i) { _nest_host_index = i; } + // dynamic nest member support + void set_nest_host(InstanceKlass* host, TRAPS); // record components Array<RecordComponent*>* record_components() const { return _record_components; } void set_record_components(Array<RecordComponent*>* record_components) { _record_components = record_components;
*** 480,492 **** private: // Called to verify that k is a member of this nest - does not look at k's nest-host bool has_nest_member(InstanceKlass* k, TRAPS) const; public: ! // Returns nest-host class, resolving and validating it if needed ! // Returns NULL if an exception occurs during loading, or validation fails ! InstanceKlass* nest_host(Symbol* validationException, TRAPS); // Check if this klass is a nestmate of k - resolves this nest-host and k's bool has_nestmate_access_to(InstanceKlass* k, TRAPS); enum InnerClassAttributeOffset { // From http://mirror.eng/products/jdk/1.1/docs/guide/innerclasses/spec/innerclasses.doc10.html#18814 --- 485,501 ---- private: // Called to verify that k is a member of this nest - does not look at k's nest-host bool has_nest_member(InstanceKlass* k, TRAPS) const; public: ! // Used to construct informative IllegalAccessError messages at a higher level, ! // if there was an issue resolving or validating the nest host. ! // Returns NULL if there was no error. ! const char* nest_host_error(TRAPS); ! // Returns nest-host class, resolving and validating it if needed. ! // Returns NULL if resolution is not possible from the calling context. ! InstanceKlass* nest_host(TRAPS); // Check if this klass is a nestmate of k - resolves this nest-host and k's bool has_nestmate_access_to(InstanceKlass* k, TRAPS); enum InnerClassAttributeOffset { // From http://mirror.eng/products/jdk/1.1/docs/guide/innerclasses/spec/innerclasses.doc10.html#18814
*** 810,821 **** _misc_flags &= ~_misc_has_passed_fingerprint_check; } } bool supers_have_passed_fingerprint_checks(); ! static bool should_store_fingerprint(bool is_unsafe_anonymous); ! bool should_store_fingerprint() const { return should_store_fingerprint(is_unsafe_anonymous()); } bool has_stored_fingerprint() const; uint64_t get_stored_fingerprint() const; void store_fingerprint(uint64_t fingerprint); bool is_scratch_class() const { --- 819,830 ---- _misc_flags &= ~_misc_has_passed_fingerprint_check; } } bool supers_have_passed_fingerprint_checks(); ! static bool should_store_fingerprint(bool is_hidden_or_anonymous); ! bool should_store_fingerprint() const { return should_store_fingerprint(is_hidden() || is_unsafe_anonymous()); } bool has_stored_fingerprint() const; uint64_t get_stored_fingerprint() const; void store_fingerprint(uint64_t fingerprint); bool is_scratch_class() const {
< prev index next >