Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[NFC] Separate getLastArgIntValue to Basic
getLastArgIntValue is a useful utility function to get command line argument as an integer. Currently it is in Frontend so that it can only be used by clang -cc1. Move it to basic so that it can also be used by clang driver. Differential Revision: https://reviews.llvm.org/D71080
- Loading branch information
Showing
5 changed files
with
108 additions
and
56 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
//===- OptionUtils.h - Utilities for command line arguments -----*- C++ -*-===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
// | ||
// This header contains utilities for command line arguments. | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#ifndef LLVM_CLANG_BASIC_OPTIONUTILS_H | ||
#define LLVM_CLANG_BASIC_OPTIONUTILS_H | ||
|
||
#include "clang/Basic/Diagnostic.h" | ||
#include "clang/Basic/LLVM.h" | ||
#include "llvm/Option/OptSpecifier.h" | ||
|
||
namespace llvm { | ||
|
||
namespace opt { | ||
|
||
class ArgList; | ||
|
||
} // namespace opt | ||
|
||
} // namespace llvm | ||
|
||
namespace clang { | ||
/// Return the value of the last argument as an integer, or a default. If Diags | ||
/// is non-null, emits an error if the argument is given, but non-integral. | ||
int getLastArgIntValue(const llvm::opt::ArgList &Args, | ||
llvm::opt::OptSpecifier Id, int Default, | ||
DiagnosticsEngine *Diags = nullptr, unsigned Base = 0); | ||
|
||
inline int getLastArgIntValue(const llvm::opt::ArgList &Args, | ||
llvm::opt::OptSpecifier Id, int Default, | ||
DiagnosticsEngine &Diags, unsigned Base = 0) { | ||
return getLastArgIntValue(Args, Id, Default, &Diags, Base); | ||
} | ||
|
||
uint64_t getLastArgUInt64Value(const llvm::opt::ArgList &Args, | ||
llvm::opt::OptSpecifier Id, uint64_t Default, | ||
DiagnosticsEngine *Diags = nullptr, | ||
unsigned Base = 0); | ||
|
||
inline uint64_t getLastArgUInt64Value(const llvm::opt::ArgList &Args, | ||
llvm::opt::OptSpecifier Id, | ||
uint64_t Default, | ||
DiagnosticsEngine &Diags, | ||
unsigned Base = 0) { | ||
return getLastArgUInt64Value(Args, Id, Default, &Diags, Base); | ||
} | ||
|
||
} // namespace clang | ||
|
||
#endif // LLVM_CLANG_BASIC_OPTIONUTILS_H |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
//===--- OptionUtils.cpp - Utilities for command line arguments -----------===// | ||
// | ||
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | ||
// See https://llvm.org/LICENSE.txt for license information. | ||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | ||
// | ||
//===----------------------------------------------------------------------===// | ||
|
||
#include "clang/Basic/OptionUtils.h" | ||
#include "clang/Basic/Diagnostic.h" | ||
#include "clang/Basic/DiagnosticDriver.h" | ||
#include "llvm/Option/ArgList.h" | ||
|
||
using namespace clang; | ||
using namespace llvm::opt; | ||
|
||
namespace { | ||
template <typename IntTy> | ||
IntTy getLastArgIntValueImpl(const ArgList &Args, OptSpecifier Id, | ||
IntTy Default, DiagnosticsEngine *Diags, | ||
unsigned Base) { | ||
IntTy Res = Default; | ||
if (Arg *A = Args.getLastArg(Id)) { | ||
if (StringRef(A->getValue()).getAsInteger(Base, Res)) { | ||
if (Diags) | ||
Diags->Report(diag::err_drv_invalid_int_value) | ||
<< A->getAsString(Args) << A->getValue(); | ||
} | ||
} | ||
return Res; | ||
} | ||
} // namespace | ||
|
||
namespace clang { | ||
|
||
int getLastArgIntValue(const ArgList &Args, OptSpecifier Id, int Default, | ||
DiagnosticsEngine *Diags, unsigned Base) { | ||
return getLastArgIntValueImpl<int>(Args, Id, Default, Diags, Base); | ||
} | ||
|
||
uint64_t getLastArgUInt64Value(const ArgList &Args, OptSpecifier Id, | ||
uint64_t Default, DiagnosticsEngine *Diags, | ||
unsigned Base) { | ||
return getLastArgIntValueImpl<uint64_t>(Args, Id, Default, Diags, Base); | ||
} | ||
|
||
} // namespace clang |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters