summaryrefslogtreecommitdiff
path: root/src/parse
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2015-03-17 21:56:54 +0800
committerJohn Hodge <tpg@mutabah.net>2015-03-17 21:56:54 +0800
commitda1656ae893337e0bfab092c2236ff42eb23dac6 (patch)
tree11f15f9aaa60f3fb8b23320ecc8bcf649e2442c2 /src/parse
parent3ebea363b19e933df06faf7c1d1ad5d4251c2ca3 (diff)
downloadmrust-da1656ae893337e0bfab092c2236ff42eb23dac6.tar.gz
Fix handling of struct literals and for loops
Diffstat (limited to 'src/parse')
-rw-r--r--src/parse/expr.cpp10
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();