%{ # -*- mode: Swift -*- from gyb_syntax_support import * # Ignore the following admonition it applies to the resulting .def file only }% //// Automatically Generated From TokenKinds.def.gyb. //// Do Not Edit Directly! //===--- TokenKinds.def - Swift Tokenizer Metaprogramming -----------------===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See https://swift.org/LICENSE.txt for license information // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// /// /// This file defines x-macros used for metaprogramming with lexer tokens. /// /// TOKEN(name) /// KEYWORD(kw) /// SWIFT_KEYWORD(kw) /// DECL_KEYWORD(kw) /// STMT_KEYWORD(kw) /// EXPR_KEYWORD(kw) /// PAT_KEYWORD(kw) /// SIL_KEYWORD(kw) /// POUND_KEYWORD(kw) /// POUND_OBJECT_LITERAL(kw, desc, proto) /// POUND_CONFIG(kw) /// POUND_DIRECTIVE_KEYWORD(kw) /// POUND_COND_DIRECTIVE_KEYWORD(kw) /// PUNCTUATOR(name, str) /// LITERAL(name) /// MISC(name) /// //===----------------------------------------------------------------------===// /// TOKEN(name) /// Expands by default for every token kind. #ifndef TOKEN #define TOKEN(name) #endif /// KEYWORD(kw) /// Expands by default for every Swift keyword and every SIL keyword, such as /// 'if', 'else', 'sil_global', etc. If you only want to use Swift keywords /// see SWIFT_KEYWORD. #ifndef KEYWORD #define KEYWORD(kw) TOKEN(kw_ ## kw) #endif /// SWIFT_KEYWORD(kw) /// Expands for every Swift keyword. #ifndef SWIFT_KEYWORD #define SWIFT_KEYWORD(kw) KEYWORD(kw) #endif /// DECL_KEYWORD(kw) /// Expands for every Swift keyword that can be used in a declaration. #ifndef DECL_KEYWORD #define DECL_KEYWORD(kw) SWIFT_KEYWORD(kw) #endif /// STMT_KEYWORD(kw) /// Expands for every Swift keyword used in statement grammar. #ifndef STMT_KEYWORD #define STMT_KEYWORD(kw) SWIFT_KEYWORD(kw) #endif /// EXPR_KEYWORD(kw) /// Expands for every Swift keyword used in an expression, such as 'true', /// 'false', and 'as' #ifndef EXPR_KEYWORD #define EXPR_KEYWORD(kw) SWIFT_KEYWORD(kw) #endif /// PAT_KEYWORD(kw) /// Expands for every Swift keyword used in a pattern, which is currently /// limited to '_' #ifndef PAT_KEYWORD #define PAT_KEYWORD(kw) SWIFT_KEYWORD(kw) #endif /// SIL_KEYWORD(kw) /// Expands for every SIL keyword. These are only keywords when parsing SIL. #ifndef SIL_KEYWORD #define SIL_KEYWORD(kw) KEYWORD(kw) #endif /// POUND_KEYWORD(kw) /// Every keyword prefixed with a '#'. #ifndef POUND_KEYWORD #define POUND_KEYWORD(kw) TOKEN(pound_ ## kw) #endif /// POUND_OBJECT_LITERAL(kw, desc, proto) /// Every keyword prefixed with a '#' representing an object literal. #ifndef POUND_OBJECT_LITERAL #define POUND_OBJECT_LITERAL(kw, desc, proto) POUND_KEYWORD(kw) #endif /// POUND_CONFIG(kw) /// Every keyword prefixed with a '#' representing a configuration. #ifndef POUND_CONFIG #define POUND_CONFIG(kw) POUND_KEYWORD(kw) #endif /// POUND_DIRECTIVE_KEYWORD(kw) /// Every keyword prefixed with a '#' that is a compiler control directive. #ifndef POUND_DIRECTIVE_KEYWORD #define POUND_DIRECTIVE_KEYWORD(kw) POUND_KEYWORD(kw) #endif /// POUND_COND_DIRECTIVE_KEYWORD(kw) /// Every keyword prefixed with a '#' that is part of conditional compilation /// control. #ifndef POUND_COND_DIRECTIVE_KEYWORD #define POUND_COND_DIRECTIVE_KEYWORD(kw) POUND_DIRECTIVE_KEYWORD(kw) #endif /// PUNCTUATOR(name, str) /// Expands for every Swift punctuator. /// \param name The symbolic name of the punctuator, such as /// 'l_paren' or 'arrow'. /// \param str A string literal containing the spelling of the punctuator, /// such as '"("' or '"->"'. #ifndef PUNCTUATOR #define PUNCTUATOR(name, str) TOKEN(name) #endif /// LITERAL(name) /// Tokens representing literal values, e.g. 'integer_literal'. #ifndef LITERAL #define LITERAL(name) TOKEN(name) #endif /// MISC(name) /// Miscellaneous tokens, e.g. 'eof' and 'unknown'. #ifndef MISC #define MISC(name) TOKEN(name) #endif // Keywords that start decls. % for token in SYNTAX_TOKENS: % if isinstance(token, Token.Punctuator): ${token.macro_name()}(${token.unprefixed_kind}, "${token.text}") % elif isinstance(token, Token.PoundObjectLiteral): ${token.macro_name()}(${token.unprefixed_kind}, "${token.description}", ${token.protocol}) % else: ${token.macro_name()}(${token.unprefixed_kind}) % end % end // The following tokens are irrelevant for swiftSyntax and thus only declared // in this .def file SIL_KEYWORD(undef) SIL_KEYWORD(sil) SIL_KEYWORD(sil_stage) SIL_KEYWORD(sil_property) SIL_KEYWORD(sil_vtable) SIL_KEYWORD(sil_global) SIL_KEYWORD(sil_witness_table) SIL_KEYWORD(sil_default_witness_table) SIL_KEYWORD(sil_differentiability_witness) SIL_KEYWORD(sil_coverage_map) SIL_KEYWORD(sil_scope) PUNCTUATOR(sil_dollar, "$") // Only in SIL mode. PUNCTUATOR(sil_exclamation, "!") // Only in SIL mode. MISC(eof) MISC(code_complete) MISC(sil_local_name) // %42 in SIL mode. MISC(comment) #undef TOKEN #undef KEYWORD #undef SWIFT_KEYWORD #undef DECL_KEYWORD #undef STMT_KEYWORD #undef EXPR_KEYWORD #undef PAT_KEYWORD #undef SIL_KEYWORD #undef POUND_KEYWORD #undef POUND_OBJECT_LITERAL #undef POUND_CONFIG #undef POUND_DIRECTIVE_KEYWORD #undef POUND_COND_DIRECTIVE_KEYWORD #undef PUNCTUATOR #undef LITERAL #undef MISC