Index: src/api.cc |
diff --git a/src/api.cc b/src/api.cc |
index 350ce1be164e0b2ee885185b5d2dc5afcdf46f58..9e727b39f44d7a83118090614dfbe6ab464e2f07 100644 |
--- a/src/api.cc |
+++ b/src/api.cc |
@@ -2751,8 +2751,8 @@ v8::Local<v8::StackTrace> Message::GetStackTrace() const { |
EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
auto message = i::Handle<i::JSMessageObject>::cast(Utils::OpenHandle(this)); |
i::Handle<i::Object> stackFramesObj(message->stack_frames(), isolate); |
- if (!stackFramesObj->IsJSArray()) return v8::Local<v8::StackTrace>(); |
- auto stackTrace = i::Handle<i::JSArray>::cast(stackFramesObj); |
+ if (!stackFramesObj->IsFixedArray()) return v8::Local<v8::StackTrace>(); |
+ auto stackTrace = i::Handle<i::FixedArray>::cast(stackFramesObj); |
return scope.Escape(Utils::StackTraceToLocal(stackTrace)); |
} |
@@ -2878,14 +2878,17 @@ Local<StackFrame> StackTrace::GetFrame(uint32_t index) const { |
ENTER_V8_NO_SCRIPT_NO_EXCEPTION(isolate); |
EscapableHandleScope scope(reinterpret_cast<Isolate*>(isolate)); |
auto self = Utils::OpenHandle(this); |
- auto obj = i::JSReceiver::GetElement(isolate, self, index).ToHandleChecked(); |
+ if (index >= static_cast<uint32_t>(self->length())) { |
Clemens Hammacher
2017/04/14 10:10:42
Since the code did a `ToHandleChecked()` before, t
Clemens Hammacher
2017/04/14 10:10:42
Since the code did a `ToHandleChecked()` before, t
kozy
2017/04/14 16:15:03
Done.
|
+ return Local<StackFrame>(); |
+ } |
+ auto obj = handle(self->get(index), isolate); |
auto info = i::Handle<i::StackFrameInfo>::cast(obj); |
return scope.Escape(Utils::StackFrameToLocal(info)); |
} |
int StackTrace::GetFrameCount() const { |
- return i::Smi::cast(Utils::OpenHandle(this)->length())->value(); |
+ return Utils::OpenHandle(this)->length(); |
} |
namespace { |
@@ -2933,12 +2936,12 @@ i::Handle<i::JSObject> NewFrameObject(i::Isolate* isolate, |
Local<Array> StackTrace::AsArray() { |
i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); |
- i::Handle<i::JSArray> self = Utils::OpenHandle(this); |
- int frame_count = GetFrameCount(); |
+ i::Handle<i::FixedArray> self = Utils::OpenHandle(this); |
+ int frame_count = self->length(); |
i::Handle<i::FixedArray> frames = |
isolate->factory()->NewFixedArray(frame_count); |
for (int i = 0; i < frame_count; ++i) { |
- auto obj = i::JSReceiver::GetElement(isolate, self, i).ToHandleChecked(); |
+ auto obj = handle(self->get(i), isolate); |
auto frame = i::Handle<i::StackFrameInfo>::cast(obj); |
i::Handle<i::JSObject> frame_obj = NewFrameObject(isolate, frame); |
frames->set(i, *frame_obj); |
@@ -2954,7 +2957,7 @@ Local<StackTrace> StackTrace::CurrentStackTrace( |
StackTraceOptions options) { |
i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate); |
ENTER_V8_NO_SCRIPT_NO_EXCEPTION(i_isolate); |
- i::Handle<i::JSArray> stackTrace = |
+ i::Handle<i::FixedArray> stackTrace = |
i_isolate->CaptureCurrentStackTrace(frame_limit, options); |
return Utils::StackTraceToLocal(stackTrace); |
} |