< prev index next >

src/hotspot/share/classfile/javaClasses.hpp

Print this page
rev 52749 : Bootstrap method consolidation
* clean up and simplify JDK support code for BSM invocation
* simplify JVM bootstrap handshake: use BootstrapCallInfo only
* remove unused JVM paths and data fields
* move bootstrap argument processing from MethodHandleNatives to ConstantPool
* remove ConstantGroup; merge argument access into BootstrapCallInfo
* adjust BSM argument access: remove copyArguments, add argumentRef API
* add metadata-free BSM modes, including symbolic arguments from CP


 775 
 776     // Allocation
 777     static Handle create(Handle loader, Handle module_name, TRAPS);
 778 
 779     // Testers
 780     static bool is_instance(oop obj);
 781 
 782     // Accessors
 783     static oop loader(oop module);
 784     static void set_loader(oop module, oop value);
 785 
 786     static oop name(oop module);
 787     static void set_name(oop module, oop value);
 788 
 789     static ModuleEntry* module_entry(oop module);
 790     static void set_module_entry(oop module, ModuleEntry* module_entry);
 791 
 792   friend class JavaClasses;
 793 };
 794 



 795 // Interface to jdk.internal.reflect.ConstantPool objects
 796 class reflect_ConstantPool {
 797  private:
 798   // Note that to reduce dependencies on the JDK we compute these
 799   // offsets at run-time.
 800   static int _oop_offset;
 801 
 802   static void compute_offsets();
 803 
 804  public:
 805   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
 806 
 807   // Allocation
 808   static Handle create(TRAPS);
 809 
 810   // Accessors
 811   static void set_cp(oop reflect, ConstantPool* value);
 812   static int oop_offset() {
 813     return _oop_offset;
 814   }
 815 
 816   static ConstantPool* get_cp(oop reflect);
 817 
 818   // Debugging
 819   friend class JavaClasses;
 820 };
 821 
 822 // Interface to jdk.internal.reflect.UnsafeStaticFieldAccessorImpl objects
 823 class reflect_UnsafeStaticFieldAccessorImpl {
 824  private:
 825   static int _base_offset;
 826   static void compute_offsets();
 827 
 828  public:
 829   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
 830 
 831   static int base_offset() {
 832     return _base_offset;
 833   }


1490   const bool           may_be_java;
1491 
1492 
1493   Klass* klass() const    { return SystemDictionary::well_known_klass(klass_id); }
1494   Symbol* name() const      { return lookup_symbol(name_index); }
1495   Symbol* signature() const { return lookup_symbol(signature_index); }
1496 
1497   int compute_offset();
1498 
1499   // Find the Symbol for this index
1500   static Symbol* lookup_symbol(int symbol_index) {
1501     return vmSymbols::symbol_at((vmSymbols::SID)symbol_index);
1502   }
1503 };
1504 
1505 #define DECLARE_INJECTED_FIELD_ENUM(klass, name, signature, may_be_java) \
1506   klass##_##name##_enum,
1507 
1508 #define ALL_INJECTED_FIELDS(macro)          \
1509   CLASS_INJECTED_FIELDS(macro)              \

