aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2017-11-25 11:56:17 -0500
committerAndrew Kelley <superjoe30@gmail.com>2017-11-25 11:56:17 -0500
commitb390929826062f81b9f796d4cf46a72aa23d291a (patch)
treeb869d5f2bf947dba9f943be5569fc2eea58f8f06 /src
parentbf20b260ce1b76b3b3d2c8a1bc1819eb3871bb00 (diff)
downloadzig-b390929826062f81b9f796d4cf46a72aa23d291a.tar.gz
zig-b390929826062f81b9f796d4cf46a72aa23d291a.zip
translate-c supports break and continue
Diffstat (limited to 'src')
-rw-r--r--src/translate_c.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/translate_c.cpp b/src/translate_c.cpp
index 6c55aa6afc..00309e8bc1 100644
--- a/src/translate_c.cpp
+++ b/src/translate_c.cpp
@@ -2231,6 +2231,14 @@ static AstNode *trans_string_literal(Context *c, AstNode *block, StringLiteral *
zig_unreachable();
}
+static AstNode *trans_break_stmt(Context *c, AstNode *block, BreakStmt *stmt) {
+ return trans_create_node(c, NodeTypeBreak);
+}
+
+static AstNode *trans_continue_stmt(Context *c, AstNode *block, ContinueStmt *stmt) {
+ return trans_create_node(c, NodeTypeContinue);
+}
+
static AstNode *trans_stmt(Context *c, bool result_used, AstNode *block, Stmt *stmt, TransLRValue lrvalue) {
Stmt::StmtClass sc = stmt->getStmtClass();
switch (sc) {
@@ -2276,6 +2284,10 @@ static AstNode *trans_stmt(Context *c, bool result_used, AstNode *block, Stmt *s
return trans_for_loop(c, block, (ForStmt *)stmt);
case Stmt::StringLiteralClass:
return trans_string_literal(c, block, (StringLiteral *)stmt);
+ case Stmt::BreakStmtClass:
+ return trans_break_stmt(c, block, (BreakStmt *)stmt);
+ case Stmt::ContinueStmtClass:
+ return trans_continue_stmt(c, block, (ContinueStmt *)stmt);
case Stmt::CaseStmtClass:
emit_warning(c, stmt->getLocStart(), "TODO handle C CaseStmtClass");
return nullptr;
@@ -2297,9 +2309,6 @@ static AstNode *trans_stmt(Context *c, bool result_used, AstNode *block, Stmt *s
case Stmt::AttributedStmtClass:
emit_warning(c, stmt->getLocStart(), "TODO handle C AttributedStmtClass");
return nullptr;
- case Stmt::BreakStmtClass:
- emit_warning(c, stmt->getLocStart(), "TODO handle C BreakStmtClass");
- return nullptr;
case Stmt::CXXCatchStmtClass:
emit_warning(c, stmt->getLocStart(), "TODO handle C CXXCatchStmtClass");
return nullptr;
@@ -2312,9 +2321,6 @@ static AstNode *trans_stmt(Context *c, bool result_used, AstNode *block, Stmt *s
case Stmt::CapturedStmtClass:
emit_warning(c, stmt->getLocStart(), "TODO handle C CapturedStmtClass");
return nullptr;
- case Stmt::ContinueStmtClass:
- emit_warning(c, stmt->getLocStart(), "TODO handle C ContinueStmtClass");
- return nullptr;
case Stmt::CoreturnStmtClass:
emit_warning(c, stmt->getLocStart(), "TODO handle C CoreturnStmtClass");
return nullptr;