< prev index next >

src/share/vm/ci/ciValueKlass.hpp

Print this page




  33 // ciValueKlass
  34 //
  35 // Specialized ciInstanceKlass for value types.
  36 class ciValueKlass : public ciInstanceKlass {
  37   CI_PACKAGE_ACCESS
  38 
  39 private:
  40   // Index fields of a value type, indeces range from 0 to the number of fields of the
  41   // value type - 1.
  42   // For each index constructed, _field_index_map records the field's index
  43   // in InstanceKlass::_fields (i.e., _field_index_map records the value returned by
  44   // fieldDescriptor::index() for each field). If the value type has a
  45   // value factory mapping, indeces are as defined in the value factory mapping.
  46   GrowableArray<int>* _field_index_map;
  47 
  48 protected:
  49   ciValueKlass(KlassHandle h_k) : ciInstanceKlass(h_k), _field_index_map(NULL) {
  50     assert(is_final(), "ValueKlass must be final");
  51   };
  52 

  53   int compute_field_index_map();
  54 
  55 public:
  56   bool      is_valuetype() const { return true; }

  57 
  58   // Value type fields
  59   int       field_count();
  60   int       field_size();
  61   int       flattened_field_count() {
  62     return nof_nonstatic_fields();
  63   }
  64   int       field_index_by_offset(int offset);
  65   int       field_offset_by_index(int index);
  66   ciType*   field_type_by_index(int index);
  67   int       first_field_offset() const;
  68 
  69   int value_arg_slots();
  70 };
  71 
  72 #endif // SHARE_VM_CI_CIVALUEKLASS_HPP


  33 // ciValueKlass
  34 //
  35 // Specialized ciInstanceKlass for value types.
  36 class ciValueKlass : public ciInstanceKlass {
  37   CI_PACKAGE_ACCESS
  38 
  39 private:
  40   // Index fields of a value type, indeces range from 0 to the number of fields of the
  41   // value type - 1.
  42   // For each index constructed, _field_index_map records the field's index
  43   // in InstanceKlass::_fields (i.e., _field_index_map records the value returned by
  44   // fieldDescriptor::index() for each field). If the value type has a
  45   // value factory mapping, indeces are as defined in the value factory mapping.
  46   GrowableArray<int>* _field_index_map;
  47 
  48 protected:
  49   ciValueKlass(KlassHandle h_k) : ciInstanceKlass(h_k), _field_index_map(NULL) {
  50     assert(is_final(), "ValueKlass must be final");
  51   };
  52 
  53   const char* type_string() { return "ciValueKlass"; }
  54   int compute_field_index_map();
  55 
  56 public:
  57   bool      is_valuetype() const { return true; }
  58   bool      flatten_array() const;
  59 
  60   // Value type fields
  61   int       field_count();
  62   int       field_size();
  63   int       flattened_field_count() {
  64     return nof_nonstatic_fields();
  65   }
  66   int       field_index_by_offset(int offset);
  67   int       field_offset_by_index(int index);
  68   ciType*   field_type_by_index(int index);
  69   int       first_field_offset() const;
  70 
  71   int value_arg_slots();
  72 };
  73 
  74 #endif // SHARE_VM_CI_CIVALUEKLASS_HPP
< prev index next >