OptionUtils.cpp revision 360784
1//===--- OptionUtils.cpp - Utilities for command line arguments -----------===// 2// 3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4// See https://llvm.org/LICENSE.txt for license information. 5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6// 7//===----------------------------------------------------------------------===// 8 9#include "clang/Basic/Diagnostic.h" 10#include "clang/Basic/DiagnosticDriver.h" 11#include "clang/Driver/OptionUtils.h" 12#include "llvm/Option/ArgList.h" 13 14using namespace clang; 15using namespace llvm::opt; 16 17namespace { 18template <typename IntTy> 19IntTy getLastArgIntValueImpl(const ArgList &Args, OptSpecifier Id, 20 IntTy Default, DiagnosticsEngine *Diags, 21 unsigned Base) { 22 IntTy Res = Default; 23 if (Arg *A = Args.getLastArg(Id)) { 24 if (StringRef(A->getValue()).getAsInteger(Base, Res)) { 25 if (Diags) 26 Diags->Report(diag::err_drv_invalid_int_value) 27 << A->getAsString(Args) << A->getValue(); 28 } 29 } 30 return Res; 31} 32} // namespace 33 34namespace clang { 35 36int getLastArgIntValue(const ArgList &Args, OptSpecifier Id, int Default, 37 DiagnosticsEngine *Diags, unsigned Base) { 38 return getLastArgIntValueImpl<int>(Args, Id, Default, Diags, Base); 39} 40 41uint64_t getLastArgUInt64Value(const ArgList &Args, OptSpecifier Id, 42 uint64_t Default, DiagnosticsEngine *Diags, 43 unsigned Base) { 44 return getLastArgIntValueImpl<uint64_t>(Args, Id, Default, Diags, Base); 45} 46 47} // namespace clang 48