authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-01 17:33:11-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-01 17:33:11-04:00
logc1a05f058112885adb9ac6f08737e670a3773d4b
tree5e0e96b31aa232d1fb22a5ecc2762412f68bef9f
parent17f2af10b56dd508ebd4a22834fd594cb5a49864
signaturelock-open Commit is signed but in an unrecognized format.

translate-c: make trans_implicit_cast_expr use zig_clang.h

See #1964

3 files changed, 93 insertions(+), 78 deletions(-)

src/translate_c.cpp+83-78
......@@ -541,14 +541,14 @@ static const ZigClangType *qual_type_canon(ZigClangQualType qt) {
541541static ZigClangQualType get_expr_qual_type(Context *c, const ZigClangExpr *expr) {
542542 // String literals in C are `char *` but they should really be `const char *`.
543543 if (ZigClangExpr_getStmtClass(expr) == ZigClangStmt_ImplicitCastExprClass) {
544 const clang::ImplicitCastExpr *cast_expr = reinterpret_cast<const clang::ImplicitCastExpr *>(expr);
545 if ((ZigClangCK)cast_expr->getCastKind() == ZigClangCK_ArrayToPointerDecay) {
546 const ZigClangExpr *sub_expr = bitcast(cast_expr->getSubExpr());
544 const ZigClangImplicitCastExpr *cast_expr = reinterpret_cast<const ZigClangImplicitCastExpr *>(expr);
545 if (ZigClangImplicitCastExpr_getCastKind(cast_expr) == ZigClangCK_ArrayToPointerDecay) {
546 const ZigClangExpr *sub_expr = ZigClangImplicitCastExpr_getSubExpr(cast_expr);
547547 if (ZigClangExpr_getStmtClass(sub_expr) == ZigClangStmt_StringLiteralClass) {
548548 ZigClangQualType array_qt = ZigClangExpr_getType(sub_expr);
549 const clang::ArrayType *array_type = reinterpret_cast<const clang::ArrayType *>(
549 const ZigClangArrayType *array_type = reinterpret_cast<const ZigClangArrayType *>(
550550 ZigClangQualType_getTypePtr(array_qt));
551 ZigClangQualType pointee_qt = bitcast(array_type->getElementType());
551 ZigClangQualType pointee_qt = ZigClangArrayType_getElementType(array_type);
552552 ZigClangQualType_addConst(&pointee_qt);
553553 return ZigClangASTContext_getPointerType(c->ctx, pointee_qt);
554554 }
......@@ -559,8 +559,8 @@ static ZigClangQualType get_expr_qual_type(Context *c, const ZigClangExpr *expr)
559559
560560static ZigClangQualType get_expr_qual_type_before_implicit_cast(Context *c, const ZigClangExpr *expr) {
561561 if (ZigClangExpr_getStmtClass(expr) == ZigClangStmt_ImplicitCastExprClass) {
562 const clang::ImplicitCastExpr *cast_expr = reinterpret_cast<const clang::ImplicitCastExpr *>(expr);
563 return get_expr_qual_type(c, bitcast(cast_expr->getSubExpr()));
562 const ZigClangImplicitCastExpr *cast_expr = reinterpret_cast<const ZigClangImplicitCastExpr *>(expr);
563 return get_expr_qual_type(c, ZigClangImplicitCastExpr_getSubExpr(cast_expr));
564564 }
565565 return ZigClangExpr_getType(expr);
566566}
......@@ -1928,88 +1928,93 @@ static AstNode *trans_compound_assign_operator(Context *c, ResultUsed result_use
19281928 zig_unreachable();
19291929}
19301930
1931static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, TransScope *scope, const clang::ImplicitCastExpr *stmt) {
1932 switch ((ZigClangCK)stmt->getCastKind()) {
1931static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, TransScope *scope,
1932 const ZigClangImplicitCastExpr *stmt)
1933{
1934 switch (ZigClangImplicitCastExpr_getCastKind(stmt)) {
19331935 case ZigClangCK_LValueToRValue:
1934 return trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
1936 return trans_expr(c, ResultUsedYes, scope, ZigClangImplicitCastExpr_getSubExpr(stmt), TransRValue);
19351937 case ZigClangCK_IntegralCast:
19361938 {
1937 AstNode *target_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
1939 AstNode *target_node = trans_expr(c, ResultUsedYes, scope, ZigClangImplicitCastExpr_getSubExpr(stmt), TransRValue);
19381940 if (target_node == nullptr)
19391941 return nullptr;
1940 AstNode *node = trans_c_cast(c, bitcast(stmt->getExprLoc()), bitcast(stmt->getType()),
1941 bitcast(stmt->getSubExpr()->getType()), target_node);
1942 AstNode *node = trans_c_cast(c, ZigClangImplicitCastExpr_getBeginLoc(stmt),
1943 ZigClangExpr_getType(reinterpret_cast<const ZigClangExpr *>(stmt)),
1944 ZigClangExpr_getType(ZigClangImplicitCastExpr_getSubExpr(stmt)),
1945 target_node);
19421946 return maybe_suppress_result(c, result_used, node);
19431947 }
19441948 case ZigClangCK_FunctionToPointerDecay:
19451949 case ZigClangCK_ArrayToPointerDecay:
19461950 {
1947 AstNode *target_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
1951 AstNode *target_node = trans_expr(c, ResultUsedYes, scope, ZigClangImplicitCastExpr_getSubExpr(stmt), TransRValue);
19481952 if (target_node == nullptr)
19491953 return nullptr;
19501954 return maybe_suppress_result(c, result_used, target_node);
19511955 }
19521956 case ZigClangCK_BitCast:
19531957 {
1954 AstNode *target_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
1958 AstNode *target_node = trans_expr(c, ResultUsedYes, scope, ZigClangImplicitCastExpr_getSubExpr(stmt), TransRValue);
19551959 if (target_node == nullptr)
19561960 return nullptr;
19571961
1958 const ZigClangQualType dest_type = get_expr_qual_type(c, bitcast(stmt));
1959 const ZigClangQualType src_type = get_expr_qual_type(c, bitcast(stmt->getSubExpr()));
1962 const ZigClangQualType dest_type = get_expr_qual_type(c, reinterpret_cast<const ZigClangExpr *>(stmt));
1963 const ZigClangQualType src_type = get_expr_qual_type(c, ZigClangImplicitCastExpr_getSubExpr(stmt));
19601964
1961 return trans_c_cast(c, bitcast(stmt->getBeginLoc()), dest_type, src_type, target_node);
1965 return trans_c_cast(c, ZigClangImplicitCastExpr_getBeginLoc(stmt),
1966 dest_type, src_type, target_node);
19621967 }
19631968 case ZigClangCK_NullToPointer:
19641969 return trans_create_node(c, NodeTypeNullLiteral);
19651970 case ZigClangCK_NoOp:
1966 return trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
1971 return trans_expr(c, ResultUsedYes, scope, ZigClangImplicitCastExpr_getSubExpr(stmt), TransRValue);
19671972 case ZigClangCK_Dependent:
1968 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_Dependent");
1973 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C translation cast CK_Dependent");
19691974 return nullptr;
19701975 case ZigClangCK_LValueBitCast:
1971 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_LValueBitCast");
1976 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C translation cast CK_LValueBitCast");
19721977 return nullptr;
19731978 case ZigClangCK_BaseToDerived:
1974 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_BaseToDerived");
1979 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C translation cast CK_BaseToDerived");
19751980 return nullptr;
19761981 case ZigClangCK_DerivedToBase:
1977 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_DerivedToBase");
1982 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C translation cast CK_DerivedToBase");
19781983 return nullptr;
19791984 case ZigClangCK_UncheckedDerivedToBase:
1980 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_UncheckedDerivedToBase");
1985 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C translation cast CK_UncheckedDerivedToBase");
19811986 return nullptr;
19821987 case ZigClangCK_Dynamic:
1983 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_Dynamic");
1988 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C translation cast CK_Dynamic");
19841989 return nullptr;
19851990 case ZigClangCK_ToUnion:
1986 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_ToUnion");
1991 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C translation cast CK_ToUnion");
19871992 return nullptr;
19881993 case ZigClangCK_NullToMemberPointer:
1989 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_NullToMemberPointer");
1994 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C translation cast CK_NullToMemberPointer");
19901995 return nullptr;
19911996 case ZigClangCK_BaseToDerivedMemberPointer:
1992 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_BaseToDerivedMemberPointer");
1997 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C translation cast CK_BaseToDerivedMemberPointer");
19931998 return nullptr;
19941999 case ZigClangCK_DerivedToBaseMemberPointer:
1995 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_DerivedToBaseMemberPointer");
2000 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C translation cast CK_DerivedToBaseMemberPointer");
19962001 return nullptr;
19972002 case ZigClangCK_MemberPointerToBoolean:
1998 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_MemberPointerToBoolean");
2003 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C translation cast CK_MemberPointerToBoolean");
19992004 return nullptr;
20002005 case ZigClangCK_ReinterpretMemberPointer:
2001 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_ReinterpretMemberPointer");
2006 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C translation cast CK_ReinterpretMemberPointer");
20022007 return nullptr;
20032008 case ZigClangCK_UserDefinedConversion:
2004 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_UserDefinedConversion");
2009 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C translation cast CK_UserDefinedConversion");
20052010 return nullptr;
20062011 case ZigClangCK_ConstructorConversion:
2007 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ConstructorConversion");
2012 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_ConstructorConversion");
20082013 return nullptr;
20092014 case ZigClangCK_PointerToBoolean:
20102015 {
2011 const clang::Expr *expr = stmt->getSubExpr();
2012 AstNode *val = trans_expr(c, ResultUsedYes, scope, bitcast(expr), TransRValue);
2016 const ZigClangExpr *expr = ZigClangImplicitCastExpr_getSubExpr(stmt);
2017 AstNode *val = trans_expr(c, ResultUsedYes, scope, expr, TransRValue);
20132018 if (val == nullptr)
20142019 return nullptr;
20152020
......@@ -2022,21 +2027,21 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra
20222027 return trans_create_node_bin_op(c, val_ptr, BinOpTypeCmpNotEq, zero);
20232028 }
20242029 case ZigClangCK_ToVoid:
2025 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ToVoid");
2030 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_ToVoid");
20262031 return nullptr;
20272032 case ZigClangCK_VectorSplat:
2028 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_VectorSplat");
2033 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_VectorSplat");
20292034 return nullptr;
20302035 case ZigClangCK_IntegralToBoolean:
20312036 {
2032 const clang::Expr *expr = stmt->getSubExpr();
2037 const ZigClangExpr *expr = ZigClangImplicitCastExpr_getSubExpr(stmt);
20332038
20342039 bool expr_val;
2035 if (expr->EvaluateAsBooleanCondition(expr_val, *reinterpret_cast<clang::ASTContext *>(c->ctx))) {
2040 if (ZigClangExpr_EvaluateAsBooleanCondition(expr, &expr_val, c->ctx, false)) {
20362041 return trans_create_node_bool(c, expr_val);
20372042 }
20382043
2039 AstNode *val = trans_expr(c, ResultUsedYes, scope, bitcast(expr), TransRValue);
2044 AstNode *val = trans_expr(c, ResultUsedYes, scope, expr, TransRValue);
20402045 if (val == nullptr)
20412046 return nullptr;
20422047
......@@ -2047,7 +2052,7 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra
20472052 }
20482053 case ZigClangCK_PointerToIntegral:
20492054 {
2050 AstNode *target_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
2055 AstNode *target_node = trans_expr(c, ResultUsedYes, scope, ZigClangImplicitCastExpr_getSubExpr(stmt), TransRValue);
20512056 if (target_node == nullptr)
20522057 return nullptr;
20532058
......@@ -2066,7 +2071,7 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra
20662071 }
20672072 case ZigClangCK_IntegralToPointer:
20682073 {
2069 AstNode *target_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
2074 AstNode *target_node = trans_expr(c, ResultUsedYes, scope, ZigClangImplicitCastExpr_getSubExpr(stmt), TransRValue);
20702075 if (target_node == nullptr)
20712076 return nullptr;
20722077
......@@ -2083,7 +2088,7 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra
20832088 case ZigClangCK_IntegralToFloating:
20842089 case ZigClangCK_FloatingToIntegral:
20852090 {
2086 AstNode *target_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
2091 AstNode *target_node = trans_expr(c, ResultUsedYes, scope, ZigClangImplicitCastExpr_getSubExpr(stmt), TransRValue);
20872092 if (target_node == nullptr)
20882093 return nullptr;
20892094
......@@ -2091,7 +2096,7 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra
20912096 if (dest_type_node == nullptr)
20922097 return nullptr;
20932098
2094 char const *fn = (ZigClangCK)stmt->getCastKind() == ZigClangCK_IntegralToFloating ?
2099 char const *fn = (ZigClangImplicitCastExpr_getCastKind(stmt) == ZigClangCK_IntegralToFloating) ?
20952100 "intToFloat" : "floatToInt";
20962101 AstNode *node = trans_create_node_builtin_fn_call_str(c, fn);
20972102 node->data.fn_call_expr.params.append(dest_type_node);
......@@ -2100,103 +2105,103 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra
21002105 return maybe_suppress_result(c, result_used, node);
21012106 }
21022107 case ZigClangCK_FixedPointCast:
2103 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FixedPointCast");
2108 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_FixedPointCast");
21042109 return nullptr;
21052110 case ZigClangCK_FixedPointToBoolean:
2106 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FixedPointToBoolean");
2111 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_FixedPointToBoolean");
21072112 return nullptr;
21082113 case ZigClangCK_FloatingToBoolean:
2109 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingToBoolean");
2114 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_FloatingToBoolean");
21102115 return nullptr;
21112116 case ZigClangCK_BooleanToSignedIntegral:
2112 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_BooleanToSignedIntegral");
2117 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_BooleanToSignedIntegral");
21132118 return nullptr;
21142119 case ZigClangCK_FloatingCast:
2115 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingCast");
2120 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_FloatingCast");
21162121 return nullptr;
21172122 case ZigClangCK_CPointerToObjCPointerCast:
2118 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_CPointerToObjCPointerCast");
2123 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_CPointerToObjCPointerCast");
21192124 return nullptr;
21202125 case ZigClangCK_BlockPointerToObjCPointerCast:
2121 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_BlockPointerToObjCPointerCast");
2126 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_BlockPointerToObjCPointerCast");
21222127 return nullptr;
21232128 case ZigClangCK_AnyPointerToBlockPointerCast:
2124 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_AnyPointerToBlockPointerCast");
2129 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_AnyPointerToBlockPointerCast");
21252130 return nullptr;
21262131 case ZigClangCK_ObjCObjectLValueCast:
2127 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ObjCObjectLValueCast");
2132 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_ObjCObjectLValueCast");
21282133 return nullptr;
21292134 case ZigClangCK_FloatingRealToComplex:
2130 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingRealToComplex");
2135 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_FloatingRealToComplex");
21312136 return nullptr;
21322137 case ZigClangCK_FloatingComplexToReal:
2133 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingComplexToReal");
2138 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_FloatingComplexToReal");
21342139 return nullptr;
21352140 case ZigClangCK_FloatingComplexToBoolean:
2136 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingComplexToBoolean");
2141 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_FloatingComplexToBoolean");
21372142 return nullptr;
21382143 case ZigClangCK_FloatingComplexCast:
2139 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingComplexCast");
2144 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_FloatingComplexCast");
21402145 return nullptr;
21412146 case ZigClangCK_FloatingComplexToIntegralComplex:
2142 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingComplexToIntegralComplex");
2147 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_FloatingComplexToIntegralComplex");
21432148 return nullptr;
21442149 case ZigClangCK_IntegralRealToComplex:
2145 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralRealToComplex");
2150 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_IntegralRealToComplex");
21462151 return nullptr;
21472152 case ZigClangCK_IntegralComplexToReal:
2148 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralComplexToReal");
2153 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_IntegralComplexToReal");
21492154 return nullptr;
21502155 case ZigClangCK_IntegralComplexToBoolean:
2151 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralComplexToBoolean");
2156 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_IntegralComplexToBoolean");
21522157 return nullptr;
21532158 case ZigClangCK_IntegralComplexCast:
2154 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralComplexCast");
2159 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_IntegralComplexCast");
21552160 return nullptr;
21562161 case ZigClangCK_IntegralComplexToFloatingComplex:
2157 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralComplexToFloatingComplex");
2162 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_IntegralComplexToFloatingComplex");
21582163 return nullptr;
21592164 case ZigClangCK_ARCProduceObject:
2160 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ARCProduceObject");
2165 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_ARCProduceObject");
21612166 return nullptr;
21622167 case ZigClangCK_ARCConsumeObject:
2163 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ARCConsumeObject");
2168 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_ARCConsumeObject");
21642169 return nullptr;
21652170 case ZigClangCK_ARCReclaimReturnedObject:
2166 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ARCReclaimReturnedObject");
2171 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_ARCReclaimReturnedObject");
21672172 return nullptr;
21682173 case ZigClangCK_ARCExtendBlockObject:
2169 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ARCExtendBlockObject");
2174 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_ARCExtendBlockObject");
21702175 return nullptr;
21712176 case ZigClangCK_AtomicToNonAtomic:
2172 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_AtomicToNonAtomic");
2177 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_AtomicToNonAtomic");
21732178 return nullptr;
21742179 case ZigClangCK_NonAtomicToAtomic:
2175 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_NonAtomicToAtomic");
2180 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_NonAtomicToAtomic");
21762181 return nullptr;
21772182 case ZigClangCK_CopyAndAutoreleaseBlockObject:
2178 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_CopyAndAutoreleaseBlockObject");
2183 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_CopyAndAutoreleaseBlockObject");
21792184 return nullptr;
21802185 case ZigClangCK_BuiltinFnToFnPtr:
2181 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_BuiltinFnToFnPtr");
2186 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_BuiltinFnToFnPtr");
21822187 return nullptr;
21832188 case ZigClangCK_ZeroToOCLOpaqueType:
2184 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ZeroToOCLOpaqueType");
2189 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_ZeroToOCLOpaqueType");
21852190 return nullptr;
21862191 case ZigClangCK_AddressSpaceConversion:
2187 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_AddressSpaceConversion");
2192 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_AddressSpaceConversion");
21882193 return nullptr;
21892194 case ZigClangCK_IntToOCLSampler:
2190 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntToOCLSampler");
2195 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_IntToOCLSampler");
21912196 return nullptr;
21922197 case ZigClangCK_LValueToRValueBitCast:
2193 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_LValueToRValueBitCast");
2198 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_LValueToRValueBitCast");
21942199 return nullptr;
21952200 case ZigClangCK_FixedPointToIntegral:
2196 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FixedPointToIntegral");
2201 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_FixedPointToIntegral");
21972202 return nullptr;
21982203 case ZigClangCK_IntegralToFixedPoint:
2199 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralToFixedPointral");
2204 emit_warning(c, ZigClangImplicitCastExpr_getBeginLoc(stmt), "TODO handle C CK_IntegralToFixedPointral");
22002205 return nullptr;
22012206 }
22022207 zig_unreachable();
......@@ -3470,7 +3475,7 @@ static int trans_stmt_extra(Context *c, TransScope *scope, const ZigClangStmt *s
34703475 trans_compound_assign_operator(c, result_used, scope, (const clang::CompoundAssignOperator *)stmt));
34713476 case ZigClangStmt_ImplicitCastExprClass:
34723477 return wrap_stmt(out_node, out_child_scope, scope,
3473 trans_implicit_cast_expr(c, result_used, scope, (const clang::ImplicitCastExpr *)stmt));
3478 trans_implicit_cast_expr(c, result_used, scope, (const ZigClangImplicitCastExpr *)stmt));
34743479 case ZigClangStmt_DeclRefExprClass:
34753480 return wrap_stmt(out_node, out_child_scope, scope,
34763481 trans_decl_ref_expr(c, scope, (const clang::DeclRefExpr *)stmt, lrvalue));
src/zig_clang.cpp+8
......@@ -1667,6 +1667,14 @@ ZigClangSourceLocation ZigClangExpr_getBeginLoc(const ZigClangExpr *self) {
16671667 return bitcast(casted->getBeginLoc());
16681668}
16691669
1670bool ZigClangExpr_EvaluateAsBooleanCondition(const ZigClangExpr *self, bool *result,
1671 const struct ZigClangASTContext *ctx, bool in_constant_context)
1672{
1673 auto casted = reinterpret_cast<const clang::Expr *>(self);
1674 auto casted_ctx = reinterpret_cast<const clang::ASTContext *>(ctx);
1675 return casted->EvaluateAsBooleanCondition(*result, *casted_ctx, in_constant_context);
1676}
1677
16701678ZigClangAPValueKind ZigClangAPValue_getKind(const ZigClangAPValue *self) {
16711679 auto casted = reinterpret_cast<const clang::APValue *>(self);
16721680 return (ZigClangAPValueKind)casted->getKind();
src/zig_clang.h+2
......@@ -854,6 +854,8 @@ ZIG_EXTERN_C bool ZigClangStmt_classof_Expr(const struct ZigClangStmt *self);
854854ZIG_EXTERN_C enum ZigClangStmtClass ZigClangExpr_getStmtClass(const struct ZigClangExpr *self);
855855ZIG_EXTERN_C struct ZigClangQualType ZigClangExpr_getType(const struct ZigClangExpr *self);
856856ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangExpr_getBeginLoc(const struct ZigClangExpr *self);
857ZIG_EXTERN_C bool ZigClangExpr_EvaluateAsBooleanCondition(const struct ZigClangExpr *self,
858 bool *result, const struct ZigClangASTContext *ctx, bool in_constant_context);
857859
858860ZIG_EXTERN_C enum ZigClangAPValueKind ZigClangAPValue_getKind(const struct ZigClangAPValue *self);
859861ZIG_EXTERN_C const struct ZigClangAPSInt *ZigClangAPValue_getInt(const struct ZigClangAPValue *self);