diff options
author | John Hodge (sonata) <tpg@mutabah.net> | 2015-01-16 09:14:38 +0800 |
---|---|---|
committer | John Hodge (sonata) <tpg@mutabah.net> | 2015-01-16 09:14:38 +0800 |
commit | 80e4060188913eb12ad8a774b07d3b938485a49a (patch) | |
tree | f8e978f4c1c93920aa16119199cf728b36915121 /src/parse/expr.cpp | |
parent | 7d04ce9d4c945cedf08ff2a7fa0af49ea4e6e1b0 (diff) | |
download | mrust-80e4060188913eb12ad8a774b07d3b938485a49a.tar.gz |
Added associated type reference parse, and tuple value parse
Diffstat (limited to 'src/parse/expr.cpp')
-rw-r--r-- | src/parse/expr.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/parse/expr.cpp b/src/parse/expr.cpp index fdf35740..3899a3c3 100644 --- a/src/parse/expr.cpp +++ b/src/parse/expr.cpp @@ -491,7 +491,18 @@ ExprNodeP Parse_ExprVal(TokenStream& lex) return NEWNODE( AST::ExprNode_NamedValue, AST::Path(AST::Path::TagLocal(), "self") );
case TOK_PAREN_OPEN: {
ExprNodeP rv = Parse_Expr0(lex);
- GET_CHECK_TOK(tok, lex, TOK_PAREN_CLOSE);
+ if( GET_TOK(tok, lex) == TOK_COMMA ) {
+ ::std::vector<ExprNodeP> ents;
+ ents.push_back( ::std::move(rv) );
+ do {
+ if( GET_TOK(tok, lex) == TOK_PAREN_CLOSE )
+ break;
+ lex.putback(tok);
+ ents.push_back( Parse_Expr0(lex) );
+ } while( GET_TOK(tok, lex) == TOK_COMMA );
+ rv = NEWNODE( AST::ExprNode_Tuple, ::std::move(ents) );
+ }
+ CHECK_TOK(tok, TOK_PAREN_CLOSE);
return rv; }
case TOK_MACRO:
//return NEWNODE( AST::ExprNode_Macro, tok.str(), Parse_TT(lex) );
|