//===-- CompileUnitsRequestHandler.cpp ------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #include "DAP.h" #include "EventHelper.h" #include "Protocol/ProtocolRequests.h" #include "RequestHandler.h" #include "lldb/Host/PosixApi.h" // IWYU pragma: keep using namespace lldb_dap; using namespace lldb_dap::protocol; static CompileUnit CreateCompileUnit(lldb::SBCompileUnit &unit) { char unit_path_arr[PATH_MAX]; unit.GetFileSpec().GetPath(unit_path_arr, sizeof(unit_path_arr)); std::string unit_path(unit_path_arr); return {std::move(unit_path)}; } /// The `compileUnits` request returns an array of path of compile units for /// given module specified by `moduleId`. llvm::Expected CompileUnitsRequestHandler::Run( const std::optional &args) const { std::vector units; int num_modules = dap.target.GetNumModules(); for (int i = 0; i < num_modules; i++) { auto curr_module = dap.target.GetModuleAtIndex(i); if (args->moduleId == llvm::StringRef(curr_module.GetUUIDString())) { int num_units = curr_module.GetNumCompileUnits(); for (int j = 0; j < num_units; j++) { auto curr_unit = curr_module.GetCompileUnitAtIndex(j); units.emplace_back(CreateCompileUnit(curr_unit)); } break; } } return CompileUnitsResponseBody{std::move(units)}; }