%PDF- %PDF-
| Direktori : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/tools/v8windbg/src/ |
| Current File : /home/vacivi36/vittasync.vacivitta.com.br/vittasync/node/deps/v8/tools/v8windbg/src/cur-isolate.cc |
// Copyright 2020 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "tools/v8windbg/src/cur-isolate.h"
HRESULT GetIsolateLocation(WRL::ComPtr<IDebugHostContext>& sp_ctx,
Location* location) {
auto sp_v8_module = Extension::Current()->GetV8Module(sp_ctx);
if (sp_v8_module == nullptr) return E_FAIL;
WRL::ComPtr<IDebugHostSymbol> sp_isolate_sym;
RETURN_IF_FAIL(
sp_v8_module->FindSymbolByName(kIsolateOffset, &sp_isolate_sym));
SymbolKind kind;
RETURN_IF_FAIL(sp_isolate_sym->GetSymbolKind(&kind));
if (kind != SymbolData) return E_FAIL;
WRL::ComPtr<IDebugHostData> sp_isolate_key_data;
RETURN_IF_FAIL(sp_isolate_sym.As(&sp_isolate_key_data));
RETURN_IF_FAIL(sp_isolate_key_data->GetLocation(location));
return S_OK;
}
HRESULT GetCurrentIsolate(WRL::ComPtr<IModelObject>& sp_result) {
sp_result = nullptr;
// Get the current context
WRL::ComPtr<IDebugHostContext> sp_host_context;
RETURN_IF_FAIL(sp_debug_host->GetCurrentContext(&sp_host_context));
Location isolate_addr;
RETURN_IF_FAIL(GetIsolateLocation(sp_host_context, &isolate_addr));
// If we got the isolate_key OK, then must have the V8 module loaded
// Get the internal Isolate type from it
WRL::ComPtr<IDebugHostType> sp_isolate_type, sp_isolate_ptr_type;
RETURN_IF_FAIL(Extension::Current()
->GetV8Module(sp_host_context)
->FindTypeByName(kIsolate, &sp_isolate_type));
RETURN_IF_FAIL(
sp_isolate_type->CreatePointerTo(PointerStandard, &sp_isolate_ptr_type));
RETURN_IF_FAIL(sp_data_model_manager->CreateTypedObject(
sp_host_context.Get(), isolate_addr, sp_isolate_type.Get(), &sp_result));
return S_OK;
}
IFACEMETHODIMP CurrIsolateAlias::Call(IModelObject* p_context_object,
ULONG64 arg_count,
IModelObject** pp_arguments,
IModelObject** pp_result,
IKeyStore** pp_metadata) noexcept {
*pp_result = nullptr;
WRL::ComPtr<IModelObject> sp_result;
RETURN_IF_FAIL(GetCurrentIsolate(sp_result));
*pp_result = sp_result.Detach();
return S_OK;
}