summaryrefslogtreecommitdiff
path: root/parse
diff options
context:
space:
mode:
authorJohn Hodge (bugs) <tpg@mutabah.net>2014-11-29 09:21:23 +0800
committerJohn Hodge (bugs) <tpg@mutabah.net>2014-11-29 09:21:23 +0800
commit0ee2948340cea322b3eb44f2d900a708cb8c09a6 (patch)
tree499135dba03a081271be35e693404f644701dc0e /parse
parentf19e68c714c20a6bd0d40efa876fd3a3ba565fed (diff)
downloadmrust-0ee2948340cea322b3eb44f2d900a708cb8c09a6.tar.gz
Fiddling, added start of match parsing.
Diffstat (limited to 'parse')
-rw-r--r--parse/expr.cpp37
1 files changed, 31 insertions, 6 deletions
diff --git a/parse/expr.cpp b/parse/expr.cpp
index 997b49f5..6e7f1f6d 100644
--- a/parse/expr.cpp
+++ b/parse/expr.cpp
@@ -104,9 +104,14 @@ AST::ExprNode Parse_ExprBlocks(TokenStream& lex)
Token tok = lex.getToken();
switch( tok.type() )
{
- case TOK_RWORD_MATCH:
- throw ParseError::Todo("match");
- break;
+ case TOK_RWORD_MATCH: {
+ // 1. Get expression
+ AST::ExprNode switch_val = Parse_Expr1(lex);
+ GET_CHECK_TOK(tok, lex, TOK_BRACE_OPEN);
+ throw ParseError::Todo("match arms");
+ GET_CHECK_TOK(tok, lex, TOK_BRACE_CLOSE);
+ //return AST::ExprNode(ExprNode::TagMatch, switch_val, );
+ }
case TOK_RWORD_IF:
throw ParseError::Todo("if");
break;
@@ -208,7 +213,7 @@ LEFTASSOC(Parse_Expr11, Parse_Expr12,
throw ParseError::Todo("expr - modulo");
)
// 12: Unaries
-AST::ExprNode Parse_ExprVal(TokenStream& lex);
+AST::ExprNode Parse_ExprFC(TokenStream& lex);
AST::ExprNode Parse_Expr12(TokenStream& lex)
{
Token tok;
@@ -226,7 +231,27 @@ AST::ExprNode Parse_Expr12(TokenStream& lex)
throw ParseError::Todo("expr - borrow");
default:
lex.putback(tok);
- return Parse_ExprVal(lex);
+ return Parse_ExprFC(lex);
+ }
+}
+
+AST::ExprNode Parse_ExprVal(TokenStream& lex);
+AST::ExprNode Parse_ExprFC(TokenStream& lex)
+{
+ AST::ExprNode val = Parse_ExprVal(lex);
+ while(true)
+ {
+ switch((tok = lex.getToken()).type())
+ {
+ case TOK_PAREN_OPEN:
+ // Function call
+ break;
+ case TOK_DOT:
+ // Field access
+ break;
+ default:
+ return val;
+ }
}
}
@@ -251,7 +276,7 @@ AST::ExprNode Parse_ExprVal(TokenStream& lex)
break;
case TOK_PAREN_OPEN:
// Function call
- throw ParseError::Todo("Function call");
+ throw ParseError::Todo("Function call / structure literal");
break;
default:
// Value