Skip to content

Commit 1924340

Browse files
committed
[Syntax] Introduce TOKEN macro in TokenKinds.def
1 parent 15f085b commit 1924340

File tree

4 files changed

+34
-100
lines changed

4 files changed

+34
-100
lines changed

include/swift/Syntax/Serialization/SyntaxSerialization.h

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,8 @@ struct ScalarEnumerationTraits<syntax::SourcePresence> {
4040
template <>
4141
struct ScalarEnumerationTraits<tok> {
4242
static void enumeration(Output &out, tok &value) {
43-
#define EXPAND(Str, Case) \
44-
out.enumCase(value, Str, Case);
45-
#define LITERAL(X) EXPAND(#X, tok::X)
46-
#define MISC(X) EXPAND(#X, tok::X)
47-
#define KEYWORD(X) EXPAND("kw_" #X, tok::kw_##X)
48-
#define PUNCTUATOR(X, Y) EXPAND(#X, tok::X)
49-
#define POUND_KEYWORD(X) EXPAND("pound_" #X, tok::pound_##X)
43+
#define TOKEN(name) \
44+
out.enumCase(value, #name, tok::name);
5045
#include "swift/Syntax/TokenKinds.def"
5146
}
5247
};

include/swift/Syntax/TokenKinds.def

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,29 +12,36 @@
1212
///
1313
/// This file defines x-macros used for metaprogramming with lexer tokens.
1414
///
15-
/// KEYWORD(kw)
16-
/// SWIFT_KEYWORD(kw)
17-
/// DECL_KEYWORD(kw)
18-
/// STMT_KEYWORD(kw)
19-
/// EXPR_KEYWORD(kw)
20-
/// PAT_KEYWORD(kw)
21-
/// SIL_KEYWORD(kw)
22-
/// POUND_KEYWORD(kw)
23-
/// POUND_OBJECT_LITERAL(kw, desc, proto)
24-
/// POUND_OLD_OBJECT_LITERAL(kw, new_kw, old_arg, new_arg)
25-
/// POUND_CONFIG(kw)
26-
/// PUNCTUATOR(name, str)
27-
/// LITERAL(name)
28-
/// MISC(name)
15+
/// TOKEN(name)
16+
/// KEYWORD(kw)
17+
/// SWIFT_KEYWORD(kw)
18+
/// DECL_KEYWORD(kw)
19+
/// STMT_KEYWORD(kw)
20+
/// EXPR_KEYWORD(kw)
21+
/// PAT_KEYWORD(kw)
22+
/// SIL_KEYWORD(kw)
23+
/// POUND_KEYWORD(kw)
24+
/// POUND_OBJECT_LITERAL(kw, desc, proto)
25+
/// POUND_OLD_OBJECT_LITERAL(kw, new_kw, old_arg, new_arg)
26+
/// POUND_CONFIG(kw)
27+
/// PUNCTUATOR(name, str)
28+
/// LITERAL(name)
29+
/// MISC(name)
2930
///
3031
//===----------------------------------------------------------------------===//
3132

33+
/// TOKEN(name)
34+
/// Expands by default for every token kind.
35+
#ifndef TOKEN
36+
#define TOKEN(name)
37+
#endif
38+
3239
/// KEYWORD(kw)
3340
/// Expands by default for every Swift keyword and every SIL keyword, such as
3441
/// 'if', 'else', 'sil_global', etc. If you only want to use Swift keywords
3542
/// see SWIFT_KEYWORD.
3643
#ifndef KEYWORD
37-
#define KEYWORD(kw)
44+
#define KEYWORD(kw) TOKEN(kw_ ## kw)
3845
#endif
3946

4047
/// SWIFT_KEYWORD(kw)
@@ -78,7 +85,7 @@
7885
/// POUND_KEYWORD(kw)
7986
/// Every keyword prefixed with a '#'.
8087
#ifndef POUND_KEYWORD
81-
#define POUND_KEYWORD(kw)
88+
#define POUND_KEYWORD(kw) TOKEN(pound_ ## kw)
8289
#endif
8390

8491
/// POUND_OBJECT_LITERAL(kw, desc, proto)
@@ -107,19 +114,19 @@
107114
/// \param str A string literal containing the spelling of the punctuator,
108115
/// such as '"("' or '"->"'.
109116
#ifndef PUNCTUATOR
110-
#define PUNCTUATOR(name, str)
117+
#define PUNCTUATOR(name, str) TOKEN(name)
111118
#endif
112119

113120
/// LITERAL(name)
114121
/// Tokens representing literal values, e.g. 'integer_literal'.
115122
#ifndef LITERAL
116-
#define LITERAL(name)
123+
#define LITERAL(name) TOKEN(name)
117124
#endif
118125

119126
/// MISC(name)
120127
/// Miscellaneous tokens, e.g. 'eof' and 'unknown'.
121128
#ifndef MISC
122-
#define MISC(name)
129+
#define MISC(name) TOKEN(name)
123130
#endif
124131

125132
// Keywords that start decls.
@@ -291,6 +298,7 @@ MISC(string_quote)
291298
MISC(multiline_string_quote)
292299
MISC(string_segment)
293300

301+
#undef TOKEN
294302
#undef KEYWORD
295303
#undef SWIFT_KEYWORD
296304
#undef DECL_KEYWORD

include/swift/Syntax/TokenKinds.h

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,7 @@
1919

2020
namespace swift {
2121
enum class tok {
22-
#define LITERAL(X) X,
23-
#define MISC(X) X,
24-
#define KEYWORD(X) kw_ ## X,
25-
#define PUNCTUATOR(X, Y) X,
26-
#define POUND_KEYWORD(X) pound_ ## X,
22+
#define TOKEN(X) X,
2723
#include "swift/Syntax/TokenKinds.def"
2824

2925
NUM_TOKENS

lib/Syntax/RawTokenSyntax.cpp

Lines changed: 4 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -55,79 +55,14 @@ RawTokenSyntax::accumulateAbsolutePosition(AbsolutePosition &Pos) const {
5555

5656
void RawTokenSyntax::dumpKind(llvm::raw_ostream &OS) const {
5757
switch (getTokenKind()) {
58-
case tok::unknown:
59-
OS << "unknown";
60-
break;
61-
case tok::eof:
62-
OS << "eof";
63-
break;
64-
case tok::code_complete:
65-
OS << "code_complete";
66-
break;
67-
case tok::identifier:
68-
OS << "identifier";
69-
break;
70-
case tok::oper_binary_unspaced:
71-
OS << "oper_binary_unspaced";
72-
break;
73-
case tok::oper_binary_spaced:
74-
OS << "oper_binary_spaced";
75-
break;
76-
case tok::string_interpolation_anchor:
77-
OS << "string_interpolation_anchor";
78-
break;
79-
case tok::string_quote:
80-
OS << "string_quote";
81-
break;
82-
case tok::multiline_string_quote:
83-
OS << "multiline_string_quote";
84-
break;
85-
case tok::string_segment:
86-
OS << "string_segment";
87-
break;
88-
case tok::contextual_keyword:
89-
OS << "contextual_keyword";
90-
break;
91-
case tok::oper_postfix:
92-
OS << "oper_postfix";
93-
break;
94-
case tok::oper_prefix:
95-
OS << "oper_prefix";
96-
break;
97-
case tok::dollarident:
98-
OS << "dollarident";
99-
break;
100-
case tok::integer_literal:
101-
OS << "integer_literal";
102-
break;
103-
case tok::floating_literal:
104-
OS << "floating_literal";
105-
break;
106-
case tok::string_literal:
107-
OS << "string_literal";
108-
break;
109-
case tok::sil_local_name:
110-
OS << "sil_local_name";
111-
break;
112-
case tok::comment:
113-
OS << "comment";
114-
break;
115-
case tok::NUM_TOKENS:
116-
OS << "NUM_TOKENS (unset)";
117-
break;
118-
#define KEYWORD(X) \
119-
case tok::kw_##X: \
120-
OS << "kw_" << #X; \
121-
break;
122-
#define PUNCTUATOR(X, Y) \
58+
#define TOKEN(X) \
12359
case tok::X: \
12460
OS << #X; \
12561
break;
126-
#define POUND_KEYWORD(X) \
127-
case tok::pound_##X: \
128-
OS << "pound_" << #X; \
129-
break;
13062
#include "swift/Syntax/TokenKinds.def"
63+
case tok::NUM_TOKENS:
64+
OS << "NUM_TOKENS (unset)";
65+
break;
13166
}
13267
}
13368

0 commit comments

Comments
 (0)