Skip to content

Commit e8dc505

Browse files
authored
Merge pull request #18715 from ahoppen/gen-tokenkinds
[libSyntax] Generate TokenKinds.def from gyb_syntax_support
2 parents f505c8b + e9e7d5c commit e8dc505

File tree

6 files changed

+314
-358
lines changed

6 files changed

+314
-358
lines changed

include/swift/Syntax/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ set(generated_include_sources
1010
SyntaxBuilders.h.gyb
1111
SyntaxFactory.h.gyb
1212
SyntaxVisitor.h.gyb
13+
TokenKinds.def.gyb
1314
Trivia.h.gyb)
1415

1516
add_gyb_target(swift-syntax-generated-headers

include/swift/Syntax/TokenKinds.def renamed to include/swift/Syntax/TokenKinds.def.gyb

Lines changed: 19 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
%{
2+
# -*- mode: Swift -*-
3+
from gyb_syntax_support import *
4+
# Ignore the following admonition it applies to the resulting .def file only
5+
}%
6+
//// Automatically Generated From TokenKinds.def.gyb.
7+
//// Do Not Edit Directly!
18
//===--- TokenKinds.def - Swift Tokenizer Metaprogramming -----------------===//
29
//
310
// This source file is part of the Swift.org open source project
@@ -137,29 +144,18 @@
137144
#endif
138145

139146
// Keywords that start decls.
140-
DECL_KEYWORD(associatedtype)
141-
DECL_KEYWORD(class)
142-
DECL_KEYWORD(deinit)
143-
DECL_KEYWORD(enum)
144-
DECL_KEYWORD(extension)
145-
DECL_KEYWORD(func)
146-
DECL_KEYWORD(import)
147-
DECL_KEYWORD(init)
148-
DECL_KEYWORD(inout)
149-
DECL_KEYWORD(let)
150-
DECL_KEYWORD(operator)
151-
DECL_KEYWORD(precedencegroup)
152-
DECL_KEYWORD(protocol)
153-
DECL_KEYWORD(struct)
154-
DECL_KEYWORD(subscript)
155-
DECL_KEYWORD(typealias)
156-
DECL_KEYWORD(var)
157-
158-
DECL_KEYWORD(fileprivate)
159-
DECL_KEYWORD(internal)
160-
DECL_KEYWORD(private)
161-
DECL_KEYWORD(public)
162-
DECL_KEYWORD(static)
147+
% for token in SYNTAX_TOKENS:
148+
% if isinstance(token, Token.Punctuator):
149+
${token.macro_name()}(${token.unprefixed_kind}, "${token.text}")
150+
% elif isinstance(token, Token.PoundObjectLiteral):
151+
${token.macro_name()}(${token.unprefixed_kind}, "${token.description}", ${token.protocol})
152+
% else:
153+
${token.macro_name()}(${token.unprefixed_kind})
154+
% end
155+
% end
156+
157+
// The following tokens are irrelevant for swiftSyntax and thus only declared
158+
// in this .def file
163159

164160
SIL_KEYWORD(undef)
165161
SIL_KEYWORD(sil)
@@ -172,137 +168,14 @@ SIL_KEYWORD(sil_default_witness_table)
172168
SIL_KEYWORD(sil_coverage_map)
173169
SIL_KEYWORD(sil_scope)
174170

175-
// Statement keywords.
176-
STMT_KEYWORD(defer)
177-
STMT_KEYWORD(if)
178-
STMT_KEYWORD(guard)
179-
STMT_KEYWORD(do)
180-
STMT_KEYWORD(repeat)
181-
STMT_KEYWORD(else)
182-
STMT_KEYWORD(for)
183-
STMT_KEYWORD(in)
184-
STMT_KEYWORD(while)
185-
STMT_KEYWORD(return)
186-
STMT_KEYWORD(break)
187-
STMT_KEYWORD(continue)
188-
STMT_KEYWORD(fallthrough)
189-
STMT_KEYWORD(switch)
190-
STMT_KEYWORD(case)
191-
STMT_KEYWORD(default)
192-
STMT_KEYWORD(where)
193-
STMT_KEYWORD(catch)
194-
STMT_KEYWORD(throw)
195-
196-
// Expression keywords.
197-
EXPR_KEYWORD(as)
198-
EXPR_KEYWORD(Any)
199-
EXPR_KEYWORD(false)
200-
EXPR_KEYWORD(is)
201-
EXPR_KEYWORD(nil)
202-
EXPR_KEYWORD(rethrows)
203-
EXPR_KEYWORD(super)
204-
EXPR_KEYWORD(self)
205-
EXPR_KEYWORD(Self)
206-
EXPR_KEYWORD(true)
207-
EXPR_KEYWORD(try)
208-
EXPR_KEYWORD(throws)
209-
KEYWORD(__FILE__)
210-
KEYWORD(__LINE__)
211-
KEYWORD(__COLUMN__)
212-
KEYWORD(__FUNCTION__)
213-
KEYWORD(__DSO_HANDLE__)
214-
215-
// Pattern keywords.
216-
PAT_KEYWORD(_)
217-
218-
// Punctuators.
219-
PUNCTUATOR(l_paren, "(")
220-
PUNCTUATOR(r_paren, ")")
221-
PUNCTUATOR(l_brace, "{")
222-
PUNCTUATOR(r_brace, "}")
223-
PUNCTUATOR(l_square, "[")
224-
PUNCTUATOR(r_square, "]")
225-
PUNCTUATOR(l_angle, "<")
226-
PUNCTUATOR(r_angle, ">")
227-
228-
PUNCTUATOR(period, ".")
229-
PUNCTUATOR(period_prefix, ".")
230-
PUNCTUATOR(comma, ",")
231-
PUNCTUATOR(colon, ":")
232-
PUNCTUATOR(semi, ";")
233-
PUNCTUATOR(equal, "=")
234-
PUNCTUATOR(at_sign, "@")
235-
PUNCTUATOR(pound, "#")
236-
237-
PUNCTUATOR(amp_prefix, "&")
238-
PUNCTUATOR(arrow, "->")
239-
240-
PUNCTUATOR(backtick, "`")
241-
242-
PUNCTUATOR(backslash, "\\")
243-
244-
PUNCTUATOR(exclaim_postfix, "!") // if left-bound
245-
246-
PUNCTUATOR(question_postfix, "?") // if left-bound
247-
PUNCTUATOR(question_infix,"?") // if not left-bound
248-
249171
PUNCTUATOR(sil_dollar, "$") // Only in SIL mode.
250172
PUNCTUATOR(sil_exclamation, "!") // Only in SIL mode.
251173

252-
// string_literal might be exploded to {quote segment quote} in the Parser.
253-
PUNCTUATOR(string_quote, "\"")
254-
PUNCTUATOR(multiline_string_quote, "\"\"\"")
255-
256-
// Keywords prefixed with a '#'. "keyPath" becomes "tok::pound_keyPath".
257-
POUND_KEYWORD(keyPath)
258-
POUND_KEYWORD(line)
259-
POUND_KEYWORD(selector)
260-
POUND_KEYWORD(file)
261-
POUND_KEYWORD(column)
262-
POUND_KEYWORD(function)
263-
POUND_KEYWORD(dsohandle)
264-
265-
// Directive '#' keywords.
266-
POUND_DIRECTIVE_KEYWORD(sourceLocation)
267-
POUND_DIRECTIVE_KEYWORD(warning)
268-
POUND_DIRECTIVE_KEYWORD(error)
269-
270-
// Conditional compilation '#' keywords.
271-
POUND_COND_DIRECTIVE_KEYWORD(if)
272-
POUND_COND_DIRECTIVE_KEYWORD(else)
273-
POUND_COND_DIRECTIVE_KEYWORD(elseif)
274-
POUND_COND_DIRECTIVE_KEYWORD(endif)
275-
276-
// Keywords prefixed with a '#' that are build configurations.
277-
POUND_CONFIG(available)
278-
279-
// Object literals and their corresponding protocols.
280-
POUND_OBJECT_LITERAL(fileLiteral, "file reference", ExpressibleByFileReferenceLiteral)
281-
POUND_OBJECT_LITERAL(imageLiteral, "image", ExpressibleByImageLiteral)
282-
POUND_OBJECT_LITERAL(colorLiteral, "color", ExpressibleByColorLiteral)
283-
284-
// Single-token literals
285-
LITERAL(integer_literal)
286-
LITERAL(floating_literal)
287-
LITERAL(string_literal)
288-
289-
// Miscellaneous tokens.
290-
MISC(unknown)
291174
MISC(eof)
292175
MISC(code_complete)
293-
MISC(identifier)
294-
MISC(oper_binary_unspaced) // "x+y"
295-
MISC(oper_binary_spaced) // "x + y"
296-
MISC(oper_postfix)
297-
MISC(oper_prefix)
298-
MISC(dollarident)
299176
MISC(sil_local_name) // %42 in SIL mode.
300177
MISC(comment)
301178

302-
MISC(contextual_keyword)
303-
MISC(string_segment)
304-
MISC(string_interpolation_anchor)
305-
MISC(kw_yield) // the contextual "yield" keyword
306179

307180
#undef TOKEN
308181
#undef KEYWORD

test/SwiftSyntax/AllTokenKindsInSyntaxGybSupport.c

Lines changed: 0 additions & 6 deletions
This file was deleted.

test/SwiftSyntax/Inputs/TokenKindList.txt.gyb

Lines changed: 0 additions & 6 deletions
This file was deleted.

tools/swift-syntax-test/swift-syntax-test.cpp

Lines changed: 1 addition & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ enum class ActionType {
5050
DeserializeRawTree,
5151
ParseOnly,
5252
ParserGen,
53-
DumpAllSyntaxTokens,
5453
EOFPos,
5554
None
5655
};
@@ -88,10 +87,6 @@ Action(llvm::cl::desc("Action (required):"),
8887
"deserialize-raw-tree",
8988
"Parse the JSON file from the serialized raw tree "
9089
"to the original"),
91-
clEnumValN(ActionType::DumpAllSyntaxTokens,
92-
"dump-all-syntax-tokens",
93-
"Dump the names of all token kinds that shall be included "
94-
"in swiftSyntax"),
9590
clEnumValN(ActionType::EOFPos,
9691
"eof",
9792
"Parse the source file, calculate the absolute position"
@@ -772,31 +767,6 @@ int dumpParserGen(const char *MainExecutablePath, const StringRef InputFile) {
772767
});
773768
}
774769

