authorgravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2019-04-20 11:42:07+02:00
committergravatar for thatlemon@gmail.comLemonBoy <thatlemon@gmail.com> 2019-04-22 22:23:41+02:00
log70c2e86da36abdd56fd61b77682643129fcf6371
treeaf15cd380f6ae19d75c6140647fae843fb34d197
parenta44ad08954d9646f9fb1db6f1c167dd966b196a2

Add translation from pointer to boolean


1 files changed, 14 insertions(+), 2 deletions(-)

src/translate_c.cpp+14-2
......@@ -1948,8 +1948,20 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra
19481948 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ConstructorConversion");
19491949 return nullptr;
19501950 case ZigClangCK_PointerToBoolean:
1951 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_PointerToBoolean");
1952 return nullptr;
1951 {
1952 const clang::Expr *expr = stmt->getSubExpr();
1953 AstNode *val = trans_expr(c, ResultUsedYes, scope, bitcast(expr), TransRValue);
1954 if (val == nullptr)
1955 return nullptr;
1956
1957 AstNode *val_ptr = trans_create_node_builtin_fn_call_str(c, "ptrToInt");
1958 val_ptr->data.fn_call_expr.params.append(val);
1959
1960 AstNode *zero = trans_create_node_unsigned(c, 0);
1961
1962 // Translate as @ptrToInt((&val) != 0)
1963 return trans_create_node_bin_op(c, val_ptr, BinOpTypeCmpNotEq, zero);
1964 }
19531965 case ZigClangCK_ToVoid:
19541966 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ToVoid");
19551967 return nullptr;