199 const char* Symbol::as_klass_external_name() const { |
199 const char* Symbol::as_klass_external_name() const { |
200 char* str = as_C_string(); |
200 char* str = as_C_string(); |
201 int length = (int)strlen(str); |
201 int length = (int)strlen(str); |
202 // Turn all '/'s into '.'s (also for array klasses) |
202 // Turn all '/'s into '.'s (also for array klasses) |
203 for (int index = 0; index < length; index++) { |
203 for (int index = 0; index < length; index++) { |
204 if (str[index] == '/') { |
204 if (str[index] == JVM_SIGNATURE_SLASH) { |
205 str[index] = '.'; |
205 str[index] = JVM_SIGNATURE_DOT; |
206 } |
206 } |
207 } |
207 } |
208 return str; |
208 return str; |
209 } |
209 } |
210 |
210 |
211 static void print_class(outputStream *os, char *class_str, int len) { |
211 static void print_class(outputStream *os, char *class_str, int len) { |
212 for (int i = 0; i < len; ++i) { |
212 for (int i = 0; i < len; ++i) { |
213 if (class_str[i] == '/') { |
213 if (class_str[i] == JVM_SIGNATURE_SLASH) { |
214 os->put('.'); |
214 os->put(JVM_SIGNATURE_DOT); |
215 } else { |
215 } else { |
216 os->put(class_str[i]); |
216 os->put(class_str[i]); |
217 } |
217 } |
218 } |
218 } |
219 } |
219 } |
220 |
220 |
221 static void print_array(outputStream *os, char *array_str, int len) { |
221 static void print_array(outputStream *os, char *array_str, int len) { |
222 int dimensions = 0; |
222 int dimensions = 0; |
223 for (int i = 0; i < len; ++i) { |
223 for (int i = 0; i < len; ++i) { |
224 if (array_str[i] == '[') { |
224 if (array_str[i] == JVM_SIGNATURE_ARRAY) { |
225 dimensions++; |
225 dimensions++; |
226 } else if (array_str[i] == 'L') { |
226 } else if (array_str[i] == JVM_SIGNATURE_CLASS) { |
227 // Expected format: L<type name>;. Skip 'L' and ';' delimiting the type name. |
227 // Expected format: L<type name>;. Skip 'L' and ';' delimiting the type name. |
228 print_class(os, array_str+i+1, len-i-2); |
228 print_class(os, array_str+i+1, len-i-2); |
229 break; |
229 break; |
230 } else { |
230 } else { |
231 os->print("%s", type2name(char2type(array_str[i]))); |
231 os->print("%s", type2name(char2type(array_str[i]))); |