775-
void printToken(const StringRef name) {
776-
// We don't expect any SIL related tokens on the SwiftSyntax side
777-
if (name == "sil_dollar" ||
778-
name == "sil_exclamation" ||
779-
name == "sil_local_name") {
780-
return;
781-
}
782-
783-
// These token kinds are internal only and should not be exposed on the
784-
// SwiftSyntax side
785-
if (name == "code_complete" ||
786-
name == "comment" ||
787-
name == "eof") {
788-
return;
789-
}
790-
llvm::outs() << name << '\n';
791-
}
792-
793-
int dumpAllSyntaxTokens() {
794-
#define TOKEN(KW) printToken(#KW);
795-
#define SIL_KEYWORD(KW)
796-
#include "swift/Syntax/TokenKinds.def"
797-
return EXIT_SUCCESS;
798-
}
799-
800770
int dumpEOFSourceLoc(const char *MainExecutablePath,
801771
const StringRef InputFile) {
802772
return parseFile(MainExecutablePath, InputFile,
@@ -848,9 +818,6 @@ int invokeCommand(const char *MainExecutablePath,
848818
case ActionType::ParserGen:
849819
ExitCode = dumpParserGen(MainExecutablePath, InputSourceFilename);
850820
break;
851-
case ActionType::DumpAllSyntaxTokens:
852-
ExitCode = dumpAllSyntaxTokens();
853-
break;
854821
case ActionType::EOFPos:
855822
ExitCode = dumpEOFSourceLoc(MainExecutablePath, InputSourceFilename);
856823
break;
@@ -869,13 +836,7 @@ int main(int argc, char *argv[]) {
869836
llvm::cl::ParseCommandLineOptions(argc, argv, "Swift Syntax Test\n");
870837

871838
int ExitCode = EXIT_SUCCESS;
872-
873-
if (options::Action == ActionType::DumpAllSyntaxTokens) {
874-
// DumpAllSyntaxTokens doesn't require an input file. Hande it before we
875-
// reach input file handling
876-
return dumpAllSyntaxTokens();
877-
}
878-
839+
879840
if (options::InputSourceFilename.empty() &&
880841
options::InputSourceDirectory.empty()) {
881842
llvm::errs() << "input source file is required\n";

0 commit comments

Comments
 (0)