diff src/share/vm/classfile/symbolTable.cpp @ 4988:eb5b24d1499f

Merge
author Christian Haeubl <christian.haeubl@oracle.com>
date Mon, 27 Feb 2012 15:06:36 -0800
parents 94ec88ca68e2
children fc9d8850ab8b
line wrap: on
line diff
--- a/src/share/vm/classfile/symbolTable.cpp	Mon Feb 27 14:50:58 2012 -0800
+++ b/src/share/vm/classfile/symbolTable.cpp	Mon Feb 27 15:06:36 2012 -0800
@@ -204,6 +204,24 @@
   return s;
 }
 
+// Look up the address of the literal in the SymbolTable for this Symbol*
+// Do not create any new symbols
+// Do not increment the reference count to keep this alive
+Symbol** SymbolTable::lookup_symbol_addr(Symbol* sym){
+  unsigned int hash = hash_symbol((char*)sym->bytes(), sym->utf8_length());
+  int index = the_table()->hash_to_index(hash);
+
+  for (HashtableEntry<Symbol*>* e = the_table()->bucket(index); e != NULL; e = e->next()) {
+    if (e->hash() == hash) {
+      Symbol* literal_sym = e->literal();
+      if (sym == literal_sym) {
+        return e->literal_addr();
+      }
+    }
+  }
+  return NULL;
+}
+
 // Suggestion: Push unicode-based lookup all the way into the hashing
 // and probing logic, so there is no need for convert_to_utf8 until
 // an actual new Symbol* is created.