aboutsummaryrefslogtreecommitdiff
path: root/src/parser.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2015-12-24 15:36:49 -0700
committerAndrew Kelley <superjoe30@gmail.com>2015-12-24 15:36:49 -0700
commit5943f995106f9fc2c7c5b416c8d4a2ebba2b8315 (patch)
treee7c67f1b85260de9b54e22a85de8eb3212788d86 /src/parser.cpp
parent44ca5e19dc174383b1b0490e636398092711306d (diff)
downloadzig-5943f995106f9fc2c7c5b416c8d4a2ebba2b8315.tar.gz
zig-5943f995106f9fc2c7c5b416c8d4a2ebba2b8315.zip
implement continue expression
closes #6
Diffstat (limited to 'src/parser.cpp')
-rw-r--r--src/parser.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/parser.cpp b/src/parser.cpp
index ff6a2dd573..994923c377 100644
--- a/src/parser.cpp
+++ b/src/parser.cpp
@@ -124,6 +124,8 @@ const char *node_type_str(NodeType node_type) {
return "Goto";
case NodeTypeBreak:
return "Break";
+ case NodeTypeContinue:
+ return "Continue";
case NodeTypeAsmExpr:
return "AsmExpr";
case NodeTypeFieldAccessExpr:
@@ -341,6 +343,9 @@ void ast_print(AstNode *node, int indent) {
case NodeTypeBreak:
fprintf(stderr, "%s\n", node_type_str(node->type));
break;
+ case NodeTypeContinue:
+ fprintf(stderr, "%s\n", node_type_str(node->type));
+ break;
case NodeTypeAsmExpr:
fprintf(stderr, "%s\n", node_type_str(node->type));
break;
@@ -1107,7 +1112,7 @@ static AstNode *ast_parse_struct_val_expr(ParseContext *pc, int *token_index) {
}
/*
-PrimaryExpression : token(Number) | token(String) | KeywordLiteral | GroupedExpression | Goto | Break | BlockExpression | token(Symbol) | StructValueExpression
+PrimaryExpression : token(Number) | token(String) | KeywordLiteral | GroupedExpression | Goto | token(Break) | token(Continue) | BlockExpression | token(Symbol) | StructValueExpression
*/
static AstNode *ast_parse_primary_expr(ParseContext *pc, int *token_index, bool mandatory) {
Token *token = &pc->tokens->at(*token_index);
@@ -1165,6 +1170,10 @@ static AstNode *ast_parse_primary_expr(ParseContext *pc, int *token_index, bool
AstNode *node = ast_create_node(pc, NodeTypeBreak, token);
*token_index += 1;
return node;
+ } else if (token->id == TokenIdKeywordContinue) {
+ AstNode *node = ast_create_node(pc, NodeTypeContinue, token);
+ *token_index += 1;
+ return node;
}
AstNode *grouped_expr_node = ast_parse_grouped_expr(pc, token_index, false);