src/share/vm/compiler/compilerOracle.cpp

Print this page

        

@@ -385,16 +385,10 @@
 //   cmd  java.lang.String::foo
 //  VM syntax
 //   cmd  java/lang/String[. ]foo
 //
 
-static const char* patterns[] = {
-  "%*[ \t]%255" RANGEDOT    " "     "%255"  RANGE0 "%n",
-  "%*[ \t]%255" RANGEDOT   "::"     "%255"  RANGE0 "%n",
-  "%*[ \t]%255" RANGESLASH "%*[ .]" "%255"  RANGE0 "%n",
-};
-
 static MethodMatcher::Mode check_mode(char name[], const char*& error_msg) {
   int match = MethodMatcher::Exact;
   while (name[0] == '*') {
     match |= MethodMatcher::Suffix;
     strcpy(name, name + 1);

@@ -419,17 +413,22 @@
                       char class_name[],  MethodMatcher::Mode* c_mode,
                       char method_name[], MethodMatcher::Mode* m_mode,
                       int* bytes_read, const char*& error_msg) {
   *bytes_read = 0;
   error_msg = NULL;
-  for (uint i = 0; i < ARRAY_SIZE(patterns); i++) {
-    if (2 == sscanf(line, patterns[i], class_name, method_name, bytes_read)) {
+  int scanned = sscanf(line, "%*[ \t]%255" RANGEDOT    " "     "%255"  RANGE0 "%n", class_name, method_name, bytes_read);
+  if (scanned != 2) {
+    scanned = sscanf(line, "%*[ \t]%255" RANGEDOT   "::"     "%255"  RANGE0 "%n", class_name, method_name, bytes_read);
+    if (scanned != 2) {
+      scanned = sscanf(line, "%*[ \t]%255" RANGESLASH "%*[ .]" "%255"  RANGE0 "%n", class_name, method_name, bytes_read);
+    }
+  }
+  if (scanned == 2) {
       *c_mode = check_mode(class_name, error_msg);
       *m_mode = check_mode(method_name, error_msg);
       return *c_mode != MethodMatcher::Unknown && *m_mode != MethodMatcher::Unknown;
     }
-  }
   return false;
 }