mirror of
https://github.com/revng/revng
synced 2026-06-21 14:07:57 +00:00
37 lines
1.2 KiB
C++
37 lines
1.2 KiB
C++
//
|
|
// This file is distributed under the MIT License. See LICENSE.md for details.
|
|
//
|
|
|
|
#include "revng/Support/Debug.h"
|
|
#include "revng/mlir/Dialect/Clift/Transforms/ModelOption.h"
|
|
|
|
using mlir::clift::ModelOptionType;
|
|
using TupleTreeType = TupleTree<model::Binary>;
|
|
using ParserType = llvm::cl::parser<ModelOptionType>;
|
|
|
|
bool ParserType::parse(llvm::cl::Option &O,
|
|
const llvm::StringRef ArgName,
|
|
const llvm::StringRef ArgValue,
|
|
ModelOptionType &Value) {
|
|
auto MaybeModel = TupleTreeType::fromFile(ArgValue);
|
|
|
|
if (not MaybeModel)
|
|
return O.error("Failed to parse model: " + consumeToString(MaybeModel));
|
|
|
|
if (not MaybeModel->verify())
|
|
return O.error("Failed to verify model");
|
|
|
|
auto Shared = std::make_shared<TupleTreeType>(std::move(*MaybeModel));
|
|
Value = ModelOptionType(std::move(Shared), Shared->get());
|
|
|
|
return false;
|
|
}
|
|
|
|
void ParserType::printOptionDiff(const Option &O,
|
|
const ModelOptionType &Value,
|
|
const OptVal &Default,
|
|
const size_t GlobalWidth) const {
|
|
printOptionName(O, GlobalWidth);
|
|
outs() << "[=<model path>]";
|
|
}
|