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()); |