17 #include "llvm/ADT/SmallVector.h" 18 #include "llvm/Support/Debug.h" 25 static const char *
const TokNames[] = {
32 return TokNames[Type];
33 llvm_unreachable(
"unknown TokenType");
44 case tok::kw___int128:
46 case tok::kw_unsigned:
53 case tok::kw__Float16:
54 case tok::kw___float128:
57 case tok::kw___underlying_type:
58 case tok::annot_typename:
60 case tok::kw_char16_t:
61 case tok::kw_char32_t:
63 case tok::kw_decltype:
80 if (Formats.size() == 1)
86 if (!LBrace || !LBrace->
isOneOf(tok::l_brace, TT_ArrayInitializerLSquare) ||
88 LBrace->
Next->
Type == TT_DesignatedInitializerPeriod)
93 unsigned RemainingCodePoints =
97 const ColumnFormat *Format = getColumnFormat(RemainingCodePoints);
106 unsigned Penalty = 0;
111 unsigned ExtraSpaces = 0;
116 ExtraSpaces += Format->ColumnSizes[Column] - ItemLengths[Item];
128 Penalty += Indenter->
addTokenToState(State, NewLine, DryRun, ExtraSpaces);
138 if (Formats.size() == 1 || HasNestedBracedList)
139 State.
Stack.back().AvoidBinPacking =
true;
154 !Token->
isOneOf(tok::l_brace, TT_ArrayInitializerLSquare))
160 if (
Style.Cpp11BracedListStyle && !
Style.BinPackArguments &&
167 if (Token->
is(TT_ArrayInitializerLSquare) && Commas.size() < 19)
176 ItemBegin = ItemBegin->
Next;
183 bool HasSeparatingComment =
false;
184 for (
unsigned i = 0, e = Commas.size() + 1; i != e; ++i) {
187 ItemBegin = ItemBegin->
Next;
188 HasSeparatingComment = i > 0;
192 if (ItemBegin->
is(tok::l_brace))
193 HasNestedBracedList =
true;
195 if (i == Commas.size()) {
199 if (
Style.Cpp11BracedListStyle &&
204 ItemEnd = ItemEnd->
Next;
217 ItemEnd = ItemEnd->
Next;
224 ItemBegin = ItemEnd->
Next;
229 if (Commas.size() < 5 || HasSeparatingComment)
232 if (Token->
NestingLevel != 0 && Token->
is(tok::l_brace) && Commas.size() < 19)
237 unsigned MaxItems =
Style.ColumnLimit / 3;
238 std::vector<unsigned> MinSizeInColumn;
239 MinSizeInColumn.reserve(MaxItems);
240 for (
unsigned Columns = 1; Columns <= MaxItems; ++Columns) {
242 Format.Columns = Columns;
243 Format.ColumnSizes.resize(Columns);
244 MinSizeInColumn.assign(Columns,
UINT_MAX);
245 Format.LineCount = 1;
246 bool HasRowWithSufficientColumns =
false;
248 for (
unsigned i = 0, e = ItemLengths.size(); i != e; ++i) {
249 assert(i < MustBreakBeforeItem.size());
250 if (MustBreakBeforeItem[i] || Column == Columns) {
254 if (Column == Columns - 1)
255 HasRowWithSufficientColumns =
true;
257 (Column == Columns - 1) ? EndOfLineItemLength[i] : ItemLengths[i];
258 Format.ColumnSizes[Column] =
std::max(Format.ColumnSizes[Column], Length);
259 MinSizeInColumn[Column] =
std::min(MinSizeInColumn[Column], Length);
264 if (!HasRowWithSufficientColumns)
266 Format.TotalWidth = Columns - 1;
268 for (
unsigned i = 0; i < Columns; ++i)
269 Format.TotalWidth += Format.ColumnSizes[i];
274 for (
unsigned i = 0; i < Columns - 1; ++i)
275 if (Format.ColumnSizes[i] - MinSizeInColumn[i] > 10)
282 if (Format.TotalWidth >
Style.ColumnLimit && Columns > 1)
285 Formats.push_back(Format);
289 const CommaSeparatedList::ColumnFormat *
290 CommaSeparatedList::getColumnFormat(
unsigned RemainingCharacters)
const {
291 const ColumnFormat *BestFormat =
nullptr;
293 I = Formats.rbegin(),
296 if (I->TotalWidth <= RemainingCharacters || I->Columns == 1) {
297 if (BestFormat && I->LineCount > BestFormat->LineCount)
if(T->getSizeExpr()) TRY_TO(TraverseStmt(T -> getSizeExpr()))
The base class of the type hierarchy.
for(auto typeArg :T->getTypeArgsAsWritten())
tok::TokenKind getKind() const
static const char *const TokNames[]
Token - This structure provides full information about a lexed token.
__DEVICE__ int max(int __a, int __b)
Dataflow Directional Tag Classes.
__DEVICE__ int min(int __a, int __b)
This file implements an indenter that manages the indentation of continuations.