From 36dd3e4c5da3374ab0338c3e42d3f1901379cc70 Mon Sep 17 00:00:00 2001 From: John Hodge Date: Sat, 27 Feb 2016 18:29:11 +0800 Subject: Parse - (hackily) support vardic function definitions --- src/parse/root.cpp | 6 ++++++ src/parse/types.cpp | 5 +++++ 2 files changed, 11 insertions(+) (limited to 'src/parse') 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); -- cgit v1.2.3