clang 18.0.0git
|
NumericLiteralParser - This performs strict semantic analysis of the content of a ppnumber, classifying it as either integer, floating, or erroneous, determines the radix of the value and can convert it to a useful value. More...
#include "clang/Lex/LiteralSupport.h"
Public Member Functions | |
NumericLiteralParser (StringRef TokSpelling, SourceLocation TokLoc, const SourceManager &SM, const LangOptions &LangOpts, const TargetInfo &Target, DiagnosticsEngine &Diags) | |
integer-constant: [C99 6.4.4.1] decimal-constant integer-suffix octal-constant integer-suffix hexadecimal-constant integer-suffix binary-literal integer-suffix [GNU, C++1y] user-defined-integer-literal: [C++11 lex.ext] decimal-literal ud-suffix octal-literal ud-suffix hexadecimal-literal ud-suffix binary-literal ud-suffix [GNU, C++1y] decimal-constant: nonzero-digit decimal-constant digit octal-constant: 0 octal-constant octal-digit hexadecimal-constant: hexadecimal-prefix hexadecimal-digit hexadecimal-constant hexadecimal-digit hexadecimal-prefix: one of 0x 0X binary-literal: 0b binary-digit 0B binary-digit binary-literal binary-digit integer-suffix: unsigned-suffix [long-suffix] unsigned-suffix [long-long-suffix] long-suffix [unsigned-suffix] long-long-suffix [unsigned-sufix] nonzero-digit: 1 2 3 4 5 6 7 8 9 octal-digit: 0 1 2 3 4 5 6 7 hexadecimal-digit: 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F binary-digit: 0 1 unsigned-suffix: one of u U long-suffix: one of l L long-long-suffix: one of ll LL | |
bool | isFixedPointLiteral () const |
bool | isIntegerLiteral () const |
bool | isFloatingLiteral () const |
bool | hasUDSuffix () const |
StringRef | getUDSuffix () const |
unsigned | getUDSuffixOffset () const |
unsigned | getRadix () const |
bool | GetIntegerValue (llvm::APInt &Val) |
GetIntegerValue - Convert this numeric literal value to an APInt that matches Val's input width. | |
llvm::APFloat::opStatus | GetFloatValue (llvm::APFloat &Result) |
GetFloatValue - Convert this numeric literal to a floating value, using the specified APFloat fltSemantics (specifying float, double, etc). | |
bool | GetFixedPointValue (llvm::APInt &StoreVal, unsigned Scale) |
GetFixedPointValue - Convert this numeric literal value into a scaled integer that represents this value. | |
StringRef | getLiteralDigits () const |
Get the digits that comprise the literal. | |
Static Public Member Functions | |
static bool | isValidUDSuffix (const LangOptions &LangOpts, StringRef Suffix) |
Determine whether a suffix is a valid ud-suffix. | |
Public Attributes | |
bool | hadError: 1 |
bool | isUnsigned: 1 |
bool | isLong: 1 |
bool | isLongLong: 1 |
bool | isSizeT: 1 |
bool | isHalf: 1 |
bool | isFloat: 1 |
bool | isImaginary: 1 |
bool | isFloat16: 1 |
bool | isFloat128: 1 |
bool | isFract: 1 |
bool | isAccum: 1 |
bool | isBitInt: 1 |
uint8_t | MicrosoftInteger |
NumericLiteralParser - This performs strict semantic analysis of the content of a ppnumber, classifying it as either integer, floating, or erroneous, determines the radix of the value and can convert it to a useful value.
Definition at line 51 of file LiteralSupport.h.
NumericLiteralParser::NumericLiteralParser | ( | StringRef | TokSpelling, |
SourceLocation | TokLoc, | ||
const SourceManager & | SM, | ||
const LangOptions & | LangOpts, | ||
const TargetInfo & | Target, | ||
DiagnosticsEngine & | Diags | ||
) |
integer-constant: [C99 6.4.4.1] decimal-constant integer-suffix octal-constant integer-suffix hexadecimal-constant integer-suffix binary-literal integer-suffix [GNU, C++1y] user-defined-integer-literal: [C++11 lex.ext] decimal-literal ud-suffix octal-literal ud-suffix hexadecimal-literal ud-suffix binary-literal ud-suffix [GNU, C++1y] decimal-constant: nonzero-digit decimal-constant digit octal-constant: 0 octal-constant octal-digit hexadecimal-constant: hexadecimal-prefix hexadecimal-digit hexadecimal-constant hexadecimal-digit hexadecimal-prefix: one of 0x 0X binary-literal: 0b binary-digit 0B binary-digit binary-literal binary-digit integer-suffix: unsigned-suffix [long-suffix] unsigned-suffix [long-long-suffix] long-suffix [unsigned-suffix] long-long-suffix [unsigned-sufix] nonzero-digit: 1 2 3 4 5 6 7 8 9 octal-digit: 0 1 2 3 4 5 6 7 hexadecimal-digit: 0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F binary-digit: 0 1 unsigned-suffix: one of u U long-suffix: one of l L long-long-suffix: one of ll LL
floating-constant: [C99 6.4.4.2] TODO: add rules...
Definition at line 900 of file LiteralSupport.cpp.
References clang::Lexer::AdvanceToTokenCharacter(), c, clang::expandUCNs(), hadError, isAccum, isBitInt, isFixedPointLiteral(), isFloat, isFloat128, isFloat16, isFloatingLiteral(), isFract, isHalf, isImaginary, isIntegerLiteral(), isLong, isLongLong, clang::isPreprocessingNumberBody(), isSizeT, isUnsigned, isValidUDSuffix(), MicrosoftInteger, clang::DiagnosticsEngine::Report(), s, SM, and clang::Target.
GetFixedPointValue - Convert this numeric literal value into a scaled integer that represents this value.
Returns true if an overflow occurred when calculating the integral part of the scaled integer or calculating the digit sequence of the exponent.
Definition at line 1510 of file LiteralSupport.cpp.
References alwaysFitsInto64Bits(), clang::C, and IsExponentPart().
llvm::APFloat::opStatus NumericLiteralParser::GetFloatValue | ( | llvm::APFloat & | Result | ) |
GetFloatValue - Convert this numeric literal to a floating value, using the specified APFloat fltSemantics (specifying float, double, etc).
The optional bool isExact (passed-by-reference) has its value set to true if the returned APFloat can represent the number in the literal exactly, and false otherwise.
Definition at line 1485 of file LiteralSupport.cpp.
References clang::Result.
bool NumericLiteralParser::GetIntegerValue | ( | llvm::APInt & | Val | ) |
GetIntegerValue - Convert this numeric literal value to an APInt that matches Val's input width.
If there is an overflow (i.e., if the unsigned value read is larger than the APInt's bits will hold), set Val to the low bits of the result and return true. Otherwise, return false.
If there is an overflow, set Val to the low bits of the result and return true. Otherwise, return false.
Definition at line 1427 of file LiteralSupport.cpp.
References alwaysFitsInto64Bits(), and clang::C.
|
inline |
Get the digits that comprise the literal.
This excludes any prefix or suffix associated with the literal.
Definition at line 135 of file LiteralSupport.h.
References hadError.
|
inline |
Definition at line 112 of file LiteralSupport.h.
|
inline |
Definition at line 101 of file LiteralSupport.h.
|
inline |
Definition at line 105 of file LiteralSupport.h.
|
inline |
Definition at line 98 of file LiteralSupport.h.
|
inline |
Definition at line 87 of file LiteralSupport.h.
Referenced by isFloatingLiteral(), isIntegerLiteral(), and NumericLiteralParser().
|
inline |
Definition at line 94 of file LiteralSupport.h.
References isFixedPointLiteral().
Referenced by NumericLiteralParser().
|
inline |
Definition at line 91 of file LiteralSupport.h.
References isFixedPointLiteral().
Referenced by NumericLiteralParser().
|
static |
Determine whether a suffix is a valid ud-suffix.
We avoid treating reserved suffixes as ud-suffixes, because the diagnostic experience is better if we treat it as an invalid suffix.
Definition at line 1234 of file LiteralSupport.cpp.
Referenced by clang::StringLiteralParser::isValidUDSuffix(), and NumericLiteralParser().
bool clang::NumericLiteralParser::hadError |
Definition at line 71 of file LiteralSupport.h.
Referenced by getLiteralDigits(), and NumericLiteralParser().
bool clang::NumericLiteralParser::isAccum |
Definition at line 82 of file LiteralSupport.h.
Referenced by NumericLiteralParser().
bool clang::NumericLiteralParser::isBitInt |
Definition at line 83 of file LiteralSupport.h.
Referenced by NumericLiteralParser().
bool clang::NumericLiteralParser::isFloat |
Definition at line 77 of file LiteralSupport.h.
Referenced by NumericLiteralParser().
bool clang::NumericLiteralParser::isFloat128 |
Definition at line 80 of file LiteralSupport.h.
Referenced by NumericLiteralParser().
bool clang::NumericLiteralParser::isFloat16 |
Definition at line 79 of file LiteralSupport.h.
Referenced by NumericLiteralParser().
bool clang::NumericLiteralParser::isFract |
Definition at line 81 of file LiteralSupport.h.
Referenced by NumericLiteralParser().
bool clang::NumericLiteralParser::isHalf |
Definition at line 76 of file LiteralSupport.h.
Referenced by NumericLiteralParser().
bool clang::NumericLiteralParser::isImaginary |
Definition at line 78 of file LiteralSupport.h.
Referenced by NumericLiteralParser().
bool clang::NumericLiteralParser::isLong |
Definition at line 73 of file LiteralSupport.h.
Referenced by NumericLiteralParser().
bool clang::NumericLiteralParser::isLongLong |
Definition at line 74 of file LiteralSupport.h.
Referenced by NumericLiteralParser().
bool clang::NumericLiteralParser::isSizeT |
Definition at line 75 of file LiteralSupport.h.
Referenced by NumericLiteralParser().
bool clang::NumericLiteralParser::isUnsigned |
Definition at line 72 of file LiteralSupport.h.
Referenced by NumericLiteralParser().
uint8_t clang::NumericLiteralParser::MicrosoftInteger |
Definition at line 84 of file LiteralSupport.h.
Referenced by NumericLiteralParser().