diff options
| author | John Hodge <tpg@ucc.asn.au> | 2017-11-15 21:19:22 +0800 |
|---|---|---|
| committer | John Hodge <tpg@ucc.asn.au> | 2017-11-15 21:19:22 +0800 |
| commit | 97839be171f00c9f6ea3d9921ca89db918027800 (patch) | |
| tree | c60922d8147128d34b8514e1fd30b73b91a750cf /src/parse | |
| parent | d585aa08551aa78b692bab8326509baef02a7b3d (diff) | |
| download | mrust-97839be171f00c9f6ea3d9921ca89db918027800.tar.gz | |
proc_macro - Working invocations (some work needed on AST->TT)
Diffstat (limited to 'src/parse')
| -rw-r--r-- | src/parse/lex.cpp | 34 | ||||
| -rw-r--r-- | src/parse/lex.hpp | 3 | ||||
| -rw-r--r-- | src/parse/token.cpp | 2 |
3 files changed, 38 insertions, 1 deletions
diff --git a/src/parse/lex.cpp b/src/parse/lex.cpp index 5e57b418..17d7bf27 100644 --- a/src/parse/lex.cpp +++ b/src/parse/lex.cpp @@ -1066,3 +1066,37 @@ bool Codepoint::isxdigit() const { } return os; } + +Token Lex_FindOperator(const ::std::string& s) +{ + if( s == "_" ) + return TOK_UNDERSCORE; + for(size_t i = 0; i < LEN(TOKENMAP); i++) + { + const auto& e = TOKENMAP[i]; + if( s < e.chars ) + break; + if( s == e.chars ) + { + if( e.type < 0 ) + break ; + return static_cast<eTokenType>(e.type); + } + } + return TOK_NULL; +} +Token Lex_FindReservedWord(const ::std::string& s) +{ + for(size_t i = 0; i < LEN(RWORDS); i++) + { + const auto& e = RWORDS[i]; + if( s < e.chars ) + break; + if( s == e.chars ) + { + assert(e.type > 0); + return static_cast<eTokenType>(e.type); + } + } + return TOK_NULL; +} diff --git a/src/parse/lex.hpp b/src/parse/lex.hpp index 67aa155d..55af4c56 100644 --- a/src/parse/lex.hpp +++ b/src/parse/lex.hpp @@ -27,6 +27,9 @@ struct Codepoint { extern ::std::string& operator+=(::std::string& s, const Codepoint& cp); extern ::std::ostream& operator<<(::std::ostream& s, const Codepoint& cp); +extern Token Lex_FindOperator(const ::std::string& s); +extern Token Lex_FindReservedWord(const ::std::string& s); + typedef Codepoint uchar; class Lexer: diff --git a/src/parse/token.cpp b/src/parse/token.cpp index d626659c..768a96bc 100644 --- a/src/parse/token.cpp +++ b/src/parse/token.cpp @@ -331,7 +331,7 @@ struct EscapedString { case TOK_COMMA: return ","; case TOK_SEMICOLON: return ";"; case TOK_COLON: return ":"; - case TOK_DOUBLE_COLON: return ":"; + case TOK_DOUBLE_COLON: return "::"; case TOK_STAR: return "*"; case TOK_AMP: return "&"; case TOK_PIPE: return "|"; |
