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;
}