summaryrefslogtreecommitdiff
path: root/src/parse
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2017-11-15 21:19:22 +0800
committerJohn Hodge <tpg@ucc.asn.au>2017-11-15 21:19:22 +0800
commit97839be171f00c9f6ea3d9921ca89db918027800 (patch)
treec60922d8147128d34b8514e1fd30b73b91a750cf /src/parse
parentd585aa08551aa78b692bab8326509baef02a7b3d (diff)
downloadmrust-97839be171f00c9f6ea3d9921ca89db918027800.tar.gz
proc_macro - Working invocations (some work needed on AST->TT)
Diffstat (limited to 'src/parse')
-rw-r--r--src/parse/lex.cpp34
-rw-r--r--src/parse/lex.hpp3
-rw-r--r--src/parse/token.cpp2
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 "|";