#include <system_error>
using namespace llvm;
-std::unique_ptr<Module> llvm::parseAssembly(std::unique_ptr<MemoryBuffer> F,
- SMDiagnostic &Err,
- LLVMContext &Context) {
+bool llvm::parseAssemblyInto(MemoryBufferRef F, Module &M, SMDiagnostic &Err) {
SourceMgr SM;
- MemoryBuffer *Buf = F.get();
- SM.AddNewSourceBuffer(F.release(), SMLoc());
+ std::unique_ptr<MemoryBuffer> Buf = MemoryBuffer::getMemBuffer(F, false);
+ SM.AddNewSourceBuffer(std::move(Buf), SMLoc());
+ return LLParser(F.getBuffer(), SM, Err, &M).Run();
+}
+
+std::unique_ptr<Module> llvm::parseAssembly(MemoryBufferRef F,
+ SMDiagnostic &Err,
+ LLVMContext &Context) {
std::unique_ptr<Module> M =
- make_unique<Module>(Buf->getBufferIdentifier(), Context);
- if (LLParser(Buf->getBuffer(), SM, Err, M.get()).Run())
+ make_unique<Module>(F.getBufferIdentifier(), Context);
+
+ if (parseAssemblyInto(F, *M, Err))
return nullptr;
+
return std::move(M);
}
return nullptr;
}
- return parseAssembly(std::move(FileOrErr.get()), Err, Context);
+ return parseAssembly(FileOrErr.get()->getMemBufferRef(), Err, Context);
}
std::unique_ptr<Module> llvm::parseAssemblyString(StringRef AsmString,
SMDiagnostic &Err,
LLVMContext &Context) {
- std::unique_ptr<MemoryBuffer> F(
- MemoryBuffer::getMemBuffer(AsmString, "<string>"));
-
- return parseAssembly(std::move(F), Err, Context);
+ MemoryBufferRef F(AsmString, "<string>");
+ return parseAssembly(F, Err, Context);
}