src/share/vm/oops/constantPoolOop.hpp

Print this page
rev 3 : [mq]: anonk.patch

@@ -266,13 +266,20 @@
     return symbolOop(*obj_at_addr(which));
   }
 
   oop string_at(int which, TRAPS) {
     constantPoolHandle h_this(THREAD, this);
-    return string_at_impl(h_this, which, CHECK_NULL);
+    return string_at_impl(h_this, which, false, CHECK_NULL);
   }
 
+  bool is_pseudo_string_at(int which);
+
+  oop pseudo_string_at(int which, TRAPS) {
+    constantPoolHandle h_this(THREAD, this);
+    return string_at_impl(h_this, which, true, CHECK_NULL);
+  }
+
   // only called when we are sure a string entry is already resolved (via an
   // earlier string_at call.
   oop resolved_string_at(int which) {
     assert(tag_at(which).is_string(), "Corrupted constant pool");
     // Must do an acquire here in case another thread resolved the klass

@@ -290,10 +297,11 @@
 
   // Returns an UTF8 for a CONSTANT_String entry at a given index.
   // UTF8 char* representation was chosen to avoid conversion of
   // java_lang_Strings at resolved entries into symbolOops
   // or vice versa.
+  // Caller is responsible for checking for pseudo-strings.
   char* string_at_noresolve(int which);
 
   jint name_and_type_at(int which) {
     assert(tag_at(which).is_name_and_type(), "Corrupted constant pool");
     return *int_at_addr(which);

@@ -393,11 +401,11 @@
   static void verify_constant_pool_resolve(constantPoolHandle this_oop, KlassHandle klass, TRAPS);
 
   // Implementation of methods that needs an exposed 'this' pointer, in order to
   // handle GC while executing the method
   static klassOop klass_at_impl(constantPoolHandle this_oop, int which, TRAPS);
-  static oop string_at_impl(constantPoolHandle this_oop, int which, TRAPS);
+  static oop string_at_impl(constantPoolHandle this_oop, int which, bool pseudo_ok, TRAPS);
 
   // Resolve string constants (to prevent allocation during compilation)
   static void resolve_string_constants_impl(constantPoolHandle this_oop, TRAPS);
 
  public: