| Index: src/frames.cc
|
| diff --git a/src/frames.cc b/src/frames.cc
|
| index 167277f799617974fdd08c84e7fc71a0f5005610..fa411a65b060f06f7819f1225effb95009b01ff1 100644
|
| --- a/src/frames.cc
|
| +++ b/src/frames.cc
|
| @@ -79,23 +79,26 @@ class StackHandlerIterator BASE_EMBEDDED {
|
|
|
| #define INITIALIZE_SINGLETON(type, field) field##_(this),
|
| StackFrameIteratorBase::StackFrameIteratorBase(Isolate* isolate,
|
| - bool can_access_heap_objects)
|
| + bool can_access_heap_objects,
|
| + bool allow_builtins_on_stack)
|
| : isolate_(isolate),
|
| STACK_FRAME_TYPE_LIST(INITIALIZE_SINGLETON)
|
| frame_(NULL), handler_(NULL),
|
| - can_access_heap_objects_(can_access_heap_objects) {
|
| + can_access_heap_objects_(can_access_heap_objects),
|
| + allow_builtins_on_stack_(allow_builtins_on_stack) {
|
| }
|
| #undef INITIALIZE_SINGLETON
|
|
|
|
|
| -StackFrameIterator::StackFrameIterator(Isolate* isolate)
|
| - : StackFrameIteratorBase(isolate, true) {
|
| +StackFrameIterator::StackFrameIterator(Isolate* isolate,
|
| + bool allow_builtins_on_stack)
|
| + : StackFrameIteratorBase(isolate, true, allow_builtins_on_stack) {
|
| Reset(isolate->thread_local_top());
|
| }
|
|
|
|
|
| StackFrameIterator::StackFrameIterator(Isolate* isolate, ThreadLocalTop* t)
|
| - : StackFrameIteratorBase(isolate, true) {
|
| + : StackFrameIteratorBase(isolate, true, false) {
|
| Reset(t);
|
| }
|
|
|
| @@ -189,8 +192,9 @@ void JavaScriptFrameIterator::AdvanceToArgumentsFrame() {
|
| // -------------------------------------------------------------------------
|
|
|
|
|
| -StackTraceFrameIterator::StackTraceFrameIterator(Isolate* isolate)
|
| - : JavaScriptFrameIterator(isolate) {
|
| +StackTraceFrameIterator::StackTraceFrameIterator(Isolate* isolate,
|
| + bool allow_builtins_on_stack)
|
| + : JavaScriptFrameIterator(isolate, allow_builtins_on_stack) {
|
| if (!done() && !IsValidFrame()) Advance();
|
| }
|
|
|
| @@ -219,7 +223,7 @@ bool StackTraceFrameIterator::IsValidFrame() {
|
| SafeStackFrameIterator::SafeStackFrameIterator(
|
| Isolate* isolate,
|
| Address fp, Address sp, Address js_entry_sp)
|
| - : StackFrameIteratorBase(isolate, false),
|
| + : StackFrameIteratorBase(isolate, false, true),
|
| low_bound_(sp),
|
| high_bound_(js_entry_sp),
|
| top_frame_type_(StackFrame::NONE),
|
| @@ -454,7 +458,8 @@ StackFrame::Type StackFrame::ComputeType(const StackFrameIteratorBase* iterator,
|
| if (!iterator->can_access_heap_objects_) return JAVA_SCRIPT;
|
| Code::Kind kind = GetContainingCode(iterator->isolate(),
|
| *(state->pc_address))->kind();
|
| - ASSERT(kind == Code::FUNCTION || kind == Code::OPTIMIZED_FUNCTION);
|
| + ASSERT(kind == Code::FUNCTION || kind == Code::OPTIMIZED_FUNCTION ||
|
| + iterator->allow_builtins_on_stack_);
|
| return (kind == Code::OPTIMIZED_FUNCTION) ? OPTIMIZED : JAVA_SCRIPT;
|
| }
|
| return static_cast<StackFrame::Type>(Smi::cast(marker)->value());
|
|
|