Path: blob/main/contrib/llvm-project/llvm/lib/ExecutionEngine/Orc/ObjectTransformLayer.cpp
35266 views
//===---------- ObjectTransformLayer.cpp - Object Transform Layer ---------===//1//2// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.3// See https://llvm.org/LICENSE.txt for license information.4// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception5//6//===----------------------------------------------------------------------===//78#include "llvm/ExecutionEngine/Orc/ObjectTransformLayer.h"9#include "llvm/Support/MemoryBuffer.h"1011namespace llvm {12namespace orc {1314char ObjectTransformLayer::ID;1516using BaseT = RTTIExtends<ObjectTransformLayer, ObjectLayer>;1718ObjectTransformLayer::ObjectTransformLayer(ExecutionSession &ES,19ObjectLayer &BaseLayer,20TransformFunction Transform)21: BaseT(ES), BaseLayer(BaseLayer), Transform(std::move(Transform)) {}2223void ObjectTransformLayer::emit(24std::unique_ptr<MaterializationResponsibility> R,25std::unique_ptr<MemoryBuffer> O) {26assert(O && "Module must not be null");2728// If there is a transform set then apply it.29if (Transform) {30if (auto TransformedObj = Transform(std::move(O)))31O = std::move(*TransformedObj);32else {33R->failMaterialization();34getExecutionSession().reportError(TransformedObj.takeError());35return;36}37}3839BaseLayer.emit(std::move(R), std::move(O));40}4142} // End namespace orc.43} // End namespace llvm.444546