summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-02-27 18:29:11 +0800
committerJohn Hodge <tpg@mutabah.net>2016-02-27 18:29:11 +0800
commit36dd3e4c5da3374ab0338c3e42d3f1901379cc70 (patch)
tree9ea47a0ff5442c78fe306466391e5e0a51247204
parenta92d91674e2863bcd401b28e72f0dcf1e7cb73fd (diff)
downloadmrust-36dd3e4c5da3374ab0338c3e42d3f1901379cc70.tar.gz
Parse - (hackily) support vardic function definitions
-rw-r--r--src/parse/root.cpp6
-rw-r--r--src/parse/types.cpp5
2 files changed, 11 insertions, 0 deletions
diff --git a/src/parse/root.cpp b/src/parse/root.cpp
index 231094a2..00ba005f 100644
--- a/src/parse/root.cpp
+++ b/src/parse/root.cpp
@@ -336,6 +336,12 @@ AST::Function Parse_FunctionDef(TokenStream& lex, ::std::string abi, AST::MetaIt
GET_TOK(tok, lex);
break;
}
+ if( LOOK_AHEAD(lex) == TOK_TRIPLE_DOT ) {
+ GET_TOK(tok, lex);
+ // TODO: Mark function as vardic
+ GET_TOK(tok, lex);
+ break;
+ }
args.push_back( Parse_Function_Arg(lex, !can_be_prototype) );
} while( GET_TOK(tok, lex) == TOK_COMMA );
CHECK_TOK(tok, TOK_PAREN_CLOSE);
diff --git a/src/parse/types.cpp b/src/parse/types.cpp
index 7b69dbd6..e6aadbbe 100644
--- a/src/parse/types.cpp
+++ b/src/parse/types.cpp
@@ -227,6 +227,11 @@ TypeRef Parse_Type_Fn(TokenStream& lex, ::std::vector<::std::string> hrls)
GET_CHECK_TOK(tok, lex, TOK_PAREN_OPEN);
while( LOOK_AHEAD(lex) != TOK_PAREN_CLOSE )
{
+ if( LOOK_AHEAD(lex) == TOK_TRIPLE_DOT ) {
+ GET_TOK(tok, lex);
+ // TODO: Mark function as vardic
+ break;
+ }
// Handle `ident: `
if( lex.lookahead(0) == TOK_IDENT && lex.lookahead(1) == TOK_COLON ) {
GET_TOK(tok, lex);