diff options
author | John Hodge <tpg@mutabah.net> | 2016-02-27 16:29:51 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-02-27 16:29:51 +0800 |
commit | df62d33afdb267465caabf91abf340ce4884c443 (patch) | |
tree | e9b126a5c792ff8b3faa483b17f5ddf1527877d9 | |
parent | 5e5b4a58dcedf8903b10f94f15fcaf4c306c9e3c (diff) | |
download | mrust-df62d33afdb267465caabf91abf340ce4884c443.tar.gz |
Parse - Rough type ascription parsing
-rw-r--r-- | src/parse/expr.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/parse/expr.cpp b/src/parse/expr.cpp index 42347a2f..01aabf82 100644 --- a/src/parse/expr.cpp +++ b/src/parse/expr.cpp @@ -767,11 +767,27 @@ LEFTASSOC(Parse_Expr11, Parse_Expr12, rv = NEWNODE( AST::ExprNode_Cast, ::std::move(rv), Parse_Type(lex) );
break;
)
-// 12: Unaries
-ExprNodeP Parse_ExprFC(TokenStream& lex);
+// 12: Type Ascription
+ExprNodeP Parse_Expr13(TokenStream& lex);
ExprNodeP Parse_Expr12(TokenStream& lex)
{
Token tok;
+ auto rv = Parse_Expr13(lex);
+ if(GET_TOK(tok, lex) == TOK_COLON)
+ {
+ rv->get_res_type() = Parse_Type(lex);
+ }
+ else
+ {
+ lex.putback(tok);
+ }
+ return rv;
+}
+// 13: Unaries
+ExprNodeP Parse_ExprFC(TokenStream& lex);
+ExprNodeP Parse_Expr13(TokenStream& lex)
+{
+ Token tok;
switch(GET_TOK(tok, lex))
{
case TOK_DASH:
|