From 52ecc4a7465b6f8d103e04b468dbb8dde39c310f Mon Sep 17 00:00:00 2001 From: Xi Ge Date: Tue, 21 Feb 2017 18:11:23 -0800 Subject: [PATCH] ASTPrinter: add a utility to get the length of keywords or punctuators by token kinds. --- include/swift/AST/ASTPrinter.h | 3 +++ lib/AST/ASTPrinter.cpp | 11 +++++++++++ 2 files changed, 14 insertions(+) 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);