1*85642262SLang Hames //===---------- ObjectTransformLayer.cpp - Object Transform Layer ---------===// 2*85642262SLang Hames // 3*85642262SLang Hames // The LLVM Compiler Infrastructure 4*85642262SLang Hames // 5*85642262SLang Hames // This file is distributed under the University of Illinois Open Source 6*85642262SLang Hames // License. See LICENSE.TXT for details. 7*85642262SLang Hames // 8*85642262SLang Hames //===----------------------------------------------------------------------===// 9*85642262SLang Hames 10*85642262SLang Hames #include "llvm/ExecutionEngine/Orc/ObjectTransformLayer.h" 11*85642262SLang Hames #include "llvm/Support/MemoryBuffer.h" 12*85642262SLang Hames 13*85642262SLang Hames namespace llvm { 14*85642262SLang Hames namespace orc { 15*85642262SLang Hames 16*85642262SLang Hames ObjectTransformLayer2::ObjectTransformLayer2(ExecutionSession &ES, 17*85642262SLang Hames ObjectLayer &BaseLayer, 18*85642262SLang Hames TransformFunction Transform) 19*85642262SLang Hames : ObjectLayer(ES), BaseLayer(BaseLayer), Transform(std::move(Transform)) {} 20*85642262SLang Hames 21*85642262SLang Hames void ObjectTransformLayer2::emit(MaterializationResponsibility R, VModuleKey K, 22*85642262SLang Hames std::unique_ptr<MemoryBuffer> O) { 23*85642262SLang Hames assert(O && "Module must not be null"); 24*85642262SLang Hames 25*85642262SLang Hames if (auto TransformedObj = Transform(std::move(O))) 26*85642262SLang Hames BaseLayer.emit(std::move(R), std::move(K), std::move(*TransformedObj)); 27*85642262SLang Hames else { 28*85642262SLang Hames R.failMaterialization(); 29*85642262SLang Hames getExecutionSession().reportError(TransformedObj.takeError()); 30*85642262SLang Hames } 31*85642262SLang Hames } 32*85642262SLang Hames 33*85642262SLang Hames } // End namespace orc. 34*85642262SLang Hames } // End namespace llvm. 35