parse-c: support implicit cast to void *
This commit is contained in:
parent
2655cf1bf7
commit
c01ae69cdb
|
@ -1228,12 +1228,22 @@ static AstNode *trans_implicit_cast_expr(Context *c, AstNode *block, ImplicitCas
|
|||
return nullptr;
|
||||
return target_node;
|
||||
}
|
||||
case CK_BitCast:
|
||||
{
|
||||
AstNode *target_node = trans_expr(c, true, block, stmt->getSubExpr(), TransRValue);
|
||||
if (target_node == nullptr)
|
||||
return nullptr;
|
||||
|
||||
AstNode *dest_type_node = trans_qual_type(c, stmt->getType(), stmt->getLocStart());
|
||||
|
||||
AstNode *node = trans_create_node_builtin_fn_call_str(c, "ptrCast");
|
||||
node->data.fn_call_expr.params.append(dest_type_node);
|
||||
node->data.fn_call_expr.params.append(target_node);
|
||||
return node;
|
||||
}
|
||||
case CK_Dependent:
|
||||
emit_warning(c, stmt->getLocStart(), "TODO handle C translation cast CK_Dependent");
|
||||
return nullptr;
|
||||
case CK_BitCast:
|
||||
emit_warning(c, stmt->getLocStart(), "TODO handle C translation cast CK_BitCast");
|
||||
return nullptr;
|
||||
case CK_LValueBitCast:
|
||||
emit_warning(c, stmt->getLocStart(), "TODO handle C translation cast CK_LValueBitCast");
|
||||
return nullptr;
|
||||
|
|
|
@ -558,4 +558,26 @@ pub fn addCases(cases: &tests.ParseCContext) {
|
|||
\\ return c_int(a);
|
||||
\\}
|
||||
);
|
||||
|
||||
cases.add("implicit cast to void *",
|
||||
\\void *foo(unsigned short *x) {
|
||||
\\ return x;
|
||||
\\}
|
||||
,
|
||||
\\export fn foo(x: ?&c_ushort) -> ?&c_void {
|
||||
\\ return @ptrCast(?&c_void, x);
|
||||
\\}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// TODO
|
||||
//float *ptrcast(int *a) {
|
||||
// return (float *)a;
|
||||
//}
|
||||
// should translate to
|
||||
// fn ptrcast(a: ?&c_int) -> ?&f32 {
|
||||
// return @ptrCast(?&f32, a);
|
||||
// }
|
||||
|
|
Loading…
Reference in New Issue
Block a user