Mercurial > hg > truffle
comparison src/share/vm/classfile/javaClasses.cpp @ 2477:3449f5e02cc4
Merge
author | coleenp |
---|---|
date | Tue, 12 Apr 2011 14:18:53 -0700 |
parents | ed69575596ac 6a615eae2f34 |
children | 01147d8aac1d |
comparison
equal
deleted
inserted
replaced
2468:6c97c830fb6f | 2477:3449f5e02cc4 |
---|---|
1429 continue; | 1429 continue; |
1430 } | 1430 } |
1431 } | 1431 } |
1432 } | 1432 } |
1433 #ifdef ASSERT | 1433 #ifdef ASSERT |
1434 assert(st_method() == method && st.bci() == bci, | 1434 assert(st_method() == method && st.bci() == bci, |
1435 "Wrong stack trace"); | 1435 "Wrong stack trace"); |
1436 st.next(); | 1436 st.next(); |
1437 // vframeStream::method isn't GC-safe so store off a copy | 1437 // vframeStream::method isn't GC-safe so store off a copy |
1438 // of the methodOop in case we GC. | 1438 // of the methodOop in case we GC. |
1439 if (!st.at_end()) { | 1439 if (!st.at_end()) { |
1440 st_method = st.method(); | 1440 st_method = st.method(); |
1441 } | 1441 } |
1442 #endif | 1442 #endif |
1443 | |
1444 // the format of the stacktrace will be: | |
1445 // - 1 or more fillInStackTrace frames for the exception class (skipped) | |
1446 // - 0 or more <init> methods for the exception class (skipped) | |
1447 // - rest of the stack | |
1448 | |
1443 if (!skip_fillInStackTrace_check) { | 1449 if (!skip_fillInStackTrace_check) { |
1444 // check "fillInStackTrace" only once, so we negate the flag | 1450 if ((method->name() == vmSymbols::fillInStackTrace_name() || |
1445 // after the first time check. | 1451 method->name() == vmSymbols::fillInStackTrace0_name()) && |
1446 skip_fillInStackTrace_check = true; | 1452 throwable->is_a(method->method_holder())) { |
1447 if (method->name() == vmSymbols::fillInStackTrace_name()) { | |
1448 continue; | 1453 continue; |
1449 } | 1454 } |
1455 else { | |
1456 skip_fillInStackTrace_check = true; // gone past them all | |
1457 } | |
1450 } | 1458 } |
1451 // skip <init> methods of the exceptions klass. If there is <init> methods | |
1452 // that belongs to a superclass of the exception we are going to skipping | |
1453 // them in stack trace. This is simlar to classic VM. | |
1454 if (!skip_throwableInit_check) { | 1459 if (!skip_throwableInit_check) { |
1460 assert(skip_fillInStackTrace_check, "logic error in backtrace filtering"); | |
1461 | |
1462 // skip <init> methods of the exception class and superclasses | |
1463 // This is simlar to classic VM. | |
1455 if (method->name() == vmSymbols::object_initializer_name() && | 1464 if (method->name() == vmSymbols::object_initializer_name() && |
1456 throwable->is_a(method->method_holder())) { | 1465 throwable->is_a(method->method_holder())) { |
1457 continue; | 1466 continue; |
1458 } else { | 1467 } else { |
1459 // if no "Throwable.init()" method found, we stop checking it next time. | 1468 // there are none or we've seen them all - either way stop checking |
1460 skip_throwableInit_check = true; | 1469 skip_throwableInit_check = true; |
1461 } | 1470 } |
1462 } | 1471 } |
1463 bt.push(method, bci, CHECK); | 1472 bt.push(method, bci, CHECK); |
1464 total_count++; | 1473 total_count++; |