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 AndricObjectTransformLayer::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 Andricvoid 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