summaryrefslogtreecommitdiff
path: root/src/parse/expr.cpp
diff options
context:
space:
mode:
authorJohn Hodge (sonata) <tpg@mutabah.net>2015-01-19 21:49:55 +0800
committerJohn Hodge (sonata) <tpg@mutabah.net>2015-01-19 21:49:55 +0800
commitf5bd71bdf7a36fddf52462b49c04fdcce2a3926a (patch)
tree06b49c73861b8342a0dae30a43dbd61c6fe75fad /src/parse/expr.cpp
parent4be8e3955de42210e01ca90373e28690fee762c0 (diff)
downloadmrust-f5bd71bdf7a36fddf52462b49c04fdcce2a3926a.tar.gz
Slow work on typecheck/propagate structure
Diffstat (limited to 'src/parse/expr.cpp')
-rw-r--r--src/parse/expr.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/parse/expr.cpp b/src/parse/expr.cpp
index 3899a3c3..e74432f4 100644
--- a/src/parse/expr.cpp
+++ b/src/parse/expr.cpp
@@ -134,10 +134,17 @@ ExprNodeP Parse_Stmt(TokenStream& lex, bool& opt_semicolon)
case TOK_RWORD_LET: {
//ret.append();
AST::Pattern pat = Parse_Pattern(lex);
- GET_CHECK_TOK(tok, lex, TOK_EQUAL);
+ TypeRef type;
+ if( GET_TOK(tok, lex) == TOK_COLON ) {
+ type = Parse_Type(lex);
+ GET_CHECK_TOK(tok, lex, TOK_EQUAL);
+ }
+ else {
+ CHECK_TOK(tok, TOK_EQUAL);
+ }
ExprNodeP val = Parse_Expr1(lex);
opt_semicolon = false;
- return NEWNODE( AST::ExprNode_LetBinding, ::std::move(pat), ::std::move(val) );
+ return NEWNODE( AST::ExprNode_LetBinding, ::std::move(pat), ::std::move(type), ::std::move(val) );
}
case TOK_RWORD_RETURN:
return NEWNODE( AST::ExprNode_Return, Parse_Expr1(lex) );