Chromium Code Reviews| 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); |
| } |