authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-01 23:04:27-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-10-02 02:02:31-04:00
logf84086132f1a60ce4c46af1720eccb244cc13688
treee7e1fed7fef8a4e24aa4569e157722aed64d1984
parenta8d6954c23d816121471558990c5dd6bf5f82c89
signature Commit is signed but in an unrecognized format.

more conversion of translate_c.cpp to use zig_clang.h

Progress: 96% See #1964

3 files changed, 952 insertions(+), 491 deletions(-)

src/translate_c.cpp+514-487
......@@ -137,9 +137,9 @@ static const ZigClangAPValue *bitcast(const clang::APValue *src) {
137137 return reinterpret_cast<const ZigClangAPValue *>(src);
138138}
139139
140static const ZigClangStmt *bitcast(const clang::Stmt *src) {
141 return reinterpret_cast<const ZigClangStmt *>(src);
142}
140//static const ZigClangStmt *bitcast(const clang::Stmt *src) {
141// return reinterpret_cast<const ZigClangStmt *>(src);
142//}
143143
144144static const ZigClangExpr *bitcast(const clang::Expr *src) {
145145 return reinterpret_cast<const ZigClangExpr *>(src);
......@@ -578,7 +578,7 @@ static bool qual_type_is_ptr(ZigClangQualType qt) {
578578 return ZigClangType_getTypeClass(ty) == ZigClangType_Pointer;
579579}
580580
581static const clang::FunctionProtoType *qual_type_get_fn_proto(ZigClangQualType qt, bool *is_ptr) {
581static const ZigClangFunctionProtoType *qual_type_get_fn_proto(ZigClangQualType qt, bool *is_ptr) {
582582 const ZigClangType *ty = qual_type_canon(qt);
583583 *is_ptr = false;
584584
......@@ -589,7 +589,7 @@ static const clang::FunctionProtoType *qual_type_get_fn_proto(ZigClangQualType q
589589 }
590590
591591 if (ZigClangType_getTypeClass(ty) == ZigClangType_FunctionProto) {
592 return reinterpret_cast<const clang::FunctionProtoType*>(ty);
592 return reinterpret_cast<const ZigClangFunctionProtoType*>(ty);
593593 }
594594
595595 return nullptr;
......@@ -684,13 +684,14 @@ static AstNode *qual_type_to_log2_int_ref(Context *c, const ZigClangQualType qt,
684684static bool qual_type_child_is_fn_proto(ZigClangQualType qt) {
685685 const ZigClangType *ty = ZigClangQualType_getTypePtr(qt);
686686 if (ZigClangType_getTypeClass(ty) == ZigClangType_Paren) {
687 const clang::ParenType *paren_type = reinterpret_cast<const clang::ParenType *>(ty);
688 if (paren_type->getInnerType()->getTypeClass() == clang::Type::FunctionProto) {
687 const ZigClangParenType *paren_type = reinterpret_cast<const ZigClangParenType *>(ty);
688 ZigClangQualType inner_type = ZigClangParenType_getInnerType(paren_type);
689 if (ZigClangQualType_getTypeClass(inner_type) == ZigClangType_FunctionProto) {
689690 return true;
690691 }
691692 } else if (ZigClangType_getTypeClass(ty) == ZigClangType_Attributed) {
692 const clang::AttributedType *attr_type = reinterpret_cast<const clang::AttributedType *>(ty);
693 return qual_type_child_is_fn_proto(bitcast(attr_type->getEquivalentType()));
693 const ZigClangAttributedType *attr_type = reinterpret_cast<const ZigClangAttributedType *>(ty);
694 return qual_type_child_is_fn_proto(ZigClangAttributedType_getEquivalentType(attr_type));
694695 }
695696 return false;
696697}
......@@ -839,8 +840,8 @@ static bool type_is_function(Context *c, const ZigClangType *ty, ZigClangSourceL
839840 case ZigClangType_FunctionNoProto:
840841 return true;
841842 case ZigClangType_Elaborated: {
842 const clang::ElaboratedType *elaborated_ty = reinterpret_cast<const clang::ElaboratedType*>(ty);
843 ZigClangQualType qt = bitcast(elaborated_ty->getNamedType());
843 const ZigClangElaboratedType *elaborated_ty = reinterpret_cast<const ZigClangElaboratedType*>(ty);
844 ZigClangQualType qt = ZigClangElaboratedType_getNamedType(elaborated_ty);
844845 return type_is_function(c, ZigClangQualType_getTypePtr(qt), source_loc);
845846 }
846847 case ZigClangType_Typedef: {
......@@ -880,8 +881,8 @@ static bool type_is_opaque(Context *c, const ZigClangType *ty, ZigClangSourceLoc
880881 return false;
881882 }
882883 case ZigClangType_Elaborated: {
883 const clang::ElaboratedType *elaborated_ty = reinterpret_cast<const clang::ElaboratedType*>(ty);
884 ZigClangQualType qt = bitcast(elaborated_ty->getNamedType());
884 const ZigClangElaboratedType *elaborated_ty = reinterpret_cast<const ZigClangElaboratedType*>(ty);
885 ZigClangQualType qt = ZigClangElaboratedType_getNamedType(elaborated_ty);
885886 return type_is_opaque(c, ZigClangQualType_getTypePtr(qt), source_loc);
886887 }
887888 case ZigClangType_Typedef: {
......@@ -1078,16 +1079,16 @@ static AstNode *trans_type(Context *c, const ZigClangType *ty, ZigClangSourceLoc
10781079 }
10791080 case ZigClangType_Elaborated:
10801081 {
1081 const clang::ElaboratedType *elaborated_ty = reinterpret_cast<const clang::ElaboratedType*>(ty);
1082 switch (elaborated_ty->getKeyword()) {
1083 case clang::ETK_Struct:
1084 case clang::ETK_Enum:
1085 case clang::ETK_Union:
1086 return trans_qual_type(c, bitcast(elaborated_ty->getNamedType()), source_loc);
1087 case clang::ETK_Interface:
1088 case clang::ETK_Class:
1089 case clang::ETK_Typename:
1090 case clang::ETK_None:
1082 const ZigClangElaboratedType *elaborated_ty = reinterpret_cast<const ZigClangElaboratedType*>(ty);
1083 switch (ZigClangElaboratedType_getKeyword(elaborated_ty)) {
1084 case ZigClangETK_Struct:
1085 case ZigClangETK_Enum:
1086 case ZigClangETK_Union:
1087 return trans_qual_type(c, ZigClangElaboratedType_getNamedType(elaborated_ty), source_loc);
1088 case ZigClangETK_Interface:
1089 case ZigClangETK_Class:
1090 case ZigClangETK_Typename:
1091 case ZigClangETK_None:
10911092 emit_warning(c, source_loc, "unsupported elaborated type");
10921093 return nullptr;
10931094 }
......@@ -1227,35 +1228,37 @@ static AstNode *trans_type(Context *c, const ZigClangType *ty, ZigClangSourceLoc
12271228 }
12281229 case ZigClangType_ConstantArray:
12291230 {
1230 const clang::ConstantArrayType *const_arr_ty = reinterpret_cast<const clang::ConstantArrayType *>(ty);
1231 AstNode *child_type_node = trans_qual_type(c, bitcast(const_arr_ty->getElementType()), source_loc);
1231 const ZigClangConstantArrayType *const_arr_ty = reinterpret_cast<const ZigClangConstantArrayType *>(ty);
1232 AstNode *child_type_node = trans_qual_type(c,
1233 ZigClangConstantArrayType_getElementType(const_arr_ty), source_loc);
12321234 if (child_type_node == nullptr) {
12331235 emit_warning(c, source_loc, "unresolved array element type");
12341236 return nullptr;
12351237 }
1236 uint64_t size = const_arr_ty->getSize().getLimitedValue();
1238 const ZigClangAPInt *size_ap_int = ZigClangConstantArrayType_getSize(const_arr_ty);
1239 uint64_t size = ZigClangAPInt_getLimitedValue(size_ap_int, UINT64_MAX);
12371240 AstNode *size_node = trans_create_node_unsigned(c, size);
12381241 return trans_create_node_array_type(c, size_node, child_type_node);
12391242 }
12401243 case ZigClangType_Paren:
12411244 {
1242 const clang::ParenType *paren_ty = reinterpret_cast<const clang::ParenType *>(ty);
1243 return trans_qual_type(c, bitcast(paren_ty->getInnerType()), source_loc);
1245 const ZigClangParenType *paren_ty = reinterpret_cast<const ZigClangParenType *>(ty);
1246 return trans_qual_type(c, ZigClangParenType_getInnerType(paren_ty), source_loc);
12441247 }
12451248 case ZigClangType_Decayed:
12461249 {
1247 const clang::DecayedType *decayed_ty = reinterpret_cast<const clang::DecayedType *>(ty);
1248 return trans_qual_type(c, bitcast(decayed_ty->getDecayedType()), source_loc);
1250 const ZigClangDecayedType *decayed_ty = reinterpret_cast<const ZigClangDecayedType *>(ty);
1251 return trans_qual_type(c, ZigClangDecayedType_getDecayedType(decayed_ty), source_loc);
12491252 }
12501253 case ZigClangType_Attributed:
12511254 {
1252 const clang::AttributedType *attributed_ty = reinterpret_cast<const clang::AttributedType *>(ty);
1253 return trans_qual_type(c, bitcast(attributed_ty->getEquivalentType()), source_loc);
1255 const ZigClangAttributedType *attributed_ty = reinterpret_cast<const ZigClangAttributedType *>(ty);
1256 return trans_qual_type(c, ZigClangAttributedType_getEquivalentType(attributed_ty), source_loc);
12541257 }
12551258 case ZigClangType_IncompleteArray:
12561259 {
1257 const clang::IncompleteArrayType *incomplete_array_ty = reinterpret_cast<const clang::IncompleteArrayType *>(ty);
1258 ZigClangQualType child_qt = bitcast(incomplete_array_ty->getElementType());
1260 const ZigClangIncompleteArrayType *incomplete_array_ty = reinterpret_cast<const ZigClangIncompleteArrayType *>(ty);
1261 ZigClangQualType child_qt = ZigClangIncompleteArrayType_getElementType(incomplete_array_ty);
12591262 AstNode *child_type_node = trans_qual_type(c, child_qt, source_loc);
12601263 if (child_type_node == nullptr) {
12611264 emit_warning(c, source_loc, "unresolved array element type");
......@@ -1342,9 +1345,9 @@ static AstNode *trans_compound_stmt(Context *c, TransScope *scope, const ZigClan
13421345}
13431346
13441347static AstNode *trans_stmt_expr(Context *c, ResultUsed result_used, TransScope *scope,
1345 const clang::StmtExpr *stmt, TransScope **out_node_scope)
1348 const ZigClangStmtExpr *stmt, TransScope **out_node_scope)
13461349{
1347 AstNode *block = trans_compound_stmt(c, scope, (const ZigClangCompoundStmt *)stmt->getSubStmt(), out_node_scope);
1350 AstNode *block = trans_compound_stmt(c, scope, ZigClangStmtExpr_getSubStmt(stmt), out_node_scope);
13481351 if (block == nullptr)
13491352 return block;
13501353 assert(block->type == NodeTypeBlock);
......@@ -1366,8 +1369,8 @@ static AstNode *trans_stmt_expr(Context *c, ResultUsed result_used, TransScope *
13661369 return maybe_suppress_result(c, result_used, block);
13671370}
13681371
1369static AstNode *trans_return_stmt(Context *c, TransScope *scope, const clang::ReturnStmt *stmt) {
1370 const ZigClangExpr *value_expr = bitcast(stmt->getRetValue());
1372static AstNode *trans_return_stmt(Context *c, TransScope *scope, const ZigClangReturnStmt *stmt) {
1373 const ZigClangExpr *value_expr = ZigClangReturnStmt_getRetValue(stmt);
13711374 if (value_expr == nullptr) {
13721375 return trans_create_node(c, NodeTypeReturnExpr);
13731376 } else {
......@@ -1379,76 +1382,79 @@ static AstNode *trans_return_stmt(Context *c, TransScope *scope, const clang::Re
13791382 }
13801383}
13811384
1382static AstNode *trans_integer_literal(Context *c, ResultUsed result_used, const clang::IntegerLiteral *stmt) {
1383 clang::Expr::EvalResult result;
1384 if (!stmt->EvaluateAsInt(result, *reinterpret_cast<clang::ASTContext *>(c->ctx))) {
1385 emit_warning(c, bitcast(stmt->getBeginLoc()), "invalid integer literal");
1385static AstNode *trans_integer_literal(Context *c, ResultUsed result_used, const ZigClangIntegerLiteral *stmt) {
1386 ZigClangExprEvalResult result;
1387 if (!ZigClangIntegerLiteral_EvaluateAsInt(stmt, &result, c->ctx)) {
1388 emit_warning(c, ZigClangExpr_getBeginLoc((ZigClangExpr*)stmt), "invalid integer literal");
13861389 return nullptr;
13871390 }
1388 AstNode *node = trans_create_node_apint(c, bitcast(&result.Val.getInt()));
1391 AstNode *node = trans_create_node_apint(c, ZigClangAPValue_getInt(&result.Val));
13891392 return maybe_suppress_result(c, result_used, node);
13901393}
13911394
1392static AstNode *trans_floating_literal(Context *c, ResultUsed result_used, const clang::FloatingLiteral *stmt) {
1395static AstNode *trans_floating_literal(Context *c, ResultUsed result_used, const ZigClangFloatingLiteral *stmt) {
13931396 llvm::APFloat result{0.0f};
1394 if (!stmt->EvaluateAsFloat(result, *reinterpret_cast<clang::ASTContext *>(c->ctx))) {
1395 emit_warning(c, bitcast(stmt->getBeginLoc()), "invalid floating literal");
1397 if (!reinterpret_cast<const clang::FloatingLiteral *>(stmt)->EvaluateAsFloat(result, *reinterpret_cast<clang::ASTContext *>(c->ctx))) {
1398 emit_warning(c, ZigClangExpr_getBeginLoc((ZigClangExpr*)stmt), "invalid floating literal");
13961399 return nullptr;
13971400 }
13981401 AstNode *node = trans_create_node_apfloat(c, result);
13991402 return maybe_suppress_result(c, result_used, node);
14001403}
14011404
1402static AstNode *trans_character_literal(Context *c, ResultUsed result_used, const clang::CharacterLiteral *stmt) {
1403 switch (stmt->getKind()) {
1404 case clang::CharacterLiteral::CharacterKind::Ascii:
1405static AstNode *trans_character_literal(Context *c, ResultUsed result_used, const ZigClangCharacterLiteral *stmt) {
1406 switch (ZigClangCharacterLiteral_getKind(stmt)) {
1407 case ZigClangCharacterLiteral_CharacterKind_Ascii:
14051408 {
1406 unsigned val = stmt->getValue();
1409 unsigned val = ZigClangCharacterLiteral_getValue(stmt);
14071410 // C has a somewhat obscure feature called multi-character character
14081411 // constant
14091412 if (val > 255)
14101413 return trans_create_node_unsigned(c, val);
14111414 }
14121415 // fallthrough
1413 case clang::CharacterLiteral::CharacterKind::UTF8:
1416 case ZigClangCharacterLiteral_CharacterKind_UTF8:
14141417 {
14151418 AstNode *node = trans_create_node(c, NodeTypeCharLiteral);
1416 node->data.char_literal.value = stmt->getValue();
1419 node->data.char_literal.value = ZigClangCharacterLiteral_getValue(stmt);
14171420 return maybe_suppress_result(c, result_used, node);
14181421 }
1419 case clang::CharacterLiteral::CharacterKind::UTF16:
1420 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO support UTF16 character literals");
1422 case ZigClangCharacterLiteral_CharacterKind_UTF16:
1423 emit_warning(c, ZigClangCharacterLiteral_getBeginLoc(stmt), "TODO support UTF16 character literals");
14211424 return nullptr;
1422 case clang::CharacterLiteral::CharacterKind::UTF32:
1423 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO support UTF32 character literals");
1425 case ZigClangCharacterLiteral_CharacterKind_UTF32:
1426 emit_warning(c, ZigClangCharacterLiteral_getBeginLoc(stmt), "TODO support UTF32 character literals");
14241427 return nullptr;
1425 case clang::CharacterLiteral::CharacterKind::Wide:
1426 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO support wide character literals");
1428 case ZigClangCharacterLiteral_CharacterKind_Wide:
1429 emit_warning(c, ZigClangCharacterLiteral_getBeginLoc(stmt), "TODO support wide character literals");
14271430 return nullptr;
14281431 }
14291432 zig_unreachable();
14301433}
14311434
1432static AstNode *trans_constant_expr(Context *c, ResultUsed result_used, const clang::ConstantExpr *expr) {
1435static AstNode *trans_constant_expr(Context *c, ResultUsed result_used, const ZigClangConstantExpr *expr) {
1436 const ZigClangExpr *as_expr = reinterpret_cast<const ZigClangExpr *>(expr);
14331437 clang::Expr::EvalResult result;
1434 if (!expr->EvaluateAsConstantExpr(result, clang::Expr::EvaluateForCodeGen,
1438 if (!reinterpret_cast<const clang::ConstantExpr *>(expr)->EvaluateAsConstantExpr(result,
1439 clang::Expr::EvaluateForCodeGen,
14351440 *reinterpret_cast<clang::ASTContext *>(c->ctx)))
14361441 {
1437 emit_warning(c, bitcast(expr->getBeginLoc()), "invalid constant expression");
1442 emit_warning(c, ZigClangExpr_getBeginLoc(as_expr), "invalid constant expression");
14381443 return nullptr;
14391444 }
1440 AstNode *node = trans_ap_value(c, bitcast(&result.Val), bitcast(expr->getType()), bitcast(expr->getBeginLoc()));
1445 AstNode *node = trans_ap_value(c, bitcast(&result.Val), ZigClangExpr_getType(as_expr),
1446 ZigClangExpr_getBeginLoc(as_expr));
14411447 return maybe_suppress_result(c, result_used, node);
14421448}
14431449
14441450static AstNode *trans_conditional_operator(Context *c, ResultUsed result_used, TransScope *scope,
1445 const clang::ConditionalOperator *stmt)
1451 const ZigClangConditionalOperator *stmt)
14461452{
14471453 AstNode *node = trans_create_node(c, NodeTypeIfBoolExpr);
14481454
1449 const ZigClangExpr *cond_expr = bitcast(stmt->getCond());
1450 const ZigClangExpr *true_expr = bitcast(stmt->getTrueExpr());
1451 const ZigClangExpr *false_expr = bitcast(stmt->getFalseExpr());
1455 const ZigClangExpr *cond_expr = ZigClangConditionalOperator_getCond(stmt);
1456 const ZigClangExpr *true_expr = ZigClangConditionalOperator_getTrueExpr(stmt);
1457 const ZigClangExpr *false_expr = ZigClangConditionalOperator_getFalseExpr(stmt);
14521458
14531459 node->data.if_bool_expr.condition = trans_expr(c, ResultUsedYes, scope, cond_expr, TransRValue);
14541460 if (node->data.if_bool_expr.condition == nullptr)
......@@ -1570,133 +1576,135 @@ static AstNode *trans_create_shift_op(Context *c, TransScope *scope, ZigClangQua
15701576 return trans_create_node_bin_op(c, lhs, bin_op, coerced_rhs);
15711577}
15721578
1573static AstNode *trans_binary_operator(Context *c, ResultUsed result_used, TransScope *scope, const clang::BinaryOperator *stmt) {
1574 switch (stmt->getOpcode()) {
1575 case clang::BO_PtrMemD:
1576 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C binary operators: BO_PtrMemD");
1579static AstNode *trans_binary_operator(Context *c, ResultUsed result_used, TransScope *scope,
1580 const ZigClangBinaryOperator *stmt)
1581{
1582 switch (ZigClangBinaryOperator_getOpcode(stmt)) {
1583 case ZigClangBO_PtrMemD:
1584 emit_warning(c, ZigClangBinaryOperator_getBeginLoc(stmt), "TODO handle more C binary operators: BO_PtrMemD");
15771585 return nullptr;
1578 case clang::BO_PtrMemI:
1579 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C binary operators: BO_PtrMemI");
1586 case ZigClangBO_PtrMemI:
1587 emit_warning(c, ZigClangBinaryOperator_getBeginLoc(stmt), "TODO handle more C binary operators: BO_PtrMemI");
15801588 return nullptr;
1581 case clang::BO_Cmp:
1582 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C binary operators: BO_Cmp");
1589 case ZigClangBO_Cmp:
1590 emit_warning(c, ZigClangBinaryOperator_getBeginLoc(stmt), "TODO handle more C binary operators: BO_Cmp");
15831591 return nullptr;
1584 case clang::BO_Mul: {
1585 AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()),
1586 qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())) ? BinOpTypeMultWrap : BinOpTypeMult,
1587 bitcast(stmt->getRHS()));
1592 case ZigClangBO_Mul: {
1593 AstNode *node = trans_create_bin_op(c, scope, ZigClangBinaryOperator_getLHS(stmt),
1594 qual_type_has_wrapping_overflow(c, ZigClangBinaryOperator_getType(stmt)) ? BinOpTypeMultWrap : BinOpTypeMult,
1595 ZigClangBinaryOperator_getRHS(stmt));
15881596 return maybe_suppress_result(c, result_used, node);
15891597 }
1590 case clang::BO_Div:
1591 if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType()))) {
1598 case ZigClangBO_Div:
1599 if (qual_type_has_wrapping_overflow(c, ZigClangBinaryOperator_getType(stmt))) {
15921600 // unsigned/float division uses the operator
1593 AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeDiv, bitcast(stmt->getRHS()));
1601 AstNode *node = trans_create_bin_op(c, scope, ZigClangBinaryOperator_getLHS(stmt), BinOpTypeDiv, ZigClangBinaryOperator_getRHS(stmt));
15941602 return maybe_suppress_result(c, result_used, node);
15951603 } else {
15961604 // signed integer division uses @divTrunc
15971605 AstNode *fn_call = trans_create_node_builtin_fn_call_str(c, "divTrunc");
1598 AstNode *lhs = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getLHS()), TransLValue);
1606 AstNode *lhs = trans_expr(c, ResultUsedYes, scope, ZigClangBinaryOperator_getLHS(stmt), TransLValue);
15991607 if (lhs == nullptr) return nullptr;
16001608 fn_call->data.fn_call_expr.params.append(lhs);
1601 AstNode *rhs = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getRHS()), TransLValue);
1609 AstNode *rhs = trans_expr(c, ResultUsedYes, scope, ZigClangBinaryOperator_getRHS(stmt), TransLValue);
16021610 if (rhs == nullptr) return nullptr;
16031611 fn_call->data.fn_call_expr.params.append(rhs);
16041612 return maybe_suppress_result(c, result_used, fn_call);
16051613 }
1606 case clang::BO_Rem:
1607 if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType()))) {
1614 case ZigClangBO_Rem:
1615 if (qual_type_has_wrapping_overflow(c, ZigClangBinaryOperator_getType(stmt))) {
16081616 // unsigned/float division uses the operator
1609 AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeMod, bitcast(stmt->getRHS()));
1617 AstNode *node = trans_create_bin_op(c, scope, ZigClangBinaryOperator_getLHS(stmt), BinOpTypeMod, ZigClangBinaryOperator_getRHS(stmt));
16101618 return maybe_suppress_result(c, result_used, node);
16111619 } else {
16121620 // signed integer division uses @rem
16131621 AstNode *fn_call = trans_create_node_builtin_fn_call_str(c, "rem");
1614 AstNode *lhs = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getLHS()), TransLValue);
1622 AstNode *lhs = trans_expr(c, ResultUsedYes, scope, ZigClangBinaryOperator_getLHS(stmt), TransLValue);
16151623 if (lhs == nullptr) return nullptr;
16161624 fn_call->data.fn_call_expr.params.append(lhs);
1617 AstNode *rhs = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getRHS()), TransLValue);
1625 AstNode *rhs = trans_expr(c, ResultUsedYes, scope, ZigClangBinaryOperator_getRHS(stmt), TransLValue);
16181626 if (rhs == nullptr) return nullptr;
16191627 fn_call->data.fn_call_expr.params.append(rhs);
16201628 return maybe_suppress_result(c, result_used, fn_call);
16211629 }
1622 case clang::BO_Add: {
1623 AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()),
1624 qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())) ? BinOpTypeAddWrap : BinOpTypeAdd,
1625 bitcast(stmt->getRHS()));
1630 case ZigClangBO_Add: {
1631 AstNode *node = trans_create_bin_op(c, scope, ZigClangBinaryOperator_getLHS(stmt),
1632 qual_type_has_wrapping_overflow(c, ZigClangBinaryOperator_getType(stmt)) ? BinOpTypeAddWrap : BinOpTypeAdd,
1633 ZigClangBinaryOperator_getRHS(stmt));
16261634 return maybe_suppress_result(c, result_used, node);
16271635 }
1628 case clang::BO_Sub: {
1629 AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()),
1630 qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())) ? BinOpTypeSubWrap : BinOpTypeSub,
1631 bitcast(stmt->getRHS()));
1636 case ZigClangBO_Sub: {
1637 AstNode *node = trans_create_bin_op(c, scope, ZigClangBinaryOperator_getLHS(stmt),
1638 qual_type_has_wrapping_overflow(c, ZigClangBinaryOperator_getType(stmt)) ? BinOpTypeSubWrap : BinOpTypeSub,
1639 ZigClangBinaryOperator_getRHS(stmt));
16321640 return maybe_suppress_result(c, result_used, node);
16331641 }
1634 case clang::BO_Shl: {
1635 AstNode *node = trans_create_shift_op(c, scope, bitcast(stmt->getType()), bitcast(stmt->getLHS()), BinOpTypeBitShiftLeft, bitcast(stmt->getRHS()));
1642 case ZigClangBO_Shl: {
1643 AstNode *node = trans_create_shift_op(c, scope, ZigClangBinaryOperator_getType(stmt), ZigClangBinaryOperator_getLHS(stmt), BinOpTypeBitShiftLeft, ZigClangBinaryOperator_getRHS(stmt));
16361644 return maybe_suppress_result(c, result_used, node);
16371645 }
1638 case clang::BO_Shr: {
1639 AstNode *node = trans_create_shift_op(c, scope, bitcast(stmt->getType()), bitcast(stmt->getLHS()), BinOpTypeBitShiftRight, bitcast(stmt->getRHS()));
1646 case ZigClangBO_Shr: {
1647 AstNode *node = trans_create_shift_op(c, scope, ZigClangBinaryOperator_getType(stmt), ZigClangBinaryOperator_getLHS(stmt), BinOpTypeBitShiftRight, ZigClangBinaryOperator_getRHS(stmt));
16401648 return maybe_suppress_result(c, result_used, node);
16411649 }
1642 case clang::BO_LT: {
1643 AstNode *node =trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeCmpLessThan, bitcast(stmt->getRHS()));
1650 case ZigClangBO_LT: {
1651 AstNode *node =trans_create_bin_op(c, scope, ZigClangBinaryOperator_getLHS(stmt), BinOpTypeCmpLessThan, ZigClangBinaryOperator_getRHS(stmt));
16441652 return maybe_suppress_result(c, result_used, node);
16451653 }
1646 case clang::BO_GT: {
1647 AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeCmpGreaterThan, bitcast(stmt->getRHS()));
1654 case ZigClangBO_GT: {
1655 AstNode *node = trans_create_bin_op(c, scope, ZigClangBinaryOperator_getLHS(stmt), BinOpTypeCmpGreaterThan, ZigClangBinaryOperator_getRHS(stmt));
16481656 return maybe_suppress_result(c, result_used, node);
16491657 }
1650 case clang::BO_LE: {
1651 AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeCmpLessOrEq, bitcast(stmt->getRHS()));
1658 case ZigClangBO_LE: {
1659 AstNode *node = trans_create_bin_op(c, scope, ZigClangBinaryOperator_getLHS(stmt), BinOpTypeCmpLessOrEq, ZigClangBinaryOperator_getRHS(stmt));
16521660 return maybe_suppress_result(c, result_used, node);
16531661 }
1654 case clang::BO_GE: {
1655 AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeCmpGreaterOrEq, bitcast(stmt->getRHS()));
1662 case ZigClangBO_GE: {
1663 AstNode *node = trans_create_bin_op(c, scope, ZigClangBinaryOperator_getLHS(stmt), BinOpTypeCmpGreaterOrEq, ZigClangBinaryOperator_getRHS(stmt));
16561664 return maybe_suppress_result(c, result_used, node);
16571665 }
1658 case clang::BO_EQ: {
1659 AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeCmpEq, bitcast(stmt->getRHS()));
1666 case ZigClangBO_EQ: {
1667 AstNode *node = trans_create_bin_op(c, scope, ZigClangBinaryOperator_getLHS(stmt), BinOpTypeCmpEq, ZigClangBinaryOperator_getRHS(stmt));
16601668 return maybe_suppress_result(c, result_used, node);
16611669 }
1662 case clang::BO_NE: {
1663 AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeCmpNotEq, bitcast(stmt->getRHS()));
1670 case ZigClangBO_NE: {
1671 AstNode *node = trans_create_bin_op(c, scope, ZigClangBinaryOperator_getLHS(stmt), BinOpTypeCmpNotEq, ZigClangBinaryOperator_getRHS(stmt));
16641672 return maybe_suppress_result(c, result_used, node);
16651673 }
1666 case clang::BO_And: {
1667 AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeBinAnd, bitcast(stmt->getRHS()));
1674 case ZigClangBO_And: {
1675 AstNode *node = trans_create_bin_op(c, scope, ZigClangBinaryOperator_getLHS(stmt), BinOpTypeBinAnd, ZigClangBinaryOperator_getRHS(stmt));
16681676 return maybe_suppress_result(c, result_used, node);
16691677 }
1670 case clang::BO_Xor: {
1671 AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeBinXor, bitcast(stmt->getRHS()));
1678 case ZigClangBO_Xor: {
1679 AstNode *node = trans_create_bin_op(c, scope, ZigClangBinaryOperator_getLHS(stmt), BinOpTypeBinXor, ZigClangBinaryOperator_getRHS(stmt));
16721680 return maybe_suppress_result(c, result_used, node);
16731681 }
1674 case clang::BO_Or: {
1675 AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeBinOr, bitcast(stmt->getRHS()));
1682 case ZigClangBO_Or: {
1683 AstNode *node = trans_create_bin_op(c, scope, ZigClangBinaryOperator_getLHS(stmt), BinOpTypeBinOr, ZigClangBinaryOperator_getRHS(stmt));
16761684 return maybe_suppress_result(c, result_used, node);
16771685 }
1678 case clang::BO_LAnd: {
1679 AstNode *node = trans_create_bool_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeBoolAnd, bitcast(stmt->getRHS()));
1686 case ZigClangBO_LAnd: {
1687 AstNode *node = trans_create_bool_bin_op(c, scope, ZigClangBinaryOperator_getLHS(stmt), BinOpTypeBoolAnd, ZigClangBinaryOperator_getRHS(stmt));
16801688 return maybe_suppress_result(c, result_used, node);
16811689 }
1682 case clang::BO_LOr: {
1683 AstNode *node = trans_create_bool_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeBoolOr, bitcast(stmt->getRHS()));
1690 case ZigClangBO_LOr: {
1691 AstNode *node = trans_create_bool_bin_op(c, scope, ZigClangBinaryOperator_getLHS(stmt), BinOpTypeBoolOr, ZigClangBinaryOperator_getRHS(stmt));
16841692 return maybe_suppress_result(c, result_used, node);
16851693 }
1686 case clang::BO_Assign:
1687 return trans_create_assign(c, result_used, scope, bitcast(stmt->getLHS()), bitcast(stmt->getRHS()));
1688 case clang::BO_Comma:
1694 case ZigClangBO_Assign:
1695 return trans_create_assign(c, result_used, scope, ZigClangBinaryOperator_getLHS(stmt), ZigClangBinaryOperator_getRHS(stmt));
1696 case ZigClangBO_Comma:
16891697 {
16901698 TransScopeBlock *scope_block = trans_scope_block_create(c, scope);
16911699 Buf *label_name = buf_create_from_str("x");
16921700 scope_block->node->data.block.name = label_name;
16931701
1694 AstNode *lhs = trans_expr(c, ResultUsedNo, &scope_block->base, bitcast(stmt->getLHS()), TransRValue);
1702 AstNode *lhs = trans_expr(c, ResultUsedNo, &scope_block->base, ZigClangBinaryOperator_getLHS(stmt), TransRValue);
16951703 if (lhs == nullptr)
16961704 return nullptr;
16971705 scope_block->node->data.block.statements.append(lhs);
16981706
1699 AstNode *rhs = trans_expr(c, ResultUsedYes, &scope_block->base, bitcast(stmt->getRHS()), TransRValue);
1707 AstNode *rhs = trans_expr(c, ResultUsedYes, &scope_block->base, ZigClangBinaryOperator_getRHS(stmt), TransRValue);
17001708 if (rhs == nullptr)
17011709 return nullptr;
17021710
......@@ -1704,16 +1712,16 @@ static AstNode *trans_binary_operator(Context *c, ResultUsed result_used, TransS
17041712 scope_block->node->data.block.statements.append(rhs);
17051713 return maybe_suppress_result(c, result_used, scope_block->node);
17061714 }
1707 case clang::BO_MulAssign:
1708 case clang::BO_DivAssign:
1709 case clang::BO_RemAssign:
1710 case clang::BO_AddAssign:
1711 case clang::BO_SubAssign:
1712 case clang::BO_ShlAssign:
1713 case clang::BO_ShrAssign:
1714 case clang::BO_AndAssign:
1715 case clang::BO_XorAssign:
1716 case clang::BO_OrAssign:
1715 case ZigClangBO_MulAssign:
1716 case ZigClangBO_DivAssign:
1717 case ZigClangBO_RemAssign:
1718 case ZigClangBO_AddAssign:
1719 case ZigClangBO_SubAssign:
1720 case ZigClangBO_ShlAssign:
1721 case ZigClangBO_ShrAssign:
1722 case ZigClangBO_AndAssign:
1723 case ZigClangBO_XorAssign:
1724 case ZigClangBO_OrAssign:
17171725 zig_unreachable();
17181726 }
17191727
......@@ -1721,19 +1729,22 @@ static AstNode *trans_binary_operator(Context *c, ResultUsed result_used, TransS
17211729}
17221730
17231731static AstNode *trans_create_compound_assign_shift(Context *c, ResultUsed result_used, TransScope *scope,
1724 const clang::CompoundAssignOperator *stmt, BinOpType assign_op, BinOpType bin_op)
1732 const ZigClangCompoundAssignOperator *stmt, BinOpType assign_op, BinOpType bin_op)
17251733{
1726 ZigClangSourceLocation rhs_location = bitcast(stmt->getRHS()->getBeginLoc());
1727 AstNode *rhs_type = qual_type_to_log2_int_ref(c, bitcast(stmt->getComputationLHSType()), rhs_location);
1734 ZigClangSourceLocation rhs_location = ZigClangExpr_getBeginLoc(ZigClangCompoundAssignOperator_getRHS(stmt));
1735 ZigClangQualType computation_lhs_type = ZigClangCompoundAssignOperator_getComputationLHSType(stmt);
1736 AstNode *rhs_type = qual_type_to_log2_int_ref(c, computation_lhs_type, rhs_location);
1737 ZigClangQualType computation_result_type = ZigClangCompoundAssignOperator_getComputationResultType(stmt);
17281738
1729 bool use_intermediate_casts = stmt->getComputationLHSType().getTypePtr() != stmt->getComputationResultType().getTypePtr();
1739 bool use_intermediate_casts = ZigClangQualType_getTypePtr(computation_lhs_type) !=
1740 ZigClangQualType_getTypePtr(computation_result_type);
17301741 if (!use_intermediate_casts && result_used == ResultUsedNo) {
17311742 // simple common case, where the C and Zig are identical:
17321743 // lhs >>= rhs
1733 AstNode *lhs = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getLHS()), TransLValue);
1744 AstNode *lhs = trans_expr(c, ResultUsedYes, scope, ZigClangCompoundAssignOperator_getLHS(stmt), TransLValue);
17341745 if (lhs == nullptr) return nullptr;
17351746
1736 AstNode *rhs = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getRHS()), TransRValue);
1747 AstNode *rhs = trans_expr(c, ResultUsedYes, scope, ZigClangCompoundAssignOperator_getRHS(stmt), TransRValue);
17371748 if (rhs == nullptr) return nullptr;
17381749 AstNode *coerced_rhs = trans_create_node_fn_call_1(c, rhs_type, rhs);
17391750
......@@ -1753,7 +1764,8 @@ static AstNode *trans_create_compound_assign_shift(Context *c, ResultUsed result
17531764 child_scope->node->data.block.name = label_name;
17541765
17551766 // const _ref = &lhs;
1756 AstNode *lhs = trans_expr(c, ResultUsedYes, &child_scope->base, bitcast(stmt->getLHS()), TransLValue);
1767 AstNode *lhs = trans_expr(c, ResultUsedYes, &child_scope->base,
1768 ZigClangCompoundAssignOperator_getLHS(stmt), TransLValue);
17571769 if (lhs == nullptr) return nullptr;
17581770 AstNode *addr_of_lhs = trans_create_node_addr_of(c, lhs);
17591771 // TODO: avoid name collisions with generated variable names
......@@ -1763,20 +1775,20 @@ static AstNode *trans_create_compound_assign_shift(Context *c, ResultUsed result
17631775
17641776 // *_ref = result_type(operation_type(*_ref) >> u5(rhs));
17651777
1766 AstNode *rhs = trans_expr(c, ResultUsedYes, &child_scope->base, bitcast(stmt->getRHS()), TransRValue);
1778 AstNode *rhs = trans_expr(c, ResultUsedYes, &child_scope->base, ZigClangCompoundAssignOperator_getRHS(stmt), TransRValue);
17671779 if (rhs == nullptr) return nullptr;
17681780 AstNode *coerced_rhs = trans_create_node_fn_call_1(c, rhs_type, rhs);
17691781
17701782 // operation_type(*_ref)
17711783 AstNode *operation_type_cast = trans_c_cast(c, rhs_location,
1772 bitcast(stmt->getComputationLHSType()),
1773 bitcast(stmt->getLHS()->getType()),
1784 computation_lhs_type,
1785 ZigClangExpr_getType(ZigClangCompoundAssignOperator_getLHS(stmt)),
17741786 trans_create_node_ptr_deref(c, trans_create_node_symbol(c, tmp_var_name)));
17751787
17761788 // result_type(... >> u5(rhs))
17771789 AstNode *result_type_cast = trans_c_cast(c, rhs_location,
1778 bitcast(stmt->getComputationResultType()),
1779 bitcast(stmt->getComputationLHSType()),
1790 computation_result_type,
1791 computation_lhs_type,
17801792 trans_create_node_bin_op(c,
17811793 operation_type_cast,
17821794 bin_op,
......@@ -1803,14 +1815,14 @@ static AstNode *trans_create_compound_assign_shift(Context *c, ResultUsed result
18031815}
18041816
18051817static AstNode *trans_create_compound_assign(Context *c, ResultUsed result_used, TransScope *scope,
1806 const clang::CompoundAssignOperator *stmt, BinOpType assign_op, BinOpType bin_op)
1818 const ZigClangCompoundAssignOperator *stmt, BinOpType assign_op, BinOpType bin_op)
18071819{
18081820 if (result_used == ResultUsedNo) {
18091821 // simple common case, where the C and Zig are identical:
18101822 // lhs += rhs
1811 AstNode *lhs = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getLHS()), TransLValue);
1823 AstNode *lhs = trans_expr(c, ResultUsedYes, scope, ZigClangCompoundAssignOperator_getLHS(stmt), TransLValue);
18121824 if (lhs == nullptr) return nullptr;
1813 AstNode *rhs = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getRHS()), TransRValue);
1825 AstNode *rhs = trans_expr(c, ResultUsedYes, scope, ZigClangCompoundAssignOperator_getRHS(stmt), TransRValue);
18141826 if (rhs == nullptr) return nullptr;
18151827 return trans_create_node_bin_op(c, lhs, assign_op, rhs);
18161828 } else {
......@@ -1827,7 +1839,8 @@ static AstNode *trans_create_compound_assign(Context *c, ResultUsed result_used,
18271839 child_scope->node->data.block.name = label_name;
18281840
18291841 // const _ref = &lhs;
1830 AstNode *lhs = trans_expr(c, ResultUsedYes, &child_scope->base, bitcast(stmt->getLHS()), TransLValue);
1842 AstNode *lhs = trans_expr(c, ResultUsedYes, &child_scope->base,
1843 ZigClangCompoundAssignOperator_getLHS(stmt), TransLValue);
18311844 if (lhs == nullptr) return nullptr;
18321845 AstNode *addr_of_lhs = trans_create_node_addr_of(c, lhs);
18331846 // TODO: avoid name collisions with generated variable names
......@@ -1837,7 +1850,8 @@ static AstNode *trans_create_compound_assign(Context *c, ResultUsed result_used,
18371850
18381851 // *_ref = *_ref + rhs;
18391852
1840 AstNode *rhs = trans_expr(c, ResultUsedYes, &child_scope->base, bitcast(stmt->getRHS()), TransRValue);
1853 AstNode *rhs = trans_expr(c, ResultUsedYes, &child_scope->base,
1854 ZigClangCompoundAssignOperator_getRHS(stmt), TransRValue);
18411855 if (rhs == nullptr) return nullptr;
18421856
18431857 AstNode *assign_statement = trans_create_node_bin_op(c,
......@@ -1863,65 +1877,65 @@ static AstNode *trans_create_compound_assign(Context *c, ResultUsed result_used,
18631877
18641878
18651879static AstNode *trans_compound_assign_operator(Context *c, ResultUsed result_used, TransScope *scope,
1866 const clang::CompoundAssignOperator *stmt)
1880 const ZigClangCompoundAssignOperator *stmt)
18671881{
1868 switch (stmt->getOpcode()) {
1869 case clang::BO_MulAssign:
1870 if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())))
1882 switch (ZigClangCompoundAssignOperator_getOpcode(stmt)) {
1883 case ZigClangBO_MulAssign:
1884 if (qual_type_has_wrapping_overflow(c, ZigClangCompoundAssignOperator_getType(stmt)))
18711885 return trans_create_compound_assign(c, result_used, scope, stmt, BinOpTypeAssignTimesWrap, BinOpTypeMultWrap);
18721886 else
18731887 return trans_create_compound_assign(c, result_used, scope, stmt, BinOpTypeAssignTimes, BinOpTypeMult);
1874 case clang::BO_DivAssign:
1875 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C compound assign operators: BO_DivAssign");
1888 case ZigClangBO_DivAssign:
1889 emit_warning(c, ZigClangCompoundAssignOperator_getBeginLoc(stmt), "TODO handle more C compound assign operators: BO_DivAssign");
18761890 return nullptr;
1877 case clang::BO_RemAssign:
1878 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C compound assign operators: BO_RemAssign");
1891 case ZigClangBO_RemAssign:
1892 emit_warning(c, ZigClangCompoundAssignOperator_getBeginLoc(stmt), "TODO handle more C compound assign operators: BO_RemAssign");
18791893 return nullptr;
1880 case clang::BO_Cmp:
1881 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C compound assign operators: BO_Cmp");
1894 case ZigClangBO_Cmp:
1895 emit_warning(c, ZigClangCompoundAssignOperator_getBeginLoc(stmt), "TODO handle more C compound assign operators: BO_Cmp");
18821896 return nullptr;
1883 case clang::BO_AddAssign:
1884 if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())))
1897 case ZigClangBO_AddAssign:
1898 if (qual_type_has_wrapping_overflow(c, ZigClangCompoundAssignOperator_getType(stmt)))
18851899 return trans_create_compound_assign(c, result_used, scope, stmt, BinOpTypeAssignPlusWrap, BinOpTypeAddWrap);
18861900 else
18871901 return trans_create_compound_assign(c, result_used, scope, stmt, BinOpTypeAssignPlus, BinOpTypeAdd);
1888 case clang::BO_SubAssign:
1889 if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())))
1902 case ZigClangBO_SubAssign:
1903 if (qual_type_has_wrapping_overflow(c, ZigClangCompoundAssignOperator_getType(stmt)))
18901904 return trans_create_compound_assign(c, result_used, scope, stmt, BinOpTypeAssignMinusWrap, BinOpTypeSubWrap);
18911905 else
18921906 return trans_create_compound_assign(c, result_used, scope, stmt, BinOpTypeAssignMinus, BinOpTypeSub);
1893 case clang::BO_ShlAssign:
1907 case ZigClangBO_ShlAssign:
18941908 return trans_create_compound_assign_shift(c, result_used, scope, stmt, BinOpTypeAssignBitShiftLeft, BinOpTypeBitShiftLeft);
1895 case clang::BO_ShrAssign:
1909 case ZigClangBO_ShrAssign:
18961910 return trans_create_compound_assign_shift(c, result_used, scope, stmt, BinOpTypeAssignBitShiftRight, BinOpTypeBitShiftRight);
1897 case clang::BO_AndAssign:
1911 case ZigClangBO_AndAssign:
18981912 return trans_create_compound_assign(c, result_used, scope, stmt, BinOpTypeAssignBitAnd, BinOpTypeBinAnd);
1899 case clang::BO_XorAssign:
1913 case ZigClangBO_XorAssign:
19001914 return trans_create_compound_assign(c, result_used, scope, stmt, BinOpTypeAssignBitXor, BinOpTypeBinXor);
1901 case clang::BO_OrAssign:
1915 case ZigClangBO_OrAssign:
19021916 return trans_create_compound_assign(c, result_used, scope, stmt, BinOpTypeAssignBitOr, BinOpTypeBinOr);
1903 case clang::BO_PtrMemD:
1904 case clang::BO_PtrMemI:
1905 case clang::BO_Assign:
1906 case clang::BO_Mul:
1907 case clang::BO_Div:
1908 case clang::BO_Rem:
1909 case clang::BO_Add:
1910 case clang::BO_Sub:
1911 case clang::BO_Shl:
1912 case clang::BO_Shr:
1913 case clang::BO_LT:
1914 case clang::BO_GT:
1915 case clang::BO_LE:
1916 case clang::BO_GE:
1917 case clang::BO_EQ:
1918 case clang::BO_NE:
1919 case clang::BO_And:
1920 case clang::BO_Xor:
1921 case clang::BO_Or:
1922 case clang::BO_LAnd:
1923 case clang::BO_LOr:
1924 case clang::BO_Comma:
1917 case ZigClangBO_PtrMemD:
1918 case ZigClangBO_PtrMemI:
1919 case ZigClangBO_Assign:
1920 case ZigClangBO_Mul:
1921 case ZigClangBO_Div:
1922 case ZigClangBO_Rem:
1923 case ZigClangBO_Add:
1924 case ZigClangBO_Sub:
1925 case ZigClangBO_Shl:
1926 case ZigClangBO_Shr:
1927 case ZigClangBO_LT:
1928 case ZigClangBO_GT:
1929 case ZigClangBO_LE:
1930 case ZigClangBO_GE:
1931 case ZigClangBO_EQ:
1932 case ZigClangBO_NE:
1933 case ZigClangBO_And:
1934 case ZigClangBO_Xor:
1935 case ZigClangBO_Or:
1936 case ZigClangBO_LAnd:
1937 case ZigClangBO_LOr:
1938 case ZigClangBO_Comma:
19251939 zig_unreachable();
19261940 }
19271941
......@@ -2207,8 +2221,8 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra
22072221 zig_unreachable();
22082222}
22092223
2210static AstNode *trans_decl_ref_expr(Context *c, TransScope *scope, const clang::DeclRefExpr *stmt, TransLRValue lrval) {
2211 const clang::ValueDecl *value_decl = stmt->getDecl();
2224static AstNode *trans_decl_ref_expr(Context *c, TransScope *scope, const ZigClangDeclRefExpr *stmt, TransLRValue lrval) {
2225 const ZigClangValueDecl *value_decl = ZigClangDeclRefExpr_getDecl(stmt);
22122226 Buf *c_symbol_name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)value_decl));
22132227 Buf *zig_symbol_name = trans_lookup_zig_symbol(c, scope, c_symbol_name);
22142228 if (lrval == TransLValue) {
......@@ -2218,9 +2232,9 @@ static AstNode *trans_decl_ref_expr(Context *c, TransScope *scope, const clang::
22182232}
22192233
22202234static AstNode *trans_create_post_crement(Context *c, ResultUsed result_used, TransScope *scope,
2221 const clang::UnaryOperator *stmt, BinOpType assign_op)
2235 const ZigClangUnaryOperator *stmt, BinOpType assign_op)
22222236{
2223 const ZigClangExpr *op_expr = bitcast(stmt->getSubExpr());
2237 const ZigClangExpr *op_expr = ZigClangUnaryOperator_getSubExpr(stmt);
22242238
22252239 if (result_used == ResultUsedNo) {
22262240 // common case
......@@ -2274,9 +2288,9 @@ static AstNode *trans_create_post_crement(Context *c, ResultUsed result_used, Tr
22742288}
22752289
22762290static AstNode *trans_create_pre_crement(Context *c, ResultUsed result_used, TransScope *scope,
2277 const clang::UnaryOperator *stmt, BinOpType assign_op)
2291 const ZigClangUnaryOperator *stmt, BinOpType assign_op)
22782292{
2279 const ZigClangExpr *op_expr = bitcast(stmt->getSubExpr());
2293 const ZigClangExpr *op_expr = ZigClangUnaryOperator_getSubExpr(stmt);
22802294
22812295 if (result_used == ResultUsedNo) {
22822296 // common case
......@@ -2323,52 +2337,54 @@ static AstNode *trans_create_pre_crement(Context *c, ResultUsed result_used, Tra
23232337 return trans_create_node_grouped_expr(c, child_scope->node);
23242338}
23252339
2326static AstNode *trans_unary_operator(Context *c, ResultUsed result_used, TransScope *scope, const clang::UnaryOperator *stmt) {
2327 switch (stmt->getOpcode()) {
2328 case clang::UO_PostInc:
2329 if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())))
2340static AstNode *trans_unary_operator(Context *c, ResultUsed result_used, TransScope *scope,
2341 const ZigClangUnaryOperator *stmt)
2342{
2343 switch (ZigClangUnaryOperator_getOpcode(stmt)) {
2344 case ZigClangUO_PostInc:
2345 if (qual_type_has_wrapping_overflow(c, ZigClangUnaryOperator_getType(stmt)))
23302346 return trans_create_post_crement(c, result_used, scope, stmt, BinOpTypeAssignPlusWrap);
23312347 else
23322348 return trans_create_post_crement(c, result_used, scope, stmt, BinOpTypeAssignPlus);
2333 case clang::UO_PostDec:
2334 if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())))
2349 case ZigClangUO_PostDec:
2350 if (qual_type_has_wrapping_overflow(c, ZigClangUnaryOperator_getType(stmt)))
23352351 return trans_create_post_crement(c, result_used, scope, stmt, BinOpTypeAssignMinusWrap);
23362352 else
23372353 return trans_create_post_crement(c, result_used, scope, stmt, BinOpTypeAssignMinus);
2338 case clang::UO_PreInc:
2339 if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())))
2354 case ZigClangUO_PreInc:
2355 if (qual_type_has_wrapping_overflow(c, ZigClangUnaryOperator_getType(stmt)))
23402356 return trans_create_pre_crement(c, result_used, scope, stmt, BinOpTypeAssignPlusWrap);
23412357 else
23422358 return trans_create_pre_crement(c, result_used, scope, stmt, BinOpTypeAssignPlus);
2343 case clang::UO_PreDec:
2344 if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())))
2359 case ZigClangUO_PreDec:
2360 if (qual_type_has_wrapping_overflow(c, ZigClangUnaryOperator_getType(stmt)))
23452361 return trans_create_pre_crement(c, result_used, scope, stmt, BinOpTypeAssignMinusWrap);
23462362 else
23472363 return trans_create_pre_crement(c, result_used, scope, stmt, BinOpTypeAssignMinus);
2348 case clang::UO_AddrOf:
2364 case ZigClangUO_AddrOf:
23492365 {
2350 AstNode *value_node = trans_expr(c, result_used, scope, bitcast(stmt->getSubExpr()), TransLValue);
2366 AstNode *value_node = trans_expr(c, result_used, scope, ZigClangUnaryOperator_getSubExpr(stmt), TransLValue);
23512367 if (value_node == nullptr)
23522368 return value_node;
23532369 return trans_create_node_addr_of(c, value_node);
23542370 }
2355 case clang::UO_Deref:
2371 case ZigClangUO_Deref:
23562372 {
2357 AstNode *value_node = trans_expr(c, result_used, scope, bitcast(stmt->getSubExpr()), TransRValue);
2373 AstNode *value_node = trans_expr(c, result_used, scope, ZigClangUnaryOperator_getSubExpr(stmt), TransRValue);
23582374 if (value_node == nullptr)
23592375 return nullptr;
2360 bool is_fn_ptr = qual_type_is_fn_ptr(bitcast(stmt->getSubExpr()->getType()));
2376 bool is_fn_ptr = qual_type_is_fn_ptr(ZigClangExpr_getType(ZigClangUnaryOperator_getSubExpr(stmt)));
23612377 if (is_fn_ptr)
23622378 return value_node;
23632379 AstNode *unwrapped = trans_create_node_unwrap_null(c, value_node);
23642380 return trans_create_node_ptr_deref(c, unwrapped);
23652381 }
2366 case clang::UO_Plus:
2367 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation UO_Plus");
2382 case ZigClangUO_Plus:
2383 emit_warning(c, ZigClangUnaryOperator_getBeginLoc(stmt), "TODO handle C translation UO_Plus");
23682384 return nullptr;
2369 case clang::UO_Minus:
2385 case ZigClangUO_Minus:
23702386 {
2371 const ZigClangExpr *op_expr = bitcast(stmt->getSubExpr());
2387 const ZigClangExpr *op_expr = ZigClangUnaryOperator_getSubExpr(stmt);
23722388 if (!qual_type_has_wrapping_overflow(c, ZigClangExpr_getType(op_expr))) {
23732389 AstNode *node = trans_create_node(c, NodeTypePrefixOpExpr);
23742390 node->data.prefix_op_expr.prefix_op = PrefixOpNegation;
......@@ -2390,44 +2406,44 @@ static AstNode *trans_unary_operator(Context *c, ResultUsed result_used, TransSc
23902406 node->data.bin_op_expr.bin_op = BinOpTypeSubWrap;
23912407 return node;
23922408 } else {
2393 emit_warning(c, bitcast(stmt->getBeginLoc()), "C negation with non float non integer");
2409 emit_warning(c, ZigClangUnaryOperator_getBeginLoc(stmt), "C negation with non float non integer");
23942410 return nullptr;
23952411 }
23962412 }
2397 case clang::UO_Not:
2413 case ZigClangUO_Not:
23982414 {
2399 const ZigClangExpr *op_expr = bitcast(stmt->getSubExpr());
2415 const ZigClangExpr *op_expr = ZigClangUnaryOperator_getSubExpr(stmt);
24002416 AstNode *sub_node = trans_expr(c, ResultUsedYes, scope, op_expr, TransRValue);
24012417 if (sub_node == nullptr)
24022418 return nullptr;
24032419
24042420 return trans_create_node_prefix_op(c, PrefixOpBinNot, sub_node);
24052421 }
2406 case clang::UO_LNot:
2422 case ZigClangUO_LNot:
24072423 {
2408 const ZigClangExpr *op_expr = bitcast(stmt->getSubExpr());
2424 const ZigClangExpr *op_expr = ZigClangUnaryOperator_getSubExpr(stmt);
24092425 AstNode *sub_node = trans_bool_expr(c, ResultUsedYes, scope, op_expr, TransRValue);
24102426 if (sub_node == nullptr)
24112427 return nullptr;
24122428
24132429 return trans_create_node_prefix_op(c, PrefixOpBoolNot, sub_node);
24142430 }
2415 case clang::UO_Real:
2416 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation UO_Real");
2431 case ZigClangUO_Real:
2432 emit_warning(c, ZigClangUnaryOperator_getBeginLoc(stmt), "TODO handle C translation UO_Real");
24172433 return nullptr;
2418 case clang::UO_Imag:
2419 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation UO_Imag");
2434 case ZigClangUO_Imag:
2435 emit_warning(c, ZigClangUnaryOperator_getBeginLoc(stmt), "TODO handle C translation UO_Imag");
24202436 return nullptr;
2421 case clang::UO_Extension:
2422 return trans_expr(c, result_used, scope, bitcast(stmt->getSubExpr()), TransLValue);
2423 case clang::UO_Coawait:
2424 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation UO_Coawait");
2437 case ZigClangUO_Extension:
2438 return trans_expr(c, result_used, scope, ZigClangUnaryOperator_getSubExpr(stmt), TransLValue);
2439 case ZigClangUO_Coawait:
2440 emit_warning(c, ZigClangUnaryOperator_getBeginLoc(stmt), "TODO handle C translation UO_Coawait");
24252441 return nullptr;
24262442 }
24272443 zig_unreachable();
24282444}
24292445
2430static int trans_local_declaration(Context *c, TransScope *scope, const clang::DeclStmt *stmt,
2446static int trans_local_declaration(Context *c, TransScope *scope, const ZigClangDeclStmt *stmt,
24312447 AstNode **out_node, TransScope **out_scope)
24322448{
24332449 // declarations are added via the scope
......@@ -2436,10 +2452,11 @@ static int trans_local_declaration(Context *c, TransScope *scope, const clang::D
24362452 TransScopeBlock *scope_block = trans_scope_block_find(scope);
24372453 assert(scope_block != nullptr);
24382454
2439 for (auto iter = stmt->decl_begin(); iter != stmt->decl_end(); iter++) {
2440 clang::Decl *decl = *iter;
2441 switch (decl->getKind()) {
2442 case clang::Decl::Var: {
2455 for (auto iter = reinterpret_cast<const clang::DeclStmt *>(stmt)->decl_begin();
2456 iter != reinterpret_cast<const clang::DeclStmt *>(stmt)->decl_end(); iter++) {
2457 ZigClangDecl *decl = reinterpret_cast<ZigClangDecl *>(*iter);
2458 switch (ZigClangDecl_getKind(decl)) {
2459 case ZigClangDeclVar: {
24432460 clang::VarDecl *var_decl = (clang::VarDecl *)decl;
24442461 ZigClangQualType qual_type = bitcast(var_decl->getTypeSourceInfo()->getType());
24452462 AstNode *init_node = nullptr;
......@@ -2451,7 +2468,7 @@ static int trans_local_declaration(Context *c, TransScope *scope, const clang::D
24512468 } else {
24522469 init_node = trans_create_node(c, NodeTypeUndefinedLiteral);
24532470 }
2454 AstNode *type_node = trans_qual_type(c, qual_type, bitcast(stmt->getBeginLoc()));
2471 AstNode *type_node = trans_qual_type(c, qual_type, ZigClangDeclStmt_getBeginLoc(stmt));
24552472 if (type_node == nullptr)
24562473 return ErrorUnexpected;
24572474
......@@ -2467,233 +2484,233 @@ static int trans_local_declaration(Context *c, TransScope *scope, const clang::D
24672484 scope_block->node->data.block.statements.append(node);
24682485 continue;
24692486 }
2470 case clang::Decl::AccessSpec:
2471 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle decl kind AccessSpec");
2487 case ZigClangDeclAccessSpec:
2488 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle decl kind AccessSpec");
24722489 return ErrorUnexpected;
2473 case clang::Decl::Block:
2474 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Block");
2490 case ZigClangDeclBlock:
2491 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Block");
24752492 return ErrorUnexpected;
2476 case clang::Decl::Captured:
2477 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Captured");
2493 case ZigClangDeclCaptured:
2494 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Captured");
24782495 return ErrorUnexpected;
2479 case clang::Decl::ClassScopeFunctionSpecialization:
2480 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ClassScopeFunctionSpecialization");
2496 case ZigClangDeclClassScopeFunctionSpecialization:
2497 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ClassScopeFunctionSpecialization");
24812498 return ErrorUnexpected;
2482 case clang::Decl::Empty:
2483 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Empty");
2499 case ZigClangDeclEmpty:
2500 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Empty");
24842501 return ErrorUnexpected;
2485 case clang::Decl::Export:
2486 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Export");
2502 case ZigClangDeclExport:
2503 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Export");
24872504 return ErrorUnexpected;
2488 case clang::Decl::ExternCContext:
2489 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ExternCContext");
2505 case ZigClangDeclExternCContext:
2506 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ExternCContext");
24902507 return ErrorUnexpected;
2491 case clang::Decl::FileScopeAsm:
2492 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C FileScopeAsm");
2508 case ZigClangDeclFileScopeAsm:
2509 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C FileScopeAsm");
24932510 return ErrorUnexpected;
2494 case clang::Decl::Friend:
2495 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Friend");
2511 case ZigClangDeclFriend:
2512 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Friend");
24962513 return ErrorUnexpected;
2497 case clang::Decl::FriendTemplate:
2498 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C FriendTemplate");
2514 case ZigClangDeclFriendTemplate:
2515 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C FriendTemplate");
24992516 return ErrorUnexpected;
2500 case clang::Decl::Import:
2501 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Import");
2517 case ZigClangDeclImport:
2518 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Import");
25022519 return ErrorUnexpected;
2503 case clang::Decl::LinkageSpec:
2504 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C LinkageSpec");
2520 case ZigClangDeclLinkageSpec:
2521 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C LinkageSpec");
25052522 return ErrorUnexpected;
2506 case clang::Decl::Label:
2507 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Label");
2523 case ZigClangDeclLabel:
2524 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Label");
25082525 return ErrorUnexpected;
2509 case clang::Decl::Namespace:
2510 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Namespace");
2526 case ZigClangDeclNamespace:
2527 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Namespace");
25112528 return ErrorUnexpected;
2512 case clang::Decl::NamespaceAlias:
2513 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C NamespaceAlias");
2529 case ZigClangDeclNamespaceAlias:
2530 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C NamespaceAlias");
25142531 return ErrorUnexpected;
2515 case clang::Decl::ObjCCompatibleAlias:
2516 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCCompatibleAlias");
2532 case ZigClangDeclObjCCompatibleAlias:
2533 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ObjCCompatibleAlias");
25172534 return ErrorUnexpected;
2518 case clang::Decl::ObjCCategory:
2519 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCCategory");
2535 case ZigClangDeclObjCCategory:
2536 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ObjCCategory");
25202537 return ErrorUnexpected;
2521 case clang::Decl::ObjCCategoryImpl:
2522 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCCategoryImpl");
2538 case ZigClangDeclObjCCategoryImpl:
2539 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ObjCCategoryImpl");
25232540 return ErrorUnexpected;
2524 case clang::Decl::ObjCImplementation:
2525 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCImplementation");
2541 case ZigClangDeclObjCImplementation:
2542 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ObjCImplementation");
25262543 return ErrorUnexpected;
2527 case clang::Decl::ObjCInterface:
2528 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCInterface");
2544 case ZigClangDeclObjCInterface:
2545 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ObjCInterface");
25292546 return ErrorUnexpected;
2530 case clang::Decl::ObjCProtocol:
2531 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCProtocol");
2547 case ZigClangDeclObjCProtocol:
2548 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ObjCProtocol");
25322549 return ErrorUnexpected;
2533 case clang::Decl::ObjCMethod:
2534 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCMethod");
2550 case ZigClangDeclObjCMethod:
2551 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ObjCMethod");
25352552 return ErrorUnexpected;
2536 case clang::Decl::ObjCProperty:
2537 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCProperty");
2553 case ZigClangDeclObjCProperty:
2554 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ObjCProperty");
25382555 return ErrorUnexpected;
2539 case clang::Decl::BuiltinTemplate:
2540 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C BuiltinTemplate");
2556 case ZigClangDeclBuiltinTemplate:
2557 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C BuiltinTemplate");
25412558 return ErrorUnexpected;
2542 case clang::Decl::ClassTemplate:
2543 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ClassTemplate");
2559 case ZigClangDeclClassTemplate:
2560 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ClassTemplate");
25442561 return ErrorUnexpected;
2545 case clang::Decl::FunctionTemplate:
2546 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C FunctionTemplate");
2562 case ZigClangDeclFunctionTemplate:
2563 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C FunctionTemplate");
25472564 return ErrorUnexpected;
2548 case clang::Decl::TypeAliasTemplate:
2549 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TypeAliasTemplate");
2565 case ZigClangDeclTypeAliasTemplate:
2566 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C TypeAliasTemplate");
25502567 return ErrorUnexpected;
2551 case clang::Decl::VarTemplate:
2552 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C VarTemplate");
2568 case ZigClangDeclVarTemplate:
2569 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C VarTemplate");
25532570 return ErrorUnexpected;
2554 case clang::Decl::TemplateTemplateParm:
2555 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TemplateTemplateParm");
2571 case ZigClangDeclTemplateTemplateParm:
2572 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C TemplateTemplateParm");
25562573 return ErrorUnexpected;
2557 case clang::Decl::Enum:
2558 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Enum");
2574 case ZigClangDeclEnum:
2575 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Enum");
25592576 return ErrorUnexpected;
2560 case clang::Decl::Record:
2561 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Record");
2577 case ZigClangDeclRecord:
2578 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Record");
25622579 return ErrorUnexpected;
2563 case clang::Decl::CXXRecord:
2564 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXRecord");
2580 case ZigClangDeclCXXRecord:
2581 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C CXXRecord");
25652582 return ErrorUnexpected;
2566 case clang::Decl::ClassTemplateSpecialization:
2567 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ClassTemplateSpecialization");
2583 case ZigClangDeclClassTemplateSpecialization:
2584 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ClassTemplateSpecialization");
25682585 return ErrorUnexpected;
2569 case clang::Decl::ClassTemplatePartialSpecialization:
2570 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ClassTemplatePartialSpecialization");
2586 case ZigClangDeclClassTemplatePartialSpecialization:
2587 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ClassTemplatePartialSpecialization");
25712588 return ErrorUnexpected;
2572 case clang::Decl::TemplateTypeParm:
2573 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TemplateTypeParm");
2589 case ZigClangDeclTemplateTypeParm:
2590 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C TemplateTypeParm");
25742591 return ErrorUnexpected;
2575 case clang::Decl::ObjCTypeParam:
2576 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCTypeParam");
2592 case ZigClangDeclObjCTypeParam:
2593 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ObjCTypeParam");
25772594 return ErrorUnexpected;
2578 case clang::Decl::TypeAlias:
2579 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TypeAlias");
2595 case ZigClangDeclTypeAlias:
2596 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C TypeAlias");
25802597 return ErrorUnexpected;
2581 case clang::Decl::Typedef:
2582 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Typedef");
2598 case ZigClangDeclTypedef:
2599 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Typedef");
25832600 return ErrorUnexpected;
2584 case clang::Decl::UnresolvedUsingTypename:
2585 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UnresolvedUsingTypename");
2601 case ZigClangDeclUnresolvedUsingTypename:
2602 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C UnresolvedUsingTypename");
25862603 return ErrorUnexpected;
2587 case clang::Decl::Using:
2588 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Using");
2604 case ZigClangDeclUsing:
2605 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Using");
25892606 return ErrorUnexpected;
2590 case clang::Decl::UsingDirective:
2591 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UsingDirective");
2607 case ZigClangDeclUsingDirective:
2608 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C UsingDirective");
25922609 return ErrorUnexpected;
2593 case clang::Decl::UsingPack:
2594 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UsingPack");
2610 case ZigClangDeclUsingPack:
2611 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C UsingPack");
25952612 return ErrorUnexpected;
2596 case clang::Decl::UsingShadow:
2597 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UsingShadow");
2613 case ZigClangDeclUsingShadow:
2614 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C UsingShadow");
25982615 return ErrorUnexpected;
2599 case clang::Decl::ConstructorUsingShadow:
2600 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ConstructorUsingShadow");
2616 case ZigClangDeclConstructorUsingShadow:
2617 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ConstructorUsingShadow");
26012618 return ErrorUnexpected;
2602 case clang::Decl::Binding:
2603 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Binding");
2619 case ZigClangDeclBinding:
2620 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Binding");
26042621 return ErrorUnexpected;
2605 case clang::Decl::Field:
2606 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Field");
2622 case ZigClangDeclField:
2623 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Field");
26072624 return ErrorUnexpected;
2608 case clang::Decl::ObjCAtDefsField:
2609 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCAtDefsField");
2625 case ZigClangDeclObjCAtDefsField:
2626 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ObjCAtDefsField");
26102627 return ErrorUnexpected;
2611 case clang::Decl::ObjCIvar:
2612 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCIvar");
2628 case ZigClangDeclObjCIvar:
2629 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ObjCIvar");
26132630 return ErrorUnexpected;
2614 case clang::Decl::Function:
2615 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Function");
2631 case ZigClangDeclFunction:
2632 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Function");
26162633 return ErrorUnexpected;
2617 case clang::Decl::CXXDeductionGuide:
2618 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXDeductionGuide");
2634 case ZigClangDeclCXXDeductionGuide:
2635 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C CXXDeductionGuide");
26192636 return ErrorUnexpected;
2620 case clang::Decl::CXXMethod:
2621 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXMethod");
2637 case ZigClangDeclCXXMethod:
2638 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C CXXMethod");
26222639 return ErrorUnexpected;
2623 case clang::Decl::CXXConstructor:
2624 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXConstructor");
2640 case ZigClangDeclCXXConstructor:
2641 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C CXXConstructor");
26252642 return ErrorUnexpected;
2626 case clang::Decl::CXXConversion:
2627 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXConversion");
2643 case ZigClangDeclCXXConversion:
2644 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C CXXConversion");
26282645 return ErrorUnexpected;
2629 case clang::Decl::CXXDestructor:
2630 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXDestructor");
2646 case ZigClangDeclCXXDestructor:
2647 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C CXXDestructor");
26312648 return ErrorUnexpected;
2632 case clang::Decl::MSProperty:
2633 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C MSProperty");
2649 case ZigClangDeclMSProperty:
2650 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C MSProperty");
26342651 return ErrorUnexpected;
2635 case clang::Decl::NonTypeTemplateParm:
2636 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C NonTypeTemplateParm");
2652 case ZigClangDeclNonTypeTemplateParm:
2653 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C NonTypeTemplateParm");
26372654 return ErrorUnexpected;
2638 case clang::Decl::Decomposition:
2639 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Decomposition");
2655 case ZigClangDeclDecomposition:
2656 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Decomposition");
26402657 return ErrorUnexpected;
2641 case clang::Decl::ImplicitParam:
2642 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ImplicitParam");
2658 case ZigClangDeclImplicitParam:
2659 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ImplicitParam");
26432660 return ErrorUnexpected;
2644 case clang::Decl::OMPCapturedExpr:
2645 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPCapturedExpr");
2661 case ZigClangDeclOMPCapturedExpr:
2662 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C OMPCapturedExpr");
26462663 return ErrorUnexpected;
2647 case clang::Decl::ParmVar:
2648 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ParmVar");
2664 case ZigClangDeclParmVar:
2665 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ParmVar");
26492666 return ErrorUnexpected;
2650 case clang::Decl::VarTemplateSpecialization:
2651 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C VarTemplateSpecialization");
2667 case ZigClangDeclVarTemplateSpecialization:
2668 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C VarTemplateSpecialization");
26522669 return ErrorUnexpected;
2653 case clang::Decl::VarTemplatePartialSpecialization:
2654 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C VarTemplatePartialSpecialization");
2670 case ZigClangDeclVarTemplatePartialSpecialization:
2671 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C VarTemplatePartialSpecialization");
26552672 return ErrorUnexpected;
2656 case clang::Decl::EnumConstant:
2657 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C EnumConstant");
2673 case ZigClangDeclEnumConstant:
2674 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C EnumConstant");
26582675 return ErrorUnexpected;
2659 case clang::Decl::IndirectField:
2660 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C IndirectField");
2676 case ZigClangDeclIndirectField:
2677 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C IndirectField");
26612678 return ErrorUnexpected;
2662 case clang::Decl::OMPDeclareReduction:
2663 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPDeclareReduction");
2679 case ZigClangDeclOMPDeclareReduction:
2680 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C OMPDeclareReduction");
26642681 return ErrorUnexpected;
2665 case clang::Decl::UnresolvedUsingValue:
2666 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UnresolvedUsingValue");
2682 case ZigClangDeclUnresolvedUsingValue:
2683 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C UnresolvedUsingValue");
26672684 return ErrorUnexpected;
2668 case clang::Decl::OMPRequires:
2669 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPRequires");
2685 case ZigClangDeclOMPRequires:
2686 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C OMPRequires");
26702687 return ErrorUnexpected;
2671 case clang::Decl::OMPThreadPrivate:
2672 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPThreadPrivate");
2688 case ZigClangDeclOMPThreadPrivate:
2689 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C OMPThreadPrivate");
26732690 return ErrorUnexpected;
2674 case clang::Decl::ObjCPropertyImpl:
2675 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCPropertyImpl");
2691 case ZigClangDeclObjCPropertyImpl:
2692 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C ObjCPropertyImpl");
26762693 return ErrorUnexpected;
2677 case clang::Decl::PragmaComment:
2678 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C PragmaComment");
2694 case ZigClangDeclPragmaComment:
2695 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C PragmaComment");
26792696 return ErrorUnexpected;
2680 case clang::Decl::PragmaDetectMismatch:
2681 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C PragmaDetectMismatch");
2697 case ZigClangDeclPragmaDetectMismatch:
2698 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C PragmaDetectMismatch");
26822699 return ErrorUnexpected;
2683 case clang::Decl::StaticAssert:
2684 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C StaticAssert");
2700 case ZigClangDeclStaticAssert:
2701 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C StaticAssert");
26852702 return ErrorUnexpected;
2686 case clang::Decl::TranslationUnit:
2687 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TranslationUnit");
2703 case ZigClangDeclTranslationUnit:
2704 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C TranslationUnit");
26882705 return ErrorUnexpected;
2689 case clang::Decl::Concept:
2690 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Concept");
2706 case ZigClangDeclConcept:
2707 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C Concept");
26912708 return ErrorUnexpected;
2692 case clang::Decl::OMPDeclareMapper:
2693 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPDeclareMapper");
2709 case ZigClangDeclOMPDeclareMapper:
2710 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C OMPDeclareMapper");
26942711 return ErrorUnexpected;
2695 case clang::Decl::OMPAllocate:
2696 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPAllocate");
2712 case ZigClangDeclOMPAllocate:
2713 emit_warning(c, ZigClangDeclStmt_getBeginLoc(stmt), "TODO handle C OMPAllocate");
26972714 return ErrorUnexpected;
26982715 }
26992716 zig_unreachable();
......@@ -2911,19 +2928,19 @@ static AstNode *trans_bool_expr(Context *c, ResultUsed result_used, TransScope *
29112928
29122929 case ZigClangType_Elaborated:
29132930 {
2914 const clang::ElaboratedType *elaborated_ty = reinterpret_cast<const clang::ElaboratedType*>(ty);
2915 switch (elaborated_ty->getKeyword()) {
2916 case clang::ETK_Enum: {
2917 AstNode *enum_type = trans_qual_type(c, bitcast(elaborated_ty->getNamedType()),
2931 const ZigClangElaboratedType *elaborated_ty = reinterpret_cast<const ZigClangElaboratedType*>(ty);
2932 switch (ZigClangElaboratedType_getKeyword(elaborated_ty)) {
2933 case ZigClangETK_Enum: {
2934 AstNode *enum_type = trans_qual_type(c, ZigClangElaboratedType_getNamedType(elaborated_ty),
29182935 ZigClangExpr_getBeginLoc(expr));
29192936 return to_enum_zero_cmp(c, res, enum_type);
29202937 }
2921 case clang::ETK_Struct:
2922 case clang::ETK_Union:
2923 case clang::ETK_Interface:
2924 case clang::ETK_Class:
2925 case clang::ETK_Typename:
2926 case clang::ETK_None:
2938 case ZigClangETK_Struct:
2939 case ZigClangETK_Union:
2940 case ZigClangETK_Interface:
2941 case ZigClangETK_Class:
2942 case ZigClangETK_Typename:
2943 case ZigClangETK_None:
29272944 return res;
29282945 }
29292946 }
......@@ -2976,15 +2993,15 @@ static AstNode *trans_bool_expr(Context *c, ResultUsed result_used, TransScope *
29762993 zig_unreachable();
29772994}
29782995
2979static AstNode *trans_while_loop(Context *c, TransScope *scope, const clang::WhileStmt *stmt) {
2996static AstNode *trans_while_loop(Context *c, TransScope *scope, const ZigClangWhileStmt *stmt) {
29802997 TransScopeWhile *while_scope = trans_scope_while_create(c, scope);
29812998
29822999 while_scope->node->data.while_expr.condition = trans_bool_expr(c, ResultUsedYes, scope,
2983 bitcast(stmt->getCond()), TransRValue);
3000 ZigClangWhileStmt_getCond(stmt), TransRValue);
29843001 if (while_scope->node->data.while_expr.condition == nullptr)
29853002 return nullptr;
29863003
2987 TransScope *body_scope = trans_stmt(c, &while_scope->base, bitcast(stmt->getBody()),
3004 TransScope *body_scope = trans_stmt(c, &while_scope->base, ZigClangWhileStmt_getBody(stmt),
29883005 &while_scope->node->data.while_expr.body);
29893006 if (body_scope == nullptr)
29903007 return nullptr;
......@@ -2992,22 +3009,22 @@ static AstNode *trans_while_loop(Context *c, TransScope *scope, const clang::Whi
29923009 return while_scope->node;
29933010}
29943011
2995static AstNode *trans_if_statement(Context *c, TransScope *scope, const clang::IfStmt *stmt) {
3012static AstNode *trans_if_statement(Context *c, TransScope *scope, const ZigClangIfStmt *stmt) {
29963013 // if (c) t
29973014 // if (c) t else e
29983015 AstNode *if_node = trans_create_node(c, NodeTypeIfBoolExpr);
29993016
3000 TransScope *then_scope = trans_stmt(c, scope, bitcast(stmt->getThen()), &if_node->data.if_bool_expr.then_block);
3017 TransScope *then_scope = trans_stmt(c, scope, ZigClangIfStmt_getThen(stmt), &if_node->data.if_bool_expr.then_block);
30013018 if (then_scope == nullptr)
30023019 return nullptr;
30033020
3004 if (stmt->getElse() != nullptr) {
3005 TransScope *else_scope = trans_stmt(c, scope, bitcast(stmt->getElse()), &if_node->data.if_bool_expr.else_node);
3021 if (ZigClangIfStmt_getElse(stmt) != nullptr) {
3022 TransScope *else_scope = trans_stmt(c, scope, ZigClangIfStmt_getElse(stmt), &if_node->data.if_bool_expr.else_node);
30063023 if (else_scope == nullptr)
30073024 return nullptr;
30083025 }
30093026
3010 if_node->data.if_bool_expr.condition = trans_bool_expr(c, ResultUsedYes, scope, bitcast(stmt->getCond()),
3027 if_node->data.if_bool_expr.condition = trans_bool_expr(c, ResultUsedYes, scope, ZigClangIfStmt_getCond(stmt),
30113028 TransRValue);
30123029 if (if_node->data.if_bool_expr.condition == nullptr)
30133030 return nullptr;
......@@ -3015,24 +3032,27 @@ static AstNode *trans_if_statement(Context *c, TransScope *scope, const clang::I
30153032 return if_node;
30163033}
30173034
3018static AstNode *trans_call_expr(Context *c, ResultUsed result_used, TransScope *scope, const clang::CallExpr *stmt) {
3035static AstNode *trans_call_expr(Context *c, ResultUsed result_used, TransScope *scope, const ZigClangCallExpr *stmt) {
30193036 AstNode *node = trans_create_node(c, NodeTypeFnCallExpr);
30203037
3021 AstNode *callee_raw_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getCallee()), TransRValue);
3038 AstNode *callee_raw_node = trans_expr(c, ResultUsedYes, scope, ZigClangCallExpr_getCallee(stmt), TransRValue);
30223039 if (callee_raw_node == nullptr)
30233040 return nullptr;
30243041
30253042 bool is_ptr = false;
3026 const clang::FunctionProtoType *fn_ty = qual_type_get_fn_proto(bitcast(stmt->getCallee()->getType()), &is_ptr);
3043 const ZigClangFunctionProtoType *fn_ty = qual_type_get_fn_proto(
3044 ZigClangExpr_getType(ZigClangCallExpr_getCallee(stmt)), &is_ptr);
30273045 AstNode *callee_node = nullptr;
30283046 if (is_ptr && fn_ty) {
3029 if ((ZigClangStmtClass)stmt->getCallee()->getStmtClass() == ZigClangStmt_ImplicitCastExprClass) {
3030 const clang::ImplicitCastExpr *implicit_cast = static_cast<const clang::ImplicitCastExpr *>(stmt->getCallee());
3031 if ((ZigClangCK)implicit_cast->getCastKind() == ZigClangCK_FunctionToPointerDecay) {
3032 if ((ZigClangStmtClass)implicit_cast->getSubExpr()->getStmtClass() == ZigClangStmt_DeclRefExprClass) {
3033 const clang::DeclRefExpr *decl_ref = static_cast<const clang::DeclRefExpr *>(implicit_cast->getSubExpr());
3034 const clang::Decl *decl = decl_ref->getFoundDecl();
3035 if (decl->getKind() == clang::Decl::Function) {
3047 if (ZigClangExpr_getStmtClass(ZigClangCallExpr_getCallee(stmt)) == ZigClangStmt_ImplicitCastExprClass) {
3048 const ZigClangImplicitCastExpr *implicit_cast = reinterpret_cast<const ZigClangImplicitCastExpr *>(
3049 ZigClangCallExpr_getCallee(stmt));
3050 if (ZigClangImplicitCastExpr_getCastKind(implicit_cast) == ZigClangCK_FunctionToPointerDecay) {
3051 const ZigClangExpr *subexpr = ZigClangImplicitCastExpr_getSubExpr(implicit_cast);
3052 if (ZigClangExpr_getStmtClass(subexpr) == ZigClangStmt_DeclRefExprClass) {
3053 const ZigClangDeclRefExpr *decl_ref = reinterpret_cast<const ZigClangDeclRefExpr *>(subexpr);
3054 const ZigClangNamedDecl *named_decl = ZigClangDeclRefExpr_getFoundDecl(decl_ref);
3055 if (ZigClangDecl_getKind((const ZigClangDecl *)named_decl) == ZigClangDeclFunction) {
30363056 callee_node = callee_raw_node;
30373057 }
30383058 }
......@@ -3047,8 +3067,8 @@ static AstNode *trans_call_expr(Context *c, ResultUsed result_used, TransScope *
30473067
30483068 node->data.fn_call_expr.fn_ref_expr = callee_node;
30493069
3050 unsigned num_args = stmt->getNumArgs();
3051 const ZigClangExpr * const* args = reinterpret_cast<const ZigClangExpr * const*>(stmt->getArgs());
3070 unsigned num_args = ZigClangCallExpr_getNumArgs(stmt);
3071 const ZigClangExpr * const* args = ZigClangCallExpr_getArgs(stmt);
30523072 for (unsigned i = 0; i < num_args; i += 1) {
30533073 AstNode *arg_node = trans_expr(c, ResultUsedYes, scope, args[i], TransRValue);
30543074 if (arg_node == nullptr)
......@@ -3058,7 +3078,7 @@ static AstNode *trans_call_expr(Context *c, ResultUsed result_used, TransScope *
30583078 }
30593079
30603080 if (result_used == ResultUsedNo && fn_ty &&
3061 !ZigClangType_isVoidType(qual_type_canon(bitcast(fn_ty->getReturnType()))))
3081 !ZigClangType_isVoidType(qual_type_canon(ZigClangFunctionProtoType_getReturnType(fn_ty))))
30623082 {
30633083 node = trans_create_node_bin_op(c, trans_create_node_symbol_str(c, "_"), BinOpTypeAssign, node);
30643084 }
......@@ -3067,28 +3087,31 @@ static AstNode *trans_call_expr(Context *c, ResultUsed result_used, TransScope *
30673087}
30683088
30693089static AstNode *trans_member_expr(Context *c, ResultUsed result_used, TransScope *scope,
3070 const clang::MemberExpr *stmt)
3090 const ZigClangMemberExpr *stmt)
30713091{
3072 AstNode *container_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getBase()), TransRValue);
3092 AstNode *container_node = trans_expr(c, ResultUsedYes, scope, ZigClangMemberExpr_getBase(stmt), TransRValue);
30733093 if (container_node == nullptr)
30743094 return nullptr;
30753095
3076 if (stmt->isArrow()) {
3096 if (ZigClangMemberExpr_isArrow(stmt)) {
30773097 container_node = trans_create_node_unwrap_null(c, container_node);
30783098 }
30793099
3080 const char *name = ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)stmt->getMemberDecl());
3100 const char *name = ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)ZigClangMemberExpr_getMemberDecl(stmt));
30813101
30823102 AstNode *node = trans_create_node_field_access_str(c, container_node, name);
30833103 return maybe_suppress_result(c, result_used, node);
30843104}
30853105
3086static AstNode *trans_array_subscript_expr(Context *c, ResultUsed result_used, TransScope *scope, const clang::ArraySubscriptExpr *stmt) {
3087 AstNode *container_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getBase()), TransRValue);
3106static AstNode *trans_array_subscript_expr(Context *c, ResultUsed result_used, TransScope *scope,
3107 const ZigClangArraySubscriptExpr *stmt)
3108{
3109 AstNode *container_node = trans_expr(c, ResultUsedYes, scope, ZigClangArraySubscriptExpr_getBase(stmt),
3110 TransRValue);
30883111 if (container_node == nullptr)
30893112 return nullptr;
30903113
3091 AstNode *idx_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getIdx()), TransRValue);
3114 AstNode *idx_node = trans_expr(c, ResultUsedYes, scope, ZigClangArraySubscriptExpr_getIdx(stmt), TransRValue);
30923115 if (idx_node == nullptr)
30933116 return nullptr;
30943117
......@@ -3100,14 +3123,14 @@ static AstNode *trans_array_subscript_expr(Context *c, ResultUsed result_used, T
31003123}
31013124
31023125static AstNode *trans_c_style_cast_expr(Context *c, ResultUsed result_used, TransScope *scope,
3103 const clang::CStyleCastExpr *stmt, TransLRValue lrvalue)
3126 const ZigClangCStyleCastExpr *stmt, TransLRValue lrvalue)
31043127{
3105 AstNode *sub_expr_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), lrvalue);
3128 AstNode *sub_expr_node = trans_expr(c, ResultUsedYes, scope, ZigClangCStyleCastExpr_getSubExpr(stmt), lrvalue);
31063129 if (sub_expr_node == nullptr)
31073130 return nullptr;
31083131
3109 AstNode *cast = trans_c_cast(c, bitcast(stmt->getBeginLoc()), bitcast(stmt->getType()),
3110 bitcast(stmt->getSubExpr()->getType()), sub_expr_node);
3132 AstNode *cast = trans_c_cast(c, ZigClangCStyleCastExpr_getBeginLoc(stmt), ZigClangCStyleCastExpr_getType(stmt),
3133 ZigClangExpr_getType(ZigClangCStyleCastExpr_getSubExpr(stmt)), sub_expr_node);
31113134 if (cast == nullptr)
31123135 return nullptr;
31133136
......@@ -3115,9 +3138,10 @@ static AstNode *trans_c_style_cast_expr(Context *c, ResultUsed result_used, Tran
31153138}
31163139
31173140static AstNode *trans_unary_expr_or_type_trait_expr(Context *c, ResultUsed result_used,
3118 TransScope *scope, const clang::UnaryExprOrTypeTraitExpr *stmt)
3141 TransScope *scope, const ZigClangUnaryExprOrTypeTraitExpr *stmt)
31193142{
3120 AstNode *type_node = trans_qual_type(c, bitcast(stmt->getTypeOfArgument()), bitcast(stmt->getBeginLoc()));
3143 AstNode *type_node = trans_qual_type(c, ZigClangUnaryExprOrTypeTraitExpr_getTypeOfArgument(stmt),
3144 ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc(stmt));
31213145 if (type_node == nullptr)
31223146 return nullptr;
31233147
......@@ -3126,14 +3150,14 @@ static AstNode *trans_unary_expr_or_type_trait_expr(Context *c, ResultUsed resul
31263150 return maybe_suppress_result(c, result_used, node);
31273151}
31283152
3129static AstNode *trans_do_loop(Context *c, TransScope *parent_scope, const clang::DoStmt *stmt) {
3153static AstNode *trans_do_loop(Context *c, TransScope *parent_scope, const ZigClangDoStmt *stmt) {
31303154 TransScopeWhile *while_scope = trans_scope_while_create(c, parent_scope);
31313155
31323156 while_scope->node->data.while_expr.condition = trans_create_node_bool(c, true);
31333157
31343158 AstNode *body_node;
31353159 TransScope *child_scope;
3136 if ((ZigClangStmtClass)stmt->getBody()->getStmtClass() == ZigClangStmt_CompoundStmtClass) {
3160 if (ZigClangStmt_getStmtClass(ZigClangDoStmt_getBody(stmt)) == ZigClangStmt_CompoundStmtClass) {
31373161 // there's already a block in C, so we'll append our condition to it.
31383162 // c: do {
31393163 // c: a;
......@@ -3146,8 +3170,8 @@ static AstNode *trans_do_loop(Context *c, TransScope *parent_scope, const clang:
31463170 // zig: }
31473171
31483172 // We call the low level function so that we can set child_scope to the scope of the generated block.
3149 if (trans_stmt_extra(c, &while_scope->base, bitcast(stmt->getBody()), ResultUsedNo, TransRValue, &body_node,
3150 nullptr, &child_scope))
3173 if (trans_stmt_extra(c, &while_scope->base, ZigClangDoStmt_getBody(stmt), ResultUsedNo, TransRValue,
3174 &body_node, nullptr, &child_scope))
31513175 {
31523176 return nullptr;
31533177 }
......@@ -3164,7 +3188,7 @@ static AstNode *trans_do_loop(Context *c, TransScope *parent_scope, const clang:
31643188 TransScopeBlock *child_block_scope = trans_scope_block_create(c, &while_scope->base);
31653189 body_node = child_block_scope->node;
31663190 AstNode *child_statement;
3167 child_scope = trans_stmt(c, &child_block_scope->base, bitcast(stmt->getBody()), &child_statement);
3191 child_scope = trans_stmt(c, &child_block_scope->base, ZigClangDoStmt_getBody(stmt), &child_statement);
31683192 if (child_scope == nullptr) return nullptr;
31693193 if (child_statement != nullptr) {
31703194 body_node->data.block.statements.append(child_statement);
......@@ -3172,7 +3196,7 @@ static AstNode *trans_do_loop(Context *c, TransScope *parent_scope, const clang:
31723196 }
31733197
31743198 // if (!cond) break;
3175 AstNode *condition_node = trans_expr(c, ResultUsedYes, child_scope, bitcast(stmt->getCond()), TransRValue);
3199 AstNode *condition_node = trans_expr(c, ResultUsedYes, child_scope, ZigClangDoStmt_getCond(stmt), TransRValue);
31763200 if (condition_node == nullptr) return nullptr;
31773201 AstNode *terminator_node = trans_create_node(c, NodeTypeIfBoolExpr);
31783202 terminator_node->data.if_bool_expr.condition = trans_create_node_prefix_op(c, PrefixOpBoolNot, condition_node);
......@@ -3186,11 +3210,11 @@ static AstNode *trans_do_loop(Context *c, TransScope *parent_scope, const clang:
31863210 return while_scope->node;
31873211}
31883212
3189static AstNode *trans_for_loop(Context *c, TransScope *parent_scope, const clang::ForStmt *stmt) {
3213static AstNode *trans_for_loop(Context *c, TransScope *parent_scope, const ZigClangForStmt *stmt) {
31903214 AstNode *loop_block_node;
31913215 TransScopeWhile *while_scope;
31923216 TransScope *cond_scope;
3193 const ZigClangStmt *init_stmt = bitcast(stmt->getInit());
3217 const ZigClangStmt *init_stmt = ZigClangForStmt_getInit(stmt);
31943218 if (init_stmt == nullptr) {
31953219 while_scope = trans_scope_while_create(c, parent_scope);
31963220 loop_block_node = while_scope->node;
......@@ -3211,7 +3235,7 @@ static AstNode *trans_for_loop(Context *c, TransScope *parent_scope, const clang
32113235 child_scope->node->data.block.statements.append(while_scope->node);
32123236 }
32133237
3214 const ZigClangExpr *cond_expr = bitcast(stmt->getCond());
3238 const ZigClangExpr *cond_expr = ZigClangForStmt_getCond(stmt);
32153239 if (cond_expr == nullptr) {
32163240 while_scope->node->data.while_expr.condition = trans_create_node_bool(c, true);
32173241 } else {
......@@ -3222,7 +3246,7 @@ static AstNode *trans_for_loop(Context *c, TransScope *parent_scope, const clang
32223246 return nullptr;
32233247 }
32243248
3225 const ZigClangExpr *inc_expr = bitcast(stmt->getInc());
3249 const ZigClangExpr *inc_expr = ZigClangForStmt_getInc(stmt);
32263250 if (inc_expr != nullptr) {
32273251 AstNode *inc_node = trans_expr(c, ResultUsedNo, cond_scope, inc_expr, TransRValue);
32283252 if (inc_node == nullptr)
......@@ -3231,7 +3255,7 @@ static AstNode *trans_for_loop(Context *c, TransScope *parent_scope, const clang
32313255 }
32323256
32333257 AstNode *body_statement;
3234 TransScope *body_scope = trans_stmt(c, &while_scope->base, bitcast(stmt->getBody()), &body_statement);
3258 TransScope *body_scope = trans_stmt(c, &while_scope->base, ZigClangForStmt_getBody(stmt), &body_statement);
32353259 if (body_scope == nullptr)
32363260 return nullptr;
32373261
......@@ -3244,12 +3268,12 @@ static AstNode *trans_for_loop(Context *c, TransScope *parent_scope, const clang
32443268 return loop_block_node;
32453269}
32463270
3247static AstNode *trans_switch_stmt(Context *c, TransScope *parent_scope, const clang::SwitchStmt *stmt) {
3271static AstNode *trans_switch_stmt(Context *c, TransScope *parent_scope, const ZigClangSwitchStmt *stmt) {
32483272 TransScopeBlock *block_scope = trans_scope_block_create(c, parent_scope);
32493273
32503274 TransScopeSwitch *switch_scope;
32513275
3252 const clang::DeclStmt *var_decl_stmt = stmt->getConditionVariableDeclStmt();
3276 const ZigClangDeclStmt *var_decl_stmt = ZigClangSwitchStmt_getConditionVariableDeclStmt(stmt);
32533277 if (var_decl_stmt == nullptr) {
32543278 switch_scope = trans_scope_switch_create(c, &block_scope->base);
32553279 } else {
......@@ -3268,7 +3292,7 @@ static AstNode *trans_switch_stmt(Context *c, TransScope *parent_scope, const cl
32683292 switch_scope->end_label_name = end_label_name;
32693293 block_scope->node->data.block.name = end_label_name;
32703294
3271 const ZigClangExpr *cond_expr = bitcast(stmt->getCond());
3295 const ZigClangExpr *cond_expr = ZigClangSwitchStmt_getCond(stmt);
32723296 assert(cond_expr != nullptr);
32733297
32743298 AstNode *expr_node = trans_expr(c, ResultUsedYes, &block_scope->base, cond_expr, TransRValue);
......@@ -3277,7 +3301,7 @@ static AstNode *trans_switch_stmt(Context *c, TransScope *parent_scope, const cl
32773301 switch_scope->switch_node->data.switch_expr.expr = expr_node;
32783302
32793303 AstNode *body_node;
3280 const ZigClangStmt *body_stmt = bitcast(stmt->getBody());
3304 const ZigClangStmt *body_stmt = ZigClangSwitchStmt_getBody(stmt);
32813305 if (ZigClangStmt_getStmtClass(body_stmt) == ZigClangStmt_CompoundStmtClass) {
32823306 if (trans_compound_stmt_inline(c, &switch_scope->base, (const ZigClangCompoundStmt *)body_stmt,
32833307 block_scope->node, nullptr))
......@@ -3292,7 +3316,7 @@ static AstNode *trans_switch_stmt(Context *c, TransScope *parent_scope, const cl
32923316 block_scope->node->data.block.statements.append(body_node);
32933317 }
32943318
3295 if (!switch_scope->found_default && !stmt->isAllEnumCasesCovered()) {
3319 if (!switch_scope->found_default && !ZigClangSwitchStmt_isAllEnumCasesCovered(stmt)) {
32963320 AstNode *prong_node = trans_create_node(c, NodeTypeSwitchProng);
32973321 prong_node->data.switch_prong.expr = trans_create_node_break(c, end_label_name, nullptr);
32983322 switch_scope->switch_node->data.switch_expr.prongs.append(prong_node);
......@@ -3311,12 +3335,12 @@ static TransScopeSwitch *trans_scope_switch_find(TransScope *scope) {
33113335 return nullptr;
33123336}
33133337
3314static int trans_switch_case(Context *c, TransScope *parent_scope, const clang::CaseStmt *stmt, AstNode **out_node,
3338static int trans_switch_case(Context *c, TransScope *parent_scope, const ZigClangCaseStmt *stmt, AstNode **out_node,
33153339 TransScope **out_scope) {
33163340 *out_node = nullptr;
33173341
3318 if (stmt->getRHS() != nullptr) {
3319 emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO support GNU switch case a ... b extension");
3342 if (ZigClangCaseStmt_getRHS(stmt) != nullptr) {
3343 emit_warning(c, ZigClangCaseStmt_getBeginLoc(stmt), "TODO support GNU switch case a ... b extension");
33203344 return ErrorUnexpected;
33213345 }
33223346
......@@ -3329,7 +3353,8 @@ static int trans_switch_case(Context *c, TransScope *parent_scope, const clang::
33293353 {
33303354 // Add the prong
33313355 AstNode *prong_node = trans_create_node(c, NodeTypeSwitchProng);
3332 AstNode *item_node = trans_expr(c, ResultUsedYes, &switch_scope->base, bitcast(stmt->getLHS()), TransRValue);
3356 AstNode *item_node = trans_expr(c, ResultUsedYes, &switch_scope->base, ZigClangCaseStmt_getLHS(stmt),
3357 TransRValue);
33333358 if (item_node == nullptr)
33343359 return ErrorUnexpected;
33353360 prong_node->data.switch_prong.items.append(item_node);
......@@ -3346,7 +3371,7 @@ static int trans_switch_case(Context *c, TransScope *parent_scope, const clang::
33463371 scope_block->node->data.block.statements.append(case_block);
33473372
33483373 AstNode *sub_stmt_node;
3349 TransScope *new_scope = trans_stmt(c, parent_scope, bitcast(stmt->getSubStmt()), &sub_stmt_node);
3374 TransScope *new_scope = trans_stmt(c, parent_scope, ZigClangCaseStmt_getSubStmt(stmt), &sub_stmt_node);
33503375 if (new_scope == nullptr)
33513376 return ErrorUnexpected;
33523377 if (sub_stmt_node != nullptr)
......@@ -3356,8 +3381,8 @@ static int trans_switch_case(Context *c, TransScope *parent_scope, const clang::
33563381 return ErrorNone;
33573382}
33583383
3359static int trans_switch_default(Context *c, TransScope *parent_scope, const clang::DefaultStmt *stmt, AstNode **out_node,
3360 TransScope **out_scope)
3384static int trans_switch_default(Context *c, TransScope *parent_scope, const ZigClangDefaultStmt *stmt,
3385 AstNode **out_node, TransScope **out_scope)
33613386{
33623387 *out_node = nullptr;
33633388
......@@ -3383,7 +3408,7 @@ static int trans_switch_default(Context *c, TransScope *parent_scope, const clan
33833408 scope_block->node->data.block.statements.append(case_block);
33843409
33853410 AstNode *sub_stmt_node;
3386 TransScope *new_scope = trans_stmt(c, parent_scope, bitcast(stmt->getSubStmt()), &sub_stmt_node);
3411 TransScope *new_scope = trans_stmt(c, parent_scope, ZigClangDefaultStmt_getSubStmt(stmt), &sub_stmt_node);
33873412 if (new_scope == nullptr)
33883413 return ErrorUnexpected;
33893414 if (sub_stmt_node != nullptr)
......@@ -3393,7 +3418,9 @@ static int trans_switch_default(Context *c, TransScope *parent_scope, const clan
33933418 return ErrorNone;
33943419}
33953420
3396static AstNode *trans_string_literal(Context *c, ResultUsed result_used, TransScope *scope, const ZigClangStringLiteral *stmt) {
3421static AstNode *trans_string_literal(Context *c, ResultUsed result_used, TransScope *scope,
3422 const ZigClangStringLiteral *stmt)
3423{
33973424 switch (ZigClangStringLiteral_getKind(stmt)) {
33983425 case ZigClangStringLiteral_StringKind_Ascii:
33993426 case ZigClangStringLiteral_StringKind_UTF8: {
......@@ -3415,7 +3442,7 @@ static AstNode *trans_string_literal(Context *c, ResultUsed result_used, TransSc
34153442 zig_unreachable();
34163443}
34173444
3418static AstNode *trans_break_stmt(Context *c, TransScope *scope, const clang::BreakStmt *stmt) {
3445static AstNode *trans_break_stmt(Context *c, TransScope *scope, const ZigClangBreakStmt *stmt) {
34193446 TransScope *cur_scope = scope;
34203447 while (cur_scope != nullptr) {
34213448 if (cur_scope->id == TransScopeIdWhile) {
......@@ -3457,38 +3484,38 @@ static int trans_stmt_extra(Context *c, TransScope *scope, const ZigClangStmt *s
34573484 switch (sc) {
34583485 case ZigClangStmt_ReturnStmtClass:
34593486 return wrap_stmt(out_node, out_child_scope, scope,
3460 trans_return_stmt(c, scope, (const clang::ReturnStmt *)stmt));
3487 trans_return_stmt(c, scope, (const ZigClangReturnStmt *)stmt));
34613488 case ZigClangStmt_CompoundStmtClass:
34623489 return wrap_stmt(out_node, out_child_scope, scope,
34633490 trans_compound_stmt(c, scope, (const ZigClangCompoundStmt *)stmt, out_node_scope));
34643491 case ZigClangStmt_IntegerLiteralClass:
34653492 return wrap_stmt(out_node, out_child_scope, scope,
3466 trans_integer_literal(c, result_used, (const clang::IntegerLiteral *)stmt));
3493 trans_integer_literal(c, result_used, (const ZigClangIntegerLiteral *)stmt));
34673494 case ZigClangStmt_ConditionalOperatorClass:
34683495 return wrap_stmt(out_node, out_child_scope, scope,
3469 trans_conditional_operator(c, result_used, scope, (const clang::ConditionalOperator *)stmt));
3496 trans_conditional_operator(c, result_used, scope, (const ZigClangConditionalOperator *)stmt));
34703497 case ZigClangStmt_BinaryOperatorClass:
34713498 return wrap_stmt(out_node, out_child_scope, scope,
3472 trans_binary_operator(c, result_used, scope, (const clang::BinaryOperator *)stmt));
3499 trans_binary_operator(c, result_used, scope, (const ZigClangBinaryOperator *)stmt));
34733500 case ZigClangStmt_CompoundAssignOperatorClass:
34743501 return wrap_stmt(out_node, out_child_scope, scope,
3475 trans_compound_assign_operator(c, result_used, scope, (const clang::CompoundAssignOperator *)stmt));
3502 trans_compound_assign_operator(c, result_used, scope, (const ZigClangCompoundAssignOperator *)stmt));
34763503 case ZigClangStmt_ImplicitCastExprClass:
34773504 return wrap_stmt(out_node, out_child_scope, scope,
34783505 trans_implicit_cast_expr(c, result_used, scope, (const ZigClangImplicitCastExpr *)stmt));
34793506 case ZigClangStmt_DeclRefExprClass:
34803507 return wrap_stmt(out_node, out_child_scope, scope,
3481 trans_decl_ref_expr(c, scope, (const clang::DeclRefExpr *)stmt, lrvalue));
3508 trans_decl_ref_expr(c, scope, (const ZigClangDeclRefExpr *)stmt, lrvalue));
34823509 case ZigClangStmt_UnaryOperatorClass:
34833510 return wrap_stmt(out_node, out_child_scope, scope,
3484 trans_unary_operator(c, result_used, scope, (const clang::UnaryOperator *)stmt));
3511 trans_unary_operator(c, result_used, scope, (const ZigClangUnaryOperator *)stmt));
34853512 case ZigClangStmt_DeclStmtClass:
3486 return trans_local_declaration(c, scope, (const clang::DeclStmt *)stmt, out_node, out_child_scope);
3513 return trans_local_declaration(c, scope, (const ZigClangDeclStmt *)stmt, out_node, out_child_scope);
34873514 case ZigClangStmt_DoStmtClass:
34883515 case ZigClangStmt_WhileStmtClass: {
34893516 AstNode *while_node = sc == ZigClangStmt_DoStmtClass
3490 ? trans_do_loop(c, scope, (const clang::DoStmt *)stmt)
3491 : trans_while_loop(c, scope, (const clang::WhileStmt *)stmt);
3517 ? trans_do_loop(c, scope, (const ZigClangDoStmt *)stmt)
3518 : trans_while_loop(c, scope, (const ZigClangWhileStmt *)stmt);
34923519
34933520 if (while_node == nullptr)
34943521 return ErrorUnexpected;
......@@ -3501,28 +3528,28 @@ static int trans_stmt_extra(Context *c, TransScope *scope, const ZigClangStmt *s
35013528 }
35023529 case ZigClangStmt_IfStmtClass:
35033530 return wrap_stmt(out_node, out_child_scope, scope,
3504 trans_if_statement(c, scope, (const clang::IfStmt *)stmt));
3531 trans_if_statement(c, scope, (const ZigClangIfStmt *)stmt));
35053532 case ZigClangStmt_CallExprClass:
35063533 return wrap_stmt(out_node, out_child_scope, scope,
3507 trans_call_expr(c, result_used, scope, (const clang::CallExpr *)stmt));
3534 trans_call_expr(c, result_used, scope, (const ZigClangCallExpr *)stmt));
35083535 case ZigClangStmt_NullStmtClass:
35093536 *out_node = trans_create_node(c, NodeTypeBlock);
35103537 *out_child_scope = scope;
35113538 return ErrorNone;
35123539 case ZigClangStmt_MemberExprClass:
35133540 return wrap_stmt(out_node, out_child_scope, scope,
3514 trans_member_expr(c, result_used, scope, (const clang::MemberExpr *)stmt));
3541 trans_member_expr(c, result_used, scope, (const ZigClangMemberExpr *)stmt));
35153542 case ZigClangStmt_ArraySubscriptExprClass:
35163543 return wrap_stmt(out_node, out_child_scope, scope,
3517 trans_array_subscript_expr(c, result_used, scope, (const clang::ArraySubscriptExpr *)stmt));
3544 trans_array_subscript_expr(c, result_used, scope, (const ZigClangArraySubscriptExpr *)stmt));
35183545 case ZigClangStmt_CStyleCastExprClass:
35193546 return wrap_stmt(out_node, out_child_scope, scope,
3520 trans_c_style_cast_expr(c, result_used, scope, (const clang::CStyleCastExpr *)stmt, lrvalue));
3547 trans_c_style_cast_expr(c, result_used, scope, (const ZigClangCStyleCastExpr *)stmt, lrvalue));
35213548 case ZigClangStmt_UnaryExprOrTypeTraitExprClass:
35223549 return wrap_stmt(out_node, out_child_scope, scope,
3523 trans_unary_expr_or_type_trait_expr(c, result_used, scope, (const clang::UnaryExprOrTypeTraitExpr *)stmt));
3550 trans_unary_expr_or_type_trait_expr(c, result_used, scope, (const ZigClangUnaryExprOrTypeTraitExpr *)stmt));
35243551 case ZigClangStmt_ForStmtClass: {
3525 AstNode *node = trans_for_loop(c, scope, (const clang::ForStmt *)stmt);
3552 AstNode *node = trans_for_loop(c, scope, (const ZigClangForStmt *)stmt);
35263553 return wrap_stmt(out_node, out_child_scope, scope, node);
35273554 }
35283555 case ZigClangStmt_StringLiteralClass:
......@@ -3530,30 +3557,30 @@ static int trans_stmt_extra(Context *c, TransScope *scope, const ZigClangStmt *s
35303557 trans_string_literal(c, result_used, scope, (const ZigClangStringLiteral *)stmt));
35313558 case ZigClangStmt_BreakStmtClass:
35323559 return wrap_stmt(out_node, out_child_scope, scope,
3533 trans_break_stmt(c, scope, (const clang::BreakStmt *)stmt));
3560 trans_break_stmt(c, scope, (const ZigClangBreakStmt *)stmt));
35343561 case ZigClangStmt_ContinueStmtClass:
35353562 return wrap_stmt(out_node, out_child_scope, scope,
35363563 trans_continue_stmt(c, scope, (const ZigClangContinueStmt *)stmt));
35373564 case ZigClangStmt_ParenExprClass:
35383565 return wrap_stmt(out_node, out_child_scope, scope,
35393566 trans_expr(c, result_used, scope,
3540 bitcast(((const clang::ParenExpr*)stmt)->getSubExpr()), lrvalue));
3567 ZigClangParenExpr_getSubExpr((const ZigClangParenExpr *)stmt), lrvalue));
35413568 case ZigClangStmt_SwitchStmtClass:
35423569 return wrap_stmt(out_node, out_child_scope, scope,
3543 trans_switch_stmt(c, scope, (const clang::SwitchStmt *)stmt));
3570 trans_switch_stmt(c, scope, (const ZigClangSwitchStmt *)stmt));
35443571 case ZigClangStmt_CaseStmtClass:
3545 return trans_switch_case(c, scope, (const clang::CaseStmt *)stmt, out_node, out_child_scope);
3572 return trans_switch_case(c, scope, (const ZigClangCaseStmt *)stmt, out_node, out_child_scope);
35463573 case ZigClangStmt_DefaultStmtClass:
3547 return trans_switch_default(c, scope, (const clang::DefaultStmt *)stmt, out_node, out_child_scope);
3574 return trans_switch_default(c, scope, (const ZigClangDefaultStmt *)stmt, out_node, out_child_scope);
35483575 case ZigClangStmt_ConstantExprClass:
35493576 return wrap_stmt(out_node, out_child_scope, scope,
3550 trans_constant_expr(c, result_used, (const clang::ConstantExpr *)stmt));
3577 trans_constant_expr(c, result_used, (const ZigClangConstantExpr *)stmt));
35513578 case ZigClangStmt_PredefinedExprClass:
35523579 return wrap_stmt(out_node, out_child_scope, scope,
35533580 trans_predefined_expr(c, result_used, scope, (const ZigClangPredefinedExpr *)stmt));
35543581 case ZigClangStmt_StmtExprClass:
35553582 return wrap_stmt(out_node, out_child_scope, scope,
3556 trans_stmt_expr(c, result_used, scope, (const clang::StmtExpr *)stmt, out_node_scope));
3583 trans_stmt_expr(c, result_used, scope, (const ZigClangStmtExpr *)stmt, out_node_scope));
35573584 case ZigClangStmt_NoStmtClass:
35583585 emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C NoStmtClass");
35593586 return ErrorUnexpected;
......@@ -3703,7 +3730,7 @@ static int trans_stmt_extra(Context *c, TransScope *scope, const ZigClangStmt *s
37033730 return ErrorUnexpected;
37043731 case ZigClangStmt_CharacterLiteralClass:
37053732 return wrap_stmt(out_node, out_child_scope, scope,
3706 trans_character_literal(c, result_used, (const clang::CharacterLiteral *)stmt));
3733 trans_character_literal(c, result_used, (const ZigClangCharacterLiteral *)stmt));
37073734 return ErrorUnexpected;
37083735 case ZigClangStmt_ChooseExprClass:
37093736 emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ChooseExprClass");
......@@ -3743,7 +3770,7 @@ static int trans_stmt_extra(Context *c, TransScope *scope, const ZigClangStmt *s
37433770 return ErrorUnexpected;
37443771 case ZigClangStmt_FloatingLiteralClass:
37453772 return wrap_stmt(out_node, out_child_scope, scope,
3746 trans_floating_literal(c, result_used, (const clang::FloatingLiteral *)stmt));
3773 trans_floating_literal(c, result_used, (const ZigClangFloatingLiteral *)stmt));
37473774 case ZigClangStmt_ExprWithCleanupsClass:
37483775 emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ExprWithCleanupsClass");
37493776 return ErrorUnexpected;
src/zig_clang.cpp+333
......@@ -1310,6 +1310,43 @@ static_assert((clang::StringLiteral::StringKind)ZigClangStringLiteral_StringKind
13101310static_assert((clang::StringLiteral::StringKind)ZigClangStringLiteral_StringKind_UTF16 == clang::StringLiteral::UTF16, "");
13111311static_assert((clang::StringLiteral::StringKind)ZigClangStringLiteral_StringKind_UTF32 == clang::StringLiteral::UTF32, "");
13121312
1313void ZigClang_detect_enum_CharacterKind(clang::CharacterLiteral::CharacterKind x) {
1314 switch (x) {
1315 case clang::CharacterLiteral::Ascii:
1316 case clang::CharacterLiteral::Wide:
1317 case clang::CharacterLiteral::UTF8:
1318 case clang::CharacterLiteral::UTF16:
1319 case clang::CharacterLiteral::UTF32:
1320 break;
1321 }
1322}
1323static_assert((clang::CharacterLiteral::CharacterKind)ZigClangCharacterLiteral_CharacterKind_Ascii == clang::CharacterLiteral::Ascii, "");
1324static_assert((clang::CharacterLiteral::CharacterKind)ZigClangCharacterLiteral_CharacterKind_Wide == clang::CharacterLiteral::Wide, "");
1325static_assert((clang::CharacterLiteral::CharacterKind)ZigClangCharacterLiteral_CharacterKind_UTF8 == clang::CharacterLiteral::UTF8, "");
1326static_assert((clang::CharacterLiteral::CharacterKind)ZigClangCharacterLiteral_CharacterKind_UTF16 == clang::CharacterLiteral::UTF16, "");
1327static_assert((clang::CharacterLiteral::CharacterKind)ZigClangCharacterLiteral_CharacterKind_UTF32 == clang::CharacterLiteral::UTF32, "");
1328
1329void ZigClang_detect_enum_ElaboratedTypeKeyword(clang::ElaboratedTypeKeyword x) {
1330 switch (x) {
1331 case clang::ETK_Struct:
1332 case clang::ETK_Interface:
1333 case clang::ETK_Union:
1334 case clang::ETK_Class:
1335 case clang::ETK_Enum:
1336 case clang::ETK_Typename:
1337 case clang::ETK_None:
1338 break;
1339 }
1340}
1341static_assert((clang::ElaboratedTypeKeyword)ZigClangETK_Struct == clang::ETK_Struct, "");
1342static_assert((clang::ElaboratedTypeKeyword)ZigClangETK_Interface == clang::ETK_Interface, "");
1343static_assert((clang::ElaboratedTypeKeyword)ZigClangETK_Union == clang::ETK_Union, "");
1344static_assert((clang::ElaboratedTypeKeyword)ZigClangETK_Class == clang::ETK_Class, "");
1345static_assert((clang::ElaboratedTypeKeyword)ZigClangETK_Enum == clang::ETK_Enum, "");
1346static_assert((clang::ElaboratedTypeKeyword)ZigClangETK_Typename == clang::ETK_Typename, "");
1347static_assert((clang::ElaboratedTypeKeyword)ZigClangETK_None == clang::ETK_None, "");
1348
1349
13131350static_assert(sizeof(ZigClangAPValue) == sizeof(clang::APValue), "");
13141351
13151352static_assert(sizeof(ZigClangSourceLocation) == sizeof(clang::SourceLocation), "");
......@@ -1741,6 +1778,11 @@ unsigned ZigClangAPSInt_getNumWords(const ZigClangAPSInt *self) {
17411778 return casted->getNumWords();
17421779}
17431780
1781uint64_t ZigClangAPInt_getLimitedValue(const ZigClangAPInt *self, uint64_t limit) {
1782 auto casted = reinterpret_cast<const llvm::APInt *>(self);
1783 return casted->getLimitedValue(limit);
1784}
1785
17441786const ZigClangExpr *ZigClangAPValueLValueBase_dyn_cast_Expr(ZigClangAPValueLValueBase self) {
17451787 clang::APValue::LValueBase casted = bitcast(self);
17461788 const clang::Expr *expr = casted.dyn_cast<const clang::Expr *>();
......@@ -1916,6 +1958,11 @@ struct ZigClangQualType ZigClangFunctionProtoType_getParamType(const struct ZigC
19161958 return bitcast(casted->getParamType(index));
19171959}
19181960
1961struct ZigClangQualType ZigClangFunctionProtoType_getReturnType(const struct ZigClangFunctionProtoType *self) {
1962 auto casted = reinterpret_cast<const clang::FunctionProtoType *>(self);
1963 return bitcast(casted->getReturnType());
1964}
1965
19191966ZigClangCompoundStmt_const_body_iterator ZigClangCompoundStmt_body_begin(const struct ZigClangCompoundStmt *self) {
19201967 auto casted = reinterpret_cast<const clang::CompoundStmt *>(self);
19211968 return bitcast(casted->body_begin());
......@@ -1936,6 +1983,11 @@ ZigClangDeclStmt_const_decl_iterator ZigClangDeclStmt_decl_end(const struct ZigC
19361983 return bitcast(casted->decl_end());
19371984}
19381985
1986ZigClangSourceLocation ZigClangDeclStmt_getBeginLoc(const struct ZigClangDeclStmt *self) {
1987 auto casted = reinterpret_cast<const clang::DeclStmt *>(self);
1988 return bitcast(casted->getBeginLoc());
1989}
1990
19391991unsigned ZigClangAPFloat_convertToHexString(const ZigClangAPFloat *self, char *DST,
19401992 unsigned HexDigits, bool UpperCase, enum ZigClangAPFloat_roundingMode RM)
19411993{
......@@ -1983,11 +2035,31 @@ struct ZigClangQualType ZigClangArrayType_getElementType(const struct ZigClangAr
19832035 return bitcast(casted->getElementType());
19842036}
19852037
2038struct ZigClangQualType ZigClangIncompleteArrayType_getElementType(const struct ZigClangIncompleteArrayType *self) {
2039 auto casted = reinterpret_cast<const clang::IncompleteArrayType *>(self);
2040 return bitcast(casted->getElementType());
2041}
2042
2043struct ZigClangQualType ZigClangConstantArrayType_getElementType(const struct ZigClangConstantArrayType *self) {
2044 auto casted = reinterpret_cast<const clang::ConstantArrayType *>(self);
2045 return bitcast(casted->getElementType());
2046}
2047
2048const struct ZigClangAPInt *ZigClangConstantArrayType_getSize(const struct ZigClangConstantArrayType *self) {
2049 auto casted = reinterpret_cast<const clang::ConstantArrayType *>(self);
2050 return reinterpret_cast<const ZigClangAPInt *>(&casted->getSize());
2051}
2052
19862053const struct ZigClangValueDecl *ZigClangDeclRefExpr_getDecl(const struct ZigClangDeclRefExpr *self) {
19872054 auto casted = reinterpret_cast<const clang::DeclRefExpr *>(self);
19882055 return reinterpret_cast<const struct ZigClangValueDecl *>(casted->getDecl());
19892056}
19902057
2058const struct ZigClangNamedDecl *ZigClangDeclRefExpr_getFoundDecl(const struct ZigClangDeclRefExpr *self) {
2059 auto casted = reinterpret_cast<const clang::DeclRefExpr *>(self);
2060 return reinterpret_cast<const struct ZigClangNamedDecl *>(casted->getFoundDecl());
2061}
2062
19912063struct ZigClangQualType ZigClangParenType_getInnerType(const struct ZigClangParenType *self) {
19922064 auto casted = reinterpret_cast<const clang::ParenType *>(self);
19932065 return bitcast(casted->getInnerType());
......@@ -2003,6 +2075,11 @@ struct ZigClangQualType ZigClangElaboratedType_getNamedType(const struct ZigClan
20032075 return bitcast(casted->getNamedType());
20042076}
20052077
2078enum ZigClangElaboratedTypeKeyword ZigClangElaboratedType_getKeyword(const struct ZigClangElaboratedType *self) {
2079 auto casted = reinterpret_cast<const clang::ElaboratedType *>(self);
2080 return (ZigClangElaboratedTypeKeyword)casted->getKeyword();
2081}
2082
20062083struct ZigClangSourceLocation ZigClangCStyleCastExpr_getBeginLoc(const struct ZigClangCStyleCastExpr *self) {
20072084 auto casted = reinterpret_cast<const clang::CStyleCastExpr *>(self);
20082085 return bitcast(casted->getBeginLoc());
......@@ -2063,3 +2140,259 @@ struct ZigClangQualType ZigClangBinaryOperator_getType(const struct ZigClangBina
20632140 auto casted = reinterpret_cast<const clang::BinaryOperator *>(self);
20642141 return bitcast(casted->getType());
20652142}
2143
2144struct ZigClangQualType ZigClangDecayedType_getDecayedType(const struct ZigClangDecayedType *self) {
2145 auto casted = reinterpret_cast<const clang::DecayedType *>(self);
2146 return bitcast(casted->getDecayedType());
2147}
2148
2149const struct ZigClangCompoundStmt *ZigClangStmtExpr_getSubStmt(const struct ZigClangStmtExpr *self) {
2150 auto casted = reinterpret_cast<const clang::StmtExpr *>(self);
2151 return reinterpret_cast<const ZigClangCompoundStmt *>(casted->getSubStmt());
2152}
2153
2154struct ZigClangSourceLocation ZigClangCharacterLiteral_getBeginLoc(const struct ZigClangCharacterLiteral *self) {
2155 auto casted = reinterpret_cast<const clang::CharacterLiteral *>(self);
2156 return bitcast(casted->getBeginLoc());
2157}
2158
2159enum ZigClangCharacterLiteral_CharacterKind ZigClangCharacterLiteral_getKind(const struct ZigClangCharacterLiteral *self) {
2160 auto casted = reinterpret_cast<const clang::CharacterLiteral *>(self);
2161 return (ZigClangCharacterLiteral_CharacterKind)casted->getKind();
2162}
2163
2164unsigned ZigClangCharacterLiteral_getValue(const struct ZigClangCharacterLiteral *self) {
2165 auto casted = reinterpret_cast<const clang::CharacterLiteral *>(self);
2166 return casted->getValue();
2167}
2168
2169const struct ZigClangExpr *ZigClangConditionalOperator_getCond(const struct ZigClangConditionalOperator *self) {
2170 auto casted = reinterpret_cast<const clang::ConditionalOperator *>(self);
2171 return reinterpret_cast<const struct ZigClangExpr *>(casted->getCond());
2172}
2173
2174const struct ZigClangExpr *ZigClangConditionalOperator_getTrueExpr(const struct ZigClangConditionalOperator *self) {
2175 auto casted = reinterpret_cast<const clang::ConditionalOperator *>(self);
2176 return reinterpret_cast<const struct ZigClangExpr *>(casted->getTrueExpr());
2177}
2178
2179const struct ZigClangExpr *ZigClangConditionalOperator_getFalseExpr(const struct ZigClangConditionalOperator *self) {
2180 auto casted = reinterpret_cast<const clang::ConditionalOperator *>(self);
2181 return reinterpret_cast<const struct ZigClangExpr *>(casted->getFalseExpr());
2182}
2183
2184struct ZigClangQualType ZigClangCompoundAssignOperator_getType(const struct ZigClangCompoundAssignOperator *self) {
2185 auto casted = reinterpret_cast<const clang::CompoundAssignOperator *>(self);
2186 return bitcast(casted->getType());
2187}
2188
2189struct ZigClangQualType ZigClangCompoundAssignOperator_getComputationLHSType(const struct ZigClangCompoundAssignOperator *self) {
2190 auto casted = reinterpret_cast<const clang::CompoundAssignOperator *>(self);
2191 return bitcast(casted->getComputationLHSType());
2192}
2193
2194struct ZigClangQualType ZigClangCompoundAssignOperator_getComputationResultType(const struct ZigClangCompoundAssignOperator *self) {
2195 auto casted = reinterpret_cast<const clang::CompoundAssignOperator *>(self);
2196 return bitcast(casted->getComputationResultType());
2197}
2198
2199struct ZigClangSourceLocation ZigClangCompoundAssignOperator_getBeginLoc(const struct ZigClangCompoundAssignOperator *self) {
2200 auto casted = reinterpret_cast<const clang::CompoundAssignOperator *>(self);
2201 return bitcast(casted->getBeginLoc());
2202}
2203
2204enum ZigClangBO ZigClangCompoundAssignOperator_getOpcode(const struct ZigClangCompoundAssignOperator *self) {
2205 auto casted = reinterpret_cast<const clang::CompoundAssignOperator *>(self);
2206 return (ZigClangBO)casted->getOpcode();
2207}
2208
2209const struct ZigClangExpr *ZigClangCompoundAssignOperator_getLHS(const struct ZigClangCompoundAssignOperator *self) {
2210 auto casted = reinterpret_cast<const clang::CompoundAssignOperator *>(self);
2211 return reinterpret_cast<const struct ZigClangExpr *>(casted->getLHS());
2212}
2213
2214const struct ZigClangExpr *ZigClangCompoundAssignOperator_getRHS(const struct ZigClangCompoundAssignOperator *self) {
2215 auto casted = reinterpret_cast<const clang::CompoundAssignOperator *>(self);
2216 return reinterpret_cast<const struct ZigClangExpr *>(casted->getRHS());
2217}
2218
2219enum ZigClangUO ZigClangUnaryOperator_getOpcode(const struct ZigClangUnaryOperator *self) {
2220 auto casted = reinterpret_cast<const clang::UnaryOperator *>(self);
2221 return (ZigClangUO)casted->getOpcode();
2222}
2223
2224struct ZigClangQualType ZigClangUnaryOperator_getType(const struct ZigClangUnaryOperator *self) {
2225 auto casted = reinterpret_cast<const clang::UnaryOperator *>(self);
2226 return bitcast(casted->getType());
2227}
2228
2229const struct ZigClangExpr *ZigClangUnaryOperator_getSubExpr(const struct ZigClangUnaryOperator *self) {
2230 auto casted = reinterpret_cast<const clang::UnaryOperator *>(self);
2231 return reinterpret_cast<const struct ZigClangExpr *>(casted->getSubExpr());
2232}
2233
2234struct ZigClangSourceLocation ZigClangUnaryOperator_getBeginLoc(const struct ZigClangUnaryOperator *self) {
2235 auto casted = reinterpret_cast<const clang::UnaryOperator *>(self);
2236 return bitcast(casted->getBeginLoc());
2237}
2238
2239const struct ZigClangExpr *ZigClangWhileStmt_getCond(const struct ZigClangWhileStmt *self) {
2240 auto casted = reinterpret_cast<const clang::WhileStmt *>(self);
2241 return reinterpret_cast<const struct ZigClangExpr *>(casted->getCond());
2242}
2243
2244const struct ZigClangStmt *ZigClangWhileStmt_getBody(const struct ZigClangWhileStmt *self) {
2245 auto casted = reinterpret_cast<const clang::WhileStmt *>(self);
2246 return reinterpret_cast<const struct ZigClangStmt *>(casted->getBody());
2247}
2248
2249const struct ZigClangStmt *ZigClangIfStmt_getThen(const struct ZigClangIfStmt *self) {
2250 auto casted = reinterpret_cast<const clang::IfStmt *>(self);
2251 return reinterpret_cast<const struct ZigClangStmt *>(casted->getThen());
2252}
2253
2254const struct ZigClangStmt *ZigClangIfStmt_getElse(const struct ZigClangIfStmt *self) {
2255 auto casted = reinterpret_cast<const clang::IfStmt *>(self);
2256 return reinterpret_cast<const struct ZigClangStmt *>(casted->getElse());
2257}
2258
2259const struct ZigClangExpr *ZigClangIfStmt_getCond(const struct ZigClangIfStmt *self) {
2260 auto casted = reinterpret_cast<const clang::IfStmt *>(self);
2261 return reinterpret_cast<const struct ZigClangExpr *>(casted->getCond());
2262}
2263
2264const struct ZigClangExpr *ZigClangCallExpr_getCallee(const struct ZigClangCallExpr *self) {
2265 auto casted = reinterpret_cast<const clang::CallExpr *>(self);
2266 return reinterpret_cast<const struct ZigClangExpr *>(casted->getCallee());
2267}
2268
2269unsigned ZigClangCallExpr_getNumArgs(const struct ZigClangCallExpr *self) {
2270 auto casted = reinterpret_cast<const clang::CallExpr *>(self);
2271 return casted->getNumArgs();
2272}
2273
2274const struct ZigClangExpr * const * ZigClangCallExpr_getArgs(const struct ZigClangCallExpr *self) {
2275 auto casted = reinterpret_cast<const clang::CallExpr *>(self);
2276 return reinterpret_cast<const struct ZigClangExpr * const*>(casted->getArgs());
2277}
2278
2279const struct ZigClangExpr * ZigClangMemberExpr_getBase(const struct ZigClangMemberExpr *self) {
2280 auto casted = reinterpret_cast<const clang::MemberExpr *>(self);
2281 return reinterpret_cast<const struct ZigClangExpr *>(casted->getBase());
2282}
2283
2284bool ZigClangMemberExpr_isArrow(const struct ZigClangMemberExpr *self) {
2285 auto casted = reinterpret_cast<const clang::MemberExpr *>(self);
2286 return casted->isArrow();
2287}
2288
2289const struct ZigClangValueDecl * ZigClangMemberExpr_getMemberDecl(const struct ZigClangMemberExpr *self) {
2290 auto casted = reinterpret_cast<const clang::MemberExpr *>(self);
2291 return reinterpret_cast<const struct ZigClangValueDecl *>(casted->getMemberDecl());
2292}
2293
2294const struct ZigClangExpr *ZigClangArraySubscriptExpr_getBase(const struct ZigClangArraySubscriptExpr *self) {
2295 auto casted = reinterpret_cast<const clang::ArraySubscriptExpr *>(self);
2296 return reinterpret_cast<const struct ZigClangExpr *>(casted->getBase());
2297}
2298
2299const struct ZigClangExpr *ZigClangArraySubscriptExpr_getIdx(const struct ZigClangArraySubscriptExpr *self) {
2300 auto casted = reinterpret_cast<const clang::ArraySubscriptExpr *>(self);
2301 return reinterpret_cast<const struct ZigClangExpr *>(casted->getIdx());
2302}
2303
2304struct ZigClangQualType ZigClangUnaryExprOrTypeTraitExpr_getTypeOfArgument(
2305 const struct ZigClangUnaryExprOrTypeTraitExpr *self)
2306{
2307 auto casted = reinterpret_cast<const clang::UnaryExprOrTypeTraitExpr *>(self);
2308 return bitcast(casted->getTypeOfArgument());
2309}
2310
2311struct ZigClangSourceLocation ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc(
2312 const struct ZigClangUnaryExprOrTypeTraitExpr *self)
2313{
2314 auto casted = reinterpret_cast<const clang::UnaryExprOrTypeTraitExpr *>(self);
2315 return bitcast(casted->getBeginLoc());
2316}
2317
2318const struct ZigClangStmt *ZigClangDoStmt_getBody(const struct ZigClangDoStmt *self) {
2319 auto casted = reinterpret_cast<const clang::DoStmt *>(self);
2320 return reinterpret_cast<const struct ZigClangStmt *>(casted->getBody());
2321}
2322
2323const struct ZigClangExpr *ZigClangDoStmt_getCond(const struct ZigClangDoStmt *self) {
2324 auto casted = reinterpret_cast<const clang::DoStmt *>(self);
2325 return reinterpret_cast<const struct ZigClangExpr *>(casted->getCond());
2326}
2327
2328const struct ZigClangStmt *ZigClangForStmt_getInit(const struct ZigClangForStmt *self) {
2329 auto casted = reinterpret_cast<const clang::ForStmt *>(self);
2330 return reinterpret_cast<const struct ZigClangStmt *>(casted->getInit());
2331}
2332
2333const struct ZigClangExpr *ZigClangForStmt_getCond(const struct ZigClangForStmt *self) {
2334 auto casted = reinterpret_cast<const clang::ForStmt *>(self);
2335 return reinterpret_cast<const struct ZigClangExpr *>(casted->getCond());
2336}
2337
2338const struct ZigClangExpr *ZigClangForStmt_getInc(const struct ZigClangForStmt *self) {
2339 auto casted = reinterpret_cast<const clang::ForStmt *>(self);
2340 return reinterpret_cast<const struct ZigClangExpr *>(casted->getInc());
2341}
2342
2343const struct ZigClangStmt *ZigClangForStmt_getBody(const struct ZigClangForStmt *self) {
2344 auto casted = reinterpret_cast<const clang::ForStmt *>(self);
2345 return reinterpret_cast<const struct ZigClangStmt *>(casted->getBody());
2346}
2347
2348const struct ZigClangDeclStmt *ZigClangSwitchStmt_getConditionVariableDeclStmt(
2349 const struct ZigClangSwitchStmt *self)
2350{
2351 auto casted = reinterpret_cast<const clang::SwitchStmt *>(self);
2352 return reinterpret_cast<const struct ZigClangDeclStmt *>(casted->getConditionVariableDeclStmt());
2353}
2354
2355const struct ZigClangExpr *ZigClangSwitchStmt_getCond(const struct ZigClangSwitchStmt *self) {
2356 auto casted = reinterpret_cast<const clang::SwitchStmt *>(self);
2357 return reinterpret_cast<const struct ZigClangExpr *>(casted->getCond());
2358}
2359
2360const struct ZigClangStmt *ZigClangSwitchStmt_getBody(const struct ZigClangSwitchStmt *self) {
2361 auto casted = reinterpret_cast<const clang::SwitchStmt *>(self);
2362 return reinterpret_cast<const struct ZigClangStmt *>(casted->getBody());
2363}
2364
2365bool ZigClangSwitchStmt_isAllEnumCasesCovered(const struct ZigClangSwitchStmt *self) {
2366 auto casted = reinterpret_cast<const clang::SwitchStmt *>(self);
2367 return casted->isAllEnumCasesCovered();
2368}
2369
2370const struct ZigClangExpr *ZigClangCaseStmt_getLHS(const struct ZigClangCaseStmt *self) {
2371 auto casted = reinterpret_cast<const clang::CaseStmt *>(self);
2372 return reinterpret_cast<const struct ZigClangExpr *>(casted->getLHS());
2373}
2374
2375const struct ZigClangExpr *ZigClangCaseStmt_getRHS(const struct ZigClangCaseStmt *self) {
2376 auto casted = reinterpret_cast<const clang::CaseStmt *>(self);
2377 return reinterpret_cast<const struct ZigClangExpr *>(casted->getRHS());
2378}
2379
2380struct ZigClangSourceLocation ZigClangCaseStmt_getBeginLoc(const struct ZigClangCaseStmt *self) {
2381 auto casted = reinterpret_cast<const clang::CaseStmt *>(self);
2382 return bitcast(casted->getBeginLoc());
2383}
2384
2385const struct ZigClangStmt *ZigClangCaseStmt_getSubStmt(const struct ZigClangCaseStmt *self) {
2386 auto casted = reinterpret_cast<const clang::CaseStmt *>(self);
2387 return reinterpret_cast<const struct ZigClangStmt *>(casted->getSubStmt());
2388}
2389
2390const struct ZigClangStmt *ZigClangDefaultStmt_getSubStmt(const struct ZigClangDefaultStmt *self) {
2391 auto casted = reinterpret_cast<const clang::DefaultStmt *>(self);
2392 return reinterpret_cast<const struct ZigClangStmt *>(casted->getSubStmt());
2393}
2394
2395const struct ZigClangExpr *ZigClangParenExpr_getSubExpr(const struct ZigClangParenExpr *self) {
2396 auto casted = reinterpret_cast<const clang::ParenExpr *>(self);
2397 return reinterpret_cast<const struct ZigClangExpr *>(casted->getSubExpr());
2398}
src/zig_clang.h+105-4
......@@ -64,9 +64,10 @@ struct ZigClangExprEvalResult {
6464 ZigClangAPValue Val;
6565};
6666
67struct ZigClangAPValue;
68struct ZigClangAPSInt;
6967struct ZigClangAPFloat;
68struct ZigClangAPInt;
69struct ZigClangAPSInt;
70struct ZigClangAPValue;
7071struct ZigClangASTContext;
7172struct ZigClangASTUnit;
7273struct ZigClangArraySubscriptExpr;
......@@ -78,10 +79,12 @@ struct ZigClangBuiltinType;
7879struct ZigClangCStyleCastExpr;
7980struct ZigClangCallExpr;
8081struct ZigClangCaseStmt;
82struct ZigClangCharacterLiteral;
8183struct ZigClangCompoundAssignOperator;
8284struct ZigClangCompoundStmt;
8385struct ZigClangConditionalOperator;
8486struct ZigClangConstantArrayType;
87struct ZigClangConstantExpr;
8588struct ZigClangContinueStmt;
8689struct ZigClangDecayedType;
8790struct ZigClangDecl;
......@@ -98,10 +101,12 @@ struct ZigClangEnumType;
98101struct ZigClangExpr;
99102struct ZigClangFieldDecl;
100103struct ZigClangFileID;
104struct ZigClangFloatingLiteral;
101105struct ZigClangForStmt;
102106struct ZigClangFullSourceLoc;
103107struct ZigClangFunctionDecl;
104108struct ZigClangFunctionProtoType;
109struct ZigClangFunctionType;
105110struct ZigClangIfStmt;
106111struct ZigClangImplicitCastExpr;
107112struct ZigClangIncompleteArrayType;
......@@ -115,6 +120,7 @@ struct ZigClangParenExpr;
115120struct ZigClangParenType;
116121struct ZigClangParmVarDecl;
117122struct ZigClangPointerType;
123struct ZigClangPredefinedExpr;
118124struct ZigClangPreprocessedEntity;
119125struct ZigClangRecordDecl;
120126struct ZigClangRecordType;
......@@ -123,6 +129,7 @@ struct ZigClangSkipFunctionBodiesScope;
123129struct ZigClangSourceManager;
124130struct ZigClangSourceRange;
125131struct ZigClangStmt;
132struct ZigClangStmtExpr;
126133struct ZigClangStringLiteral;
127134struct ZigClangStringRef;
128135struct ZigClangSwitchStmt;
......@@ -135,8 +142,6 @@ struct ZigClangUnaryOperator;
135142struct ZigClangValueDecl;
136143struct ZigClangVarDecl;
137144struct ZigClangWhileStmt;
138struct ZigClangFunctionType;
139struct ZigClangPredefinedExpr;
140145
141146typedef struct ZigClangStmt *const * ZigClangCompoundStmt_const_body_iterator;
142147typedef struct ZigClangDecl *const * ZigClangDeclStmt_const_decl_iterator;
......@@ -761,12 +766,30 @@ enum ZigClangStringLiteral_StringKind {
761766 ZigClangStringLiteral_StringKind_UTF32,
762767};
763768
769enum ZigClangCharacterLiteral_CharacterKind {
770 ZigClangCharacterLiteral_CharacterKind_Ascii,
771 ZigClangCharacterLiteral_CharacterKind_Wide,
772 ZigClangCharacterLiteral_CharacterKind_UTF8,
773 ZigClangCharacterLiteral_CharacterKind_UTF16,
774 ZigClangCharacterLiteral_CharacterKind_UTF32,
775};
776
764777enum ZigClangVarDecl_TLSKind {
765778 ZigClangVarDecl_TLSKind_None,
766779 ZigClangVarDecl_TLSKind_Static,
767780 ZigClangVarDecl_TLSKind_Dynamic,
768781};
769782
783enum ZigClangElaboratedTypeKeyword {
784 ZigClangETK_Struct,
785 ZigClangETK_Interface,
786 ZigClangETK_Union,
787 ZigClangETK_Class,
788 ZigClangETK_Enum,
789 ZigClangETK_Typename,
790 ZigClangETK_None,
791};
792
770793ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangSourceManager_getSpellingLoc(const struct ZigClangSourceManager *,
771794 struct ZigClangSourceLocation Loc);
772795ZIG_EXTERN_C const char *ZigClangSourceManager_getFilename(const struct ZigClangSourceManager *,
......@@ -872,6 +895,8 @@ ZIG_EXTERN_C void ZigClangAPSInt_free(const struct ZigClangAPSInt *self);
872895ZIG_EXTERN_C const uint64_t *ZigClangAPSInt_getRawData(const struct ZigClangAPSInt *self);
873896ZIG_EXTERN_C unsigned ZigClangAPSInt_getNumWords(const struct ZigClangAPSInt *self);
874897
898ZIG_EXTERN_C uint64_t ZigClangAPInt_getLimitedValue(const struct ZigClangAPInt *self, uint64_t limit);
899
875900ZIG_EXTERN_C const struct ZigClangExpr *ZigClangAPValueLValueBase_dyn_cast_Expr(struct ZigClangAPValueLValueBase self);
876901
877902ZIG_EXTERN_C enum ZigClangBuiltinTypeKind ZigClangBuiltinType_getKind(const struct ZigClangBuiltinType *self);
......@@ -883,6 +908,7 @@ ZIG_EXTERN_C struct ZigClangQualType ZigClangFunctionType_getReturnType(const st
883908ZIG_EXTERN_C bool ZigClangFunctionProtoType_isVariadic(const struct ZigClangFunctionProtoType *self);
884909ZIG_EXTERN_C unsigned ZigClangFunctionProtoType_getNumParams(const struct ZigClangFunctionProtoType *self);
885910ZIG_EXTERN_C struct ZigClangQualType ZigClangFunctionProtoType_getParamType(const struct ZigClangFunctionProtoType *self, unsigned i);
911ZIG_EXTERN_C struct ZigClangQualType ZigClangFunctionProtoType_getReturnType(const struct ZigClangFunctionProtoType *self);
886912
887913
888914ZIG_EXTERN_C ZigClangCompoundStmt_const_body_iterator ZigClangCompoundStmt_body_begin(const struct ZigClangCompoundStmt *self);
......@@ -890,6 +916,7 @@ ZIG_EXTERN_C ZigClangCompoundStmt_const_body_iterator ZigClangCompoundStmt_body_
890916
891917ZIG_EXTERN_C ZigClangDeclStmt_const_decl_iterator ZigClangDeclStmt_decl_begin(const struct ZigClangDeclStmt *self);
892918ZIG_EXTERN_C ZigClangDeclStmt_const_decl_iterator ZigClangDeclStmt_decl_end(const struct ZigClangDeclStmt *self);
919ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangDeclStmt_getBeginLoc(const struct ZigClangDeclStmt *self);
893920
894921ZIG_EXTERN_C unsigned ZigClangAPFloat_convertToHexString(const struct ZigClangAPFloat *self, char *DST,
895922 unsigned HexDigits, bool UpperCase, enum ZigClangAPFloat_roundingMode RM);
......@@ -907,13 +934,20 @@ ZIG_EXTERN_C const struct ZigClangExpr *ZigClangImplicitCastExpr_getSubExpr(cons
907934
908935ZIG_EXTERN_C struct ZigClangQualType ZigClangArrayType_getElementType(const struct ZigClangArrayType *);
909936
937ZIG_EXTERN_C struct ZigClangQualType ZigClangIncompleteArrayType_getElementType(const struct ZigClangIncompleteArrayType *);
938
939ZIG_EXTERN_C struct ZigClangQualType ZigClangConstantArrayType_getElementType(const struct ZigClangConstantArrayType *);
940ZIG_EXTERN_C const struct ZigClangAPInt *ZigClangConstantArrayType_getSize(const struct ZigClangConstantArrayType *);
941
910942ZIG_EXTERN_C const struct ZigClangValueDecl *ZigClangDeclRefExpr_getDecl(const struct ZigClangDeclRefExpr *);
943ZIG_EXTERN_C const struct ZigClangNamedDecl *ZigClangDeclRefExpr_getFoundDecl(const struct ZigClangDeclRefExpr *);
911944
912945ZIG_EXTERN_C struct ZigClangQualType ZigClangParenType_getInnerType(const struct ZigClangParenType *);
913946
914947ZIG_EXTERN_C struct ZigClangQualType ZigClangAttributedType_getEquivalentType(const struct ZigClangAttributedType *);
915948
916949ZIG_EXTERN_C struct ZigClangQualType ZigClangElaboratedType_getNamedType(const struct ZigClangElaboratedType *);
950ZIG_EXTERN_C enum ZigClangElaboratedTypeKeyword ZigClangElaboratedType_getKeyword(const struct ZigClangElaboratedType *);
917951
918952ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangCStyleCastExpr_getBeginLoc(const struct ZigClangCStyleCastExpr *);
919953ZIG_EXTERN_C const struct ZigClangExpr *ZigClangCStyleCastExpr_getSubExpr(const struct ZigClangCStyleCastExpr *);
......@@ -930,4 +964,71 @@ ZIG_EXTERN_C const struct ZigClangExpr *ZigClangBinaryOperator_getLHS(const stru
930964ZIG_EXTERN_C const struct ZigClangExpr *ZigClangBinaryOperator_getRHS(const struct ZigClangBinaryOperator *);
931965ZIG_EXTERN_C struct ZigClangQualType ZigClangBinaryOperator_getType(const struct ZigClangBinaryOperator *);
932966
967ZIG_EXTERN_C struct ZigClangQualType ZigClangDecayedType_getDecayedType(const struct ZigClangDecayedType *);
968
969ZIG_EXTERN_C const struct ZigClangCompoundStmt *ZigClangStmtExpr_getSubStmt(const struct ZigClangStmtExpr *);
970
971ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangCharacterLiteral_getBeginLoc(const struct ZigClangCharacterLiteral *);
972ZIG_EXTERN_C enum ZigClangCharacterLiteral_CharacterKind ZigClangCharacterLiteral_getKind(const struct ZigClangCharacterLiteral *);
973ZIG_EXTERN_C unsigned ZigClangCharacterLiteral_getValue(const struct ZigClangCharacterLiteral *);
974
975ZIG_EXTERN_C const struct ZigClangExpr *ZigClangConditionalOperator_getCond(const struct ZigClangConditionalOperator *);
976ZIG_EXTERN_C const struct ZigClangExpr *ZigClangConditionalOperator_getTrueExpr(const struct ZigClangConditionalOperator *);
977ZIG_EXTERN_C const struct ZigClangExpr *ZigClangConditionalOperator_getFalseExpr(const struct ZigClangConditionalOperator *);
978
979ZIG_EXTERN_C struct ZigClangQualType ZigClangCompoundAssignOperator_getType(const struct ZigClangCompoundAssignOperator *);
980ZIG_EXTERN_C struct ZigClangQualType ZigClangCompoundAssignOperator_getComputationLHSType(const struct ZigClangCompoundAssignOperator *);
981ZIG_EXTERN_C struct ZigClangQualType ZigClangCompoundAssignOperator_getComputationResultType(const struct ZigClangCompoundAssignOperator *);
982ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangCompoundAssignOperator_getBeginLoc(const struct ZigClangCompoundAssignOperator *);
983ZIG_EXTERN_C enum ZigClangBO ZigClangCompoundAssignOperator_getOpcode(const struct ZigClangCompoundAssignOperator *);
984ZIG_EXTERN_C const struct ZigClangExpr *ZigClangCompoundAssignOperator_getLHS(const struct ZigClangCompoundAssignOperator *);
985ZIG_EXTERN_C const struct ZigClangExpr *ZigClangCompoundAssignOperator_getRHS(const struct ZigClangCompoundAssignOperator *);
986
987ZIG_EXTERN_C enum ZigClangUO ZigClangUnaryOperator_getOpcode(const struct ZigClangUnaryOperator *);
988ZIG_EXTERN_C struct ZigClangQualType ZigClangUnaryOperator_getType(const struct ZigClangUnaryOperator *);
989ZIG_EXTERN_C const struct ZigClangExpr *ZigClangUnaryOperator_getSubExpr(const struct ZigClangUnaryOperator *);
990ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangUnaryOperator_getBeginLoc(const struct ZigClangUnaryOperator *);
991
992ZIG_EXTERN_C const struct ZigClangExpr *ZigClangWhileStmt_getCond(const struct ZigClangWhileStmt *);
993ZIG_EXTERN_C const struct ZigClangStmt *ZigClangWhileStmt_getBody(const struct ZigClangWhileStmt *);
994
995ZIG_EXTERN_C const struct ZigClangStmt *ZigClangIfStmt_getThen(const struct ZigClangIfStmt *);
996ZIG_EXTERN_C const struct ZigClangStmt *ZigClangIfStmt_getElse(const struct ZigClangIfStmt *);
997ZIG_EXTERN_C const struct ZigClangExpr *ZigClangIfStmt_getCond(const struct ZigClangIfStmt *);
998
999ZIG_EXTERN_C const struct ZigClangExpr *ZigClangCallExpr_getCallee(const struct ZigClangCallExpr *);
1000ZIG_EXTERN_C unsigned ZigClangCallExpr_getNumArgs(const struct ZigClangCallExpr *);
1001ZIG_EXTERN_C const struct ZigClangExpr * const * ZigClangCallExpr_getArgs(const struct ZigClangCallExpr *);
1002
1003ZIG_EXTERN_C const struct ZigClangExpr *ZigClangMemberExpr_getBase(const struct ZigClangMemberExpr *);
1004ZIG_EXTERN_C bool ZigClangMemberExpr_isArrow(const struct ZigClangMemberExpr *);
1005ZIG_EXTERN_C const struct ZigClangValueDecl * ZigClangMemberExpr_getMemberDecl(const struct ZigClangMemberExpr *);
1006
1007ZIG_EXTERN_C const struct ZigClangExpr *ZigClangArraySubscriptExpr_getBase(const struct ZigClangArraySubscriptExpr *);
1008ZIG_EXTERN_C const struct ZigClangExpr *ZigClangArraySubscriptExpr_getIdx(const struct ZigClangArraySubscriptExpr *);
1009
1010ZIG_EXTERN_C struct ZigClangQualType ZigClangUnaryExprOrTypeTraitExpr_getTypeOfArgument(const struct ZigClangUnaryExprOrTypeTraitExpr *);
1011ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangUnaryExprOrTypeTraitExpr_getBeginLoc(const struct ZigClangUnaryExprOrTypeTraitExpr *);
1012
1013ZIG_EXTERN_C const struct ZigClangStmt *ZigClangDoStmt_getBody(const struct ZigClangDoStmt *);
1014ZIG_EXTERN_C const struct ZigClangExpr *ZigClangDoStmt_getCond(const struct ZigClangDoStmt *);
1015
1016ZIG_EXTERN_C const struct ZigClangStmt *ZigClangForStmt_getInit(const struct ZigClangForStmt *);
1017ZIG_EXTERN_C const struct ZigClangExpr *ZigClangForStmt_getCond(const struct ZigClangForStmt *);
1018ZIG_EXTERN_C const struct ZigClangExpr *ZigClangForStmt_getInc(const struct ZigClangForStmt *);
1019ZIG_EXTERN_C const struct ZigClangStmt *ZigClangForStmt_getBody(const struct ZigClangForStmt *);
1020
1021ZIG_EXTERN_C const struct ZigClangDeclStmt *ZigClangSwitchStmt_getConditionVariableDeclStmt(const struct ZigClangSwitchStmt *);
1022ZIG_EXTERN_C const struct ZigClangExpr *ZigClangSwitchStmt_getCond(const struct ZigClangSwitchStmt *);
1023ZIG_EXTERN_C const struct ZigClangStmt *ZigClangSwitchStmt_getBody(const struct ZigClangSwitchStmt *);
1024ZIG_EXTERN_C bool ZigClangSwitchStmt_isAllEnumCasesCovered(const struct ZigClangSwitchStmt *);
1025
1026ZIG_EXTERN_C const struct ZigClangExpr *ZigClangCaseStmt_getLHS(const struct ZigClangCaseStmt *);
1027ZIG_EXTERN_C const struct ZigClangExpr *ZigClangCaseStmt_getRHS(const struct ZigClangCaseStmt *);
1028ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangCaseStmt_getBeginLoc(const struct ZigClangCaseStmt *);
1029ZIG_EXTERN_C const struct ZigClangStmt *ZigClangCaseStmt_getSubStmt(const struct ZigClangCaseStmt *);
1030
1031ZIG_EXTERN_C const struct ZigClangStmt *ZigClangDefaultStmt_getSubStmt(const struct ZigClangDefaultStmt *);
1032
1033ZIG_EXTERN_C const struct ZigClangExpr *ZigClangParenExpr_getSubExpr(const struct ZigClangParenExpr *);
9331034#endif