hotspot/src/share/vm/runtime/vmStructs.cpp
changeset 8076 96d498ec7ae1
parent 7890 7d1d76674e2e
child 8315 1503f9d7681f
child 8107 78e5bd944384
--- a/hotspot/src/share/vm/runtime/vmStructs.cpp	Thu Jan 27 13:42:28 2011 -0800
+++ b/hotspot/src/share/vm/runtime/vmStructs.cpp	Thu Jan 27 16:11:27 2011 -0800
@@ -83,8 +83,7 @@
 #include "oops/objArrayKlassKlass.hpp"
 #include "oops/objArrayOop.hpp"
 #include "oops/oop.inline.hpp"
-#include "oops/symbolKlass.hpp"
-#include "oops/symbolOop.hpp"
+#include "oops/symbol.hpp"
 #include "oops/typeArrayKlass.hpp"
 #include "oops/typeArrayKlassKlass.hpp"
 #include "oops/typeArrayOop.hpp"
@@ -246,8 +245,8 @@
   nonstatic_field(instanceKlass,               _class_loader,                                 oop)                                   \
   nonstatic_field(instanceKlass,               _protection_domain,                            oop)                                   \
   nonstatic_field(instanceKlass,               _signers,                                      objArrayOop)                           \
-  nonstatic_field(instanceKlass,               _source_file_name,                             symbolOop)                             \
-  nonstatic_field(instanceKlass,               _source_debug_extension,                       symbolOop)                             \
+  nonstatic_field(instanceKlass,               _source_file_name,                             Symbol*)                               \
+  nonstatic_field(instanceKlass,               _source_debug_extension,                       Symbol*)                               \
   nonstatic_field(instanceKlass,               _inner_classes,                                typeArrayOop)                          \
   nonstatic_field(instanceKlass,               _nonstatic_field_size,                         int)                                   \
   nonstatic_field(instanceKlass,               _static_field_size,                            int)                                   \
@@ -265,7 +264,7 @@
   nonstatic_field(instanceKlass,               _jni_ids,                                      JNIid*)                                \
   nonstatic_field(instanceKlass,               _osr_nmethods_head,                            nmethod*)                              \
   nonstatic_field(instanceKlass,               _breakpoints,                                  BreakpointInfo*)                       \
-  nonstatic_field(instanceKlass,               _generic_signature,                            symbolOop)                             \
+  nonstatic_field(instanceKlass,               _generic_signature,                            Symbol*)                               \
   nonstatic_field(instanceKlass,               _methods_jmethod_ids,                          jmethodID*)                            \
   nonstatic_field(instanceKlass,               _methods_cached_itable_indices,                int*)                                  \
   volatile_nonstatic_field(instanceKlass,      _idnum_allocated_count,                        u2)                                    \
@@ -282,7 +281,7 @@
   nonstatic_field(Klass,                       _modifier_flags,                               jint)                                  \
   nonstatic_field(Klass,                       _super,                                        klassOop)                              \
   nonstatic_field(Klass,                       _layout_helper,                                jint)                                  \
-  nonstatic_field(Klass,                       _name,                                         symbolOop)                             \
+  nonstatic_field(Klass,                       _name,                                         Symbol*)                               \
   nonstatic_field(Klass,                       _access_flags,                                 AccessFlags)                           \
   nonstatic_field(Klass,                       _subklass,                                     klassOop)                              \
   nonstatic_field(Klass,                       _next_sibling,                                 klassOop)                              \
@@ -326,9 +325,10 @@
   nonstatic_field(constMethodOopDesc,          _generic_signature_index,                      u2)                                    \
   nonstatic_field(objArrayKlass,               _element_klass,                                klassOop)                              \
   nonstatic_field(objArrayKlass,               _bottom_klass,                                 klassOop)                              \
-  nonstatic_field(symbolKlass,                 _alloc_size,                                   juint)                                 \
-  nonstatic_field(symbolOopDesc,               _length,                                       unsigned short)                        \
-  unchecked_nonstatic_field(symbolOopDesc,     _body,                                         sizeof(jbyte)) /* NOTE: no type */     \
+  volatile_nonstatic_field(Symbol,             _refcount,                                     int)                                   \
+  nonstatic_field(Symbol,                      _identity_hash,                                int)                                   \
+  nonstatic_field(Symbol,                      _length,                                       unsigned short)                        \
+  unchecked_nonstatic_field(Symbol,            _body,                                         sizeof(jbyte)) /* NOTE: no type */     \
   nonstatic_field(typeArrayKlass,              _max_length,                                   int)                                   \
                                                                                                                                      \
   /***********************/                                                                                                          \
