Próbuję utworzyć wirtualne pliki dla kodowania w klangu. Niestety moja aplikacja uległa awarii. Mam następującą konfigurację:jak utworzyć wirtualny plik w klangu dla kodowania-dekompozycji
auto createVirtualFile = [](
clang::CompilerInstance& ci,
std::string name,
llvm::StringRef input
) {
std::unique_ptr<llvm::MemoryBuffer>
MB(llvm::MemoryBuffer::getMemBuffer(input, name));
return std::move(MB);
};
Gdy plik jest tworzony i skonfigurować CodeCompletConsumer:
auto setupCodeComplete = [](
clang::CompilerInstance& ci,
std::string File,
int Line,
int Column
) {
auto& F = ci.getFrontendOpts();
F.CodeCompletionAt.FileName = File;
F.CodeCompletionAt.Line = Line;
F.CodeCompletionAt.Column = Column;
clang::FrontendInputFile FrontFile(File, clang::IK_CXX);
//F.Inputs.push_back(FrontFile);
ci.createCodeCompletionConsumer();
return FrontFile;
};
I powoływać się na te dwie funkcje w następujący sposób i wykonać składni tylko czynność:
auto runCodeCompleteAt = [] (
clang::CompilerInstance& ci,
std::string Filename,
std::string Code,
int Line,
int Column
) {
auto fid = createVirtualFile(ci, Filename, Code);
auto File = setupCodeComplete(ci, Filename, Line, Column);
clang::SyntaxOnlyAction Act;
if (Act.BeginSourceFile(ci, File)) {
Act.Execute(); // segfault
Act.EndSourceFile();
}
};
auto runExample = [](auto& ci){
runCodeCompleterAt(ci, "test.cpp", "std::cou", 1, 7);
}
Doceniam wszelkie wskazówki.
[OT] std :: move w "return std :: move (MB);" powinno zostać usunięte. (zabrania tylko RVO). – Jarod42
[OT] MB to unique_ptr, czy nie powinienem otwarcie mówić o przenoszeniu własności? – Gaetano
Spójrz na [kiedy-należy-stdmove-należy użyć-na-funkcji-wartość-zwrotu] (http://stackoverflow.com/questions/14856344/when-should-stdmove-be-used-on-a -funkcja-wartość-zwrotu) – Jarod42