diff --git a/include/swift/AST/ASTPrinter.h b/include/swift/AST/ASTPrinter.h index 2b1b027943742..7e8bd3cd53847 100644 --- a/include/swift/AST/ASTPrinter.h +++ b/include/swift/AST/ASTPrinter.h @@ -307,6 +307,9 @@ bool printRequirementStub(ValueDecl *Requirement, DeclContext *Adopter, /// Print a keyword or punctuator directly by its kind. llvm::raw_ostream &operator<<(llvm::raw_ostream &OS, tok keyword); +/// Get the length of a keyword or punctuator by its kind. +uint8_t getKeywordLen(tok keyword); + } // namespace swift #endif // LLVM_SWIFT_AST_ASTPRINTER_H diff --git a/lib/AST/ASTPrinter.cpp b/lib/AST/ASTPrinter.cpp index 2d0500e8e22c6..76cb7c6cc8d14 100644 --- a/lib/AST/ASTPrinter.cpp +++ b/lib/AST/ASTPrinter.cpp @@ -594,6 +594,17 @@ operator<<(llvm::raw_ostream &OS, tok keyword) { return OS; } +uint8_t swift::getKeywordLen(tok keyword) { + switch (keyword) { +#define KEYWORD(KW) case tok::kw_##KW: return StringRef(#KW).size(); +#define POUND_KEYWORD(KW) case tok::pound_##KW: return StringRef("#"#KW).size(); +#define PUNCTUATOR(PUN, TEXT) case tok::PUN: return StringRef(TEXT).size(); +#include "swift/Syntax/TokenKinds.def" + default: + llvm_unreachable("unexpected keyword or punctuator kind"); + } +} + ASTPrinter &operator<<(ASTPrinter &printer, tok keyword) { SmallString<16> Buffer; llvm::raw_svector_ostream OS(Buffer);