Commit 1f28fcdec5

Josh Wolfe <thejoshwolfe@gmail.com>
2017-11-14 03:39:46
parsec supports C NULL to pointer implicit cast
1 parent a890380
Changed files (2)
src/parsec.cpp
@@ -1267,6 +1267,8 @@ static AstNode *trans_implicit_cast_expr(Context *c, AstNode *block, ImplicitCas
                 node->data.fn_call_expr.params.append(target_node);
                 return node;
             }
+        case CK_NullToPointer:
+            return trans_create_node(c, NodeTypeNullLiteral);
         case CK_Dependent:
             emit_warning(c, stmt->getLocStart(), "TODO handle C translation cast CK_Dependent");
             return nullptr;
@@ -1291,9 +1293,6 @@ static AstNode *trans_implicit_cast_expr(Context *c, AstNode *block, ImplicitCas
         case CK_ToUnion:
             emit_warning(c, stmt->getLocStart(), "TODO handle C translation cast CK_ToUnion");
             return nullptr;
-        case CK_NullToPointer:
-            emit_warning(c, stmt->getLocStart(), "TODO handle C translation cast CK_NullToPointer");
-            return nullptr;
         case CK_NullToMemberPointer:
             emit_warning(c, stmt->getLocStart(), "TODO handle C translation cast CK_NullToMemberPointer");
             return nullptr;
test/parsec.zig
@@ -596,6 +596,16 @@ pub fn addCases(cases: &tests.ParseCContext) {
         \\    return @sizeOf(c_int);
         \\}
     );
+
+    cases.addC("null pointer implicit cast",
+        \\int* foo(void) {
+        \\    return 0;
+        \\}
+    ,
+        \\export fn foo() -> ?&c_int {
+        \\    return null;
+        \\}
+    );
 }