| Index: src/accessors.cc
|
| diff --git a/src/accessors.cc b/src/accessors.cc
|
| index db74fa0a30c1aae4e7ad651a5448c4c919266a60..5c89c2552fe840173697654e26efc545552fdf43 100644
|
| --- a/src/accessors.cc
|
| +++ b/src/accessors.cc
|
| @@ -1116,115 +1116,6 @@
|
| attributes);
|
| }
|
|
|
| -//
|
| -// Accessors::ErrorStack
|
| -//
|
| -
|
| -namespace {
|
| -
|
| -MaybeHandle<JSReceiver> ClearInternalStackTrace(Isolate* isolate,
|
| - Handle<JSObject> error) {
|
| - RETURN_ON_EXCEPTION(
|
| - isolate,
|
| - JSReceiver::SetProperty(error, isolate->factory()->stack_trace_symbol(),
|
| - isolate->factory()->undefined_value(), STRICT),
|
| - JSReceiver);
|
| - return error;
|
| -}
|
| -
|
| -MaybeHandle<Object> FormatStackTrace(Isolate* isolate, Handle<JSObject> error,
|
| - Handle<Object> stack_trace) {
|
| - // TODO(jgruber): Port FormatStackTrace from JS.
|
| - Handle<JSFunction> fun = isolate->error_format_stack_trace();
|
| -
|
| - int argc = 2;
|
| - ScopedVector<Handle<Object>> argv(argc);
|
| - argv[0] = error;
|
| - argv[1] = stack_trace;
|
| -
|
| - Handle<Object> formatted_stack_trace;
|
| - ASSIGN_RETURN_ON_EXCEPTION(
|
| - isolate, formatted_stack_trace,
|
| - Execution::Call(isolate, fun, error, argc, argv.start()), Object);
|
| -
|
| - return formatted_stack_trace;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -void Accessors::ErrorStackGetter(
|
| - v8::Local<v8::Name> key, const v8::PropertyCallbackInfo<v8::Value>& info) {
|
| - i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
| - HandleScope scope(isolate);
|
| - Handle<JSObject> holder =
|
| - Handle<JSObject>::cast(Utils::OpenHandle(*info.Holder()));
|
| -
|
| - // Retrieve the structured stack trace.
|
| -
|
| - Handle<Object> stack_trace;
|
| - Handle<Symbol> stack_trace_symbol = isolate->factory()->stack_trace_symbol();
|
| - MaybeHandle<Object> maybe_stack_trace =
|
| - JSObject::GetProperty(holder, stack_trace_symbol);
|
| - if (!maybe_stack_trace.ToHandle(&stack_trace) ||
|
| - stack_trace->IsUndefined(isolate)) {
|
| - Handle<Object> result = isolate->factory()->undefined_value();
|
| - info.GetReturnValue().Set(Utils::ToLocal(result));
|
| - return;
|
| - }
|
| -
|
| - // Format it, clear the internal structured trace and reconfigure as a data
|
| - // property.
|
| -
|
| - Handle<Object> formatted_stack_trace;
|
| - if (!FormatStackTrace(isolate, holder, stack_trace)
|
| - .ToHandle(&formatted_stack_trace)) {
|
| - isolate->OptionalRescheduleException(false);
|
| - return;
|
| - }
|
| -
|
| - MaybeHandle<Object> result = ClearInternalStackTrace(isolate, holder);
|
| - if (result.is_null()) {
|
| - isolate->OptionalRescheduleException(false);
|
| - return;
|
| - }
|
| -
|
| - Handle<Object> receiver = Utils::OpenHandle(*info.This());
|
| - Handle<Name> name = Utils::OpenHandle(*key);
|
| - result = ReplaceAccessorWithDataProperty(isolate, receiver, holder, name,
|
| - formatted_stack_trace);
|
| - if (result.is_null()) {
|
| - isolate->OptionalRescheduleException(false);
|
| - return;
|
| - }
|
| -
|
| - v8::Local<v8::Value> value = Utils::ToLocal(formatted_stack_trace);
|
| - info.GetReturnValue().Set(value);
|
| -}
|
| -
|
| -void Accessors::ErrorStackSetter(v8::Local<v8::Name> name,
|
| - v8::Local<v8::Value> val,
|
| - const v8::PropertyCallbackInfo<void>& info) {
|
| - i::Isolate* isolate = reinterpret_cast<i::Isolate*>(info.GetIsolate());
|
| - HandleScope scope(isolate);
|
| - Handle<JSObject> obj =
|
| - Handle<JSObject>::cast(Utils::OpenHandle(*info.This()));
|
| -
|
| - // Clear internal properties to avoid memory leaks.
|
| - Handle<Symbol> stack_trace_symbol = isolate->factory()->stack_trace_symbol();
|
| - if (JSReceiver::HasOwnProperty(obj, stack_trace_symbol).FromMaybe(false)) {
|
| - ClearInternalStackTrace(isolate, obj);
|
| - }
|
| -
|
| - Accessors::ReconfigureToDataProperty(name, val, info);
|
| -}
|
| -
|
| -Handle<AccessorInfo> Accessors::ErrorStackInfo(Isolate* isolate,
|
| - PropertyAttributes attributes) {
|
| - Handle<AccessorInfo> info =
|
| - MakeAccessor(isolate, isolate->factory()->stack_string(),
|
| - &ErrorStackGetter, &ErrorStackSetter, attributes);
|
| - return info;
|
| -}
|
|
|
| } // namespace internal
|
| } // namespace v8
|
|
|