Mercurial > hg > graal-jvmci-8
comparison src/share/vm/classfile/javaClasses.cpp @ 14422:2b8e28fdf503
Merge
author | kvn |
---|---|
date | Tue, 05 Nov 2013 17:38:04 -0800 |
parents | 07f8c2a453f8 |
children | 096c224171c4 d8d1b22b1809 9428a0b94204 |
comparison
equal
deleted
inserted
replaced
14421:3068270ba476 | 14422:2b8e28fdf503 |
---|---|
430 if (length != len) { | 430 if (length != len) { |
431 return false; | 431 return false; |
432 } | 432 } |
433 for (int i = 0; i < len; i++) { | 433 for (int i = 0; i < len; i++) { |
434 if (value->char_at(i + offset) != chars[i]) { | 434 if (value->char_at(i + offset) != chars[i]) { |
435 return false; | |
436 } | |
437 } | |
438 return true; | |
439 } | |
440 | |
441 bool java_lang_String::equals(oop str1, oop str2) { | |
442 assert(str1->klass() == SystemDictionary::String_klass(), | |
443 "must be java String"); | |
444 assert(str2->klass() == SystemDictionary::String_klass(), | |
445 "must be java String"); | |
446 typeArrayOop value1 = java_lang_String::value(str1); | |
447 int offset1 = java_lang_String::offset(str1); | |
448 int length1 = java_lang_String::length(str1); | |
449 typeArrayOop value2 = java_lang_String::value(str2); | |
450 int offset2 = java_lang_String::offset(str2); | |
451 int length2 = java_lang_String::length(str2); | |
452 | |
453 if (length1 != length2) { | |
454 return false; | |
455 } | |
456 for (int i = 0; i < length1; i++) { | |
457 if (value1->char_at(i + offset1) != value2->char_at(i + offset2)) { | |
435 return false; | 458 return false; |
436 } | 459 } |
437 } | 460 } |
438 return true; | 461 return true; |
439 } | 462 } |
1351 // Get strings and string lengths | 1374 // Get strings and string lengths |
1352 InstanceKlass* holder = InstanceKlass::cast(java_lang_Class::as_Klass(mirror())); | 1375 InstanceKlass* holder = InstanceKlass::cast(java_lang_Class::as_Klass(mirror())); |
1353 const char* klass_name = holder->external_name(); | 1376 const char* klass_name = holder->external_name(); |
1354 int buf_len = (int)strlen(klass_name); | 1377 int buf_len = (int)strlen(klass_name); |
1355 | 1378 |
1356 // pushing to the stack trace added one. | 1379 // The method id may point to an obsolete method, can't get more stack information |
1357 Method* method = holder->method_with_idnum(method_id); | 1380 Method* method = holder->method_with_idnum(method_id); |
1381 if (method == NULL) { | |
1382 char* buf = NEW_RESOURCE_ARRAY(char, buf_len + 64); | |
1383 // This is what the java code prints in this case - added Redefined | |
1384 sprintf(buf, "\tat %s.null (Redefined)", klass_name); | |
1385 return buf; | |
1386 } | |
1387 | |
1358 char* method_name = method->name()->as_C_string(); | 1388 char* method_name = method->name()->as_C_string(); |
1359 buf_len += (int)strlen(method_name); | 1389 buf_len += (int)strlen(method_name); |
1360 | 1390 |
1361 char* source_file_name = NULL; | 1391 char* source_file_name = NULL; |
1362 if (version_matches(method, version)) { | 1392 if (version_matches(method, version)) { |
1748 | 1778 |
1749 oop element = java_lang_StackTraceElement::create(mirror, method, version, bci, CHECK_0); | 1779 oop element = java_lang_StackTraceElement::create(mirror, method, version, bci, CHECK_0); |
1750 return element; | 1780 return element; |
1751 } | 1781 } |
1752 | 1782 |
1753 oop java_lang_StackTraceElement::create(Handle mirror, int method_id, int version, int bci, TRAPS) { | 1783 oop java_lang_StackTraceElement::create(Handle mirror, int method_id, |
1784 int version, int bci, TRAPS) { | |
1754 // Allocate java.lang.StackTraceElement instance | 1785 // Allocate java.lang.StackTraceElement instance |
1755 Klass* k = SystemDictionary::StackTraceElement_klass(); | 1786 Klass* k = SystemDictionary::StackTraceElement_klass(); |
1756 assert(k != NULL, "must be loaded in 1.4+"); | 1787 assert(k != NULL, "must be loaded in 1.4+"); |
1757 instanceKlassHandle ik (THREAD, k); | 1788 instanceKlassHandle ik (THREAD, k); |
1758 if (ik->should_be_initialized()) { | 1789 if (ik->should_be_initialized()) { |
1765 InstanceKlass* holder = InstanceKlass::cast(java_lang_Class::as_Klass(mirror())); | 1796 InstanceKlass* holder = InstanceKlass::cast(java_lang_Class::as_Klass(mirror())); |
1766 const char* str = holder->external_name(); | 1797 const char* str = holder->external_name(); |
1767 oop classname = StringTable::intern((char*) str, CHECK_0); | 1798 oop classname = StringTable::intern((char*) str, CHECK_0); |
1768 java_lang_StackTraceElement::set_declaringClass(element(), classname); | 1799 java_lang_StackTraceElement::set_declaringClass(element(), classname); |
1769 | 1800 |
1801 Method* method = holder->method_with_idnum(method_id); | |
1802 // Method on stack may be obsolete because it was redefined so cannot be | |
1803 // found by idnum. | |
1804 if (method == NULL) { | |
1805 // leave name and fileName null | |
1806 java_lang_StackTraceElement::set_lineNumber(element(), -1); | |
1807 return element(); | |
1808 } | |
1809 | |
1770 // Fill in method name | 1810 // Fill in method name |
1771 Method* method = holder->method_with_idnum(method_id); | |
1772 oop methodname = StringTable::intern(method->name(), CHECK_0); | 1811 oop methodname = StringTable::intern(method->name(), CHECK_0); |
1773 java_lang_StackTraceElement::set_methodName(element(), methodname); | 1812 java_lang_StackTraceElement::set_methodName(element(), methodname); |
1774 | 1813 |
1775 if (!version_matches(method, version)) { | 1814 if (!version_matches(method, version)) { |
1776 // The method was redefined, accurate line number information isn't available | 1815 // The method was redefined, accurate line number information isn't available |