1510   CLASSLOADER_INJECTED_FIELDS(macro)        \
1511   RESOLVEDMETHOD_INJECTED_FIELDS(macro)     \
1512   MEMBERNAME_INJECTED_FIELDS(macro)         \
1513   CALLSITECONTEXT_INJECTED_FIELDS(macro)    \
1514   STACKFRAMEINFO_INJECTED_FIELDS(macro)     \
1515   MODULE_INJECTED_FIELDS(macro)
1516 
1517 // Interface to hard-coded offset checking
1518 
1519 class JavaClasses : AllStatic {
1520  private:
1521 
1522   static InjectedField _injected_fields[];
1523 
1524   static bool check_offset(const char *klass_name, int offset, const char *field_name, const char* field_sig) PRODUCT_RETURN0;
1525  public:
1526   enum InjectedFieldID {
1527     ALL_INJECTED_FIELDS(DECLARE_INJECTED_FIELD_ENUM)
1528     MAX_enum
1529   };


 775 
 776     // Allocation
 777     static Handle create(Handle loader, Handle module_name, TRAPS);
 778 
 779     // Testers
 780     static bool is_instance(oop obj);
 781 
 782     // Accessors
 783     static oop loader(oop module);
 784     static void set_loader(oop module, oop value);
 785 
 786     static oop name(oop module);
 787     static void set_name(oop module, oop value);
 788 
 789     static ModuleEntry* module_entry(oop module);
 790     static void set_module_entry(oop module, ModuleEntry* module_entry);
 791 
 792   friend class JavaClasses;
 793 };
 794 
 795 #define CONSTANTPOOL_INJECTED_FIELDS(macro)                      \
 796   macro(reflect_ConstantPool, constantPoolOop, object_signature, false)
 797 
 798 // Interface to jdk.internal.reflect.ConstantPool objects
 799 class reflect_ConstantPool {
 800  private:
 801   // Note that to reduce dependencies on the JDK we compute these
 802   // offsets at run-time.
 803   static int _constantPoolOop_offset;
 804 
 805   static void compute_offsets();
 806 
 807  public:
 808   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
 809 
 810   // Allocation
 811   static Handle create_from_pool(ConstantPool* value, TRAPS);
 812 
 813   // Accessors

 814   static int oop_offset() {
 815     return _constantPoolOop_offset;
 816   }
 817 
 818   static ConstantPool* get_cp(oop reflect);
 819 
 820   // Debugging
 821   friend class JavaClasses;
 822 };
 823 
 824 // Interface to jdk.internal.reflect.UnsafeStaticFieldAccessorImpl objects
 825 class reflect_UnsafeStaticFieldAccessorImpl {
 826  private:
 827   static int _base_offset;
 828   static void compute_offsets();
 829 
 830  public:
 831   static void serialize_offsets(SerializeClosure* f) NOT_CDS_RETURN;
 832 
 833   static int base_offset() {
 834     return _base_offset;
 835   }


1492   const bool           may_be_java;
1493 
1494 
1495   Klass* klass() const    { return SystemDictionary::well_known_klass(klass_id); }
1496   Symbol* name() const      { return lookup_symbol(name_index); }
1497   Symbol* signature() const { return lookup_symbol(signature_index); }
1498 
1499   int compute_offset();
1500 
1501   // Find the Symbol for this index
1502   static Symbol* lookup_symbol(int symbol_index) {
1503     return vmSymbols::symbol_at((vmSymbols::SID)symbol_index);
1504   }
1505 };
1506 
1507 #define DECLARE_INJECTED_FIELD_ENUM(klass, name, signature, may_be_java) \
1508   klass##_##name##_enum,
1509 
1510 #define ALL_INJECTED_FIELDS(macro)          \
1511   CLASS_INJECTED_FIELDS(macro)              \
1512   CONSTANTPOOL_INJECTED_FIELDS(macro)       \
1513   CLASSLOADER_INJECTED_FIELDS(macro)        \
1514   RESOLVEDMETHOD_INJECTED_FIELDS(macro)     \
1515   MEMBERNAME_INJECTED_FIELDS(macro)         \
1516   CALLSITECONTEXT_INJECTED_FIELDS(macro)    \
1517   STACKFRAMEINFO_INJECTED_FIELDS(macro)     \
1518   MODULE_INJECTED_FIELDS(macro)
1519 
1520 // Interface to hard-coded offset checking
1521 
1522 class JavaClasses : AllStatic {
1523  private:
1524 
1525   static InjectedField _injected_fields[];
1526 
1527   static bool check_offset(const char *klass_name, int offset, const char *field_name, const char* field_sig) PRODUCT_RETURN0;
1528  public:
1529   enum InjectedFieldID {
1530     ALL_INJECTED_FIELDS(DECLARE_INJECTED_FIELD_ENUM)
1531     MAX_enum
1532   };
< prev index next >