diff agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java @ 3939:f6f3bb0ee072

7088955: add C2 IR support to the SA Reviewed-by: kvn
author never
date Sun, 11 Sep 2011 14:48:24 -0700
parents 63997f575155
children cfa2c82f4c04
line wrap: on
line diff
--- a/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java	Sat Sep 10 17:29:02 2011 -0700
+++ b/agent/src/share/classes/sun/jvm/hotspot/oops/OopUtilities.java	Sun Sep 11 14:48:24 2011 -0700
@@ -112,6 +112,32 @@
     return buf.toString();
   }
 
+  public static String escapeString(String s) {
+    StringBuilder sb = null;
+    for (int index = 0; index < s.length(); index++) {
+      char value = s.charAt(index);
+      if (value >= 32 && value < 127 || value == '\'' || value == '\\') {
+        if (sb != null) {
+          sb.append(value);
+        }
+      } else {
+        if (sb == null) {
+          sb = new StringBuilder(s.length() * 2);
+          sb.append(s, 0, index);
+        }
+        sb.append("\\u");
+        if (value < 0x10) sb.append("000");
+        else if (value < 0x100) sb.append("00");
+        else if (value < 0x1000) sb.append("0");
+        sb.append(Integer.toHexString(value));
+      }
+    }
+    if (sb != null) {
+      return sb.toString();
+    }
+    return s;
+  }
+
   public static String stringOopToString(Oop stringOop) {
     if (offsetField == null) {
       InstanceKlass k = (InstanceKlass) stringOop.getKlass();
@@ -129,6 +155,10 @@
                              countField.getValue(stringOop));
   }
 
+  public static String stringOopToEscapedString(Oop stringOop) {
+    return escapeString(stringOopToString(stringOop));
+  }
+
   private static void initThreadGroupFields() {
     if (threadGroupParentField == null) {
       SystemDictionary sysDict = VM.getVM().getSystemDictionary();