#include "torch/csrc/jit/script/lexer.h" #include #include #include #include namespace torch { namespace jit { namespace script { int stringToKind(std::string str) { static std::once_flag init_flag; static std::unordered_map str_to_kind; std::call_once(init_flag, []() { for (char tok : std::string(valid_single_char_tokens)) str_to_kind[std::string(1, tok)] = tok; #define DEFINE_CASE(tok, _, str) \ if (std::string(str) != "") str_to_kind[str] = tok; TC_FORALL_TOKEN_KINDS(DEFINE_CASE) #undef DEFINE_CASE }); try { return str_to_kind.at(str); } catch (std::out_of_range& err) { throw std::out_of_range("unknown token in stringToKind"); } } std::string kindToString(int kind) { if (kind < 256) return std::string(1, kind); switch (kind) { #define DEFINE_CASE(tok, str, _) \ case tok: \ return str; TC_FORALL_TOKEN_KINDS(DEFINE_CASE) #undef DEFINE_CASE default: throw std::runtime_error("Unknown kind: " + std::to_string(kind)); } } SharedParserData& sharedParserData() { static SharedParserData data; // safely handles multi-threaded init return data; } } // namespace script } // namespace jit } // namespace torch