hotspot/src/share/vm/oops/instanceKlass.cpp
changeset 13201 69f157caabcc
parent 13195 be27e1b6a4b9
child 13391 30245956af37
equal deleted inserted replaced
13200:7b506e7b406e 13201:69f157caabcc
   845 
   845 
   846 void instanceKlass::shared_symbols_iterate(SymbolClosure* closure) {
   846 void instanceKlass::shared_symbols_iterate(SymbolClosure* closure) {
   847   Klass::shared_symbols_iterate(closure);
   847   Klass::shared_symbols_iterate(closure);
   848   closure->do_symbol(&_generic_signature);
   848   closure->do_symbol(&_generic_signature);
   849   closure->do_symbol(&_source_file_name);
   849   closure->do_symbol(&_source_file_name);
   850   closure->do_symbol(&_source_debug_extension);
       
   851 
   850 
   852   for (JavaFieldStream fs(this); !fs.done(); fs.next()) {
   851   for (JavaFieldStream fs(this); !fs.done(); fs.next()) {
   853     int name_index = fs.name_index();
   852     int name_index = fs.name_index();
   854     closure->do_symbol(constants()->symbol_at_addr(name_index));
   853     closure->do_symbol(constants()->symbol_at_addr(name_index));
   855     int sig_index  = fs.signature_index();
   854     int sig_index  = fs.signature_index();
  1942   if (_name != NULL) _name->decrement_refcount();
  1941   if (_name != NULL) _name->decrement_refcount();
  1943   // unreference array name derived from this class name (arrays of an unloaded
  1942   // unreference array name derived from this class name (arrays of an unloaded
  1944   // class can't be referenced anymore).
  1943   // class can't be referenced anymore).
  1945   if (_array_name != NULL)  _array_name->decrement_refcount();
  1944   if (_array_name != NULL)  _array_name->decrement_refcount();
  1946   if (_source_file_name != NULL) _source_file_name->decrement_refcount();
  1945   if (_source_file_name != NULL) _source_file_name->decrement_refcount();
  1947   if (_source_debug_extension != NULL) _source_debug_extension->decrement_refcount();
       
  1948   // walk constant pool and decrement symbol reference counts
  1946   // walk constant pool and decrement symbol reference counts
  1949   _constants->unreference_symbols();
  1947   _constants->unreference_symbols();
       
  1948 
       
  1949   if (_source_debug_extension != NULL) FREE_C_HEAP_ARRAY(char, _source_debug_extension, mtClass);
  1950 }
  1950 }
  1951 
  1951 
  1952 void instanceKlass::set_source_file_name(Symbol* n) {
  1952 void instanceKlass::set_source_file_name(Symbol* n) {
  1953   _source_file_name = n;
  1953   _source_file_name = n;
  1954   if (_source_file_name != NULL) _source_file_name->increment_refcount();
  1954   if (_source_file_name != NULL) _source_file_name->increment_refcount();
  1955 }
  1955 }
  1956 
  1956 
  1957 void instanceKlass::set_source_debug_extension(Symbol* n) {
  1957 void instanceKlass::set_source_debug_extension(char* array, int length) {
  1958   _source_debug_extension = n;
  1958   if (array == NULL) {
  1959   if (_source_debug_extension != NULL) _source_debug_extension->increment_refcount();
  1959     _source_debug_extension = NULL;
       
  1960   } else {
       
  1961     // Adding one to the attribute length in order to store a null terminator
       
  1962     // character could cause an overflow because the attribute length is
       
  1963     // already coded with an u4 in the classfile, but in practice, it's
       
  1964     // unlikely to happen.
       
  1965     assert((length+1) > length, "Overflow checking");
       
  1966     char* sde = NEW_C_HEAP_ARRAY(char, (length + 1), mtClass);
       
  1967     for (int i = 0; i < length; i++) {
       
  1968       sde[i] = array[i];
       
  1969     }
       
  1970     sde[length] = '\0';
       
  1971     _source_debug_extension = sde;
       
  1972   }
  1960 }
  1973 }
  1961 
  1974 
  1962 address instanceKlass::static_field_addr(int offset) {
  1975 address instanceKlass::static_field_addr(int offset) {
  1963   return (address)(offset + instanceMirrorKlass::offset_of_static_fields() + (intptr_t)java_mirror());
  1976   return (address)(offset + instanceMirrorKlass::offset_of_static_fields() + (intptr_t)java_mirror());
  1964 }
  1977 }