@@ -375,7 +375,6 @@
      static_field(Universe,                    _longArrayKlassObj,                            klassOop)                              \
      static_field(Universe,                    _singleArrayKlassObj,                          klassOop)                              \
      static_field(Universe,                    _doubleArrayKlassObj,                          klassOop)                              \
-     static_field(Universe,                    _symbolKlassObj,                               klassOop)                              \
      static_field(Universe,                    _methodKlassObj,                               klassOop)                              \
      static_field(Universe,                    _constMethodKlassObj,                          klassOop)                              \
      static_field(Universe,                    _methodDataKlassObj,                           klassOop)                              \
@@ -648,7 +647,7 @@
                                                                                                                                      \
   nonstatic_field(BasicHashtableEntry,         _next,                                         BasicHashtableEntry*)                  \
   nonstatic_field(BasicHashtableEntry,         _hash,                                         unsigned int)                          \
-  nonstatic_field(HashtableEntry,              _literal,                                      oop)                                   \
+  nonstatic_field(HashtableEntry<intptr_t>,    _literal,                                      intptr_t) \
                                                                                                                                      \
   /*************/                                                                                                                    \
   /* Hashtable */                                                                                                                    \
@@ -683,7 +682,7 @@
   /* LoaderConstraintEntry */                                                                                                        \
   /*************************/                                                                                                        \
                                                                                                                                      \
-  nonstatic_field(LoaderConstraintEntry,       _name,                                         symbolOop)                             \
+  nonstatic_field(LoaderConstraintEntry,       _name,                                         Symbol*)                               \
   nonstatic_field(LoaderConstraintEntry,       _num_loaders,                                  int)                                   \
   nonstatic_field(LoaderConstraintEntry,       _max_loaders,                                  int)                                   \
   nonstatic_field(LoaderConstraintEntry,       _loaders,                                      oop*)                                  \
@@ -1088,11 +1087,11 @@
            declare_type(objArrayKlassKlass, arrayKlassKlass)              \
            declare_type(objArrayOopDesc, arrayOopDesc)                    \
            declare_type(constMethodOopDesc, oopDesc)                      \
-           declare_type(symbolKlass, Klass)                               \
-           declare_type(symbolOopDesc, oopDesc)                           \
            declare_type(typeArrayKlass, arrayKlass)                       \
            declare_type(typeArrayKlassKlass, arrayKlassKlass)             \
            declare_type(typeArrayOopDesc, arrayOopDesc)                   \
+           declare_toplevel_type(Symbol)                                  \
+           declare_toplevel_type(Symbol*)                                 \
                                                                           \
   /********/                                                              \
   /* Oops */                                                              \
@@ -1109,7 +1108,6 @@
   declare_oop_type(narrowOop)                                             \
   declare_oop_type(wideKlassOop)                                          \
   declare_oop_type(constMethodOop)                                        \
-  declare_oop_type(symbolOop)                                             \
   declare_oop_type(typeArrayOop)                                          \
                                                                           \
   /*************************************/                                 \
@@ -1207,33 +1205,21 @@
   /*********************************/                                     \
                                                                           \
   declare_toplevel_type(BasicHashtable)                                   \
-    declare_type(Hashtable, BasicHashtable)                               \
-    declare_type(SymbolTable, Hashtable)                                  \
-    declare_type(StringTable, Hashtable)                                  \
-    declare_type(LoaderConstraintTable, Hashtable)                        \
-    declare_type(TwoOopHashtable, Hashtable)                              \
-    declare_type(Dictionary, TwoOopHashtable)                             \
-    declare_type(PlaceholderTable, TwoOopHashtable)                       \
-  declare_toplevel_type(Hashtable*)                                       \
-  declare_toplevel_type(SymbolTable*)                                     \
-  declare_toplevel_type(StringTable*)                                     \
-  declare_toplevel_type(LoaderConstraintTable*)                           \
-  declare_toplevel_type(TwoOopHashtable*)                                 \
-  declare_toplevel_type(Dictionary*)                                      \
-  declare_toplevel_type(PlaceholderTable*)                                \
+    declare_type(Hashtable<intptr_t>, BasicHashtable)                     \
+  declare_type(SymbolTable, Hashtable<Symbol*>)                           \
+  declare_type(StringTable, Hashtable<oop>)                               \
+    declare_type(LoaderConstraintTable, Hashtable<klassOop>)              \
+    declare_type(TwoOopHashtable<klassOop>, Hashtable<klassOop>)          \
+    declare_type(Dictionary, TwoOopHashtable<klassOop>)                   \
+    declare_type(PlaceholderTable, TwoOopHashtable<Symbol*>)              \
   declare_toplevel_type(BasicHashtableEntry)                              \
