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