|
36 | 36 | #include "llvm/ADT/StringRef.h" |
37 | 37 | #include "llvm/ADT/Twine.h" |
38 | 38 | #include "llvm/Support/Casting.h" |
| 39 | +#include "llvm/Support/ErrorHandling.h" |
39 | 40 | #include "llvm/Support/FormatVariadic.h" |
40 | 41 | #include "llvm/Support/SaveAndRestore.h" |
41 | 42 | #include "llvm/Support/ScopedPrinter.h" |
@@ -383,30 +384,34 @@ maybeDropCxxExplicitObjectParameters(ArrayRef<const ParmVarDecl *> Params) { |
383 | 384 | } |
384 | 385 |
|
385 | 386 | llvm::StringRef getLambdaCaptureName(const LambdaCapture &Capture) { |
386 | | - if (Capture.capturesVariable()) |
387 | | - return Capture.getCapturedVar()->getName(); |
388 | | - if (Capture.capturesThis()) |
| 387 | + switch (Capture.getCaptureKind()) { |
| 388 | + case LCK_This: |
| 389 | + case LCK_StarThis: |
389 | 390 | return llvm::StringRef{"this"}; |
390 | | - return llvm::StringRef{"unknown"}; |
| 391 | + case LCK_ByCopy: |
| 392 | + case LCK_ByRef: |
| 393 | + case LCK_VLAType: |
| 394 | + return Capture.getCapturedVar()->getName(); |
| 395 | + } |
| 396 | + llvm_unreachable("unhandled capture kind"); |
391 | 397 | } |
392 | 398 |
|
393 | 399 | template <typename R, typename P> |
394 | 400 | std::string joinAndTruncate(R &&Range, size_t MaxLength, |
395 | 401 | P &&GetAsStringFunction) { |
396 | 402 | std::string Out; |
397 | | - bool IsFirst = true; |
| 403 | + llvm::raw_string_ostream OS(Out); |
| 404 | + llvm::ListSeparator Sep(", "); |
398 | 405 | for (auto &&Element : Range) { |
399 | | - if (!IsFirst) |
400 | | - Out.append(", "); |
401 | | - else |
402 | | - IsFirst = false; |
| 406 | + OS << Sep; |
403 | 407 | auto AsString = GetAsStringFunction(Element); |
404 | 408 | if (Out.size() + AsString.size() >= MaxLength) { |
405 | | - Out.append("..."); |
| 409 | + OS << "..."; |
406 | 410 | break; |
407 | 411 | } |
408 | | - Out.append(AsString); |
| 412 | + OS << AsString; |
409 | 413 | } |
| 414 | + OS.flush(); |
410 | 415 | return Out; |
411 | 416 | } |
412 | 417 |
|
@@ -812,8 +817,7 @@ class InlayHintVisitor : public RecursiveASTVisitor<InlayHintVisitor> { |
812 | 817 | if (Cfg.InlayHints.DefaultArguments && IsDefault) { |
813 | 818 | auto SourceText = Lexer::getSourceText( |
814 | 819 | CharSourceRange::getTokenRange(Params[I]->getDefaultArgRange()), |
815 | | - Callee.Decl->getASTContext().getSourceManager(), |
816 | | - Callee.Decl->getASTContext().getLangOpts()); |
| 820 | + AST.getSourceManager(), AST.getLangOpts()); |
817 | 821 | FormattedDefaultArgs.emplace_back(llvm::formatv( |
818 | 822 | "{0} = {1}", Name, |
819 | 823 | SourceText.size() > Cfg.InlayHints.TypeNameLimit ? "..." |
|
0 commit comments