|
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