-  declare_toplevel_type(BasicHashtableEntry*)                             \
-    declare_type(HashtableEntry, BasicHashtableEntry)                     \
-    declare_type(DictionaryEntry, HashtableEntry)                         \
-    declare_type(PlaceholderEntry, HashtableEntry)                        \
-    declare_type(LoaderConstraintEntry, HashtableEntry)                   \
-  declare_toplevel_type(HashtableEntry*)                                  \
-  declare_toplevel_type(DictionaryEntry*)                                 \
+  declare_type(HashtableEntry<intptr_t>, BasicHashtableEntry)             \
+    declare_type(DictionaryEntry, HashtableEntry<klassOop>)               \
+    declare_type(PlaceholderEntry, HashtableEntry<Symbol*>)               \
+    declare_type(LoaderConstraintEntry, HashtableEntry<klassOop>)         \
   declare_toplevel_type(HashtableBucket)                                  \
-  declare_toplevel_type(HashtableBucket*)                                 \
   declare_toplevel_type(SystemDictionary)                                 \
   declare_toplevel_type(ProtectionDomainEntry)                            \
-  declare_toplevel_type(ProtectionDomainEntry*)                           \
                                                                           \
   /***********************************************************/           \
   /* Thread hierarchy (needed for run-time type information) */           \
@@ -1667,10 +1653,10 @@
   declare_constant(instanceKlass::initialization_error)                   \
                                                                           \
   /*********************************/                                     \
-  /* symbolOop - symbol max length */                                     \
+  /* Symbol* - symbol max length */                                     \
   /*********************************/                                     \
                                                                           \
-  declare_constant(symbolOopDesc::max_symbol_length)                      \
+  declare_constant(Symbol::max_symbol_length)                             \
                                                                           \
   /*************************************************/                     \
   /* constantPoolOop layout enum for InvokeDynamic */                     \
@@ -2431,17 +2417,69 @@
 }
 
 #ifdef ASSERT
+static int recursiveFindType(VMTypeEntry* origtypes, const char* typeName, bool isRecurse) {
+  {
+    VMTypeEntry* types = origtypes;
+    while (types->typeName != NULL) {
+      if (!strcmp(typeName, types->typeName)) {
+        return 1;
+      }
+      ++types;
+    }
+  }
+  size_t len = strlen(typeName);
+  if (typeName[len-1] == '*') {
+    char * s = new char[len];
+    strncpy(s, typeName, len - 1);
+    s[len-1] = '\0';
+    // tty->print_cr("checking \"%s\" for \"%s\"", s, typeName);
+    if (recursiveFindType(origtypes, s, true) == 1) {
+      delete s;
+      return 1;
+    }
+    delete s;
+  }
+  if (strstr(typeName, "GrowableArray<") == typeName) {
+    const char * start = typeName + strlen("GrowableArray<");
+    const char * end = strrchr(typeName, '>');
+    int len = end - start + 1;
+    char * s = new char[len];
+    strncpy(s, start, len - 1);
+    s[len-1] = '\0';
+    // tty->print_cr("checking \"%s\" for \"%s\"", s, typeName);
+    if (recursiveFindType(origtypes, s, true) == 1) {
+      delete s;
+      return 1;
+    }
+    delete s;
+  }
+  if (strstr(typeName, "const ") == typeName) {
+    const char * s = typeName + strlen("const ");
+    // tty->print_cr("checking \"%s\" for \"%s\"", s, typeName);
+    if (recursiveFindType(origtypes, s, true) == 1) {
+      return 1;
+    }
+  }
+  if (strstr(typeName, " const") == typeName + len - 6) {
+    char * s = strdup(typeName);
+    s[len - 6] = '\0';
+    // tty->print_cr("checking \"%s\" for \"%s\"", s, typeName);
+    if (recursiveFindType(origtypes, s, true) == 1) {
+      return 1;
+    }
+  }
+  if (!isRecurse) {
+    tty->print_cr("type \"%s\" not found", typeName);
+  }
+  return 2;
+}
+
+
 int
 VMStructs::findType(const char* typeName) {
   VMTypeEntry* types = gHotSpotVMTypes;
 
-  while (types->typeName != NULL) {
-    if (!strcmp(typeName, types->typeName)) {
-      return 1;
-    }
-    ++types;
-  }
-  return 0;
+  return recursiveFindType(types, typeName, false);
 }
 #endif