authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2019-04-16 16:57:49+02:00
committergravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2019-04-19 11:50:30+02:00
log1fda44cbc85a61da048017b0820ab82d1a9817df
tree5c719e5adaac745322a122662d692e6a3e387796
parent3b6a4fe4cd0800b7078953d56156475f699751f1

translate-c: support conversion to/from fp types


1 files changed, 17 insertions(+), 5 deletions(-)

src/translate_c.cpp+17-5
......@@ -1915,17 +1915,29 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra
19151915 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralToBoolean");
19161916 return nullptr;
19171917 case ZigClangCK_IntegralToFloating:
1918 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralToFloating");
1919 return nullptr;
1918 case ZigClangCK_FloatingToIntegral:
1919 {
1920 AstNode *target_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
1921 if (target_node == nullptr)
1922 return nullptr;
1923
1924 AstNode *dest_type_node = get_expr_type(c, (const ZigClangExpr *)stmt);
1925 if (dest_type_node == nullptr)
1926 return nullptr;
1927
1928 const bool int_to_float = (ZigClangCK)stmt->getCastKind() == ZigClangCK_IntegralToFloating;
1929 const char *fn = int_to_float ? "intToFloat" : "floatToInt";
1930 AstNode *node = trans_create_node_builtin_fn_call_str(c, fn);
1931 node->data.fn_call_expr.params.append(dest_type_node);
1932 node->data.fn_call_expr.params.append(target_node);
1933 return maybe_suppress_result(c, result_used, node);
1934 }
19201935 case ZigClangCK_FixedPointCast:
19211936 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FixedPointCast");
19221937 return nullptr;
19231938 case ZigClangCK_FixedPointToBoolean:
19241939 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FixedPointToBoolean");
19251940 return nullptr;
1926 case ZigClangCK_FloatingToIntegral:
1927 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingToIntegral");
1928 return nullptr;
19291941 case ZigClangCK_FloatingToBoolean:
19301942 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingToBoolean");
19311943 return nullptr;