diff options
author | John Hodge <tpg@mutabah.net> | 2016-02-25 14:44:53 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-02-25 14:44:53 +0800 |
commit | a9eada64ea769fa661920d529964323e3cc1f312 (patch) | |
tree | 24031de79e3e7afc78329640f731a66a876b63ec | |
parent | b6aa089ef86e45e3a0f1c81f2f7a4d78765342d0 (diff) | |
download | mrust-a9eada64ea769fa661920d529964323e3cc1f312.tar.gz |
Handle unsafe fn types with hrls
-rw-r--r-- | src/parse/types.cpp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/parse/types.cpp b/src/parse/types.cpp index 22f5acf2..33307dea 100644 --- a/src/parse/types.cpp +++ b/src/parse/types.cpp @@ -13,7 +13,7 @@ // === PROTOTYPES === TypeRef Parse_Type(TokenStream& lex); TypeRef Parse_Type_Int(TokenStream& lex); -TypeRef Parse_Type_Fn(TokenStream& lex); +TypeRef Parse_Type_Fn(TokenStream& lex, ::std::vector<::std::string> hrls = {}); TypeRef Parse_Type_Path(TokenStream& lex, ::std::vector<::std::string> hrls); // === CODE === @@ -39,18 +39,16 @@ TypeRef Parse_Type_Int(TokenStream& lex) // '_' = Wildcard (type inferrence variable) case TOK_UNDERSCORE: return TypeRef(); + // 'unsafe' - An unsafe function type case TOK_RWORD_UNSAFE: - lex.putback(tok); - return Parse_Type_Fn(lex); // 'extern' - A function type with an ABI case TOK_RWORD_EXTERN: - lex.putback(tok); - return Parse_Type_Fn(lex); // 'fn' - Rust function case TOK_RWORD_FN: lex.putback(tok); return Parse_Type_Fn(lex); + // '<' - An associated type cast case TOK_LT: case TOK_DOUBLE_LT: @@ -65,11 +63,14 @@ TypeRef Parse_Type_Int(TokenStream& lex) hrls.push_back( mv$(tok.str()) ); } while( GET_TOK(tok, lex) == TOK_COMMA ); CHECK_TOK(tok, TOK_GT); - if( LOOK_AHEAD(lex) == TOK_RWORD_FN || LOOK_AHEAD(lex) == TOK_RWORD_EXTERN ) { + switch(LOOK_AHEAD(lex)) + { + case TOK_RWORD_UNSAFE: + case TOK_RWORD_EXTERN: + case TOK_RWORD_FN: // TODO: Handle HRLS in fn types - return Parse_Type_Fn(lex); - } - else { + return Parse_Type_Fn(lex, hrls); + default: return Parse_Type_Path(lex, hrls); } } @@ -193,8 +194,9 @@ TypeRef Parse_Type_Int(TokenStream& lex) throw ParseError::BugCheck("Reached end of Parse_Type"); } -TypeRef Parse_Type_Fn(TokenStream& lex) +TypeRef Parse_Type_Fn(TokenStream& lex, ::std::vector<::std::string> hrls) { + // TODO: HRLs TRACE_FUNCTION; Token tok; |