14ba319b5SDimitry Andric //===---------- ObjectTransformLayer.cpp - Object Transform Layer ---------===//
24ba319b5SDimitry Andric //
34ba319b5SDimitry Andric //                     The LLVM Compiler Infrastructure
44ba319b5SDimitry Andric //
54ba319b5SDimitry Andric // This file is distributed under the University of Illinois Open Source
64ba319b5SDimitry Andric // License. See LICENSE.TXT for details.
74ba319b5SDimitry Andric //
84ba319b5SDimitry Andric //===----------------------------------------------------------------------===//
94ba319b5SDimitry Andric 
104ba319b5SDimitry Andric #include "llvm/ExecutionEngine/Orc/ObjectTransformLayer.h"
114ba319b5SDimitry Andric #include "llvm/Support/MemoryBuffer.h"
124ba319b5SDimitry Andric 
134ba319b5SDimitry Andric namespace llvm {
144ba319b5SDimitry Andric namespace orc {
154ba319b5SDimitry Andric 
ObjectTransformLayer(ExecutionSession & ES,ObjectLayer & BaseLayer,TransformFunction Transform)16*b5893f02SDimitry Andric ObjectTransformLayer::ObjectTransformLayer(ExecutionSession &ES,
174ba319b5SDimitry Andric                                             ObjectLayer &BaseLayer,
184ba319b5SDimitry Andric                                             TransformFunction Transform)
194ba319b5SDimitry Andric     : ObjectLayer(ES), BaseLayer(BaseLayer), Transform(std::move(Transform)) {}
204ba319b5SDimitry Andric 
emit(MaterializationResponsibility R,std::unique_ptr<MemoryBuffer> O)21*b5893f02SDimitry Andric void ObjectTransformLayer::emit(MaterializationResponsibility R,
224ba319b5SDimitry Andric                                 std::unique_ptr<MemoryBuffer> O) {
234ba319b5SDimitry Andric   assert(O && "Module must not be null");
244ba319b5SDimitry Andric 
254ba319b5SDimitry Andric   if (auto TransformedObj = Transform(std::move(O)))
26*b5893f02SDimitry Andric     BaseLayer.emit(std::move(R), std::move(*TransformedObj));
274ba319b5SDimitry Andric   else {
284ba319b5SDimitry Andric     R.failMaterialization();
294ba319b5SDimitry Andric     getExecutionSession().reportError(TransformedObj.takeError());
304ba319b5SDimitry Andric   }
314ba319b5SDimitry Andric }
324ba319b5SDimitry Andric 
334ba319b5SDimitry Andric } // End namespace orc.
344ba319b5SDimitry Andric } // End namespace llvm.
35