Commit 2655cf1bf7
Changed files (2)
src
test
src/parsec.cpp
@@ -1837,6 +1837,16 @@ static AstNode *trans_array_subscript_expr(Context *c, AstNode *block, ArraySubs
return node;
}
+static AstNode *trans_c_style_cast_expr(Context *c, bool result_used, AstNode *block,
+ CStyleCastExpr *stmt, TransLRValue lrvalue)
+{
+ AstNode *sub_expr_node = trans_expr(c, result_used, block, stmt->getSubExpr(), lrvalue);
+ if (sub_expr_node == nullptr)
+ return nullptr;
+
+ return trans_c_cast(c, stmt->getLocStart(), stmt->getType(), sub_expr_node);
+}
+
static AstNode *trans_stmt(Context *c, bool result_used, AstNode *block, Stmt *stmt, TransLRValue lrvalue) {
Stmt::StmtClass sc = stmt->getStmtClass();
switch (sc) {
@@ -1872,6 +1882,8 @@ static AstNode *trans_stmt(Context *c, bool result_used, AstNode *block, Stmt *s
return trans_member_expr(c, block, (MemberExpr *)stmt);
case Stmt::ArraySubscriptExprClass:
return trans_array_subscript_expr(c, block, (ArraySubscriptExpr *)stmt);
+ case Stmt::CStyleCastExprClass:
+ return trans_c_style_cast_expr(c, result_used, block, (CStyleCastExpr *)stmt, lrvalue);
case Stmt::CaseStmtClass:
emit_warning(c, stmt->getLocStart(), "TODO handle C CaseStmtClass");
return nullptr;
@@ -2020,9 +2032,6 @@ static AstNode *trans_stmt(Context *c, bool result_used, AstNode *block, Stmt *s
case Stmt::UserDefinedLiteralClass:
emit_warning(c, stmt->getLocStart(), "TODO handle C UserDefinedLiteralClass");
return nullptr;
- case Stmt::CStyleCastExprClass:
- emit_warning(c, stmt->getLocStart(), "TODO handle C CStyleCastExprClass");
- return nullptr;
case Stmt::CXXFunctionalCastExprClass:
emit_warning(c, stmt->getLocStart(), "TODO handle C CXXFunctionalCastExprClass");
return nullptr;
test/parsec.zig
@@ -548,4 +548,14 @@ pub fn addCases(cases: &tests.ParseCContext) {
\\}
);
+
+ cases.add("c style cast",
+ \\int float_to_int(float a) {
+ \\ return (int)a;
+ \\}
+ ,
+ \\export fn float_to_int(a: f32) -> c_int {
+ \\ return c_int(a);
+ \\}
+ );
}