diff options
author | John Hodge <tpg@mutabah.net> | 2015-03-17 21:56:54 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2015-03-17 21:56:54 +0800 |
commit | da1656ae893337e0bfab092c2236ff42eb23dac6 (patch) | |
tree | 11f15f9aaa60f3fb8b23320ecc8bcf649e2442c2 /src/parse | |
parent | 3ebea363b19e933df06faf7c1d1ad5d4251c2ca3 (diff) | |
download | mrust-da1656ae893337e0bfab092c2236ff42eb23dac6.tar.gz |
Fix handling of struct literals and for loops
Diffstat (limited to 'src/parse')
-rw-r--r-- | src/parse/expr.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/parse/expr.cpp b/src/parse/expr.cpp index 601c7e69..f2927eaf 100644 --- a/src/parse/expr.cpp +++ b/src/parse/expr.cpp @@ -461,7 +461,11 @@ ExprNodeP Parse_WhileStmt(TokenStream& lex, ::std::string lifetime) if( GET_TOK(tok, lex) == TOK_RWORD_LET ) {
auto pat = Parse_Pattern(lex);
GET_CHECK_TOK(tok, lex, TOK_EQUAL);
- auto val = Parse_Expr0(lex);
+ ExprNodeP val;
+ {
+ SET_PARSE_FLAG(lex, disallow_struct_literal);
+ val = Parse_Expr0(lex);
+ }
return NEWNODE( AST::ExprNode_Loop, lifetime, AST::ExprNode_Loop::WHILELET,
::std::move(pat), ::std::move(val), Parse_ExprBlockNode(lex) );
}
@@ -481,7 +485,7 @@ ExprNodeP Parse_ForStmt(TokenStream& lex, ::std::string lifetime) ExprNodeP val;
{
SET_PARSE_FLAG(lex, disallow_struct_literal);
- val = Parse_Expr1(lex);
+ val = Parse_Expr0(lex);
}
return NEWNODE( AST::ExprNode_Loop, lifetime, AST::ExprNode_Loop::FOR,
::std::move(pat), ::std::move(val), Parse_ExprBlockNode(lex) );
@@ -1132,7 +1136,7 @@ ExprNodeP Parse_ExprVal(TokenStream& lex) case TOK_MACRO:
{
TokenTree tt = Parse_TT(lex, true);
- if( tt.size() == 0 ) {
+ if( tt.is_token() ) {
throw ParseError::Unexpected(lex, tt.tok());
}
::std::string name = tok.str();
|