aboutsummaryrefslogtreecommitdiff
path: root/src/translate_c.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/translate_c.cpp')
-rw-r--r--src/translate_c.cpp3219
1 files changed, 1628 insertions, 1591 deletions
diff --git a/src/translate_c.cpp b/src/translate_c.cpp
index 8abd66c0ff..c3c715cb47 100644
--- a/src/translate_c.cpp
+++ b/src/translate_c.cpp
@@ -76,10 +76,9 @@ struct TransScopeWhile {
};
struct Context {
- ZigList<ErrorMsg *> *errors;
+ AstNode *root;
VisibMod visib_mod;
bool want_export;
- AstNode *root;
HashMap<const void *, AstNode *, ptr_hash, ptr_eq> decl_table;
HashMap<Buf *, AstNode *, buf_hash, buf_eql_buf> macro_table;
HashMap<Buf *, AstNode *, buf_hash, buf_eql_buf> global_table;
@@ -112,19 +111,39 @@ static TransScopeSwitch *trans_scope_switch_create(Context *c, TransScope *paren
static TransScopeBlock *trans_scope_block_find(TransScope *scope);
-static AstNode *resolve_record_decl(Context *c, const clang::RecordDecl *record_decl);
-static AstNode *resolve_enum_decl(Context *c, const clang::EnumDecl *enum_decl);
-static AstNode *resolve_typedef_decl(Context *c, const clang::TypedefNameDecl *typedef_decl);
+static AstNode *resolve_record_decl(Context *c, const ZigClangRecordDecl *record_decl);
+static AstNode *resolve_enum_decl(Context *c, const ZigClangEnumDecl *enum_decl);
+static AstNode *resolve_typedef_decl(Context *c, const ZigClangTypedefNameDecl *typedef_decl);
-static int trans_stmt_extra(Context *c, TransScope *scope, const clang::Stmt *stmt,
+static int trans_stmt_extra(Context *c, TransScope *scope, const ZigClangStmt *stmt,
ResultUsed result_used, TransLRValue lrval,
AstNode **out_node, TransScope **out_child_scope,
TransScope **out_node_scope);
-static TransScope *trans_stmt(Context *c, TransScope *scope, const clang::Stmt *stmt, AstNode **out_node);
-static AstNode *trans_expr(Context *c, ResultUsed result_used, TransScope *scope, const clang::Expr *expr, TransLRValue lrval);
-static AstNode *trans_qual_type(Context *c, clang::QualType qt, const clang::SourceLocation &source_loc);
-static AstNode *trans_bool_expr(Context *c, ResultUsed result_used, TransScope *scope, const clang::Expr *expr, TransLRValue lrval);
-static AstNode *trans_ap_value(Context *c, clang::APValue *ap_value, clang::QualType qt, const clang::SourceLocation &source_loc);
+static TransScope *trans_stmt(Context *c, TransScope *scope, const ZigClangStmt *stmt, AstNode **out_node);
+static AstNode *trans_expr(Context *c, ResultUsed result_used, TransScope *scope, const ZigClangExpr *expr, TransLRValue lrval);
+static AstNode *trans_type(Context *c, const ZigClangType *ty, ZigClangSourceLocation source_loc);
+static AstNode *trans_qual_type(Context *c, ZigClangQualType qt, ZigClangSourceLocation source_loc);
+static AstNode *trans_bool_expr(Context *c, ResultUsed result_used, TransScope *scope,
+ const ZigClangExpr *expr, TransLRValue lrval);
+static AstNode *trans_ap_value(Context *c, const ZigClangAPValue *ap_value, ZigClangQualType qt,
+ ZigClangSourceLocation source_loc);
+static bool c_is_unsigned_integer(Context *c, ZigClangQualType qt);
+
+static const ZigClangAPSInt *bitcast(const llvm::APSInt *src) {
+ return reinterpret_cast<const ZigClangAPSInt *>(src);
+}
+
+static const ZigClangAPValue *bitcast(const clang::APValue *src) {
+ return reinterpret_cast<const ZigClangAPValue *>(src);
+}
+
+static const ZigClangStmt *bitcast(const clang::Stmt *src) {
+ return reinterpret_cast<const ZigClangStmt *>(src);
+}
+
+static const ZigClangExpr *bitcast(const clang::Expr *src) {
+ return reinterpret_cast<const ZigClangExpr *>(src);
+}
static ZigClangSourceLocation bitcast(clang::SourceLocation src) {
ZigClangSourceLocation dest;
@@ -136,14 +155,14 @@ static ZigClangQualType bitcast(clang::QualType src) {
memcpy(&dest, static_cast<void *>(&src), sizeof(ZigClangQualType));
return dest;
}
-static clang::QualType bitcast(ZigClangQualType src) {
- clang::QualType dest;
- memcpy(&dest, static_cast<void *>(&src), sizeof(ZigClangQualType));
- return dest;
-}
+//static clang::QualType bitcast(ZigClangQualType src) {
+// clang::QualType dest;
+// memcpy(&dest, static_cast<void *>(&src), sizeof(ZigClangQualType));
+// return dest;
+//}
ATTRIBUTE_PRINTF(3, 4)
-static void emit_warning(Context *c, const clang::SourceLocation &clang_sl, const char *format, ...) {
+static void emit_warning(Context *c, ZigClangSourceLocation sl, const char *format, ...) {
if (!c->warnings_on) {
return;
}
@@ -153,7 +172,6 @@ static void emit_warning(Context *c, const clang::SourceLocation &clang_sl, cons
Buf *msg = buf_vprintf(format, ap);
va_end(ap);
- ZigClangSourceLocation sl = bitcast(clang_sl);
const char *filename_bytes = ZigClangSourceManager_getFilename(c->source_manager,
ZigClangSourceManager_getSpellingLoc(c->source_manager, sl));
Buf *path;
@@ -489,107 +507,99 @@ static Buf *string_ref_to_buf(llvm::StringRef string_ref) {
return buf_create_from_mem((const char *)string_ref.bytes_begin(), string_ref.size());
}
-static const char *decl_name(const clang::Decl *decl) {
- const clang::NamedDecl *named_decl = static_cast<const clang::NamedDecl *>(decl);
- return (const char *)named_decl->getName().bytes_begin();
-}
-
-static AstNode *trans_create_node_apint(Context *c, const llvm::APSInt &aps_int) {
+static AstNode *trans_create_node_apint(Context *c, const ZigClangAPSInt *aps_int) {
AstNode *node = trans_create_node(c, NodeTypeIntLiteral);
node->data.int_literal.bigint = allocate<BigInt>(1);
- bool is_negative = aps_int.isSigned() && aps_int.isNegative();
+ bool is_negative = ZigClangAPSInt_isSigned(aps_int) && ZigClangAPSInt_isNegative(aps_int);
if (!is_negative) {
- bigint_init_data(node->data.int_literal.bigint, aps_int.getRawData(), aps_int.getNumWords(), false);
+ bigint_init_data(node->data.int_literal.bigint,
+ ZigClangAPSInt_getRawData(aps_int),
+ ZigClangAPSInt_getNumWords(aps_int),
+ false);
return node;
}
- llvm::APSInt negated = -aps_int;
- bigint_init_data(node->data.int_literal.bigint, negated.getRawData(), negated.getNumWords(), true);
+ const ZigClangAPSInt *negated = ZigClangAPSInt_negate(aps_int);
+ bigint_init_data(node->data.int_literal.bigint, ZigClangAPSInt_getRawData(negated),
+ ZigClangAPSInt_getNumWords(negated), true);
+ ZigClangAPSInt_free(negated);
return node;
+}
+static AstNode *trans_create_node_apfloat(Context *c, const llvm::APFloat &ap_float) {
+ uint8_t buf[128];
+ size_t written = ap_float.convertToHexString((char *)buf, 0, false,
+ llvm::APFloat::rmNearestTiesToEven);
+ AstNode *node = trans_create_node(c, NodeTypeFloatLiteral);
+ node->data.float_literal.bigfloat = allocate<BigFloat>(1);
+ if (bigfloat_init_buf(node->data.float_literal.bigfloat, buf, written)) {
+ node->data.float_literal.overflow = true;
+ }
+ return node;
}
-static const clang::Type *qual_type_canon(clang::QualType qt) {
- return qt.getCanonicalType().getTypePtr();
+static const ZigClangType *qual_type_canon(ZigClangQualType qt) {
+ ZigClangQualType canon = ZigClangQualType_getCanonicalType(qt);
+ return ZigClangQualType_getTypePtr(canon);
}
-static clang::QualType get_expr_qual_type(Context *c, const clang::Expr *expr) {
+static ZigClangQualType get_expr_qual_type(Context *c, const ZigClangExpr *expr) {
// String literals in C are `char *` but they should really be `const char *`.
- if (expr->getStmtClass() == clang::Stmt::ImplicitCastExprClass) {
- const clang::ImplicitCastExpr *cast_expr = static_cast<const clang::ImplicitCastExpr *>(expr);
- if (cast_expr->getCastKind() == clang::CK_ArrayToPointerDecay) {
- const clang::Expr *sub_expr = cast_expr->getSubExpr();
- if (sub_expr->getStmtClass() == clang::Stmt::StringLiteralClass) {
- clang::QualType array_qt = sub_expr->getType();
- const clang::ArrayType *array_type = static_cast<const clang::ArrayType *>(array_qt.getTypePtr());
- clang::QualType pointee_qt = array_type->getElementType();
- pointee_qt.addConst();
- return bitcast(ZigClangASTContext_getPointerType(c->ctx, bitcast(pointee_qt)));
+ if (ZigClangExpr_getStmtClass(expr) == ZigClangStmt_ImplicitCastExprClass) {
+ const clang::ImplicitCastExpr *cast_expr = reinterpret_cast<const clang::ImplicitCastExpr *>(expr);
+ if ((ZigClangCK)cast_expr->getCastKind() == ZigClangCK_ArrayToPointerDecay) {
+ const ZigClangExpr *sub_expr = bitcast(cast_expr->getSubExpr());
+ if (ZigClangExpr_getStmtClass(sub_expr) == ZigClangStmt_StringLiteralClass) {
+ ZigClangQualType array_qt = ZigClangExpr_getType(sub_expr);
+ const clang::ArrayType *array_type = reinterpret_cast<const clang::ArrayType *>(
+ ZigClangQualType_getTypePtr(array_qt));
+ ZigClangQualType pointee_qt = bitcast(array_type->getElementType());
+ ZigClangQualType_addConst(&pointee_qt);
+ return ZigClangASTContext_getPointerType(c->ctx, pointee_qt);
}
}
}
- return expr->getType();
+ return ZigClangExpr_getType(expr);
}
-static clang::QualType get_expr_qual_type_before_implicit_cast(Context *c, const clang::Expr *expr) {
- if (expr->getStmtClass() == clang::Stmt::ImplicitCastExprClass) {
- const clang::ImplicitCastExpr *cast_expr = static_cast<const clang::ImplicitCastExpr *>(expr);
- return get_expr_qual_type(c, cast_expr->getSubExpr());
+static ZigClangQualType get_expr_qual_type_before_implicit_cast(Context *c, const ZigClangExpr *expr) {
+ if (ZigClangExpr_getStmtClass(expr) == ZigClangStmt_ImplicitCastExprClass) {
+ const clang::ImplicitCastExpr *cast_expr = reinterpret_cast<const clang::ImplicitCastExpr *>(expr);
+ return get_expr_qual_type(c, bitcast(cast_expr->getSubExpr()));
}
- return expr->getType();
+ return ZigClangExpr_getType(expr);
}
-static AstNode *get_expr_type(Context *c, const clang::Expr *expr) {
- return trans_qual_type(c, get_expr_qual_type(c, expr), expr->getBeginLoc());
-}
-
-static bool qual_types_equal(clang::QualType t1, clang::QualType t2) {
- if (t1.isConstQualified() != t2.isConstQualified()) {
- return false;
- }
- if (t1.isVolatileQualified() != t2.isVolatileQualified()) {
- return false;
- }
- if (t1.isRestrictQualified() != t2.isRestrictQualified()) {
- return false;
- }
- return t1.getTypePtr() == t2.getTypePtr();
+static AstNode *get_expr_type(Context *c, const ZigClangExpr *expr) {
+ return trans_qual_type(c, get_expr_qual_type(c, expr), ZigClangExpr_getBeginLoc(expr));
}
static bool is_c_void_type(AstNode *node) {
return (node->type == NodeTypeSymbol && buf_eql_str(node->data.symbol_expr.symbol, "c_void"));
}
-static bool expr_types_equal(Context *c, const clang::Expr *expr1, const clang::Expr *expr2) {
- clang::QualType t1 = get_expr_qual_type(c, expr1);
- clang::QualType t2 = get_expr_qual_type(c, expr2);
-
- return qual_types_equal(t1, t2);
+static bool qual_type_is_ptr(ZigClangQualType qt) {
+ const ZigClangType *ty = qual_type_canon(qt);
+ return ZigClangType_getTypeClass(ty) == ZigClangType_Pointer;
}
-static bool qual_type_is_ptr(clang::QualType qt) {
- const clang::Type *ty = qual_type_canon(qt);
- return ty->getTypeClass() == clang::Type::Pointer;
-}
-
-static const clang::FunctionProtoType *qual_type_get_fn_proto(clang::QualType qt, bool *is_ptr) {
- const clang::Type *ty = qual_type_canon(qt);
+static const clang::FunctionProtoType *qual_type_get_fn_proto(ZigClangQualType qt, bool *is_ptr) {
+ const ZigClangType *ty = qual_type_canon(qt);
*is_ptr = false;
- if (ty->getTypeClass() == clang::Type::Pointer) {
+ if (ZigClangType_getTypeClass(ty) == ZigClangType_Pointer) {
*is_ptr = true;
- const clang::PointerType *pointer_ty = static_cast<const clang::PointerType*>(ty);
- clang::QualType child_qt = pointer_ty->getPointeeType();
- ty = child_qt.getTypePtr();
+ ZigClangQualType child_qt = ZigClangType_getPointeeType(ty);
+ ty = ZigClangQualType_getTypePtr(child_qt);
}
- if (ty->getTypeClass() == clang::Type::FunctionProto) {
- return static_cast<const clang::FunctionProtoType*>(ty);
+ if (ZigClangType_getTypeClass(ty) == ZigClangType_FunctionProto) {
+ return reinterpret_cast<const clang::FunctionProtoType*>(ty);
}
return nullptr;
}
-static bool qual_type_is_fn_ptr(clang::QualType qt) {
+static bool qual_type_is_fn_ptr(ZigClangQualType qt) {
bool is_ptr;
if (qual_type_get_fn_proto(qt, &is_ptr)) {
return is_ptr;
@@ -598,31 +608,31 @@ static bool qual_type_is_fn_ptr(clang::QualType qt) {
return false;
}
-static uint32_t qual_type_int_bit_width(Context *c, const clang::QualType &qt, const clang::SourceLocation &source_loc) {
- const clang::Type *ty = qt.getTypePtr();
- switch (ty->getTypeClass()) {
- case clang::Type::Builtin:
+static uint32_t qual_type_int_bit_width(Context *c, const ZigClangQualType qt, ZigClangSourceLocation source_loc) {
+ const ZigClangType *ty = ZigClangQualType_getTypePtr(qt);
+ switch (ZigClangType_getTypeClass(ty)) {
+ case ZigClangType_Builtin:
{
- const clang::BuiltinType *builtin_ty = static_cast<const clang::BuiltinType*>(ty);
- switch (builtin_ty->getKind()) {
- case clang::BuiltinType::Char_U:
- case clang::BuiltinType::UChar:
- case clang::BuiltinType::Char_S:
- case clang::BuiltinType::SChar:
+ const ZigClangBuiltinType *builtin_ty = reinterpret_cast<const ZigClangBuiltinType*>(ty);
+ switch (ZigClangBuiltinType_getKind(builtin_ty)) {
+ case ZigClangBuiltinTypeChar_U:
+ case ZigClangBuiltinTypeUChar:
+ case ZigClangBuiltinTypeChar_S:
+ case ZigClangBuiltinTypeSChar:
return 8;
- case clang::BuiltinType::UInt128:
- case clang::BuiltinType::Int128:
+ case ZigClangBuiltinTypeUInt128:
+ case ZigClangBuiltinTypeInt128:
return 128;
default:
return 0;
}
zig_unreachable();
}
- case clang::Type::Typedef:
+ case ZigClangType_Typedef:
{
- const clang::TypedefType *typedef_ty = static_cast<const clang::TypedefType*>(ty);
- const clang::TypedefNameDecl *typedef_decl = typedef_ty->getDecl();
- const char *type_name = decl_name(typedef_decl);
+ const ZigClangTypedefType *typedef_ty = reinterpret_cast<const ZigClangTypedefType*>(ty);
+ const ZigClangTypedefNameDecl *typedef_decl = ZigClangTypedefType_getDecl(typedef_ty);
+ const char *type_name = ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)typedef_decl);
if (strcmp(type_name, "uint8_t") == 0 || strcmp(type_name, "int8_t") == 0) {
return 8;
} else if (strcmp(type_name, "uint16_t") == 0 || strcmp(type_name, "int16_t") == 0) {
@@ -642,8 +652,8 @@ static uint32_t qual_type_int_bit_width(Context *c, const clang::QualType &qt, c
}
-static AstNode *qual_type_to_log2_int_ref(Context *c, const clang::QualType &qt,
- const clang::SourceLocation &source_loc)
+static AstNode *qual_type_to_log2_int_ref(Context *c, const ZigClangQualType qt,
+ ZigClangSourceLocation source_loc)
{
uint32_t int_bit_width = qual_type_int_bit_width(c, qt, source_loc);
if (int_bit_width != 0) {
@@ -675,37 +685,76 @@ static AstNode *qual_type_to_log2_int_ref(Context *c, const clang::QualType &qt,
return log2int_fn_call;
}
-static bool qual_type_child_is_fn_proto(const clang::QualType &qt) {
- if (qt.getTypePtr()->getTypeClass() == clang::Type::Paren) {
- const clang::ParenType *paren_type = static_cast<const clang::ParenType *>(qt.getTypePtr());
+static bool qual_type_child_is_fn_proto(ZigClangQualType qt) {
+ const ZigClangType *ty = ZigClangQualType_getTypePtr(qt);
+ if (ZigClangType_getTypeClass(ty) == ZigClangType_Paren) {
+ const clang::ParenType *paren_type = reinterpret_cast<const clang::ParenType *>(ty);
if (paren_type->getInnerType()->getTypeClass() == clang::Type::FunctionProto) {
return true;
}
- } else if (qt.getTypePtr()->getTypeClass() == clang::Type::Attributed) {
- const clang::AttributedType *attr_type = static_cast<const clang::AttributedType *>(qt.getTypePtr());
- return qual_type_child_is_fn_proto(attr_type->getEquivalentType());
+ } else if (ZigClangType_getTypeClass(ty) == ZigClangType_Attributed) {
+ const clang::AttributedType *attr_type = reinterpret_cast<const clang::AttributedType *>(ty);
+ return qual_type_child_is_fn_proto(bitcast(attr_type->getEquivalentType()));
}
return false;
}
-static AstNode* trans_c_cast(Context *c, const clang::SourceLocation &source_location, clang::QualType dest_type,
- clang::QualType src_type, AstNode *expr)
+static AstNode* trans_c_ptr_cast(Context *c, ZigClangSourceLocation source_location, ZigClangQualType dest_type,
+ ZigClangQualType src_type, AstNode *expr)
+{
+ const ZigClangType *ty = ZigClangQualType_getTypePtr(dest_type);
+ const ZigClangQualType child_type = ZigClangType_getPointeeType(ty);
+
+ AstNode *dest_type_node = trans_type(c, ty, source_location);
+ AstNode *child_type_node = trans_qual_type(c, child_type, source_location);
+
+ // Implicit downcasting from higher to lower alignment values is forbidden,
+ // use @alignCast to side-step this problem
+ AstNode *ptrcast_node = trans_create_node_builtin_fn_call_str(c, "ptrCast");
+ ptrcast_node->data.fn_call_expr.params.append(dest_type_node);
+
+ if (ZigClangType_isVoidType(qual_type_canon(child_type))) {
+ // void has 1-byte alignment
+ ptrcast_node->data.fn_call_expr.params.append(expr);
+ } else {
+ AstNode *alignof_node = trans_create_node_builtin_fn_call_str(c, "alignOf");
+ alignof_node->data.fn_call_expr.params.append(child_type_node);
+ AstNode *aligncast_node = trans_create_node_builtin_fn_call_str(c, "alignCast");
+ aligncast_node->data.fn_call_expr.params.append(alignof_node);
+ aligncast_node->data.fn_call_expr.params.append(expr);
+
+ ptrcast_node->data.fn_call_expr.params.append(aligncast_node);
+ }
+
+ return ptrcast_node;
+}
+
+static AstNode* trans_c_cast(Context *c, ZigClangSourceLocation source_location, ZigClangQualType dest_type,
+ ZigClangQualType src_type, AstNode *expr)
{
// The only way void pointer casts are valid C code, is if
// the value of the expression is ignored. We therefore just
// return the expr, and let the system that ignores values
// translate this correctly.
- if (qual_type_canon(dest_type)->isVoidType()) {
+ if (ZigClangType_isVoidType(qual_type_canon(dest_type))) {
return expr;
}
- if (qual_types_equal(dest_type, src_type)) {
+ if (ZigClangQualType_eq(dest_type, src_type)) {
return expr;
}
if (qual_type_is_ptr(dest_type) && qual_type_is_ptr(src_type)) {
- AstNode *ptr_cast_node = trans_create_node_builtin_fn_call_str(c, "ptrCast");
- ptr_cast_node->data.fn_call_expr.params.append(trans_qual_type(c, dest_type, source_location));
- ptr_cast_node->data.fn_call_expr.params.append(expr);
- return ptr_cast_node;
+ return trans_c_ptr_cast(c, source_location, dest_type, src_type, expr);
+ }
+ if (c_is_unsigned_integer(c, dest_type) && qual_type_is_ptr(src_type)) {
+ AstNode *addr_node = trans_create_node_builtin_fn_call_str(c, "ptrToInt");
+ addr_node->data.fn_call_expr.params.append(expr);
+ return trans_create_node_fn_call_1(c, trans_qual_type(c, dest_type, source_location), addr_node);
+ }
+ if (c_is_unsigned_integer(c, src_type) && qual_type_is_ptr(dest_type)) {
+ AstNode *ptr_node = trans_create_node_builtin_fn_call_str(c, "intToPtr");
+ ptr_node->data.fn_call_expr.params.append(trans_qual_type(c, dest_type, source_location));
+ ptr_node->data.fn_call_expr.params.append(expr);
+ return ptr_node;
}
// TODO: maybe widen to increase size
// TODO: maybe bitcast to change sign
@@ -713,72 +762,72 @@ static AstNode* trans_c_cast(Context *c, const clang::SourceLocation &source_loc
return trans_create_node_fn_call_1(c, trans_qual_type(c, dest_type, source_location), expr);
}
-static bool c_is_signed_integer(Context *c, clang::QualType qt) {
- const clang::Type *c_type = qual_type_canon(qt);
- if (c_type->getTypeClass() != clang::Type::Builtin)
+static bool c_is_signed_integer(Context *c, ZigClangQualType qt) {
+ const ZigClangType *c_type = qual_type_canon(qt);
+ if (ZigClangType_getTypeClass(c_type) != ZigClangType_Builtin)
return false;
- const clang::BuiltinType *builtin_ty = static_cast<const clang::BuiltinType*>(c_type);
- switch (builtin_ty->getKind()) {
- case clang::BuiltinType::SChar:
- case clang::BuiltinType::Short:
- case clang::BuiltinType::Int:
- case clang::BuiltinType::Long:
- case clang::BuiltinType::LongLong:
- case clang::BuiltinType::Int128:
- case clang::BuiltinType::WChar_S:
+ const ZigClangBuiltinType *builtin_ty = reinterpret_cast<const ZigClangBuiltinType*>(c_type);
+ switch (ZigClangBuiltinType_getKind(builtin_ty)) {
+ case ZigClangBuiltinTypeSChar:
+ case ZigClangBuiltinTypeShort:
+ case ZigClangBuiltinTypeInt:
+ case ZigClangBuiltinTypeLong:
+ case ZigClangBuiltinTypeLongLong:
+ case ZigClangBuiltinTypeInt128:
+ case ZigClangBuiltinTypeWChar_S:
return true;
default:
return false;
}
}
-static bool c_is_unsigned_integer(Context *c, clang::QualType qt) {
- const clang::Type *c_type = qual_type_canon(qt);
- if (c_type->getTypeClass() != clang::Type::Builtin)
+static bool c_is_unsigned_integer(Context *c, ZigClangQualType qt) {
+ const ZigClangType *c_type = qual_type_canon(qt);
+ if (ZigClangType_getTypeClass(c_type) != ZigClangType_Builtin)
return false;
- const clang::BuiltinType *builtin_ty = static_cast<const clang::BuiltinType*>(c_type);
- switch (builtin_ty->getKind()) {
- case clang::BuiltinType::Char_U:
- case clang::BuiltinType::UChar:
- case clang::BuiltinType::Char_S:
- case clang::BuiltinType::UShort:
- case clang::BuiltinType::UInt:
- case clang::BuiltinType::ULong:
- case clang::BuiltinType::ULongLong:
- case clang::BuiltinType::UInt128:
- case clang::BuiltinType::WChar_U:
+ const ZigClangBuiltinType *builtin_ty = reinterpret_cast<const ZigClangBuiltinType*>(c_type);
+ switch (ZigClangBuiltinType_getKind(builtin_ty)) {
+ case ZigClangBuiltinTypeChar_U:
+ case ZigClangBuiltinTypeUChar:
+ case ZigClangBuiltinTypeChar_S:
+ case ZigClangBuiltinTypeUShort:
+ case ZigClangBuiltinTypeUInt:
+ case ZigClangBuiltinTypeULong:
+ case ZigClangBuiltinTypeULongLong:
+ case ZigClangBuiltinTypeUInt128:
+ case ZigClangBuiltinTypeWChar_U:
return true;
default:
return false;
}
}
-static bool c_is_builtin_type(Context *c, clang::QualType qt, clang::BuiltinType::Kind kind) {
- const clang::Type *c_type = qual_type_canon(qt);
- if (c_type->getTypeClass() != clang::Type::Builtin)
+static bool c_is_builtin_type(Context *c, ZigClangQualType qt, ZigClangBuiltinTypeKind kind) {
+ const ZigClangType *c_type = qual_type_canon(qt);
+ if (ZigClangType_getTypeClass(c_type) != ZigClangType_Builtin)
return false;
- const clang::BuiltinType *builtin_ty = static_cast<const clang::BuiltinType*>(c_type);
- return builtin_ty->getKind() == kind;
+ const ZigClangBuiltinType *builtin_ty = reinterpret_cast<const ZigClangBuiltinType*>(c_type);
+ return ZigClangBuiltinType_getKind(builtin_ty) == kind;
}
-static bool c_is_float(Context *c, clang::QualType qt) {
- const clang::Type *c_type = qt.getTypePtr();
- if (c_type->getTypeClass() != clang::Type::Builtin)
+static bool c_is_float(Context *c, ZigClangQualType qt) {
+ const ZigClangType *c_type = ZigClangQualType_getTypePtr(qt);
+ if (ZigClangType_getTypeClass(c_type) != ZigClangType_Builtin)
return false;
- const clang::BuiltinType *builtin_ty = static_cast<const clang::BuiltinType*>(c_type);
- switch (builtin_ty->getKind()) {
- case clang::BuiltinType::Half:
- case clang::BuiltinType::Float:
- case clang::BuiltinType::Double:
- case clang::BuiltinType::Float128:
- case clang::BuiltinType::LongDouble:
+ const ZigClangBuiltinType *builtin_ty = reinterpret_cast<const ZigClangBuiltinType*>(c_type);
+ switch (ZigClangBuiltinType_getKind(builtin_ty)) {
+ case ZigClangBuiltinTypeHalf:
+ case ZigClangBuiltinTypeFloat:
+ case ZigClangBuiltinTypeDouble:
+ case ZigClangBuiltinTypeFloat128:
+ case ZigClangBuiltinTypeLongDouble:
return true;
default:
return false;
}
}
-static bool qual_type_has_wrapping_overflow(Context *c, clang::QualType qt) {
+static bool qual_type_has_wrapping_overflow(Context *c, ZigClangQualType qt) {
if (c_is_signed_integer(c, qt) || c_is_float(c, qt)) {
// float and signed integer overflow is undefined behavior.
return false;
@@ -788,181 +837,182 @@ static bool qual_type_has_wrapping_overflow(Context *c, clang::QualType qt) {
}
}
-static bool type_is_opaque(Context *c, const clang::Type *ty, const clang::SourceLocation &source_loc) {
- switch (ty->getTypeClass()) {
- case clang::Type::Builtin: {
- const clang::BuiltinType *builtin_ty = static_cast<const clang::BuiltinType*>(ty);
- return builtin_ty->getKind() == clang::BuiltinType::Void;
+static bool type_is_opaque(Context *c, const ZigClangType *ty, ZigClangSourceLocation source_loc) {
+ switch (ZigClangType_getTypeClass(ty)) {
+ case ZigClangType_Builtin: {
+ const ZigClangBuiltinType *builtin_ty = reinterpret_cast<const ZigClangBuiltinType*>(ty);
+ return ZigClangBuiltinType_getKind(builtin_ty) == ZigClangBuiltinTypeVoid;
}
- case clang::Type::Record: {
- const clang::RecordType *record_ty = static_cast<const clang::RecordType*>(ty);
+ case ZigClangType_Record: {
+ const clang::RecordType *record_ty = reinterpret_cast<const clang::RecordType*>(ty);
return record_ty->getDecl()->getDefinition() == nullptr;
}
- case clang::Type::Elaborated: {
- const clang::ElaboratedType *elaborated_ty = static_cast<const clang::ElaboratedType*>(ty);
- return type_is_opaque(c, elaborated_ty->getNamedType().getTypePtr(), source_loc);
+ case ZigClangType_Elaborated: {
+ const clang::ElaboratedType *elaborated_ty = reinterpret_cast<const clang::ElaboratedType*>(ty);
+ ZigClangQualType qt = bitcast(elaborated_ty->getNamedType());
+ return type_is_opaque(c, ZigClangQualType_getTypePtr(qt), source_loc);
}
- case clang::Type::Typedef: {
- const clang::TypedefType *typedef_ty = static_cast<const clang::TypedefType*>(ty);
- const clang::TypedefNameDecl *typedef_decl = typedef_ty->getDecl();
- return type_is_opaque(c, typedef_decl->getUnderlyingType().getTypePtr(), source_loc);
+ case ZigClangType_Typedef: {
+ const ZigClangTypedefType *typedef_ty = reinterpret_cast<const ZigClangTypedefType*>(ty);
+ const ZigClangTypedefNameDecl *typedef_decl = ZigClangTypedefType_getDecl(typedef_ty);
+ ZigClangQualType underlying_type = ZigClangTypedefNameDecl_getUnderlyingType(typedef_decl);
+ return type_is_opaque(c, ZigClangQualType_getTypePtr(underlying_type), source_loc);
}
default:
return false;
}
}
-static AstNode *trans_type(Context *c, const clang::Type *ty, const clang::SourceLocation &source_loc) {
- switch (ty->getTypeClass()) {
- case clang::Type::Builtin:
+static AstNode *trans_type(Context *c, const ZigClangType *ty, ZigClangSourceLocation source_loc) {
+ switch (ZigClangType_getTypeClass(ty)) {
+ case ZigClangType_Builtin:
{
- const clang::BuiltinType *builtin_ty = static_cast<const clang::BuiltinType*>(ty);
- switch (builtin_ty->getKind()) {
- case clang::BuiltinType::Void:
+ const ZigClangBuiltinType *builtin_ty = reinterpret_cast<const ZigClangBuiltinType *>(ty);
+ switch (ZigClangBuiltinType_getKind(builtin_ty)) {
+ case ZigClangBuiltinTypeVoid:
return trans_create_node_symbol_str(c, "c_void");
- case clang::BuiltinType::Bool:
+ case ZigClangBuiltinTypeBool:
return trans_create_node_symbol_str(c, "bool");
- case clang::BuiltinType::Char_U:
- case clang::BuiltinType::UChar:
- case clang::BuiltinType::Char_S:
- case clang::BuiltinType::Char8:
+ case ZigClangBuiltinTypeChar_U:
+ case ZigClangBuiltinTypeUChar:
+ case ZigClangBuiltinTypeChar_S:
+ case ZigClangBuiltinTypeChar8:
return trans_create_node_symbol_str(c, "u8");
- case clang::BuiltinType::SChar:
+ case ZigClangBuiltinTypeSChar:
return trans_create_node_symbol_str(c, "i8");
- case clang::BuiltinType::UShort:
+ case ZigClangBuiltinTypeUShort:
return trans_create_node_symbol_str(c, "c_ushort");
- case clang::BuiltinType::UInt:
+ case ZigClangBuiltinTypeUInt:
return trans_create_node_symbol_str(c, "c_uint");
- case clang::BuiltinType::ULong:
+ case ZigClangBuiltinTypeULong:
return trans_create_node_symbol_str(c, "c_ulong");
- case clang::BuiltinType::ULongLong:
+ case ZigClangBuiltinTypeULongLong:
return trans_create_node_symbol_str(c, "c_ulonglong");
- case clang::BuiltinType::Short:
+ case ZigClangBuiltinTypeShort:
return trans_create_node_symbol_str(c, "c_short");
- case clang::BuiltinType::Int:
+ case ZigClangBuiltinTypeInt:
return trans_create_node_symbol_str(c, "c_int");
- case clang::BuiltinType::Long:
+ case ZigClangBuiltinTypeLong:
return trans_create_node_symbol_str(c, "c_long");
- case clang::BuiltinType::LongLong:
+ case ZigClangBuiltinTypeLongLong:
return trans_create_node_symbol_str(c, "c_longlong");
- case clang::BuiltinType::UInt128:
+ case ZigClangBuiltinTypeUInt128:
return trans_create_node_symbol_str(c, "u128");
- case clang::BuiltinType::Int128:
+ case ZigClangBuiltinTypeInt128:
return trans_create_node_symbol_str(c, "i128");
- case clang::BuiltinType::Float:
+ case ZigClangBuiltinTypeFloat:
return trans_create_node_symbol_str(c, "f32");
- case clang::BuiltinType::Double:
+ case ZigClangBuiltinTypeDouble:
return trans_create_node_symbol_str(c, "f64");
- case clang::BuiltinType::Float128:
+ case ZigClangBuiltinTypeFloat128:
return trans_create_node_symbol_str(c, "f128");
- case clang::BuiltinType::Float16:
+ case ZigClangBuiltinTypeFloat16:
return trans_create_node_symbol_str(c, "f16");
- case clang::BuiltinType::LongDouble:
+ case ZigClangBuiltinTypeLongDouble:
return trans_create_node_symbol_str(c, "c_longdouble");
- case clang::BuiltinType::WChar_U:
- case clang::BuiltinType::Char16:
- case clang::BuiltinType::Char32:
- case clang::BuiltinType::WChar_S:
- case clang::BuiltinType::Half:
- case clang::BuiltinType::NullPtr:
- case clang::BuiltinType::ObjCId:
- case clang::BuiltinType::ObjCClass:
- case clang::BuiltinType::ObjCSel:
- case clang::BuiltinType::OMPArraySection:
- case clang::BuiltinType::Dependent:
- case clang::BuiltinType::Overload:
- case clang::BuiltinType::BoundMember:
- case clang::BuiltinType::PseudoObject:
- case clang::BuiltinType::UnknownAny:
- case clang::BuiltinType::BuiltinFn:
- case clang::BuiltinType::ARCUnbridgedCast:
- case clang::BuiltinType::ShortAccum:
- case clang::BuiltinType::Accum:
- case clang::BuiltinType::LongAccum:
- case clang::BuiltinType::UShortAccum:
- case clang::BuiltinType::UAccum:
- case clang::BuiltinType::ULongAccum:
-
- case clang::BuiltinType::OCLImage1dRO:
- case clang::BuiltinType::OCLImage1dArrayRO:
- case clang::BuiltinType::OCLImage1dBufferRO:
- case clang::BuiltinType::OCLImage2dRO:
- case clang::BuiltinType::OCLImage2dArrayRO:
- case clang::BuiltinType::OCLImage2dDepthRO:
- case clang::BuiltinType::OCLImage2dArrayDepthRO:
- case clang::BuiltinType::OCLImage2dMSAARO:
- case clang::BuiltinType::OCLImage2dArrayMSAARO:
- case clang::BuiltinType::OCLImage2dMSAADepthRO:
- case clang::BuiltinType::OCLImage2dArrayMSAADepthRO:
- case clang::BuiltinType::OCLImage3dRO:
- case clang::BuiltinType::OCLImage1dWO:
- case clang::BuiltinType::OCLImage1dArrayWO:
- case clang::BuiltinType::OCLImage1dBufferWO:
- case clang::BuiltinType::OCLImage2dWO:
- case clang::BuiltinType::OCLImage2dArrayWO:
- case clang::BuiltinType::OCLImage2dDepthWO:
- case clang::BuiltinType::OCLImage2dArrayDepthWO:
- case clang::BuiltinType::OCLImage2dMSAAWO:
- case clang::BuiltinType::OCLImage2dArrayMSAAWO:
- case clang::BuiltinType::OCLImage2dMSAADepthWO:
- case clang::BuiltinType::OCLImage2dArrayMSAADepthWO:
- case clang::BuiltinType::OCLImage3dWO:
- case clang::BuiltinType::OCLImage1dRW:
- case clang::BuiltinType::OCLImage1dArrayRW:
- case clang::BuiltinType::OCLImage1dBufferRW:
- case clang::BuiltinType::OCLImage2dRW:
- case clang::BuiltinType::OCLImage2dArrayRW:
- case clang::BuiltinType::OCLImage2dDepthRW:
- case clang::BuiltinType::OCLImage2dArrayDepthRW:
- case clang::BuiltinType::OCLImage2dMSAARW:
- case clang::BuiltinType::OCLImage2dArrayMSAARW:
- case clang::BuiltinType::OCLImage2dMSAADepthRW:
- case clang::BuiltinType::OCLImage2dArrayMSAADepthRW:
- case clang::BuiltinType::OCLImage3dRW:
- case clang::BuiltinType::OCLSampler:
- case clang::BuiltinType::OCLEvent:
- case clang::BuiltinType::OCLClkEvent:
- case clang::BuiltinType::OCLQueue:
- case clang::BuiltinType::OCLReserveID:
- case clang::BuiltinType::ShortFract:
- case clang::BuiltinType::Fract:
- case clang::BuiltinType::LongFract:
- case clang::BuiltinType::UShortFract:
- case clang::BuiltinType::UFract:
- case clang::BuiltinType::ULongFract:
- case clang::BuiltinType::SatShortAccum:
- case clang::BuiltinType::SatAccum:
- case clang::BuiltinType::SatLongAccum:
- case clang::BuiltinType::SatUShortAccum:
- case clang::BuiltinType::SatUAccum:
- case clang::BuiltinType::SatULongAccum:
- case clang::BuiltinType::SatShortFract:
- case clang::BuiltinType::SatFract:
- case clang::BuiltinType::SatLongFract:
- case clang::BuiltinType::SatUShortFract:
- case clang::BuiltinType::SatUFract:
- case clang::BuiltinType::SatULongFract:
- case clang::BuiltinType::OCLIntelSubgroupAVCMcePayload:
- case clang::BuiltinType::OCLIntelSubgroupAVCImePayload:
- case clang::BuiltinType::OCLIntelSubgroupAVCRefPayload:
- case clang::BuiltinType::OCLIntelSubgroupAVCSicPayload:
- case clang::BuiltinType::OCLIntelSubgroupAVCMceResult:
- case clang::BuiltinType::OCLIntelSubgroupAVCImeResult:
- case clang::BuiltinType::OCLIntelSubgroupAVCRefResult:
- case clang::BuiltinType::OCLIntelSubgroupAVCSicResult:
- case clang::BuiltinType::OCLIntelSubgroupAVCImeResultSingleRefStreamout:
- case clang::BuiltinType::OCLIntelSubgroupAVCImeResultDualRefStreamout:
- case clang::BuiltinType::OCLIntelSubgroupAVCImeSingleRefStreamin:
- case clang::BuiltinType::OCLIntelSubgroupAVCImeDualRefStreamin:
+ case ZigClangBuiltinTypeWChar_U:
+ case ZigClangBuiltinTypeChar16:
+ case ZigClangBuiltinTypeChar32:
+ case ZigClangBuiltinTypeWChar_S:
+ case ZigClangBuiltinTypeHalf:
+ case ZigClangBuiltinTypeNullPtr:
+ case ZigClangBuiltinTypeObjCId:
+ case ZigClangBuiltinTypeObjCClass:
+ case ZigClangBuiltinTypeObjCSel:
+ case ZigClangBuiltinTypeOMPArraySection:
+ case ZigClangBuiltinTypeDependent:
+ case ZigClangBuiltinTypeOverload:
+ case ZigClangBuiltinTypeBoundMember:
+ case ZigClangBuiltinTypePseudoObject:
+ case ZigClangBuiltinTypeUnknownAny:
+ case ZigClangBuiltinTypeBuiltinFn:
+ case ZigClangBuiltinTypeARCUnbridgedCast:
+ case ZigClangBuiltinTypeShortAccum:
+ case ZigClangBuiltinTypeAccum:
+ case ZigClangBuiltinTypeLongAccum:
+ case ZigClangBuiltinTypeUShortAccum:
+ case ZigClangBuiltinTypeUAccum:
+ case ZigClangBuiltinTypeULongAccum:
+
+ case ZigClangBuiltinTypeOCLImage1dRO:
+ case ZigClangBuiltinTypeOCLImage1dArrayRO:
+ case ZigClangBuiltinTypeOCLImage1dBufferRO:
+ case ZigClangBuiltinTypeOCLImage2dRO:
+ case ZigClangBuiltinTypeOCLImage2dArrayRO:
+ case ZigClangBuiltinTypeOCLImage2dDepthRO:
+ case ZigClangBuiltinTypeOCLImage2dArrayDepthRO:
+ case ZigClangBuiltinTypeOCLImage2dMSAARO:
+ case ZigClangBuiltinTypeOCLImage2dArrayMSAARO:
+ case ZigClangBuiltinTypeOCLImage2dMSAADepthRO:
+ case ZigClangBuiltinTypeOCLImage2dArrayMSAADepthRO:
+ case ZigClangBuiltinTypeOCLImage3dRO:
+ case ZigClangBuiltinTypeOCLImage1dWO:
+ case ZigClangBuiltinTypeOCLImage1dArrayWO:
+ case ZigClangBuiltinTypeOCLImage1dBufferWO:
+ case ZigClangBuiltinTypeOCLImage2dWO:
+ case ZigClangBuiltinTypeOCLImage2dArrayWO:
+ case ZigClangBuiltinTypeOCLImage2dDepthWO:
+ case ZigClangBuiltinTypeOCLImage2dArrayDepthWO:
+ case ZigClangBuiltinTypeOCLImage2dMSAAWO:
+ case ZigClangBuiltinTypeOCLImage2dArrayMSAAWO:
+ case ZigClangBuiltinTypeOCLImage2dMSAADepthWO:
+ case ZigClangBuiltinTypeOCLImage2dArrayMSAADepthWO:
+ case ZigClangBuiltinTypeOCLImage3dWO:
+ case ZigClangBuiltinTypeOCLImage1dRW:
+ case ZigClangBuiltinTypeOCLImage1dArrayRW:
+ case ZigClangBuiltinTypeOCLImage1dBufferRW:
+ case ZigClangBuiltinTypeOCLImage2dRW:
+ case ZigClangBuiltinTypeOCLImage2dArrayRW:
+ case ZigClangBuiltinTypeOCLImage2dDepthRW:
+ case ZigClangBuiltinTypeOCLImage2dArrayDepthRW:
+ case ZigClangBuiltinTypeOCLImage2dMSAARW:
+ case ZigClangBuiltinTypeOCLImage2dArrayMSAARW:
+ case ZigClangBuiltinTypeOCLImage2dMSAADepthRW:
+ case ZigClangBuiltinTypeOCLImage2dArrayMSAADepthRW:
+ case ZigClangBuiltinTypeOCLImage3dRW:
+ case ZigClangBuiltinTypeOCLSampler:
+ case ZigClangBuiltinTypeOCLEvent:
+ case ZigClangBuiltinTypeOCLClkEvent:
+ case ZigClangBuiltinTypeOCLQueue:
+ case ZigClangBuiltinTypeOCLReserveID:
+ case ZigClangBuiltinTypeShortFract:
+ case ZigClangBuiltinTypeFract:
+ case ZigClangBuiltinTypeLongFract:
+ case ZigClangBuiltinTypeUShortFract:
+ case ZigClangBuiltinTypeUFract:
+ case ZigClangBuiltinTypeULongFract:
+ case ZigClangBuiltinTypeSatShortAccum:
+ case ZigClangBuiltinTypeSatAccum:
+ case ZigClangBuiltinTypeSatLongAccum:
+ case ZigClangBuiltinTypeSatUShortAccum:
+ case ZigClangBuiltinTypeSatUAccum:
+ case ZigClangBuiltinTypeSatULongAccum:
+ case ZigClangBuiltinTypeSatShortFract:
+ case ZigClangBuiltinTypeSatFract:
+ case ZigClangBuiltinTypeSatLongFract:
+ case ZigClangBuiltinTypeSatUShortFract:
+ case ZigClangBuiltinTypeSatUFract:
+ case ZigClangBuiltinTypeSatULongFract:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCMcePayload:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCImePayload:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCRefPayload:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCSicPayload:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCMceResult:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCImeResult:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCRefResult:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCSicResult:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCImeResultSingleRefStreamout:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCImeResultDualRefStreamout:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCImeSingleRefStreamin:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCImeDualRefStreamin:
emit_warning(c, source_loc, "unsupported builtin type");
return nullptr;
}
break;
}
- case clang::Type::Pointer:
+ case ZigClangType_Pointer:
{
- const clang::PointerType *pointer_ty = static_cast<const clang::PointerType*>(ty);
- clang::QualType child_qt = pointer_ty->getPointeeType();
+ ZigClangQualType child_qt = ZigClangType_getPointeeType(ty);
AstNode *child_node = trans_qual_type(c, child_qt, source_loc);
if (child_node == nullptr) {
emit_warning(c, source_loc, "pointer to unsupported type");
@@ -973,29 +1023,33 @@ static AstNode *trans_type(Context *c, const clang::Type *ty, const clang::Sourc
return trans_create_node_prefix_op(c, PrefixOpOptional, child_node);
}
- if (type_is_opaque(c, child_qt.getTypePtr(), source_loc)) {
- AstNode *pointer_node = trans_create_node_ptr_type(c, child_qt.isConstQualified(),
- child_qt.isVolatileQualified(), child_node, PtrLenSingle);
+ if (type_is_opaque(c, ZigClangQualType_getTypePtr(child_qt), source_loc)) {
+ AstNode *pointer_node = trans_create_node_ptr_type(c,
+ ZigClangQualType_isConstQualified(child_qt),
+ ZigClangQualType_isVolatileQualified(child_qt),
+ child_node, PtrLenSingle);
return trans_create_node_prefix_op(c, PrefixOpOptional, pointer_node);
} else {
- return trans_create_node_ptr_type(c, child_qt.isConstQualified(),
- child_qt.isVolatileQualified(), child_node, PtrLenC);
+ return trans_create_node_ptr_type(c,
+ ZigClangQualType_isConstQualified(child_qt),
+ ZigClangQualType_isVolatileQualified(child_qt),
+ child_node, PtrLenC);
}
}
- case clang::Type::Typedef:
+ case ZigClangType_Typedef:
{
- const clang::TypedefType *typedef_ty = static_cast<const clang::TypedefType*>(ty);
- const clang::TypedefNameDecl *typedef_decl = typedef_ty->getDecl();
+ const ZigClangTypedefType *typedef_ty = reinterpret_cast<const ZigClangTypedefType*>(ty);
+ const ZigClangTypedefNameDecl *typedef_decl = ZigClangTypedefType_getDecl(typedef_ty);
return resolve_typedef_decl(c, typedef_decl);
}
- case clang::Type::Elaborated:
+ case ZigClangType_Elaborated:
{
- const clang::ElaboratedType *elaborated_ty = static_cast<const clang::ElaboratedType*>(ty);
+ const clang::ElaboratedType *elaborated_ty = reinterpret_cast<const clang::ElaboratedType*>(ty);
switch (elaborated_ty->getKeyword()) {
case clang::ETK_Struct:
case clang::ETK_Enum:
case clang::ETK_Union:
- return trans_qual_type(c, elaborated_ty->getNamedType(), source_loc);
+ return trans_qual_type(c, bitcast(elaborated_ty->getNamedType()), source_loc);
case clang::ETK_Interface:
case clang::ETK_Class:
case clang::ETK_Typename:
@@ -1004,81 +1058,81 @@ static AstNode *trans_type(Context *c, const clang::Type *ty, const clang::Sourc
return nullptr;
}
}
- case clang::Type::FunctionProto:
- case clang::Type::FunctionNoProto:
+ case ZigClangType_FunctionProto:
+ case ZigClangType_FunctionNoProto:
{
- const clang::FunctionType *fn_ty = static_cast<const clang::FunctionType*>(ty);
+ const ZigClangFunctionType *fn_ty = reinterpret_cast<const ZigClangFunctionType*>(ty);
AstNode *proto_node = trans_create_node(c, NodeTypeFnProto);
- switch (fn_ty->getCallConv()) {
- case clang::CC_C: // __attribute__((cdecl))
+ switch (ZigClangFunctionType_getCallConv(fn_ty)) {
+ case ZigClangCallingConv_C: // __attribute__((cdecl))
proto_node->data.fn_proto.cc = CallingConventionC;
proto_node->data.fn_proto.is_extern = true;
break;
- case clang::CC_X86StdCall: // __attribute__((stdcall))
+ case ZigClangCallingConv_X86StdCall: // __attribute__((stdcall))
proto_node->data.fn_proto.cc = CallingConventionStdcall;
break;
- case clang::CC_X86FastCall: // __attribute__((fastcall))
+ case ZigClangCallingConv_X86FastCall: // __attribute__((fastcall))
emit_warning(c, source_loc, "unsupported calling convention: x86 fastcall");
return nullptr;
- case clang::CC_X86ThisCall: // __attribute__((thiscall))
+ case ZigClangCallingConv_X86ThisCall: // __attribute__((thiscall))
emit_warning(c, source_loc, "unsupported calling convention: x86 thiscall");
return nullptr;
- case clang::CC_X86VectorCall: // __attribute__((vectorcall))
+ case ZigClangCallingConv_X86VectorCall: // __attribute__((vectorcall))
emit_warning(c, source_loc, "unsupported calling convention: x86 vectorcall");
return nullptr;
- case clang::CC_X86Pascal: // __attribute__((pascal))
+ case ZigClangCallingConv_X86Pascal: // __attribute__((pascal))
emit_warning(c, source_loc, "unsupported calling convention: x86 pascal");
return nullptr;
- case clang::CC_Win64: // __attribute__((ms_abi))
+ case ZigClangCallingConv_Win64: // __attribute__((ms_abi))
emit_warning(c, source_loc, "unsupported calling convention: win64");
return nullptr;
- case clang::CC_X86_64SysV: // __attribute__((sysv_abi))
+ case ZigClangCallingConv_X86_64SysV: // __attribute__((sysv_abi))
emit_warning(c, source_loc, "unsupported calling convention: x86 64sysv");
return nullptr;
- case clang::CC_X86RegCall:
+ case ZigClangCallingConv_X86RegCall:
emit_warning(c, source_loc, "unsupported calling convention: x86 reg");
return nullptr;
- case clang::CC_AAPCS: // __attribute__((pcs("aapcs")))
+ case ZigClangCallingConv_AAPCS: // __attribute__((pcs("aapcs")))
emit_warning(c, source_loc, "unsupported calling convention: aapcs");
return nullptr;
- case clang::CC_AAPCS_VFP: // __attribute__((pcs("aapcs-vfp")))
+ case ZigClangCallingConv_AAPCS_VFP: // __attribute__((pcs("aapcs-vfp")))
emit_warning(c, source_loc, "unsupported calling convention: aapcs-vfp");
return nullptr;
- case clang::CC_IntelOclBicc: // __attribute__((intel_ocl_bicc))
+ case ZigClangCallingConv_IntelOclBicc: // __attribute__((intel_ocl_bicc))
emit_warning(c, source_loc, "unsupported calling convention: intel_ocl_bicc");
return nullptr;
- case clang::CC_SpirFunction: // default for OpenCL functions on SPIR target
+ case ZigClangCallingConv_SpirFunction: // default for OpenCL functions on SPIR target
emit_warning(c, source_loc, "unsupported calling convention: SPIR function");
return nullptr;
- case clang::CC_OpenCLKernel:
+ case ZigClangCallingConv_OpenCLKernel:
emit_warning(c, source_loc, "unsupported calling convention: OpenCLKernel");
return nullptr;
- case clang::CC_Swift:
+ case ZigClangCallingConv_Swift:
emit_warning(c, source_loc, "unsupported calling convention: Swift");
return nullptr;
- case clang::CC_PreserveMost:
+ case ZigClangCallingConv_PreserveMost:
emit_warning(c, source_loc, "unsupported calling convention: PreserveMost");
return nullptr;
- case clang::CC_PreserveAll:
+ case ZigClangCallingConv_PreserveAll:
emit_warning(c, source_loc, "unsupported calling convention: PreserveAll");
return nullptr;
- case clang::CC_AArch64VectorCall:
+ case ZigClangCallingConv_AArch64VectorCall:
emit_warning(c, source_loc, "unsupported calling convention: AArch64VectorCall");
return nullptr;
}
- if (fn_ty->getNoReturnAttr()) {
+ if (ZigClangFunctionType_getNoReturnAttr(fn_ty)) {
proto_node->data.fn_proto.return_type = trans_create_node_symbol_str(c, "noreturn");
} else {
- proto_node->data.fn_proto.return_type = trans_qual_type(c, fn_ty->getReturnType(),
- source_loc);
+ proto_node->data.fn_proto.return_type = trans_qual_type(c,
+ ZigClangFunctionType_getReturnType(fn_ty), source_loc);
if (proto_node->data.fn_proto.return_type == nullptr) {
emit_warning(c, source_loc, "unsupported function proto return type");
return nullptr;
}
// convert c_void to actual void (only for return type)
- // we do want to look at the AstNode instead of clang::QualType, because
+ // we do want to look at the AstNode instead of ZigClangQualType, because
// if they do something like:
// typedef Foo void;
// void foo(void) -> Foo;
@@ -1094,17 +1148,17 @@ static AstNode *trans_type(Context *c, const clang::Type *ty, const clang::Sourc
proto_node->data.fn_proto.name = buf_create_from_str(fn_name);
}
- if (ty->getTypeClass() == clang::Type::FunctionNoProto) {
+ if (ZigClangType_getTypeClass(ty) == ZigClangType_FunctionNoProto) {
return proto_node;
}
- const clang::FunctionProtoType *fn_proto_ty = static_cast<const clang::FunctionProtoType*>(ty);
+ const ZigClangFunctionProtoType *fn_proto_ty = reinterpret_cast<const ZigClangFunctionProtoType*>(ty);
- proto_node->data.fn_proto.is_var_args = fn_proto_ty->isVariadic();
- size_t param_count = fn_proto_ty->getNumParams();
+ proto_node->data.fn_proto.is_var_args = ZigClangFunctionProtoType_isVariadic(fn_proto_ty);
+ size_t param_count = ZigClangFunctionProtoType_getNumParams(fn_proto_ty);
for (size_t i = 0; i < param_count; i += 1) {
- clang::QualType qt = fn_proto_ty->getParamType(i);
+ ZigClangQualType qt = ZigClangFunctionProtoType_getParamType(fn_proto_ty, i);
AstNode *param_type_node = trans_qual_type(c, qt, source_loc);
if (param_type_node == nullptr) {
@@ -1118,7 +1172,7 @@ static AstNode *trans_type(Context *c, const clang::Type *ty, const clang::Sourc
if (param_name != nullptr) {
param_node->data.param_decl.name = buf_create_from_str(param_name);
}
- param_node->data.param_decl.is_noalias = qt.isRestrictQualified();
+ param_node->data.param_decl.is_noalias = ZigClangQualType_isRestrictQualified(qt);
param_node->data.param_decl.type = param_type_node;
proto_node->data.fn_proto.params.append(param_node);
}
@@ -1127,20 +1181,20 @@ static AstNode *trans_type(Context *c, const clang::Type *ty, const clang::Sourc
return proto_node;
}
- case clang::Type::Record:
+ case ZigClangType_Record:
{
- const clang::RecordType *record_ty = static_cast<const clang::RecordType*>(ty);
- return resolve_record_decl(c, record_ty->getDecl());
+ const ZigClangRecordType *record_ty = reinterpret_cast<const ZigClangRecordType*>(ty);
+ return resolve_record_decl(c, ZigClangRecordType_getDecl(record_ty));
}
- case clang::Type::Enum:
+ case ZigClangType_Enum:
{
- const clang::EnumType *enum_ty = static_cast<const clang::EnumType*>(ty);
- return resolve_enum_decl(c, enum_ty->getDecl());
+ const ZigClangEnumType *enum_ty = reinterpret_cast<const ZigClangEnumType*>(ty);
+ return resolve_enum_decl(c, ZigClangEnumType_getDecl(enum_ty));
}
- case clang::Type::ConstantArray:
+ case ZigClangType_ConstantArray:
{
- const clang::ConstantArrayType *const_arr_ty = static_cast<const clang::ConstantArrayType *>(ty);
- AstNode *child_type_node = trans_qual_type(c, const_arr_ty->getElementType(), source_loc);
+ const clang::ConstantArrayType *const_arr_ty = reinterpret_cast<const clang::ConstantArrayType *>(ty);
+ AstNode *child_type_node = trans_qual_type(c, bitcast(const_arr_ty->getElementType()), source_loc);
if (child_type_node == nullptr) {
emit_warning(c, source_loc, "unresolved array element type");
return nullptr;
@@ -1149,83 +1203,87 @@ static AstNode *trans_type(Context *c, const clang::Type *ty, const clang::Sourc
AstNode *size_node = trans_create_node_unsigned(c, size);
return trans_create_node_array_type(c, size_node, child_type_node);
}
- case clang::Type::Paren:
+ case ZigClangType_Paren:
{
- const clang::ParenType *paren_ty = static_cast<const clang::ParenType *>(ty);
- return trans_qual_type(c, paren_ty->getInnerType(), source_loc);
+ const clang::ParenType *paren_ty = reinterpret_cast<const clang::ParenType *>(ty);
+ return trans_qual_type(c, bitcast(paren_ty->getInnerType()), source_loc);
}
- case clang::Type::Decayed:
+ case ZigClangType_Decayed:
{
- const clang::DecayedType *decayed_ty = static_cast<const clang::DecayedType *>(ty);
- return trans_qual_type(c, decayed_ty->getDecayedType(), source_loc);
+ const clang::DecayedType *decayed_ty = reinterpret_cast<const clang::DecayedType *>(ty);
+ return trans_qual_type(c, bitcast(decayed_ty->getDecayedType()), source_loc);
}
- case clang::Type::Attributed:
+ case ZigClangType_Attributed:
{
- const clang::AttributedType *attributed_ty = static_cast<const clang::AttributedType *>(ty);
- return trans_qual_type(c, attributed_ty->getEquivalentType(), source_loc);
+ const clang::AttributedType *attributed_ty = reinterpret_cast<const clang::AttributedType *>(ty);
+ return trans_qual_type(c, bitcast(attributed_ty->getEquivalentType()), source_loc);
}
- case clang::Type::IncompleteArray:
+ case ZigClangType_IncompleteArray:
{
- const clang::IncompleteArrayType *incomplete_array_ty = static_cast<const clang::IncompleteArrayType *>(ty);
- clang::QualType child_qt = incomplete_array_ty->getElementType();
+ const clang::IncompleteArrayType *incomplete_array_ty = reinterpret_cast<const clang::IncompleteArrayType *>(ty);
+ ZigClangQualType child_qt = bitcast(incomplete_array_ty->getElementType());
AstNode *child_type_node = trans_qual_type(c, child_qt, source_loc);
if (child_type_node == nullptr) {
emit_warning(c, source_loc, "unresolved array element type");
return nullptr;
}
- AstNode *pointer_node = trans_create_node_ptr_type(c, child_qt.isConstQualified(),
- child_qt.isVolatileQualified(), child_type_node, PtrLenC);
+ AstNode *pointer_node = trans_create_node_ptr_type(c,
+ ZigClangQualType_isConstQualified(child_qt),
+ ZigClangQualType_isVolatileQualified(child_qt),
+ child_type_node, PtrLenC);
return pointer_node;
}
- case clang::Type::BlockPointer:
- case clang::Type::LValueReference:
- case clang::Type::RValueReference:
- case clang::Type::MemberPointer:
- case clang::Type::VariableArray:
- case clang::Type::DependentSizedArray:
- case clang::Type::DependentSizedExtVector:
- case clang::Type::Vector:
- case clang::Type::ExtVector:
- case clang::Type::UnresolvedUsing:
- case clang::Type::Adjusted:
- case clang::Type::TypeOfExpr:
- case clang::Type::TypeOf:
- case clang::Type::Decltype:
- case clang::Type::UnaryTransform:
- case clang::Type::TemplateTypeParm:
- case clang::Type::SubstTemplateTypeParm:
- case clang::Type::SubstTemplateTypeParmPack:
- case clang::Type::TemplateSpecialization:
- case clang::Type::Auto:
- case clang::Type::InjectedClassName:
- case clang::Type::DependentName:
- case clang::Type::DependentTemplateSpecialization:
- case clang::Type::PackExpansion:
- case clang::Type::ObjCObject:
- case clang::Type::ObjCInterface:
- case clang::Type::Complex:
- case clang::Type::ObjCObjectPointer:
- case clang::Type::Atomic:
- case clang::Type::Pipe:
- case clang::Type::ObjCTypeParam:
- case clang::Type::DeducedTemplateSpecialization:
- case clang::Type::DependentAddressSpace:
- case clang::Type::DependentVector:
- emit_warning(c, source_loc, "unsupported type: '%s'", ty->getTypeClassName());
+ case ZigClangType_BlockPointer:
+ case ZigClangType_LValueReference:
+ case ZigClangType_RValueReference:
+ case ZigClangType_MemberPointer:
+ case ZigClangType_VariableArray:
+ case ZigClangType_DependentSizedArray:
+ case ZigClangType_DependentSizedExtVector:
+ case ZigClangType_Vector:
+ case ZigClangType_ExtVector:
+ case ZigClangType_UnresolvedUsing:
+ case ZigClangType_Adjusted:
+ case ZigClangType_TypeOfExpr:
+ case ZigClangType_TypeOf:
+ case ZigClangType_Decltype:
+ case ZigClangType_UnaryTransform:
+ case ZigClangType_TemplateTypeParm:
+ case ZigClangType_SubstTemplateTypeParm:
+ case ZigClangType_SubstTemplateTypeParmPack:
+ case ZigClangType_TemplateSpecialization:
+ case ZigClangType_Auto:
+ case ZigClangType_InjectedClassName:
+ case ZigClangType_DependentName:
+ case ZigClangType_DependentTemplateSpecialization:
+ case ZigClangType_PackExpansion:
+ case ZigClangType_ObjCObject:
+ case ZigClangType_ObjCInterface:
+ case ZigClangType_Complex:
+ case ZigClangType_ObjCObjectPointer:
+ case ZigClangType_Atomic:
+ case ZigClangType_Pipe:
+ case ZigClangType_ObjCTypeParam:
+ case ZigClangType_DeducedTemplateSpecialization:
+ case ZigClangType_DependentAddressSpace:
+ case ZigClangType_DependentVector:
+ emit_warning(c, source_loc, "unsupported type: '%s'", ZigClangType_getTypeClassName(ty));
return nullptr;
}
zig_unreachable();
}
-static AstNode *trans_qual_type(Context *c, clang::QualType qt, const clang::SourceLocation &source_loc) {
- return trans_type(c, qt.getTypePtr(), source_loc);
+static AstNode *trans_qual_type(Context *c, ZigClangQualType qt, ZigClangSourceLocation source_loc) {
+ return trans_type(c, ZigClangQualType_getTypePtr(qt), source_loc);
}
-static int trans_compound_stmt_inline(Context *c, TransScope *scope, const clang::CompoundStmt *stmt,
+static int trans_compound_stmt_inline(Context *c, TransScope *scope, const ZigClangCompoundStmt *stmt,
AstNode *block_node, TransScope **out_node_scope)
{
assert(block_node->type == NodeTypeBlock);
- for (clang::CompoundStmt::const_body_iterator it = stmt->body_begin(), end_it = stmt->body_end(); it != end_it; ++it) {
+ for (ZigClangCompoundStmt_const_body_iterator it = ZigClangCompoundStmt_body_begin(stmt),
+ end_it = ZigClangCompoundStmt_body_end(stmt); it != end_it; ++it)
+ {
AstNode *child_node;
scope = trans_stmt(c, scope, *it, &child_node);
if (scope == nullptr)
@@ -1239,7 +1297,7 @@ static int trans_compound_stmt_inline(Context *c, TransScope *scope, const clang
return ErrorNone;
}
-static AstNode *trans_compound_stmt(Context *c, TransScope *scope, const clang::CompoundStmt *stmt,
+static AstNode *trans_compound_stmt(Context *c, TransScope *scope, const ZigClangCompoundStmt *stmt,
TransScope **out_node_scope)
{
TransScopeBlock *child_scope_block = trans_scope_block_create(c, scope);
@@ -1251,7 +1309,7 @@ static AstNode *trans_compound_stmt(Context *c, TransScope *scope, const clang::
static AstNode *trans_stmt_expr(Context *c, ResultUsed result_used, TransScope *scope,
const clang::StmtExpr *stmt, TransScope **out_node_scope)
{
- AstNode *block = trans_compound_stmt(c, scope, stmt->getSubStmt(), out_node_scope);
+ AstNode *block = trans_compound_stmt(c, scope, (const ZigClangCompoundStmt *)stmt->getSubStmt(), out_node_scope);
if (block == nullptr)
return block;
assert(block->type == NodeTypeBlock);
@@ -1274,7 +1332,7 @@ static AstNode *trans_stmt_expr(Context *c, ResultUsed result_used, TransScope *
}
static AstNode *trans_return_stmt(Context *c, TransScope *scope, const clang::ReturnStmt *stmt) {
- const clang::Expr *value_expr = stmt->getRetValue();
+ const ZigClangExpr *value_expr = bitcast(stmt->getRetValue());
if (value_expr == nullptr) {
return trans_create_node(c, NodeTypeReturnExpr);
} else {
@@ -1289,22 +1347,62 @@ static AstNode *trans_return_stmt(Context *c, TransScope *scope, const clang::Re
static AstNode *trans_integer_literal(Context *c, ResultUsed result_used, const clang::IntegerLiteral *stmt) {
clang::Expr::EvalResult result;
if (!stmt->EvaluateAsInt(result, *reinterpret_cast<clang::ASTContext *>(c->ctx))) {
- emit_warning(c, stmt->getBeginLoc(), "invalid integer literal");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "invalid integer literal");
+ return nullptr;
+ }
+ AstNode *node = trans_create_node_apint(c, bitcast(&result.Val.getInt()));
+ return maybe_suppress_result(c, result_used, node);
+}
+
+static AstNode *trans_floating_literal(Context *c, ResultUsed result_used, const clang::FloatingLiteral *stmt) {
+ llvm::APFloat result{0.0f};
+ if (!stmt->EvaluateAsFloat(result, *reinterpret_cast<clang::ASTContext *>(c->ctx))) {
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "invalid floating literal");
return nullptr;
}
- AstNode *node = trans_create_node_apint(c, result.Val.getInt());
+ AstNode *node = trans_create_node_apfloat(c, result);
return maybe_suppress_result(c, result_used, node);
}
+static AstNode *trans_character_literal(Context *c, ResultUsed result_used, const clang::CharacterLiteral *stmt) {
+ switch (stmt->getKind()) {
+ case clang::CharacterLiteral::CharacterKind::Ascii:
+ {
+ unsigned val = stmt->getValue();
+ // C has a somewhat obscure feature called multi-character character
+ // constant
+ if (val > 255)
+ return trans_create_node_unsigned(c, val);
+ }
+ // fallthrough
+ case clang::CharacterLiteral::CharacterKind::UTF8:
+ {
+ AstNode *node = trans_create_node(c, NodeTypeCharLiteral);
+ node->data.char_literal.value = stmt->getValue();
+ return maybe_suppress_result(c, result_used, node);
+ }
+ case clang::CharacterLiteral::CharacterKind::UTF16:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO support UTF16 character literals");
+ return nullptr;
+ case clang::CharacterLiteral::CharacterKind::UTF32:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO support UTF32 character literals");
+ return nullptr;
+ case clang::CharacterLiteral::CharacterKind::Wide:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO support wide character literals");
+ return nullptr;
+ }
+ zig_unreachable();
+}
+
static AstNode *trans_constant_expr(Context *c, ResultUsed result_used, const clang::ConstantExpr *expr) {
clang::Expr::EvalResult result;
if (!expr->EvaluateAsConstantExpr(result, clang::Expr::EvaluateForCodeGen,
*reinterpret_cast<clang::ASTContext *>(c->ctx)))
{
- emit_warning(c, expr->getBeginLoc(), "invalid constant expression");
+ emit_warning(c, bitcast(expr->getBeginLoc()), "invalid constant expression");
return nullptr;
}
- AstNode *node = trans_ap_value(c, &result.Val, expr->getType(), expr->getBeginLoc());
+ AstNode *node = trans_ap_value(c, bitcast(&result.Val), bitcast(expr->getType()), bitcast(expr->getBeginLoc()));
return maybe_suppress_result(c, result_used, node);
}
@@ -1313,9 +1411,9 @@ static AstNode *trans_conditional_operator(Context *c, ResultUsed result_used, T
{
AstNode *node = trans_create_node(c, NodeTypeIfBoolExpr);
- clang::Expr *cond_expr = stmt->getCond();
- clang::Expr *true_expr = stmt->getTrueExpr();
- clang::Expr *false_expr = stmt->getFalseExpr();
+ const ZigClangExpr *cond_expr = bitcast(stmt->getCond());
+ const ZigClangExpr *true_expr = bitcast(stmt->getTrueExpr());
+ const ZigClangExpr *false_expr = bitcast(stmt->getFalseExpr());
node->data.if_bool_expr.condition = trans_expr(c, ResultUsedYes, scope, cond_expr, TransRValue);
if (node->data.if_bool_expr.condition == nullptr)
@@ -1332,7 +1430,9 @@ static AstNode *trans_conditional_operator(Context *c, ResultUsed result_used, T
return maybe_suppress_result(c, result_used, node);
}
-static AstNode *trans_create_bin_op(Context *c, TransScope *scope, clang::Expr *lhs, BinOpType bin_op, clang::Expr *rhs) {
+static AstNode *trans_create_bin_op(Context *c, TransScope *scope, const ZigClangExpr *lhs,
+ BinOpType bin_op, const ZigClangExpr *rhs)
+{
AstNode *node = trans_create_node(c, NodeTypeBinOpExpr);
node->data.bin_op_expr.bin_op = bin_op;
@@ -1347,7 +1447,9 @@ static AstNode *trans_create_bin_op(Context *c, TransScope *scope, clang::Expr *
return node;
}
-static AstNode *trans_create_bool_bin_op(Context *c, TransScope *scope, clang::Expr *lhs, BinOpType bin_op, clang::Expr *rhs) {
+static AstNode *trans_create_bool_bin_op(Context *c, TransScope *scope, const ZigClangExpr *lhs,
+ BinOpType bin_op, const ZigClangExpr *rhs)
+{
assert(bin_op == BinOpTypeBoolAnd || bin_op == BinOpTypeBoolOr);
AstNode *node = trans_create_node(c, NodeTypeBinOpExpr);
node->data.bin_op_expr.bin_op = bin_op;
@@ -1363,7 +1465,9 @@ static AstNode *trans_create_bool_bin_op(Context *c, TransScope *scope, clang::E
return node;
}
-static AstNode *trans_create_assign(Context *c, ResultUsed result_used, TransScope *scope, clang::Expr *lhs, clang::Expr *rhs) {
+static AstNode *trans_create_assign(Context *c, ResultUsed result_used, TransScope *scope,
+ const ZigClangExpr *lhs, const ZigClangExpr *rhs)
+{
if (result_used == ResultUsedNo) {
// common case
AstNode *node = trans_create_node(c, NodeTypeBinOpExpr);
@@ -1414,10 +1518,10 @@ static AstNode *trans_create_assign(Context *c, ResultUsed result_used, TransSco
}
}
-static AstNode *trans_create_shift_op(Context *c, TransScope *scope, clang::QualType result_type,
- clang::Expr *lhs_expr, BinOpType bin_op, clang::Expr *rhs_expr)
+static AstNode *trans_create_shift_op(Context *c, TransScope *scope, ZigClangQualType result_type,
+ const ZigClangExpr *lhs_expr, BinOpType bin_op, const ZigClangExpr *rhs_expr)
{
- const clang::SourceLocation &rhs_location = rhs_expr->getBeginLoc();
+ ZigClangSourceLocation rhs_location = ZigClangExpr_getBeginLoc(rhs_expr);
AstNode *rhs_type = qual_type_to_log2_int_ref(c, result_type, rhs_location);
// lhs >> u5(rh)
@@ -1434,130 +1538,130 @@ static AstNode *trans_create_shift_op(Context *c, TransScope *scope, clang::Qual
static AstNode *trans_binary_operator(Context *c, ResultUsed result_used, TransScope *scope, const clang::BinaryOperator *stmt) {
switch (stmt->getOpcode()) {
case clang::BO_PtrMemD:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle more C binary operators: BO_PtrMemD");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C binary operators: BO_PtrMemD");
return nullptr;
case clang::BO_PtrMemI:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle more C binary operators: BO_PtrMemI");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C binary operators: BO_PtrMemI");
return nullptr;
case clang::BO_Cmp:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle more C binary operators: BO_Cmp");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C binary operators: BO_Cmp");
return nullptr;
case clang::BO_Mul: {
- AstNode *node = trans_create_bin_op(c, scope, stmt->getLHS(),
- qual_type_has_wrapping_overflow(c, stmt->getType()) ? BinOpTypeMultWrap : BinOpTypeMult,
- stmt->getRHS());
+ AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()),
+ qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())) ? BinOpTypeMultWrap : BinOpTypeMult,
+ bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
}
case clang::BO_Div:
- if (qual_type_has_wrapping_overflow(c, stmt->getType())) {
+ if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType()))) {
// unsigned/float division uses the operator
- AstNode *node = trans_create_bin_op(c, scope, stmt->getLHS(), BinOpTypeDiv, stmt->getRHS());
+ AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeDiv, bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
} else {
// signed integer division uses @divTrunc
AstNode *fn_call = trans_create_node_builtin_fn_call_str(c, "divTrunc");
- AstNode *lhs = trans_expr(c, ResultUsedYes, scope, stmt->getLHS(), TransLValue);
+ AstNode *lhs = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getLHS()), TransLValue);
if (lhs == nullptr) return nullptr;
fn_call->data.fn_call_expr.params.append(lhs);
- AstNode *rhs = trans_expr(c, ResultUsedYes, scope, stmt->getRHS(), TransLValue);
+ AstNode *rhs = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getRHS()), TransLValue);
if (rhs == nullptr) return nullptr;
fn_call->data.fn_call_expr.params.append(rhs);
return maybe_suppress_result(c, result_used, fn_call);
}
case clang::BO_Rem:
- if (qual_type_has_wrapping_overflow(c, stmt->getType())) {
+ if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType()))) {
// unsigned/float division uses the operator
- AstNode *node = trans_create_bin_op(c, scope, stmt->getLHS(), BinOpTypeMod, stmt->getRHS());
+ AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeMod, bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
} else {
// signed integer division uses @rem
AstNode *fn_call = trans_create_node_builtin_fn_call_str(c, "rem");
- AstNode *lhs = trans_expr(c, ResultUsedYes, scope, stmt->getLHS(), TransLValue);
+ AstNode *lhs = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getLHS()), TransLValue);
if (lhs == nullptr) return nullptr;
fn_call->data.fn_call_expr.params.append(lhs);
- AstNode *rhs = trans_expr(c, ResultUsedYes, scope, stmt->getRHS(), TransLValue);
+ AstNode *rhs = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getRHS()), TransLValue);
if (rhs == nullptr) return nullptr;
fn_call->data.fn_call_expr.params.append(rhs);
return maybe_suppress_result(c, result_used, fn_call);
}
case clang::BO_Add: {
- AstNode *node = trans_create_bin_op(c, scope, stmt->getLHS(),
- qual_type_has_wrapping_overflow(c, stmt->getType()) ? BinOpTypeAddWrap : BinOpTypeAdd,
- stmt->getRHS());
+ AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()),
+ qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())) ? BinOpTypeAddWrap : BinOpTypeAdd,
+ bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
}
case clang::BO_Sub: {
- AstNode *node = trans_create_bin_op(c, scope, stmt->getLHS(),
- qual_type_has_wrapping_overflow(c, stmt->getType()) ? BinOpTypeSubWrap : BinOpTypeSub,
- stmt->getRHS());
+ AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()),
+ qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())) ? BinOpTypeSubWrap : BinOpTypeSub,
+ bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
}
case clang::BO_Shl: {
- AstNode *node = trans_create_shift_op(c, scope, stmt->getType(), stmt->getLHS(), BinOpTypeBitShiftLeft, stmt->getRHS());
+ AstNode *node = trans_create_shift_op(c, scope, bitcast(stmt->getType()), bitcast(stmt->getLHS()), BinOpTypeBitShiftLeft, bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
}
case clang::BO_Shr: {
- AstNode *node = trans_create_shift_op(c, scope, stmt->getType(), stmt->getLHS(), BinOpTypeBitShiftRight, stmt->getRHS());
+ AstNode *node = trans_create_shift_op(c, scope, bitcast(stmt->getType()), bitcast(stmt->getLHS()), BinOpTypeBitShiftRight, bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
}
case clang::BO_LT: {
- AstNode *node =trans_create_bin_op(c, scope, stmt->getLHS(), BinOpTypeCmpLessThan, stmt->getRHS());
+ AstNode *node =trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeCmpLessThan, bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
}
case clang::BO_GT: {
- AstNode *node = trans_create_bin_op(c, scope, stmt->getLHS(), BinOpTypeCmpGreaterThan, stmt->getRHS());
+ AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeCmpGreaterThan, bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
}
case clang::BO_LE: {
- AstNode *node = trans_create_bin_op(c, scope, stmt->getLHS(), BinOpTypeCmpLessOrEq, stmt->getRHS());
+ AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeCmpLessOrEq, bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
}
case clang::BO_GE: {
- AstNode *node = trans_create_bin_op(c, scope, stmt->getLHS(), BinOpTypeCmpGreaterOrEq, stmt->getRHS());
+ AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeCmpGreaterOrEq, bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
}
case clang::BO_EQ: {
- AstNode *node = trans_create_bin_op(c, scope, stmt->getLHS(), BinOpTypeCmpEq, stmt->getRHS());
+ AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeCmpEq, bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
}
case clang::BO_NE: {
- AstNode *node = trans_create_bin_op(c, scope, stmt->getLHS(), BinOpTypeCmpNotEq, stmt->getRHS());
+ AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeCmpNotEq, bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
}
case clang::BO_And: {
- AstNode *node = trans_create_bin_op(c, scope, stmt->getLHS(), BinOpTypeBinAnd, stmt->getRHS());
+ AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeBinAnd, bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
}
case clang::BO_Xor: {
- AstNode *node = trans_create_bin_op(c, scope, stmt->getLHS(), BinOpTypeBinXor, stmt->getRHS());
+ AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeBinXor, bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
}
case clang::BO_Or: {
- AstNode *node = trans_create_bin_op(c, scope, stmt->getLHS(), BinOpTypeBinOr, stmt->getRHS());
+ AstNode *node = trans_create_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeBinOr, bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
}
case clang::BO_LAnd: {
- AstNode *node = trans_create_bool_bin_op(c, scope, stmt->getLHS(), BinOpTypeBoolAnd, stmt->getRHS());
+ AstNode *node = trans_create_bool_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeBoolAnd, bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
}
case clang::BO_LOr: {
- AstNode *node = trans_create_bool_bin_op(c, scope, stmt->getLHS(), BinOpTypeBoolOr, stmt->getRHS());
+ AstNode *node = trans_create_bool_bin_op(c, scope, bitcast(stmt->getLHS()), BinOpTypeBoolOr, bitcast(stmt->getRHS()));
return maybe_suppress_result(c, result_used, node);
}
case clang::BO_Assign:
- return trans_create_assign(c, result_used, scope, stmt->getLHS(), stmt->getRHS());
+ return trans_create_assign(c, result_used, scope, bitcast(stmt->getLHS()), bitcast(stmt->getRHS()));
case clang::BO_Comma:
{
TransScopeBlock *scope_block = trans_scope_block_create(c, scope);
Buf *label_name = buf_create_from_str("x");
scope_block->node->data.block.name = label_name;
- AstNode *lhs = trans_expr(c, ResultUsedNo, &scope_block->base, stmt->getLHS(), TransRValue);
+ AstNode *lhs = trans_expr(c, ResultUsedNo, &scope_block->base, bitcast(stmt->getLHS()), TransRValue);
if (lhs == nullptr)
return nullptr;
scope_block->node->data.block.statements.append(lhs);
- AstNode *rhs = trans_expr(c, ResultUsedYes, &scope_block->base, stmt->getRHS(), TransRValue);
+ AstNode *rhs = trans_expr(c, ResultUsedYes, &scope_block->base, bitcast(stmt->getRHS()), TransRValue);
if (rhs == nullptr)
return nullptr;
@@ -1584,17 +1688,17 @@ static AstNode *trans_binary_operator(Context *c, ResultUsed result_used, TransS
static AstNode *trans_create_compound_assign_shift(Context *c, ResultUsed result_used, TransScope *scope,
const clang::CompoundAssignOperator *stmt, BinOpType assign_op, BinOpType bin_op)
{
- const clang::SourceLocation &rhs_location = stmt->getRHS()->getBeginLoc();
- AstNode *rhs_type = qual_type_to_log2_int_ref(c, stmt->getComputationLHSType(), rhs_location);
+ ZigClangSourceLocation rhs_location = bitcast(stmt->getRHS()->getBeginLoc());
+ AstNode *rhs_type = qual_type_to_log2_int_ref(c, bitcast(stmt->getComputationLHSType()), rhs_location);
bool use_intermediate_casts = stmt->getComputationLHSType().getTypePtr() != stmt->getComputationResultType().getTypePtr();
if (!use_intermediate_casts && result_used == ResultUsedNo) {
// simple common case, where the C and Zig are identical:
// lhs >>= rhs
- AstNode *lhs = trans_expr(c, ResultUsedYes, scope, stmt->getLHS(), TransLValue);
+ AstNode *lhs = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getLHS()), TransLValue);
if (lhs == nullptr) return nullptr;
- AstNode *rhs = trans_expr(c, ResultUsedYes, scope, stmt->getRHS(), TransRValue);
+ AstNode *rhs = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getRHS()), TransRValue);
if (rhs == nullptr) return nullptr;
AstNode *coerced_rhs = trans_create_node_fn_call_1(c, rhs_type, rhs);
@@ -1614,7 +1718,7 @@ static AstNode *trans_create_compound_assign_shift(Context *c, ResultUsed result
child_scope->node->data.block.name = label_name;
// const _ref = &lhs;
- AstNode *lhs = trans_expr(c, ResultUsedYes, &child_scope->base, stmt->getLHS(), TransLValue);
+ AstNode *lhs = trans_expr(c, ResultUsedYes, &child_scope->base, bitcast(stmt->getLHS()), TransLValue);
if (lhs == nullptr) return nullptr;
AstNode *addr_of_lhs = trans_create_node_addr_of(c, lhs);
// TODO: avoid name collisions with generated variable names
@@ -1624,20 +1728,20 @@ static AstNode *trans_create_compound_assign_shift(Context *c, ResultUsed result
// *_ref = result_type(operation_type(*_ref) >> u5(rhs));
- AstNode *rhs = trans_expr(c, ResultUsedYes, &child_scope->base, stmt->getRHS(), TransRValue);
+ AstNode *rhs = trans_expr(c, ResultUsedYes, &child_scope->base, bitcast(stmt->getRHS()), TransRValue);
if (rhs == nullptr) return nullptr;
AstNode *coerced_rhs = trans_create_node_fn_call_1(c, rhs_type, rhs);
// operation_type(*_ref)
AstNode *operation_type_cast = trans_c_cast(c, rhs_location,
- stmt->getComputationLHSType(),
- stmt->getLHS()->getType(),
+ bitcast(stmt->getComputationLHSType()),
+ bitcast(stmt->getLHS()->getType()),
trans_create_node_ptr_deref(c, trans_create_node_symbol(c, tmp_var_name)));
// result_type(... >> u5(rhs))
AstNode *result_type_cast = trans_c_cast(c, rhs_location,
- stmt->getComputationResultType(),
- stmt->getComputationLHSType(),
+ bitcast(stmt->getComputationResultType()),
+ bitcast(stmt->getComputationLHSType()),
trans_create_node_bin_op(c,
operation_type_cast,
bin_op,
@@ -1669,9 +1773,9 @@ static AstNode *trans_create_compound_assign(Context *c, ResultUsed result_used,
if (result_used == ResultUsedNo) {
// simple common case, where the C and Zig are identical:
// lhs += rhs
- AstNode *lhs = trans_expr(c, ResultUsedYes, scope, stmt->getLHS(), TransLValue);
+ AstNode *lhs = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getLHS()), TransLValue);
if (lhs == nullptr) return nullptr;
- AstNode *rhs = trans_expr(c, ResultUsedYes, scope, stmt->getRHS(), TransRValue);
+ AstNode *rhs = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getRHS()), TransRValue);
if (rhs == nullptr) return nullptr;
return trans_create_node_bin_op(c, lhs, assign_op, rhs);
} else {
@@ -1688,7 +1792,7 @@ static AstNode *trans_create_compound_assign(Context *c, ResultUsed result_used,
child_scope->node->data.block.name = label_name;
// const _ref = &lhs;
- AstNode *lhs = trans_expr(c, ResultUsedYes, &child_scope->base, stmt->getLHS(), TransLValue);
+ AstNode *lhs = trans_expr(c, ResultUsedYes, &child_scope->base, bitcast(stmt->getLHS()), TransLValue);
if (lhs == nullptr) return nullptr;
AstNode *addr_of_lhs = trans_create_node_addr_of(c, lhs);
// TODO: avoid name collisions with generated variable names
@@ -1698,7 +1802,7 @@ static AstNode *trans_create_compound_assign(Context *c, ResultUsed result_used,
// *_ref = *_ref + rhs;
- AstNode *rhs = trans_expr(c, ResultUsedYes, &child_scope->base, stmt->getRHS(), TransRValue);
+ AstNode *rhs = trans_expr(c, ResultUsedYes, &child_scope->base, bitcast(stmt->getRHS()), TransRValue);
if (rhs == nullptr) return nullptr;
AstNode *assign_statement = trans_create_node_bin_op(c,
@@ -1728,26 +1832,26 @@ static AstNode *trans_compound_assign_operator(Context *c, ResultUsed result_use
{
switch (stmt->getOpcode()) {
case clang::BO_MulAssign:
- if (qual_type_has_wrapping_overflow(c, stmt->getType()))
+ if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())))
return trans_create_compound_assign(c, result_used, scope, stmt, BinOpTypeAssignTimesWrap, BinOpTypeMultWrap);
else
return trans_create_compound_assign(c, result_used, scope, stmt, BinOpTypeAssignTimes, BinOpTypeMult);
case clang::BO_DivAssign:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle more C compound assign operators: BO_DivAssign");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C compound assign operators: BO_DivAssign");
return nullptr;
case clang::BO_RemAssign:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle more C compound assign operators: BO_RemAssign");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C compound assign operators: BO_RemAssign");
return nullptr;
case clang::BO_Cmp:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle more C compound assign operators: BO_Cmp");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle more C compound assign operators: BO_Cmp");
return nullptr;
case clang::BO_AddAssign:
- if (qual_type_has_wrapping_overflow(c, stmt->getType()))
+ if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())))
return trans_create_compound_assign(c, result_used, scope, stmt, BinOpTypeAssignPlusWrap, BinOpTypeAddWrap);
else
return trans_create_compound_assign(c, result_used, scope, stmt, BinOpTypeAssignPlus, BinOpTypeAdd);
case clang::BO_SubAssign:
- if (qual_type_has_wrapping_overflow(c, stmt->getType()))
+ if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())))
return trans_create_compound_assign(c, result_used, scope, stmt, BinOpTypeAssignMinusWrap, BinOpTypeSubWrap);
else
return trans_create_compound_assign(c, result_used, scope, stmt, BinOpTypeAssignMinus, BinOpTypeSub);
@@ -1790,202 +1894,265 @@ static AstNode *trans_compound_assign_operator(Context *c, ResultUsed result_use
}
static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, TransScope *scope, const clang::ImplicitCastExpr *stmt) {
- switch (stmt->getCastKind()) {
- case clang::CK_LValueToRValue:
- return trans_expr(c, ResultUsedYes, scope, stmt->getSubExpr(), TransRValue);
- case clang::CK_IntegralCast:
+ switch ((ZigClangCK)stmt->getCastKind()) {
+ case ZigClangCK_LValueToRValue:
+ return trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
+ case ZigClangCK_IntegralCast:
{
- AstNode *target_node = trans_expr(c, ResultUsedYes, scope, stmt->getSubExpr(), TransRValue);
+ AstNode *target_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
if (target_node == nullptr)
return nullptr;
- AstNode *node = trans_c_cast(c, stmt->getExprLoc(), stmt->getType(),
- stmt->getSubExpr()->getType(), target_node);
+ AstNode *node = trans_c_cast(c, bitcast(stmt->getExprLoc()), bitcast(stmt->getType()),
+ bitcast(stmt->getSubExpr()->getType()), target_node);
return maybe_suppress_result(c, result_used, node);
}
- case clang::CK_FunctionToPointerDecay:
- case clang::CK_ArrayToPointerDecay:
+ case ZigClangCK_FunctionToPointerDecay:
+ case ZigClangCK_ArrayToPointerDecay:
{
- AstNode *target_node = trans_expr(c, ResultUsedYes, scope, stmt->getSubExpr(), TransRValue);
+ AstNode *target_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
if (target_node == nullptr)
return nullptr;
return maybe_suppress_result(c, result_used, target_node);
}
- case clang::CK_BitCast:
+ case ZigClangCK_BitCast:
{
- AstNode *target_node = trans_expr(c, ResultUsedYes, scope, stmt->getSubExpr(), TransRValue);
+ AstNode *target_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
if (target_node == nullptr)
return nullptr;
- if (expr_types_equal(c, stmt, stmt->getSubExpr())) {
- return target_node;
- }
+ const ZigClangQualType dest_type = get_expr_qual_type(c, bitcast(stmt));
+ const ZigClangQualType src_type = get_expr_qual_type(c, bitcast(stmt->getSubExpr()));
- AstNode *dest_type_node = get_expr_type(c, stmt);
-
- AstNode *node = trans_create_node_builtin_fn_call_str(c, "ptrCast");
- node->data.fn_call_expr.params.append(dest_type_node);
- node->data.fn_call_expr.params.append(target_node);
- return maybe_suppress_result(c, result_used, node);
+ return trans_c_cast(c, bitcast(stmt->getBeginLoc()), dest_type, src_type, target_node);
}
- case clang::CK_NullToPointer:
- return trans_create_node_unsigned(c, 0);
- case clang::CK_NoOp:
- return trans_expr(c, ResultUsedYes, scope, stmt->getSubExpr(), TransRValue);
- case clang::CK_Dependent:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_Dependent");
- return nullptr;
- case clang::CK_LValueBitCast:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_LValueBitCast");
- return nullptr;
- case clang::CK_BaseToDerived:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_BaseToDerived");
- return nullptr;
- case clang::CK_DerivedToBase:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_DerivedToBase");
- return nullptr;
- case clang::CK_UncheckedDerivedToBase:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_UncheckedDerivedToBase");
+ case ZigClangCK_NullToPointer:
+ return trans_create_node(c, NodeTypeNullLiteral);
+ case ZigClangCK_NoOp:
+ return trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
+ case ZigClangCK_Dependent:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_Dependent");
return nullptr;
- case clang::CK_Dynamic:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_Dynamic");
+ case ZigClangCK_LValueBitCast:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_LValueBitCast");
return nullptr;
- case clang::CK_ToUnion:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_ToUnion");
+ case ZigClangCK_BaseToDerived:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_BaseToDerived");
return nullptr;
- case clang::CK_NullToMemberPointer:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_NullToMemberPointer");
+ case ZigClangCK_DerivedToBase:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_DerivedToBase");
return nullptr;
- case clang::CK_BaseToDerivedMemberPointer:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_BaseToDerivedMemberPointer");
+ case ZigClangCK_UncheckedDerivedToBase:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_UncheckedDerivedToBase");
return nullptr;
- case clang::CK_DerivedToBaseMemberPointer:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_DerivedToBaseMemberPointer");
+ case ZigClangCK_Dynamic:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_Dynamic");
return nullptr;
- case clang::CK_MemberPointerToBoolean:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_MemberPointerToBoolean");
+ case ZigClangCK_ToUnion:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_ToUnion");
return nullptr;
- case clang::CK_ReinterpretMemberPointer:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_ReinterpretMemberPointer");
+ case ZigClangCK_NullToMemberPointer:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_NullToMemberPointer");
return nullptr;
- case clang::CK_UserDefinedConversion:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation cast CK_UserDefinedConversion");
+ case ZigClangCK_BaseToDerivedMemberPointer:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_BaseToDerivedMemberPointer");
return nullptr;
- case clang::CK_ConstructorConversion:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_ConstructorConversion");
+ case ZigClangCK_DerivedToBaseMemberPointer:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_DerivedToBaseMemberPointer");
return nullptr;
- case clang::CK_IntegralToPointer:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntegralToPointer");
+ case ZigClangCK_MemberPointerToBoolean:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_MemberPointerToBoolean");
return nullptr;
- case clang::CK_PointerToIntegral:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_PointerToIntegral");
+ case ZigClangCK_ReinterpretMemberPointer:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_ReinterpretMemberPointer");
return nullptr;
- case clang::CK_PointerToBoolean:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_PointerToBoolean");
+ case ZigClangCK_UserDefinedConversion:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation cast CK_UserDefinedConversion");
return nullptr;
- case clang::CK_ToVoid:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_ToVoid");
+ case ZigClangCK_ConstructorConversion:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ConstructorConversion");
return nullptr;
- case clang::CK_VectorSplat:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_VectorSplat");
- return nullptr;
- case clang::CK_IntegralToBoolean:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntegralToBoolean");
- return nullptr;
- case clang::CK_IntegralToFloating:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntegralToFloating");
+ case ZigClangCK_PointerToBoolean:
+ {
+ const clang::Expr *expr = stmt->getSubExpr();
+ AstNode *val = trans_expr(c, ResultUsedYes, scope, bitcast(expr), TransRValue);
+ if (val == nullptr)
+ return nullptr;
+
+ AstNode *val_ptr = trans_create_node_builtin_fn_call_str(c, "ptrToInt");
+ val_ptr->data.fn_call_expr.params.append(val);
+
+ AstNode *zero = trans_create_node_unsigned(c, 0);
+
+ // Translate as @ptrToInt((&val) != 0)
+ return trans_create_node_bin_op(c, val_ptr, BinOpTypeCmpNotEq, zero);
+ }
+ case ZigClangCK_ToVoid:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ToVoid");
return nullptr;
- case clang::CK_FixedPointCast:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FixedPointCast");
+ case ZigClangCK_VectorSplat:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_VectorSplat");
return nullptr;
- case clang::CK_FixedPointToBoolean:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FixedPointToBoolean");
+ case ZigClangCK_IntegralToBoolean:
+ {
+ const clang::Expr *expr = stmt->getSubExpr();
+
+ bool expr_val;
+ if (expr->EvaluateAsBooleanCondition(expr_val, *reinterpret_cast<clang::ASTContext *>(c->ctx))) {
+ return trans_create_node_bool(c, expr_val);
+ }
+
+ AstNode *val = trans_expr(c, ResultUsedYes, scope, bitcast(expr), TransRValue);
+ if (val == nullptr)
+ return nullptr;
+
+ AstNode *zero = trans_create_node_unsigned(c, 0);
+
+ // Translate as val != 0
+ return trans_create_node_bin_op(c, val, BinOpTypeCmpNotEq, zero);
+ }
+ case ZigClangCK_PointerToIntegral:
+ {
+ AstNode *target_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
+ if (target_node == nullptr)
+ return nullptr;
+
+ AstNode *dest_type_node = get_expr_type(c, (const ZigClangExpr *)stmt);
+ if (dest_type_node == nullptr)
+ return nullptr;
+
+ AstNode *val_node = trans_create_node_builtin_fn_call_str(c, "ptrToInt");
+ val_node->data.fn_call_expr.params.append(target_node);
+ // @ptrToInt always returns a usize
+ AstNode *node = trans_create_node_builtin_fn_call_str(c, "intCast");
+ node->data.fn_call_expr.params.append(dest_type_node);
+ node->data.fn_call_expr.params.append(val_node);
+
+ return maybe_suppress_result(c, result_used, node);
+ }
+ case ZigClangCK_IntegralToPointer:
+ {
+ AstNode *target_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
+ if (target_node == nullptr)
+ return nullptr;
+
+ AstNode *dest_type_node = get_expr_type(c, (const ZigClangExpr *)stmt);
+ if (dest_type_node == nullptr)
+ return nullptr;
+
+ AstNode *node = trans_create_node_builtin_fn_call_str(c, "intToPtr");
+ node->data.fn_call_expr.params.append(dest_type_node);
+ node->data.fn_call_expr.params.append(target_node);
+
+ return maybe_suppress_result(c, result_used, node);
+ }
+ case ZigClangCK_IntegralToFloating:
+ case ZigClangCK_FloatingToIntegral:
+ {
+ AstNode *target_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), TransRValue);
+ if (target_node == nullptr)
+ return nullptr;
+
+ AstNode *dest_type_node = get_expr_type(c, (const ZigClangExpr *)stmt);
+ if (dest_type_node == nullptr)
+ return nullptr;
+
+ char const *fn = (ZigClangCK)stmt->getCastKind() == ZigClangCK_IntegralToFloating ?
+ "intToFloat" : "floatToInt";
+ AstNode *node = trans_create_node_builtin_fn_call_str(c, fn);
+ node->data.fn_call_expr.params.append(dest_type_node);
+ node->data.fn_call_expr.params.append(target_node);
+
+ return maybe_suppress_result(c, result_used, node);
+ }
+ case ZigClangCK_FixedPointCast:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FixedPointCast");
return nullptr;
- case clang::CK_FloatingToIntegral:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FloatingToIntegral");
+ case ZigClangCK_FixedPointToBoolean:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FixedPointToBoolean");
return nullptr;
- case clang::CK_FloatingToBoolean:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FloatingToBoolean");
+ case ZigClangCK_FloatingToBoolean:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingToBoolean");
return nullptr;
- case clang::CK_BooleanToSignedIntegral:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_BooleanToSignedIntegral");
+ case ZigClangCK_BooleanToSignedIntegral:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_BooleanToSignedIntegral");
return nullptr;
- case clang::CK_FloatingCast:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FloatingCast");
+ case ZigClangCK_FloatingCast:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingCast");
return nullptr;
- case clang::CK_CPointerToObjCPointerCast:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_CPointerToObjCPointerCast");
+ case ZigClangCK_CPointerToObjCPointerCast:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_CPointerToObjCPointerCast");
return nullptr;
- case clang::CK_BlockPointerToObjCPointerCast:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_BlockPointerToObjCPointerCast");
+ case ZigClangCK_BlockPointerToObjCPointerCast:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_BlockPointerToObjCPointerCast");
return nullptr;
- case clang::CK_AnyPointerToBlockPointerCast:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_AnyPointerToBlockPointerCast");
+ case ZigClangCK_AnyPointerToBlockPointerCast:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_AnyPointerToBlockPointerCast");
return nullptr;
- case clang::CK_ObjCObjectLValueCast:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_ObjCObjectLValueCast");
+ case ZigClangCK_ObjCObjectLValueCast:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ObjCObjectLValueCast");
return nullptr;
- case clang::CK_FloatingRealToComplex:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FloatingRealToComplex");
+ case ZigClangCK_FloatingRealToComplex:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingRealToComplex");
return nullptr;
- case clang::CK_FloatingComplexToReal:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FloatingComplexToReal");
+ case ZigClangCK_FloatingComplexToReal:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingComplexToReal");
return nullptr;
- case clang::CK_FloatingComplexToBoolean:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FloatingComplexToBoolean");
+ case ZigClangCK_FloatingComplexToBoolean:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingComplexToBoolean");
return nullptr;
- case clang::CK_FloatingComplexCast:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FloatingComplexCast");
+ case ZigClangCK_FloatingComplexCast:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingComplexCast");
return nullptr;
- case clang::CK_FloatingComplexToIntegralComplex:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_FloatingComplexToIntegralComplex");
+ case ZigClangCK_FloatingComplexToIntegralComplex:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_FloatingComplexToIntegralComplex");
return nullptr;
- case clang::CK_IntegralRealToComplex:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntegralRealToComplex");
+ case ZigClangCK_IntegralRealToComplex:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralRealToComplex");
return nullptr;
- case clang::CK_IntegralComplexToReal:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntegralComplexToReal");
+ case ZigClangCK_IntegralComplexToReal:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralComplexToReal");
return nullptr;
- case clang::CK_IntegralComplexToBoolean:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntegralComplexToBoolean");
+ case ZigClangCK_IntegralComplexToBoolean:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralComplexToBoolean");
return nullptr;
- case clang::CK_IntegralComplexCast:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntegralComplexCast");
+ case ZigClangCK_IntegralComplexCast:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralComplexCast");
return nullptr;
- case clang::CK_IntegralComplexToFloatingComplex:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntegralComplexToFloatingComplex");
+ case ZigClangCK_IntegralComplexToFloatingComplex:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntegralComplexToFloatingComplex");
return nullptr;
- case clang::CK_ARCProduceObject:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_ARCProduceObject");
+ case ZigClangCK_ARCProduceObject:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ARCProduceObject");
return nullptr;
- case clang::CK_ARCConsumeObject:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_ARCConsumeObject");
+ case ZigClangCK_ARCConsumeObject:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ARCConsumeObject");
return nullptr;
- case clang::CK_ARCReclaimReturnedObject:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_ARCReclaimReturnedObject");
+ case ZigClangCK_ARCReclaimReturnedObject:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ARCReclaimReturnedObject");
return nullptr;
- case clang::CK_ARCExtendBlockObject:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_ARCExtendBlockObject");
+ case ZigClangCK_ARCExtendBlockObject:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ARCExtendBlockObject");
return nullptr;
- case clang::CK_AtomicToNonAtomic:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_AtomicToNonAtomic");
+ case ZigClangCK_AtomicToNonAtomic:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_AtomicToNonAtomic");
return nullptr;
- case clang::CK_NonAtomicToAtomic:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_NonAtomicToAtomic");
+ case ZigClangCK_NonAtomicToAtomic:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_NonAtomicToAtomic");
return nullptr;
- case clang::CK_CopyAndAutoreleaseBlockObject:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_CopyAndAutoreleaseBlockObject");
+ case ZigClangCK_CopyAndAutoreleaseBlockObject:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_CopyAndAutoreleaseBlockObject");
return nullptr;
- case clang::CK_BuiltinFnToFnPtr:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_BuiltinFnToFnPtr");
+ case ZigClangCK_BuiltinFnToFnPtr:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_BuiltinFnToFnPtr");
return nullptr;
- case clang::CK_ZeroToOCLOpaqueType:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_ZeroToOCLOpaqueType");
+ case ZigClangCK_ZeroToOCLOpaqueType:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_ZeroToOCLOpaqueType");
return nullptr;
- case clang::CK_AddressSpaceConversion:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_AddressSpaceConversion");
+ case ZigClangCK_AddressSpaceConversion:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_AddressSpaceConversion");
return nullptr;
- case clang::CK_IntToOCLSampler:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CK_IntToOCLSampler");
+ case ZigClangCK_IntToOCLSampler:
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CK_IntToOCLSampler");
return nullptr;
}
zig_unreachable();
@@ -1993,7 +2160,7 @@ static AstNode *trans_implicit_cast_expr(Context *c, ResultUsed result_used, Tra
static AstNode *trans_decl_ref_expr(Context *c, TransScope *scope, const clang::DeclRefExpr *stmt, TransLRValue lrval) {
const clang::ValueDecl *value_decl = stmt->getDecl();
- Buf *c_symbol_name = buf_create_from_str(decl_name(value_decl));
+ Buf *c_symbol_name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)value_decl));
Buf *zig_symbol_name = trans_lookup_zig_symbol(c, scope, c_symbol_name);
if (lrval == TransLValue) {
c->ptr_params.put(zig_symbol_name, true);
@@ -2004,7 +2171,7 @@ static AstNode *trans_decl_ref_expr(Context *c, TransScope *scope, const clang::
static AstNode *trans_create_post_crement(Context *c, ResultUsed result_used, TransScope *scope,
const clang::UnaryOperator *stmt, BinOpType assign_op)
{
- clang::Expr *op_expr = stmt->getSubExpr();
+ const ZigClangExpr *op_expr = bitcast(stmt->getSubExpr());
if (result_used == ResultUsedNo) {
// common case
@@ -2060,7 +2227,7 @@ static AstNode *trans_create_post_crement(Context *c, ResultUsed result_used, Tr
static AstNode *trans_create_pre_crement(Context *c, ResultUsed result_used, TransScope *scope,
const clang::UnaryOperator *stmt, BinOpType assign_op)
{
- clang::Expr *op_expr = stmt->getSubExpr();
+ const ZigClangExpr *op_expr = bitcast(stmt->getSubExpr());
if (result_used == ResultUsedNo) {
// common case
@@ -2110,50 +2277,50 @@ static AstNode *trans_create_pre_crement(Context *c, ResultUsed result_used, Tra
static AstNode *trans_unary_operator(Context *c, ResultUsed result_used, TransScope *scope, const clang::UnaryOperator *stmt) {
switch (stmt->getOpcode()) {
case clang::UO_PostInc:
- if (qual_type_has_wrapping_overflow(c, stmt->getType()))
+ if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())))
return trans_create_post_crement(c, result_used, scope, stmt, BinOpTypeAssignPlusWrap);
else
return trans_create_post_crement(c, result_used, scope, stmt, BinOpTypeAssignPlus);
case clang::UO_PostDec:
- if (qual_type_has_wrapping_overflow(c, stmt->getType()))
+ if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())))
return trans_create_post_crement(c, result_used, scope, stmt, BinOpTypeAssignMinusWrap);
else
return trans_create_post_crement(c, result_used, scope, stmt, BinOpTypeAssignMinus);
case clang::UO_PreInc:
- if (qual_type_has_wrapping_overflow(c, stmt->getType()))
+ if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())))
return trans_create_pre_crement(c, result_used, scope, stmt, BinOpTypeAssignPlusWrap);
else
return trans_create_pre_crement(c, result_used, scope, stmt, BinOpTypeAssignPlus);
case clang::UO_PreDec:
- if (qual_type_has_wrapping_overflow(c, stmt->getType()))
+ if (qual_type_has_wrapping_overflow(c, bitcast(stmt->getType())))
return trans_create_pre_crement(c, result_used, scope, stmt, BinOpTypeAssignMinusWrap);
else
return trans_create_pre_crement(c, result_used, scope, stmt, BinOpTypeAssignMinus);
case clang::UO_AddrOf:
{
- AstNode *value_node = trans_expr(c, result_used, scope, stmt->getSubExpr(), TransLValue);
+ AstNode *value_node = trans_expr(c, result_used, scope, bitcast(stmt->getSubExpr()), TransLValue);
if (value_node == nullptr)
return value_node;
return trans_create_node_addr_of(c, value_node);
}
case clang::UO_Deref:
{
- AstNode *value_node = trans_expr(c, result_used, scope, stmt->getSubExpr(), TransRValue);
+ AstNode *value_node = trans_expr(c, result_used, scope, bitcast(stmt->getSubExpr()), TransRValue);
if (value_node == nullptr)
return nullptr;
- bool is_fn_ptr = qual_type_is_fn_ptr(stmt->getSubExpr()->getType());
+ bool is_fn_ptr = qual_type_is_fn_ptr(bitcast(stmt->getSubExpr()->getType()));
if (is_fn_ptr)
return value_node;
AstNode *unwrapped = trans_create_node_unwrap_null(c, value_node);
return trans_create_node_ptr_deref(c, unwrapped);
}
case clang::UO_Plus:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation UO_Plus");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation UO_Plus");
return nullptr;
case clang::UO_Minus:
{
- clang::Expr *op_expr = stmt->getSubExpr();
- if (!qual_type_has_wrapping_overflow(c, op_expr->getType())) {
+ const ZigClangExpr *op_expr = bitcast(stmt->getSubExpr());
+ if (!qual_type_has_wrapping_overflow(c, ZigClangExpr_getType(op_expr))) {
AstNode *node = trans_create_node(c, NodeTypePrefixOpExpr);
node->data.prefix_op_expr.prefix_op = PrefixOpNegation;
@@ -2162,7 +2329,7 @@ static AstNode *trans_unary_operator(Context *c, ResultUsed result_used, TransSc
return nullptr;
return node;
- } else if (c_is_unsigned_integer(c, op_expr->getType())) {
+ } else if (c_is_unsigned_integer(c, ZigClangExpr_getType(op_expr))) {
// we gotta emit 0 -% x
AstNode *node = trans_create_node(c, NodeTypeBinOpExpr);
node->data.bin_op_expr.op1 = trans_create_node_unsigned(c, 0);
@@ -2174,13 +2341,13 @@ static AstNode *trans_unary_operator(Context *c, ResultUsed result_used, TransSc
node->data.bin_op_expr.bin_op = BinOpTypeSubWrap;
return node;
} else {
- emit_warning(c, stmt->getBeginLoc(), "C negation with non float non integer");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "C negation with non float non integer");
return nullptr;
}
}
case clang::UO_Not:
{
- clang::Expr *op_expr = stmt->getSubExpr();
+ const ZigClangExpr *op_expr = bitcast(stmt->getSubExpr());
AstNode *sub_node = trans_expr(c, ResultUsedYes, scope, op_expr, TransRValue);
if (sub_node == nullptr)
return nullptr;
@@ -2189,7 +2356,7 @@ static AstNode *trans_unary_operator(Context *c, ResultUsed result_used, TransSc
}
case clang::UO_LNot:
{
- clang::Expr *op_expr = stmt->getSubExpr();
+ const ZigClangExpr *op_expr = bitcast(stmt->getSubExpr());
AstNode *sub_node = trans_bool_expr(c, ResultUsedYes, scope, op_expr, TransRValue);
if (sub_node == nullptr)
return nullptr;
@@ -2197,15 +2364,15 @@ static AstNode *trans_unary_operator(Context *c, ResultUsed result_used, TransSc
return trans_create_node_prefix_op(c, PrefixOpBoolNot, sub_node);
}
case clang::UO_Real:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation UO_Real");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation UO_Real");
return nullptr;
case clang::UO_Imag:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation UO_Imag");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation UO_Imag");
return nullptr;
case clang::UO_Extension:
- return trans_expr(c, result_used, scope, stmt->getSubExpr(), TransLValue);
+ return trans_expr(c, result_used, scope, bitcast(stmt->getSubExpr()), TransLValue);
case clang::UO_Coawait:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C translation UO_Coawait");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C translation UO_Coawait");
return nullptr;
}
zig_unreachable();
@@ -2225,249 +2392,250 @@ static int trans_local_declaration(Context *c, TransScope *scope, const clang::D
switch (decl->getKind()) {
case clang::Decl::Var: {
clang::VarDecl *var_decl = (clang::VarDecl *)decl;
- clang::QualType qual_type = var_decl->getTypeSourceInfo()->getType();
+ ZigClangQualType qual_type = bitcast(var_decl->getTypeSourceInfo()->getType());
AstNode *init_node = nullptr;
if (var_decl->hasInit()) {
- init_node = trans_expr(c, ResultUsedYes, scope, var_decl->getInit(), TransRValue);
+ init_node = trans_expr(c, ResultUsedYes, scope, bitcast(var_decl->getInit()), TransRValue);
if (init_node == nullptr)
return ErrorUnexpected;
} else {
init_node = trans_create_node(c, NodeTypeUndefinedLiteral);
}
- AstNode *type_node = trans_qual_type(c, qual_type, stmt->getBeginLoc());
+ AstNode *type_node = trans_qual_type(c, qual_type, bitcast(stmt->getBeginLoc()));
if (type_node == nullptr)
return ErrorUnexpected;
- Buf *c_symbol_name = buf_create_from_str(decl_name(var_decl));
+ Buf *c_symbol_name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)var_decl));
TransScopeVar *var_scope = trans_scope_var_create(c, scope, c_symbol_name);
scope = &var_scope->base;
- AstNode *node = trans_create_node_var_decl_local(c, qual_type.isConstQualified(),
+ AstNode *node = trans_create_node_var_decl_local(c,
+ ZigClangQualType_isConstQualified(qual_type),
var_scope->zig_name, type_node, init_node);
scope_block->node->data.block.statements.append(node);
continue;
}
case clang::Decl::AccessSpec:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle decl kind AccessSpec");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle decl kind AccessSpec");
return ErrorUnexpected;
case clang::Decl::Block:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C Block");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Block");
return ErrorUnexpected;
case clang::Decl::Captured:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C Captured");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Captured");
return ErrorUnexpected;
case clang::Decl::ClassScopeFunctionSpecialization:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ClassScopeFunctionSpecialization");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ClassScopeFunctionSpecialization");
return ErrorUnexpected;
case clang::Decl::Empty:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C Empty");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Empty");
return ErrorUnexpected;
case clang::Decl::Export:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C Export");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Export");
return ErrorUnexpected;
case clang::Decl::ExternCContext:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ExternCContext");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ExternCContext");
return ErrorUnexpected;
case clang::Decl::FileScopeAsm:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C FileScopeAsm");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C FileScopeAsm");
return ErrorUnexpected;
case clang::Decl::Friend:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C Friend");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Friend");
return ErrorUnexpected;
case clang::Decl::FriendTemplate:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C FriendTemplate");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C FriendTemplate");
return ErrorUnexpected;
case clang::Decl::Import:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C Import");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Import");
return ErrorUnexpected;
case clang::Decl::LinkageSpec:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C LinkageSpec");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C LinkageSpec");
return ErrorUnexpected;
case clang::Decl::Label:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C Label");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Label");
return ErrorUnexpected;
case clang::Decl::Namespace:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C Namespace");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Namespace");
return ErrorUnexpected;
case clang::Decl::NamespaceAlias:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C NamespaceAlias");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C NamespaceAlias");
return ErrorUnexpected;
case clang::Decl::ObjCCompatibleAlias:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCCompatibleAlias");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCCompatibleAlias");
return ErrorUnexpected;
case clang::Decl::ObjCCategory:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCCategory");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCCategory");
return ErrorUnexpected;
case clang::Decl::ObjCCategoryImpl:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCCategoryImpl");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCCategoryImpl");
return ErrorUnexpected;
case clang::Decl::ObjCImplementation:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCImplementation");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCImplementation");
return ErrorUnexpected;
case clang::Decl::ObjCInterface:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCInterface");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCInterface");
return ErrorUnexpected;
case clang::Decl::ObjCProtocol:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCProtocol");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCProtocol");
return ErrorUnexpected;
case clang::Decl::ObjCMethod:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCMethod");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCMethod");
return ErrorUnexpected;
case clang::Decl::ObjCProperty:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCProperty");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCProperty");
return ErrorUnexpected;
case clang::Decl::BuiltinTemplate:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C BuiltinTemplate");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C BuiltinTemplate");
return ErrorUnexpected;
case clang::Decl::ClassTemplate:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ClassTemplate");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ClassTemplate");
return ErrorUnexpected;
case clang::Decl::FunctionTemplate:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C FunctionTemplate");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C FunctionTemplate");
return ErrorUnexpected;
case clang::Decl::TypeAliasTemplate:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C TypeAliasTemplate");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TypeAliasTemplate");
return ErrorUnexpected;
case clang::Decl::VarTemplate:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C VarTemplate");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C VarTemplate");
return ErrorUnexpected;
case clang::Decl::TemplateTemplateParm:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C TemplateTemplateParm");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TemplateTemplateParm");
return ErrorUnexpected;
case clang::Decl::Enum:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C Enum");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Enum");
return ErrorUnexpected;
case clang::Decl::Record:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C Record");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Record");
return ErrorUnexpected;
case clang::Decl::CXXRecord:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXRecord");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXRecord");
return ErrorUnexpected;
case clang::Decl::ClassTemplateSpecialization:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ClassTemplateSpecialization");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ClassTemplateSpecialization");
return ErrorUnexpected;
case clang::Decl::ClassTemplatePartialSpecialization:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ClassTemplatePartialSpecialization");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ClassTemplatePartialSpecialization");
return ErrorUnexpected;
case clang::Decl::TemplateTypeParm:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C TemplateTypeParm");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TemplateTypeParm");
return ErrorUnexpected;
case clang::Decl::ObjCTypeParam:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCTypeParam");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCTypeParam");
return ErrorUnexpected;
case clang::Decl::TypeAlias:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C TypeAlias");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TypeAlias");
return ErrorUnexpected;
case clang::Decl::Typedef:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C Typedef");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Typedef");
return ErrorUnexpected;
case clang::Decl::UnresolvedUsingTypename:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C UnresolvedUsingTypename");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UnresolvedUsingTypename");
return ErrorUnexpected;
case clang::Decl::Using:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C Using");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Using");
return ErrorUnexpected;
case clang::Decl::UsingDirective:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C UsingDirective");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UsingDirective");
return ErrorUnexpected;
case clang::Decl::UsingPack:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C UsingPack");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UsingPack");
return ErrorUnexpected;
case clang::Decl::UsingShadow:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C UsingShadow");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UsingShadow");
return ErrorUnexpected;
case clang::Decl::ConstructorUsingShadow:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ConstructorUsingShadow");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ConstructorUsingShadow");
return ErrorUnexpected;
case clang::Decl::Binding:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C Binding");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Binding");
return ErrorUnexpected;
case clang::Decl::Field:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C Field");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Field");
return ErrorUnexpected;
case clang::Decl::ObjCAtDefsField:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCAtDefsField");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCAtDefsField");
return ErrorUnexpected;
case clang::Decl::ObjCIvar:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCIvar");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCIvar");
return ErrorUnexpected;
case clang::Decl::Function:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C Function");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Function");
return ErrorUnexpected;
case clang::Decl::CXXDeductionGuide:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXDeductionGuide");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXDeductionGuide");
return ErrorUnexpected;
case clang::Decl::CXXMethod:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXMethod");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXMethod");
return ErrorUnexpected;
case clang::Decl::CXXConstructor:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXConstructor");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXConstructor");
return ErrorUnexpected;
case clang::Decl::CXXConversion:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXConversion");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXConversion");
return ErrorUnexpected;
case clang::Decl::CXXDestructor:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXDestructor");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C CXXDestructor");
return ErrorUnexpected;
case clang::Decl::MSProperty:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C MSProperty");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C MSProperty");
return ErrorUnexpected;
case clang::Decl::NonTypeTemplateParm:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C NonTypeTemplateParm");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C NonTypeTemplateParm");
return ErrorUnexpected;
case clang::Decl::Decomposition:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C Decomposition");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C Decomposition");
return ErrorUnexpected;
case clang::Decl::ImplicitParam:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ImplicitParam");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ImplicitParam");
return ErrorUnexpected;
case clang::Decl::OMPCapturedExpr:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPCapturedExpr");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPCapturedExpr");
return ErrorUnexpected;
case clang::Decl::ParmVar:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ParmVar");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ParmVar");
return ErrorUnexpected;
case clang::Decl::VarTemplateSpecialization:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C VarTemplateSpecialization");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C VarTemplateSpecialization");
return ErrorUnexpected;
case clang::Decl::VarTemplatePartialSpecialization:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C VarTemplatePartialSpecialization");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C VarTemplatePartialSpecialization");
return ErrorUnexpected;
case clang::Decl::EnumConstant:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C EnumConstant");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C EnumConstant");
return ErrorUnexpected;
case clang::Decl::IndirectField:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C IndirectField");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C IndirectField");
return ErrorUnexpected;
case clang::Decl::OMPDeclareReduction:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPDeclareReduction");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPDeclareReduction");
return ErrorUnexpected;
case clang::Decl::UnresolvedUsingValue:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C UnresolvedUsingValue");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C UnresolvedUsingValue");
return ErrorUnexpected;
case clang::Decl::OMPRequires:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPRequires");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPRequires");
return ErrorUnexpected;
case clang::Decl::OMPThreadPrivate:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPThreadPrivate");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C OMPThreadPrivate");
return ErrorUnexpected;
case clang::Decl::ObjCPropertyImpl:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCPropertyImpl");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C ObjCPropertyImpl");
return ErrorUnexpected;
case clang::Decl::PragmaComment:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C PragmaComment");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C PragmaComment");
return ErrorUnexpected;
case clang::Decl::PragmaDetectMismatch:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C PragmaDetectMismatch");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C PragmaDetectMismatch");
return ErrorUnexpected;
case clang::Decl::StaticAssert:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C StaticAssert");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C StaticAssert");
return ErrorUnexpected;
case clang::Decl::TranslationUnit:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C TranslationUnit");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO handle C TranslationUnit");
return ErrorUnexpected;
}
zig_unreachable();
@@ -2493,7 +2661,7 @@ static AstNode *to_enum_zero_cmp(Context *c, AstNode *expr, AstNode *enum_type)
return trans_create_node_bin_op(c, expr, BinOpTypeCmpNotEq, bitcast);
}
-static AstNode *trans_bool_expr(Context *c, ResultUsed result_used, TransScope *scope, const clang::Expr *expr, TransLRValue lrval) {
+static AstNode *trans_bool_expr(Context *c, ResultUsed result_used, TransScope *scope, const ZigClangExpr *expr, TransLRValue lrval) {
AstNode *res = trans_expr(c, result_used, scope, expr, lrval);
if (res == nullptr)
return nullptr;
@@ -2530,146 +2698,145 @@ static AstNode *trans_bool_expr(Context *c, ResultUsed result_used, TransScope *
}
- const clang::Type *ty = get_expr_qual_type_before_implicit_cast(c, expr).getTypePtr();
- auto classs = ty->getTypeClass();
+ const ZigClangType *ty = ZigClangQualType_getTypePtr(get_expr_qual_type_before_implicit_cast(c, expr));
+ auto classs = ZigClangType_getTypeClass(ty);
switch (classs) {
- case clang::Type::Builtin:
+ case ZigClangType_Builtin:
{
- const clang::BuiltinType *builtin_ty = static_cast<const clang::BuiltinType*>(ty);
- switch (builtin_ty->getKind()) {
- case clang::BuiltinType::Bool:
- case clang::BuiltinType::Char_U:
- case clang::BuiltinType::UChar:
- case clang::BuiltinType::Char_S:
- case clang::BuiltinType::SChar:
- case clang::BuiltinType::UShort:
- case clang::BuiltinType::UInt:
- case clang::BuiltinType::ULong:
- case clang::BuiltinType::ULongLong:
- case clang::BuiltinType::Short:
- case clang::BuiltinType::Int:
- case clang::BuiltinType::Long:
- case clang::BuiltinType::LongLong:
- case clang::BuiltinType::UInt128:
- case clang::BuiltinType::Int128:
- case clang::BuiltinType::Float:
- case clang::BuiltinType::Double:
- case clang::BuiltinType::Float128:
- case clang::BuiltinType::LongDouble:
- case clang::BuiltinType::WChar_U:
- case clang::BuiltinType::Char8:
- case clang::BuiltinType::Char16:
- case clang::BuiltinType::Char32:
- case clang::BuiltinType::WChar_S:
- case clang::BuiltinType::Float16:
+ const ZigClangBuiltinType *builtin_ty = reinterpret_cast<const ZigClangBuiltinType*>(ty);
+ switch (ZigClangBuiltinType_getKind(builtin_ty)) {
+ case ZigClangBuiltinTypeBool:
+ case ZigClangBuiltinTypeChar_U:
+ case ZigClangBuiltinTypeUChar:
+ case ZigClangBuiltinTypeChar_S:
+ case ZigClangBuiltinTypeSChar:
+ case ZigClangBuiltinTypeUShort:
+ case ZigClangBuiltinTypeUInt:
+ case ZigClangBuiltinTypeULong:
+ case ZigClangBuiltinTypeULongLong:
+ case ZigClangBuiltinTypeShort:
+ case ZigClangBuiltinTypeInt:
+ case ZigClangBuiltinTypeLong:
+ case ZigClangBuiltinTypeLongLong:
+ case ZigClangBuiltinTypeUInt128:
+ case ZigClangBuiltinTypeInt128:
+ case ZigClangBuiltinTypeFloat:
+ case ZigClangBuiltinTypeDouble:
+ case ZigClangBuiltinTypeFloat128:
+ case ZigClangBuiltinTypeLongDouble:
+ case ZigClangBuiltinTypeWChar_U:
+ case ZigClangBuiltinTypeChar8:
+ case ZigClangBuiltinTypeChar16:
+ case ZigClangBuiltinTypeChar32:
+ case ZigClangBuiltinTypeWChar_S:
+ case ZigClangBuiltinTypeFloat16:
return trans_create_node_bin_op(c, res, BinOpTypeCmpNotEq, trans_create_node_unsigned_negative(c, 0, false));
- case clang::BuiltinType::NullPtr:
+ case ZigClangBuiltinTypeNullPtr:
return trans_create_node_bin_op(c, res, BinOpTypeCmpNotEq,
- trans_create_node_unsigned(c, 0));
-
- case clang::BuiltinType::Void:
- case clang::BuiltinType::Half:
- case clang::BuiltinType::ObjCId:
- case clang::BuiltinType::ObjCClass:
- case clang::BuiltinType::ObjCSel:
- case clang::BuiltinType::OMPArraySection:
- case clang::BuiltinType::Dependent:
- case clang::BuiltinType::Overload:
- case clang::BuiltinType::BoundMember:
- case clang::BuiltinType::PseudoObject:
- case clang::BuiltinType::UnknownAny:
- case clang::BuiltinType::BuiltinFn:
- case clang::BuiltinType::ARCUnbridgedCast:
- case clang::BuiltinType::OCLImage1dRO:
- case clang::BuiltinType::OCLImage1dArrayRO:
- case clang::BuiltinType::OCLImage1dBufferRO:
- case clang::BuiltinType::OCLImage2dRO:
- case clang::BuiltinType::OCLImage2dArrayRO:
- case clang::BuiltinType::OCLImage2dDepthRO:
- case clang::BuiltinType::OCLImage2dArrayDepthRO:
- case clang::BuiltinType::OCLImage2dMSAARO:
- case clang::BuiltinType::OCLImage2dArrayMSAARO:
- case clang::BuiltinType::OCLImage2dMSAADepthRO:
- case clang::BuiltinType::OCLImage2dArrayMSAADepthRO:
- case clang::BuiltinType::OCLImage3dRO:
- case clang::BuiltinType::OCLImage1dWO:
- case clang::BuiltinType::OCLImage1dArrayWO:
- case clang::BuiltinType::OCLImage1dBufferWO:
- case clang::BuiltinType::OCLImage2dWO:
- case clang::BuiltinType::OCLImage2dArrayWO:
- case clang::BuiltinType::OCLImage2dDepthWO:
- case clang::BuiltinType::OCLImage2dArrayDepthWO:
- case clang::BuiltinType::OCLImage2dMSAAWO:
- case clang::BuiltinType::OCLImage2dArrayMSAAWO:
- case clang::BuiltinType::OCLImage2dMSAADepthWO:
- case clang::BuiltinType::OCLImage2dArrayMSAADepthWO:
- case clang::BuiltinType::OCLImage3dWO:
- case clang::BuiltinType::OCLImage1dRW:
- case clang::BuiltinType::OCLImage1dArrayRW:
- case clang::BuiltinType::OCLImage1dBufferRW:
- case clang::BuiltinType::OCLImage2dRW:
- case clang::BuiltinType::OCLImage2dArrayRW:
- case clang::BuiltinType::OCLImage2dDepthRW:
- case clang::BuiltinType::OCLImage2dArrayDepthRW:
- case clang::BuiltinType::OCLImage2dMSAARW:
- case clang::BuiltinType::OCLImage2dArrayMSAARW:
- case clang::BuiltinType::OCLImage2dMSAADepthRW:
- case clang::BuiltinType::OCLImage2dArrayMSAADepthRW:
- case clang::BuiltinType::OCLImage3dRW:
- case clang::BuiltinType::OCLSampler:
- case clang::BuiltinType::OCLEvent:
- case clang::BuiltinType::OCLClkEvent:
- case clang::BuiltinType::OCLQueue:
- case clang::BuiltinType::OCLReserveID:
- case clang::BuiltinType::ShortAccum:
- case clang::BuiltinType::Accum:
- case clang::BuiltinType::LongAccum:
- case clang::BuiltinType::UShortAccum:
- case clang::BuiltinType::UAccum:
- case clang::BuiltinType::ULongAccum:
- case clang::BuiltinType::ShortFract:
- case clang::BuiltinType::Fract:
- case clang::BuiltinType::LongFract:
- case clang::BuiltinType::UShortFract:
- case clang::BuiltinType::UFract:
- case clang::BuiltinType::ULongFract:
- case clang::BuiltinType::SatShortAccum:
- case clang::BuiltinType::SatAccum:
- case clang::BuiltinType::SatLongAccum:
- case clang::BuiltinType::SatUShortAccum:
- case clang::BuiltinType::SatUAccum:
- case clang::BuiltinType::SatULongAccum:
- case clang::BuiltinType::SatShortFract:
- case clang::BuiltinType::SatFract:
- case clang::BuiltinType::SatLongFract:
- case clang::BuiltinType::SatUShortFract:
- case clang::BuiltinType::SatUFract:
- case clang::BuiltinType::SatULongFract:
- case clang::BuiltinType::OCLIntelSubgroupAVCMcePayload:
- case clang::BuiltinType::OCLIntelSubgroupAVCImePayload:
- case clang::BuiltinType::OCLIntelSubgroupAVCRefPayload:
- case clang::BuiltinType::OCLIntelSubgroupAVCSicPayload:
- case clang::BuiltinType::OCLIntelSubgroupAVCMceResult:
- case clang::BuiltinType::OCLIntelSubgroupAVCImeResult:
- case clang::BuiltinType::OCLIntelSubgroupAVCRefResult:
- case clang::BuiltinType::OCLIntelSubgroupAVCSicResult:
- case clang::BuiltinType::OCLIntelSubgroupAVCImeResultSingleRefStreamout:
- case clang::BuiltinType::OCLIntelSubgroupAVCImeResultDualRefStreamout:
- case clang::BuiltinType::OCLIntelSubgroupAVCImeSingleRefStreamin:
- case clang::BuiltinType::OCLIntelSubgroupAVCImeDualRefStreamin:
+ trans_create_node(c, NodeTypeNullLiteral));
+
+ case ZigClangBuiltinTypeVoid:
+ case ZigClangBuiltinTypeHalf:
+ case ZigClangBuiltinTypeObjCId:
+ case ZigClangBuiltinTypeObjCClass:
+ case ZigClangBuiltinTypeObjCSel:
+ case ZigClangBuiltinTypeOMPArraySection:
+ case ZigClangBuiltinTypeDependent:
+ case ZigClangBuiltinTypeOverload:
+ case ZigClangBuiltinTypeBoundMember:
+ case ZigClangBuiltinTypePseudoObject:
+ case ZigClangBuiltinTypeUnknownAny:
+ case ZigClangBuiltinTypeBuiltinFn:
+ case ZigClangBuiltinTypeARCUnbridgedCast:
+ case ZigClangBuiltinTypeOCLImage1dRO:
+ case ZigClangBuiltinTypeOCLImage1dArrayRO:
+ case ZigClangBuiltinTypeOCLImage1dBufferRO:
+ case ZigClangBuiltinTypeOCLImage2dRO:
+ case ZigClangBuiltinTypeOCLImage2dArrayRO:
+ case ZigClangBuiltinTypeOCLImage2dDepthRO:
+ case ZigClangBuiltinTypeOCLImage2dArrayDepthRO:
+ case ZigClangBuiltinTypeOCLImage2dMSAARO:
+ case ZigClangBuiltinTypeOCLImage2dArrayMSAARO:
+ case ZigClangBuiltinTypeOCLImage2dMSAADepthRO:
+ case ZigClangBuiltinTypeOCLImage2dArrayMSAADepthRO:
+ case ZigClangBuiltinTypeOCLImage3dRO:
+ case ZigClangBuiltinTypeOCLImage1dWO:
+ case ZigClangBuiltinTypeOCLImage1dArrayWO:
+ case ZigClangBuiltinTypeOCLImage1dBufferWO:
+ case ZigClangBuiltinTypeOCLImage2dWO:
+ case ZigClangBuiltinTypeOCLImage2dArrayWO:
+ case ZigClangBuiltinTypeOCLImage2dDepthWO:
+ case ZigClangBuiltinTypeOCLImage2dArrayDepthWO:
+ case ZigClangBuiltinTypeOCLImage2dMSAAWO:
+ case ZigClangBuiltinTypeOCLImage2dArrayMSAAWO:
+ case ZigClangBuiltinTypeOCLImage2dMSAADepthWO:
+ case ZigClangBuiltinTypeOCLImage2dArrayMSAADepthWO:
+ case ZigClangBuiltinTypeOCLImage3dWO:
+ case ZigClangBuiltinTypeOCLImage1dRW:
+ case ZigClangBuiltinTypeOCLImage1dArrayRW:
+ case ZigClangBuiltinTypeOCLImage1dBufferRW:
+ case ZigClangBuiltinTypeOCLImage2dRW:
+ case ZigClangBuiltinTypeOCLImage2dArrayRW:
+ case ZigClangBuiltinTypeOCLImage2dDepthRW:
+ case ZigClangBuiltinTypeOCLImage2dArrayDepthRW:
+ case ZigClangBuiltinTypeOCLImage2dMSAARW:
+ case ZigClangBuiltinTypeOCLImage2dArrayMSAARW:
+ case ZigClangBuiltinTypeOCLImage2dMSAADepthRW:
+ case ZigClangBuiltinTypeOCLImage2dArrayMSAADepthRW:
+ case ZigClangBuiltinTypeOCLImage3dRW:
+ case ZigClangBuiltinTypeOCLSampler:
+ case ZigClangBuiltinTypeOCLEvent:
+ case ZigClangBuiltinTypeOCLClkEvent:
+ case ZigClangBuiltinTypeOCLQueue:
+ case ZigClangBuiltinTypeOCLReserveID:
+ case ZigClangBuiltinTypeShortAccum:
+ case ZigClangBuiltinTypeAccum:
+ case ZigClangBuiltinTypeLongAccum:
+ case ZigClangBuiltinTypeUShortAccum:
+ case ZigClangBuiltinTypeUAccum:
+ case ZigClangBuiltinTypeULongAccum:
+ case ZigClangBuiltinTypeShortFract:
+ case ZigClangBuiltinTypeFract:
+ case ZigClangBuiltinTypeLongFract:
+ case ZigClangBuiltinTypeUShortFract:
+ case ZigClangBuiltinTypeUFract:
+ case ZigClangBuiltinTypeULongFract:
+ case ZigClangBuiltinTypeSatShortAccum:
+ case ZigClangBuiltinTypeSatAccum:
+ case ZigClangBuiltinTypeSatLongAccum:
+ case ZigClangBuiltinTypeSatUShortAccum:
+ case ZigClangBuiltinTypeSatUAccum:
+ case ZigClangBuiltinTypeSatULongAccum:
+ case ZigClangBuiltinTypeSatShortFract:
+ case ZigClangBuiltinTypeSatFract:
+ case ZigClangBuiltinTypeSatLongFract:
+ case ZigClangBuiltinTypeSatUShortFract:
+ case ZigClangBuiltinTypeSatUFract:
+ case ZigClangBuiltinTypeSatULongFract:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCMcePayload:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCImePayload:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCRefPayload:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCSicPayload:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCMceResult:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCImeResult:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCRefResult:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCSicResult:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCImeResultSingleRefStreamout:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCImeResultDualRefStreamout:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCImeSingleRefStreamin:
+ case ZigClangBuiltinTypeOCLIntelSubgroupAVCImeDualRefStreamin:
return res;
}
break;
}
- case clang::Type::Pointer:
- return trans_create_node_bin_op(c, res, BinOpTypeCmpNotEq,
- trans_create_node_unsigned(c, 0));
+ case ZigClangType_Pointer:
+ return trans_create_node_bin_op(c, res, BinOpTypeCmpNotEq, trans_create_node(c, NodeTypeNullLiteral));
- case clang::Type::Typedef:
+ case ZigClangType_Typedef:
{
- const clang::TypedefType *typedef_ty = static_cast<const clang::TypedefType*>(ty);
- const clang::TypedefNameDecl *typedef_decl = typedef_ty->getDecl();
- auto existing_entry = c->decl_table.maybe_get((void*)typedef_decl->getCanonicalDecl());
+ const ZigClangTypedefType *typedef_ty = reinterpret_cast<const ZigClangTypedefType*>(ty);
+ const ZigClangTypedefNameDecl *typedef_decl = ZigClangTypedefType_getDecl(typedef_ty);
+ auto existing_entry = c->decl_table.maybe_get((void*)ZigClangTypedefNameDecl_getCanonicalDecl(typedef_decl));
if (existing_entry) {
return existing_entry->value;
}
@@ -2677,19 +2844,20 @@ static AstNode *trans_bool_expr(Context *c, ResultUsed result_used, TransScope *
return res;
}
- case clang::Type::Enum:
+ case ZigClangType_Enum:
{
- const clang::EnumType *enum_ty = static_cast<const clang::EnumType*>(ty);
- AstNode *enum_type = resolve_enum_decl(c, enum_ty->getDecl());
+ const ZigClangEnumType *enum_ty = reinterpret_cast<const ZigClangEnumType *>(ty);
+ AstNode *enum_type = resolve_enum_decl(c, ZigClangEnumType_getDecl(enum_ty));
return to_enum_zero_cmp(c, res, enum_type);
}
- case clang::Type::Elaborated:
+ case ZigClangType_Elaborated:
{
- const clang::ElaboratedType *elaborated_ty = static_cast<const clang::ElaboratedType*>(ty);
+ const clang::ElaboratedType *elaborated_ty = reinterpret_cast<const clang::ElaboratedType*>(ty);
switch (elaborated_ty->getKeyword()) {
case clang::ETK_Enum: {
- AstNode *enum_type = trans_qual_type(c, elaborated_ty->getNamedType(), expr->getBeginLoc());
+ AstNode *enum_type = trans_qual_type(c, bitcast(elaborated_ty->getNamedType()),
+ ZigClangExpr_getBeginLoc(expr));
return to_enum_zero_cmp(c, res, enum_type);
}
case clang::ETK_Struct:
@@ -2702,48 +2870,48 @@ static AstNode *trans_bool_expr(Context *c, ResultUsed result_used, TransScope *
}
}
- case clang::Type::FunctionProto:
- case clang::Type::Record:
- case clang::Type::ConstantArray:
- case clang::Type::Paren:
- case clang::Type::Decayed:
- case clang::Type::Attributed:
- case clang::Type::IncompleteArray:
- case clang::Type::BlockPointer:
- case clang::Type::LValueReference:
- case clang::Type::RValueReference:
- case clang::Type::MemberPointer:
- case clang::Type::VariableArray:
- case clang::Type::DependentSizedArray:
- case clang::Type::DependentSizedExtVector:
- case clang::Type::Vector:
- case clang::Type::ExtVector:
- case clang::Type::FunctionNoProto:
- case clang::Type::UnresolvedUsing:
- case clang::Type::Adjusted:
- case clang::Type::TypeOfExpr:
- case clang::Type::TypeOf:
- case clang::Type::Decltype:
- case clang::Type::UnaryTransform:
- case clang::Type::TemplateTypeParm:
- case clang::Type::SubstTemplateTypeParm:
- case clang::Type::SubstTemplateTypeParmPack:
- case clang::Type::TemplateSpecialization:
- case clang::Type::Auto:
- case clang::Type::InjectedClassName:
- case clang::Type::DependentName:
- case clang::Type::DependentTemplateSpecialization:
- case clang::Type::PackExpansion:
- case clang::Type::ObjCObject:
- case clang::Type::ObjCInterface:
- case clang::Type::Complex:
- case clang::Type::ObjCObjectPointer:
- case clang::Type::Atomic:
- case clang::Type::Pipe:
- case clang::Type::ObjCTypeParam:
- case clang::Type::DeducedTemplateSpecialization:
- case clang::Type::DependentAddressSpace:
- case clang::Type::DependentVector:
+ case ZigClangType_FunctionProto:
+ case ZigClangType_Record:
+ case ZigClangType_ConstantArray:
+ case ZigClangType_Paren:
+ case ZigClangType_Decayed:
+ case ZigClangType_Attributed:
+ case ZigClangType_IncompleteArray:
+ case ZigClangType_BlockPointer:
+ case ZigClangType_LValueReference:
+ case ZigClangType_RValueReference:
+ case ZigClangType_MemberPointer:
+ case ZigClangType_VariableArray:
+ case ZigClangType_DependentSizedArray:
+ case ZigClangType_DependentSizedExtVector:
+ case ZigClangType_Vector:
+ case ZigClangType_ExtVector:
+ case ZigClangType_FunctionNoProto:
+ case ZigClangType_UnresolvedUsing:
+ case ZigClangType_Adjusted:
+ case ZigClangType_TypeOfExpr:
+ case ZigClangType_TypeOf:
+ case ZigClangType_Decltype:
+ case ZigClangType_UnaryTransform:
+ case ZigClangType_TemplateTypeParm:
+ case ZigClangType_SubstTemplateTypeParm:
+ case ZigClangType_SubstTemplateTypeParmPack:
+ case ZigClangType_TemplateSpecialization:
+ case ZigClangType_Auto:
+ case ZigClangType_InjectedClassName:
+ case ZigClangType_DependentName:
+ case ZigClangType_DependentTemplateSpecialization:
+ case ZigClangType_PackExpansion:
+ case ZigClangType_ObjCObject:
+ case ZigClangType_ObjCInterface:
+ case ZigClangType_Complex:
+ case ZigClangType_ObjCObjectPointer:
+ case ZigClangType_Atomic:
+ case ZigClangType_Pipe:
+ case ZigClangType_ObjCTypeParam:
+ case ZigClangType_DeducedTemplateSpecialization:
+ case ZigClangType_DependentAddressSpace:
+ case ZigClangType_DependentVector:
return res;
}
zig_unreachable();
@@ -2752,11 +2920,12 @@ static AstNode *trans_bool_expr(Context *c, ResultUsed result_used, TransScope *
static AstNode *trans_while_loop(Context *c, TransScope *scope, const clang::WhileStmt *stmt) {
TransScopeWhile *while_scope = trans_scope_while_create(c, scope);
- while_scope->node->data.while_expr.condition = trans_bool_expr(c, ResultUsedYes, scope, stmt->getCond(), TransRValue);
+ while_scope->node->data.while_expr.condition = trans_bool_expr(c, ResultUsedYes, scope,
+ bitcast(stmt->getCond()), TransRValue);
if (while_scope->node->data.while_expr.condition == nullptr)
return nullptr;
- TransScope *body_scope = trans_stmt(c, &while_scope->base, stmt->getBody(),
+ TransScope *body_scope = trans_stmt(c, &while_scope->base, bitcast(stmt->getBody()),
&while_scope->node->data.while_expr.body);
if (body_scope == nullptr)
return nullptr;
@@ -2769,17 +2938,18 @@ static AstNode *trans_if_statement(Context *c, TransScope *scope, const clang::I
// if (c) t else e
AstNode *if_node = trans_create_node(c, NodeTypeIfBoolExpr);
- TransScope *then_scope = trans_stmt(c, scope, stmt->getThen(), &if_node->data.if_bool_expr.then_block);
+ TransScope *then_scope = trans_stmt(c, scope, bitcast(stmt->getThen()), &if_node->data.if_bool_expr.then_block);
if (then_scope == nullptr)
return nullptr;
if (stmt->getElse() != nullptr) {
- TransScope *else_scope = trans_stmt(c, scope, stmt->getElse(), &if_node->data.if_bool_expr.else_node);
+ TransScope *else_scope = trans_stmt(c, scope, bitcast(stmt->getElse()), &if_node->data.if_bool_expr.else_node);
if (else_scope == nullptr)
return nullptr;
}
- if_node->data.if_bool_expr.condition = trans_bool_expr(c, ResultUsedYes, scope, stmt->getCond(), TransRValue);
+ if_node->data.if_bool_expr.condition = trans_bool_expr(c, ResultUsedYes, scope, bitcast(stmt->getCond()),
+ TransRValue);
if (if_node->data.if_bool_expr.condition == nullptr)
return nullptr;
@@ -2789,18 +2959,18 @@ static AstNode *trans_if_statement(Context *c, TransScope *scope, const clang::I
static AstNode *trans_call_expr(Context *c, ResultUsed result_used, TransScope *scope, const clang::CallExpr *stmt) {
AstNode *node = trans_create_node(c, NodeTypeFnCallExpr);
- AstNode *callee_raw_node = trans_expr(c, ResultUsedYes, scope, stmt->getCallee(), TransRValue);
+ AstNode *callee_raw_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getCallee()), TransRValue);
if (callee_raw_node == nullptr)
return nullptr;
bool is_ptr = false;
- const clang::FunctionProtoType *fn_ty = qual_type_get_fn_proto(stmt->getCallee()->getType(), &is_ptr);
+ const clang::FunctionProtoType *fn_ty = qual_type_get_fn_proto(bitcast(stmt->getCallee()->getType()), &is_ptr);
AstNode *callee_node = nullptr;
if (is_ptr && fn_ty) {
- if (stmt->getCallee()->getStmtClass() == clang::Stmt::ImplicitCastExprClass) {
+ if ((ZigClangStmtClass)stmt->getCallee()->getStmtClass() == ZigClangStmt_ImplicitCastExprClass) {
const clang::ImplicitCastExpr *implicit_cast = static_cast<const clang::ImplicitCastExpr *>(stmt->getCallee());
- if (implicit_cast->getCastKind() == clang::CK_FunctionToPointerDecay) {
- if (implicit_cast->getSubExpr()->getStmtClass() == clang::Stmt::DeclRefExprClass) {
+ if ((ZigClangCK)implicit_cast->getCastKind() == ZigClangCK_FunctionToPointerDecay) {
+ if ((ZigClangStmtClass)implicit_cast->getSubExpr()->getStmtClass() == ZigClangStmt_DeclRefExprClass) {
const clang::DeclRefExpr *decl_ref = static_cast<const clang::DeclRefExpr *>(implicit_cast->getSubExpr());
const clang::Decl *decl = decl_ref->getFoundDecl();
if (decl->getKind() == clang::Decl::Function) {
@@ -2819,7 +2989,7 @@ static AstNode *trans_call_expr(Context *c, ResultUsed result_used, TransScope *
node->data.fn_call_expr.fn_ref_expr = callee_node;
unsigned num_args = stmt->getNumArgs();
- const clang::Expr * const* args = stmt->getArgs();
+ const ZigClangExpr * const* args = reinterpret_cast<const ZigClangExpr * const*>(stmt->getArgs());
for (unsigned i = 0; i < num_args; i += 1) {
AstNode *arg_node = trans_expr(c, ResultUsedYes, scope, args[i], TransRValue);
if (arg_node == nullptr)
@@ -2828,7 +2998,9 @@ static AstNode *trans_call_expr(Context *c, ResultUsed result_used, TransScope *
node->data.fn_call_expr.params.append(arg_node);
}
- if (result_used == ResultUsedNo && fn_ty && !qual_type_canon(fn_ty->getReturnType())->isVoidType()) {
+ if (result_used == ResultUsedNo && fn_ty &&
+ !ZigClangType_isVoidType(qual_type_canon(bitcast(fn_ty->getReturnType()))))
+ {
node = trans_create_node_bin_op(c, trans_create_node_symbol_str(c, "_"), BinOpTypeAssign, node);
}
@@ -2838,7 +3010,7 @@ static AstNode *trans_call_expr(Context *c, ResultUsed result_used, TransScope *
static AstNode *trans_member_expr(Context *c, ResultUsed result_used, TransScope *scope,
const clang::MemberExpr *stmt)
{
- AstNode *container_node = trans_expr(c, ResultUsedYes, scope, stmt->getBase(), TransRValue);
+ AstNode *container_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getBase()), TransRValue);
if (container_node == nullptr)
return nullptr;
@@ -2846,18 +3018,18 @@ static AstNode *trans_member_expr(Context *c, ResultUsed result_used, TransScope
container_node = trans_create_node_unwrap_null(c, container_node);
}
- const char *name = decl_name(stmt->getMemberDecl());
+ const char *name = ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)stmt->getMemberDecl());
AstNode *node = trans_create_node_field_access_str(c, container_node, name);
return maybe_suppress_result(c, result_used, node);
}
static AstNode *trans_array_subscript_expr(Context *c, ResultUsed result_used, TransScope *scope, const clang::ArraySubscriptExpr *stmt) {
- AstNode *container_node = trans_expr(c, ResultUsedYes, scope, stmt->getBase(), TransRValue);
+ AstNode *container_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getBase()), TransRValue);
if (container_node == nullptr)
return nullptr;
- AstNode *idx_node = trans_expr(c, ResultUsedYes, scope, stmt->getIdx(), TransRValue);
+ AstNode *idx_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getIdx()), TransRValue);
if (idx_node == nullptr)
return nullptr;
@@ -2871,11 +3043,12 @@ static AstNode *trans_array_subscript_expr(Context *c, ResultUsed result_used, T
static AstNode *trans_c_style_cast_expr(Context *c, ResultUsed result_used, TransScope *scope,
const clang::CStyleCastExpr *stmt, TransLRValue lrvalue)
{
- AstNode *sub_expr_node = trans_expr(c, ResultUsedYes, scope, stmt->getSubExpr(), lrvalue);
+ AstNode *sub_expr_node = trans_expr(c, ResultUsedYes, scope, bitcast(stmt->getSubExpr()), lrvalue);
if (sub_expr_node == nullptr)
return nullptr;
- AstNode *cast = trans_c_cast(c, stmt->getBeginLoc(), stmt->getType(), stmt->getSubExpr()->getType(), sub_expr_node);
+ AstNode *cast = trans_c_cast(c, bitcast(stmt->getBeginLoc()), bitcast(stmt->getType()),
+ bitcast(stmt->getSubExpr()->getType()), sub_expr_node);
if (cast == nullptr)
return nullptr;
@@ -2885,7 +3058,7 @@ static AstNode *trans_c_style_cast_expr(Context *c, ResultUsed result_used, Tran
static AstNode *trans_unary_expr_or_type_trait_expr(Context *c, ResultUsed result_used,
TransScope *scope, const clang::UnaryExprOrTypeTraitExpr *stmt)
{
- AstNode *type_node = trans_qual_type(c, stmt->getTypeOfArgument(), stmt->getBeginLoc());
+ AstNode *type_node = trans_qual_type(c, bitcast(stmt->getTypeOfArgument()), bitcast(stmt->getBeginLoc()));
if (type_node == nullptr)
return nullptr;
@@ -2901,7 +3074,7 @@ static AstNode *trans_do_loop(Context *c, TransScope *parent_scope, const clang:
AstNode *body_node;
TransScope *child_scope;
- if (stmt->getBody()->getStmtClass() == clang::Stmt::CompoundStmtClass) {
+ if ((ZigClangStmtClass)stmt->getBody()->getStmtClass() == ZigClangStmt_CompoundStmtClass) {
// there's already a block in C, so we'll append our condition to it.
// c: do {
// c: a;
@@ -2914,7 +3087,7 @@ static AstNode *trans_do_loop(Context *c, TransScope *parent_scope, const clang:
// zig: }
// We call the low level function so that we can set child_scope to the scope of the generated block.
- if (trans_stmt_extra(c, &while_scope->base, stmt->getBody(), ResultUsedNo, TransRValue, &body_node,
+ if (trans_stmt_extra(c, &while_scope->base, bitcast(stmt->getBody()), ResultUsedNo, TransRValue, &body_node,
nullptr, &child_scope))
{
return nullptr;
@@ -2932,7 +3105,7 @@ static AstNode *trans_do_loop(Context *c, TransScope *parent_scope, const clang:
TransScopeBlock *child_block_scope = trans_scope_block_create(c, &while_scope->base);
body_node = child_block_scope->node;
AstNode *child_statement;
- child_scope = trans_stmt(c, &child_block_scope->base, stmt->getBody(), &child_statement);
+ child_scope = trans_stmt(c, &child_block_scope->base, bitcast(stmt->getBody()), &child_statement);
if (child_scope == nullptr) return nullptr;
if (child_statement != nullptr) {
body_node->data.block.statements.append(child_statement);
@@ -2940,7 +3113,7 @@ static AstNode *trans_do_loop(Context *c, TransScope *parent_scope, const clang:
}
// if (!cond) break;
- AstNode *condition_node = trans_expr(c, ResultUsedYes, child_scope, stmt->getCond(), TransRValue);
+ AstNode *condition_node = trans_expr(c, ResultUsedYes, child_scope, bitcast(stmt->getCond()), TransRValue);
if (condition_node == nullptr) return nullptr;
AstNode *terminator_node = trans_create_node(c, NodeTypeIfBoolExpr);
terminator_node->data.if_bool_expr.condition = trans_create_node_prefix_op(c, PrefixOpBoolNot, condition_node);
@@ -2958,7 +3131,7 @@ static AstNode *trans_for_loop(Context *c, TransScope *parent_scope, const clang
AstNode *loop_block_node;
TransScopeWhile *while_scope;
TransScope *cond_scope;
- const clang::Stmt *init_stmt = stmt->getInit();
+ const ZigClangStmt *init_stmt = bitcast(stmt->getInit());
if (init_stmt == nullptr) {
while_scope = trans_scope_while_create(c, parent_scope);
loop_block_node = while_scope->node;
@@ -2979,35 +3152,27 @@ static AstNode *trans_for_loop(Context *c, TransScope *parent_scope, const clang
child_scope->node->data.block.statements.append(while_scope->node);
}
- const clang::Stmt *cond_stmt = stmt->getCond();
- if (cond_stmt == nullptr) {
+ const ZigClangExpr *cond_expr = bitcast(stmt->getCond());
+ if (cond_expr == nullptr) {
while_scope->node->data.while_expr.condition = trans_create_node_bool(c, true);
} else {
- if (clang::Expr::classof(cond_stmt)) {
- const clang::Expr *cond_expr = static_cast<const clang::Expr*>(cond_stmt);
- while_scope->node->data.while_expr.condition = trans_bool_expr(c, ResultUsedYes, cond_scope, cond_expr, TransRValue);
+ while_scope->node->data.while_expr.condition = trans_bool_expr(c, ResultUsedYes, cond_scope,
+ cond_expr, TransRValue);
- if (while_scope->node->data.while_expr.condition == nullptr)
- return nullptr;
- } else {
- TransScope *end_cond_scope = trans_stmt(c, cond_scope, cond_stmt,
- &while_scope->node->data.while_expr.condition);
- if (end_cond_scope == nullptr)
- return nullptr;
- }
+ if (while_scope->node->data.while_expr.condition == nullptr)
+ return nullptr;
}
- const clang::Stmt *inc_stmt = stmt->getInc();
- if (inc_stmt != nullptr) {
- AstNode *inc_node;
- TransScope *inc_scope = trans_stmt(c, cond_scope, inc_stmt, &inc_node);
- if (inc_scope == nullptr)
+ const ZigClangExpr *inc_expr = bitcast(stmt->getInc());
+ if (inc_expr != nullptr) {
+ AstNode *inc_node = trans_expr(c, ResultUsedNo, cond_scope, inc_expr, TransRValue);
+ if (inc_node == nullptr)
return nullptr;
while_scope->node->data.while_expr.continue_expr = inc_node;
}
AstNode *body_statement;
- TransScope *body_scope = trans_stmt(c, &while_scope->base, stmt->getBody(), &body_statement);
+ TransScope *body_scope = trans_stmt(c, &while_scope->base, bitcast(stmt->getBody()), &body_statement);
if (body_scope == nullptr)
return nullptr;
@@ -3030,7 +3195,7 @@ static AstNode *trans_switch_stmt(Context *c, TransScope *parent_scope, const cl
switch_scope = trans_scope_switch_create(c, &block_scope->base);
} else {
AstNode *vars_node;
- TransScope *var_scope = trans_stmt(c, &block_scope->base, var_decl_stmt, &vars_node);
+ TransScope *var_scope = trans_stmt(c, &block_scope->base, (const ZigClangStmt *)var_decl_stmt, &vars_node);
if (var_scope == nullptr)
return nullptr;
if (vars_node != nullptr)
@@ -3044,7 +3209,7 @@ static AstNode *trans_switch_stmt(Context *c, TransScope *parent_scope, const cl
switch_scope->end_label_name = end_label_name;
block_scope->node->data.block.name = end_label_name;
- const clang::Expr *cond_expr = stmt->getCond();
+ const ZigClangExpr *cond_expr = bitcast(stmt->getCond());
assert(cond_expr != nullptr);
AstNode *expr_node = trans_expr(c, ResultUsedYes, &block_scope->base, cond_expr, TransRValue);
@@ -3053,9 +3218,9 @@ static AstNode *trans_switch_stmt(Context *c, TransScope *parent_scope, const cl
switch_scope->switch_node->data.switch_expr.expr = expr_node;
AstNode *body_node;
- const clang::Stmt *body_stmt = stmt->getBody();
- if (body_stmt->getStmtClass() == clang::Stmt::CompoundStmtClass) {
- if (trans_compound_stmt_inline(c, &switch_scope->base, (const clang::CompoundStmt *)body_stmt,
+ const ZigClangStmt *body_stmt = bitcast(stmt->getBody());
+ if (ZigClangStmt_getStmtClass(body_stmt) == ZigClangStmt_CompoundStmtClass) {
+ if (trans_compound_stmt_inline(c, &switch_scope->base, (const ZigClangCompoundStmt *)body_stmt,
block_scope->node, nullptr))
{
return nullptr;
@@ -3092,7 +3257,7 @@ static int trans_switch_case(Context *c, TransScope *parent_scope, const clang::
*out_node = nullptr;
if (stmt->getRHS() != nullptr) {
- emit_warning(c, stmt->getBeginLoc(), "TODO support GNU switch case a ... b extension");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO support GNU switch case a ... b extension");
return ErrorUnexpected;
}
@@ -3105,7 +3270,7 @@ static int trans_switch_case(Context *c, TransScope *parent_scope, const clang::
{
// Add the prong
AstNode *prong_node = trans_create_node(c, NodeTypeSwitchProng);
- AstNode *item_node = trans_expr(c, ResultUsedYes, &switch_scope->base, stmt->getLHS(), TransRValue);
+ AstNode *item_node = trans_expr(c, ResultUsedYes, &switch_scope->base, bitcast(stmt->getLHS()), TransRValue);
if (item_node == nullptr)
return ErrorUnexpected;
prong_node->data.switch_prong.items.append(item_node);
@@ -3122,7 +3287,7 @@ static int trans_switch_case(Context *c, TransScope *parent_scope, const clang::
scope_block->node->data.block.statements.append(case_block);
AstNode *sub_stmt_node;
- TransScope *new_scope = trans_stmt(c, parent_scope, stmt->getSubStmt(), &sub_stmt_node);
+ TransScope *new_scope = trans_stmt(c, parent_scope, bitcast(stmt->getSubStmt()), &sub_stmt_node);
if (new_scope == nullptr)
return ErrorUnexpected;
if (sub_stmt_node != nullptr)
@@ -3159,7 +3324,7 @@ static int trans_switch_default(Context *c, TransScope *parent_scope, const clan
scope_block->node->data.block.statements.append(case_block);
AstNode *sub_stmt_node;
- TransScope *new_scope = trans_stmt(c, parent_scope, stmt->getSubStmt(), &sub_stmt_node);
+ TransScope *new_scope = trans_stmt(c, parent_scope, bitcast(stmt->getSubStmt()), &sub_stmt_node);
if (new_scope == nullptr)
return ErrorUnexpected;
if (sub_stmt_node != nullptr)
@@ -3177,13 +3342,13 @@ static AstNode *trans_string_literal(Context *c, ResultUsed result_used, TransSc
return maybe_suppress_result(c, result_used, node);
}
case clang::StringLiteral::UTF16:
- emit_warning(c, stmt->getBeginLoc(), "TODO support UTF16 string literals");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO support UTF16 string literals");
return nullptr;
case clang::StringLiteral::UTF32:
- emit_warning(c, stmt->getBeginLoc(), "TODO support UTF32 string literals");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO support UTF32 string literals");
return nullptr;
case clang::StringLiteral::Wide:
- emit_warning(c, stmt->getBeginLoc(), "TODO support wide string literals");
+ emit_warning(c, bitcast(stmt->getBeginLoc()), "TODO support wide string literals");
return nullptr;
}
zig_unreachable();
@@ -3222,45 +3387,45 @@ static int wrap_stmt(AstNode **out_node, TransScope **out_scope, TransScope *in_
return ErrorNone;
}
-static int trans_stmt_extra(Context *c, TransScope *scope, const clang::Stmt *stmt,
+static int trans_stmt_extra(Context *c, TransScope *scope, const ZigClangStmt *stmt,
ResultUsed result_used, TransLRValue lrvalue,
AstNode **out_node, TransScope **out_child_scope,
TransScope **out_node_scope)
{
- clang::Stmt::StmtClass sc = stmt->getStmtClass();
+ ZigClangStmtClass sc = ZigClangStmt_getStmtClass(stmt);
switch (sc) {
- case clang::Stmt::ReturnStmtClass:
+ case ZigClangStmt_ReturnStmtClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_return_stmt(c, scope, (const clang::ReturnStmt *)stmt));
- case clang::Stmt::CompoundStmtClass:
+ case ZigClangStmt_CompoundStmtClass:
return wrap_stmt(out_node, out_child_scope, scope,
- trans_compound_stmt(c, scope, (const clang::CompoundStmt *)stmt, out_node_scope));
- case clang::Stmt::IntegerLiteralClass:
+ trans_compound_stmt(c, scope, (const ZigClangCompoundStmt *)stmt, out_node_scope));
+ case ZigClangStmt_IntegerLiteralClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_integer_literal(c, result_used, (const clang::IntegerLiteral *)stmt));
- case clang::Stmt::ConditionalOperatorClass:
+ case ZigClangStmt_ConditionalOperatorClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_conditional_operator(c, result_used, scope, (const clang::ConditionalOperator *)stmt));
- case clang::Stmt::BinaryOperatorClass:
+ case ZigClangStmt_BinaryOperatorClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_binary_operator(c, result_used, scope, (const clang::BinaryOperator *)stmt));
- case clang::Stmt::CompoundAssignOperatorClass:
+ case ZigClangStmt_CompoundAssignOperatorClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_compound_assign_operator(c, result_used, scope, (const clang::CompoundAssignOperator *)stmt));
- case clang::Stmt::ImplicitCastExprClass:
+ case ZigClangStmt_ImplicitCastExprClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_implicit_cast_expr(c, result_used, scope, (const clang::ImplicitCastExpr *)stmt));
- case clang::Stmt::DeclRefExprClass:
+ case ZigClangStmt_DeclRefExprClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_decl_ref_expr(c, scope, (const clang::DeclRefExpr *)stmt, lrvalue));
- case clang::Stmt::UnaryOperatorClass:
+ case ZigClangStmt_UnaryOperatorClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_unary_operator(c, result_used, scope, (const clang::UnaryOperator *)stmt));
- case clang::Stmt::DeclStmtClass:
+ case ZigClangStmt_DeclStmtClass:
return trans_local_declaration(c, scope, (const clang::DeclStmt *)stmt, out_node, out_child_scope);
- case clang::Stmt::DoStmtClass:
- case clang::Stmt::WhileStmtClass: {
- AstNode *while_node = sc == clang::Stmt::DoStmtClass
+ case ZigClangStmt_DoStmtClass:
+ case ZigClangStmt_WhileStmtClass: {
+ AstNode *while_node = sc == ZigClangStmt_DoStmtClass
? trans_do_loop(c, scope, (const clang::DoStmt *)stmt)
: trans_while_loop(c, scope, (const clang::WhileStmt *)stmt);
@@ -3273,572 +3438,574 @@ static int trans_stmt_extra(Context *c, TransScope *scope, const clang::Stmt *st
return wrap_stmt(out_node, out_child_scope, scope, while_node);
}
- case clang::Stmt::IfStmtClass:
+ case ZigClangStmt_IfStmtClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_if_statement(c, scope, (const clang::IfStmt *)stmt));
- case clang::Stmt::CallExprClass:
+ case ZigClangStmt_CallExprClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_call_expr(c, result_used, scope, (const clang::CallExpr *)stmt));
- case clang::Stmt::NullStmtClass:
+ case ZigClangStmt_NullStmtClass:
*out_node = trans_create_node(c, NodeTypeBlock);
*out_child_scope = scope;
return ErrorNone;
- case clang::Stmt::MemberExprClass:
+ case ZigClangStmt_MemberExprClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_member_expr(c, result_used, scope, (const clang::MemberExpr *)stmt));
- case clang::Stmt::ArraySubscriptExprClass:
+ case ZigClangStmt_ArraySubscriptExprClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_array_subscript_expr(c, result_used, scope, (const clang::ArraySubscriptExpr *)stmt));
- case clang::Stmt::CStyleCastExprClass:
+ case ZigClangStmt_CStyleCastExprClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_c_style_cast_expr(c, result_used, scope, (const clang::CStyleCastExpr *)stmt, lrvalue));
- case clang::Stmt::UnaryExprOrTypeTraitExprClass:
+ case ZigClangStmt_UnaryExprOrTypeTraitExprClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_unary_expr_or_type_trait_expr(c, result_used, scope, (const clang::UnaryExprOrTypeTraitExpr *)stmt));
- case clang::Stmt::ForStmtClass: {
+ case ZigClangStmt_ForStmtClass: {
AstNode *node = trans_for_loop(c, scope, (const clang::ForStmt *)stmt);
return wrap_stmt(out_node, out_child_scope, scope, node);
}
- case clang::Stmt::StringLiteralClass:
+ case ZigClangStmt_StringLiteralClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_string_literal(c, result_used, scope, (const clang::StringLiteral *)stmt));
- case clang::Stmt::BreakStmtClass:
+ case ZigClangStmt_BreakStmtClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_break_stmt(c, scope, (const clang::BreakStmt *)stmt));
- case clang::Stmt::ContinueStmtClass:
+ case ZigClangStmt_ContinueStmtClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_continue_stmt(c, scope, (const clang::ContinueStmt *)stmt));
- case clang::Stmt::ParenExprClass:
+ case ZigClangStmt_ParenExprClass:
return wrap_stmt(out_node, out_child_scope, scope,
- trans_expr(c, result_used, scope, ((const clang::ParenExpr*)stmt)->getSubExpr(), lrvalue));
- case clang::Stmt::SwitchStmtClass:
+ trans_expr(c, result_used, scope,
+ bitcast(((const clang::ParenExpr*)stmt)->getSubExpr()), lrvalue));
+ case ZigClangStmt_SwitchStmtClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_switch_stmt(c, scope, (const clang::SwitchStmt *)stmt));
- case clang::Stmt::CaseStmtClass:
+ case ZigClangStmt_CaseStmtClass:
return trans_switch_case(c, scope, (const clang::CaseStmt *)stmt, out_node, out_child_scope);
- case clang::Stmt::DefaultStmtClass:
+ case ZigClangStmt_DefaultStmtClass:
return trans_switch_default(c, scope, (const clang::DefaultStmt *)stmt, out_node, out_child_scope);
- case clang::Stmt::ConstantExprClass:
+ case ZigClangStmt_ConstantExprClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_constant_expr(c, result_used, (const clang::ConstantExpr *)stmt));
- case clang::Stmt::PredefinedExprClass:
+ case ZigClangStmt_PredefinedExprClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_predefined_expr(c, result_used, scope, (const clang::PredefinedExpr *)stmt));
- case clang::Stmt::StmtExprClass:
+ case ZigClangStmt_StmtExprClass:
return wrap_stmt(out_node, out_child_scope, scope,
trans_stmt_expr(c, result_used, scope, (const clang::StmtExpr *)stmt, out_node_scope));
- case clang::Stmt::NoStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C NoStmtClass");
- return ErrorUnexpected;
- case clang::Stmt::GCCAsmStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C GCCAsmStmtClass");
+ case ZigClangStmt_NoStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C NoStmtClass");
return ErrorUnexpected;
- case clang::Stmt::MSAsmStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C MSAsmStmtClass");
+ case ZigClangStmt_GCCAsmStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C GCCAsmStmtClass");
return ErrorUnexpected;
- case clang::Stmt::AttributedStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C AttributedStmtClass");
+ case ZigClangStmt_MSAsmStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C MSAsmStmtClass");
return ErrorUnexpected;
- case clang::Stmt::CXXCatchStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXCatchStmtClass");
+ case ZigClangStmt_AttributedStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C AttributedStmtClass");
return ErrorUnexpected;
- case clang::Stmt::CXXForRangeStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXForRangeStmtClass");
+ case ZigClangStmt_CXXCatchStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXCatchStmtClass");
return ErrorUnexpected;
- case clang::Stmt::CXXTryStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXTryStmtClass");
+ case ZigClangStmt_CXXForRangeStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXForRangeStmtClass");
return ErrorUnexpected;
- case clang::Stmt::CapturedStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CapturedStmtClass");
+ case ZigClangStmt_CXXTryStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXTryStmtClass");
return ErrorUnexpected;
- case clang::Stmt::CoreturnStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CoreturnStmtClass");
+ case ZigClangStmt_CapturedStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CapturedStmtClass");
return ErrorUnexpected;
- case clang::Stmt::CoroutineBodyStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CoroutineBodyStmtClass");
+ case ZigClangStmt_CoreturnStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CoreturnStmtClass");
return ErrorUnexpected;
- case clang::Stmt::BinaryConditionalOperatorClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C BinaryConditionalOperatorClass");
+ case ZigClangStmt_CoroutineBodyStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CoroutineBodyStmtClass");
return ErrorUnexpected;
- case clang::Stmt::AddrLabelExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C AddrLabelExprClass");
+ case ZigClangStmt_BinaryConditionalOperatorClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C BinaryConditionalOperatorClass");
return ErrorUnexpected;
- case clang::Stmt::ArrayInitIndexExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ArrayInitIndexExprClass");
+ case ZigClangStmt_AddrLabelExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C AddrLabelExprClass");
return ErrorUnexpected;
- case clang::Stmt::ArrayInitLoopExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ArrayInitLoopExprClass");
+ case ZigClangStmt_ArrayInitIndexExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ArrayInitIndexExprClass");
return ErrorUnexpected;
- case clang::Stmt::ArrayTypeTraitExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ArrayTypeTraitExprClass");
+ case ZigClangStmt_ArrayInitLoopExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ArrayInitLoopExprClass");
return ErrorUnexpected;
- case clang::Stmt::AsTypeExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C AsTypeExprClass");
+ case ZigClangStmt_ArrayTypeTraitExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ArrayTypeTraitExprClass");
return ErrorUnexpected;
- case clang::Stmt::AtomicExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C AtomicExprClass");
+ case ZigClangStmt_AsTypeExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C AsTypeExprClass");
return ErrorUnexpected;
- case clang::Stmt::BlockExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C BlockExprClass");
+ case ZigClangStmt_AtomicExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C AtomicExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXBindTemporaryExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXBindTemporaryExprClass");
+ case ZigClangStmt_BlockExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C BlockExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXBoolLiteralExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXBoolLiteralExprClass");
+ case ZigClangStmt_CXXBindTemporaryExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXBindTemporaryExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXConstructExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXConstructExprClass");
+ case ZigClangStmt_CXXBoolLiteralExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXBoolLiteralExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXTemporaryObjectExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXTemporaryObjectExprClass");
+ case ZigClangStmt_CXXConstructExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXConstructExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXDefaultArgExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXDefaultArgExprClass");
+ case ZigClangStmt_CXXTemporaryObjectExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXTemporaryObjectExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXDefaultInitExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXDefaultInitExprClass");
+ case ZigClangStmt_CXXDefaultArgExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXDefaultArgExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXDeleteExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXDeleteExprClass");
+ case ZigClangStmt_CXXDefaultInitExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXDefaultInitExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXDependentScopeMemberExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXDependentScopeMemberExprClass");
+ case ZigClangStmt_CXXDeleteExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXDeleteExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXFoldExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXFoldExprClass");
+ case ZigClangStmt_CXXDependentScopeMemberExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXDependentScopeMemberExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXInheritedCtorInitExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXInheritedCtorInitExprClass");
+ case ZigClangStmt_CXXFoldExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXFoldExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXNewExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXNewExprClass");
+ case ZigClangStmt_CXXInheritedCtorInitExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXInheritedCtorInitExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXNoexceptExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXNoexceptExprClass");
+ case ZigClangStmt_CXXNewExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXNewExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXNullPtrLiteralExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXNullPtrLiteralExprClass");
+ case ZigClangStmt_CXXNoexceptExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXNoexceptExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXPseudoDestructorExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXPseudoDestructorExprClass");
+ case ZigClangStmt_CXXNullPtrLiteralExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXNullPtrLiteralExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXScalarValueInitExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXScalarValueInitExprClass");
+ case ZigClangStmt_CXXPseudoDestructorExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXPseudoDestructorExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXStdInitializerListExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXStdInitializerListExprClass");
+ case ZigClangStmt_CXXScalarValueInitExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXScalarValueInitExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXThisExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXThisExprClass");
+ case ZigClangStmt_CXXStdInitializerListExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXStdInitializerListExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXThrowExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXThrowExprClass");
+ case ZigClangStmt_CXXThisExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXThisExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXTypeidExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXTypeidExprClass");
+ case ZigClangStmt_CXXThrowExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXThrowExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXUnresolvedConstructExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXUnresolvedConstructExprClass");
+ case ZigClangStmt_CXXTypeidExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXTypeidExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXUuidofExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXUuidofExprClass");
+ case ZigClangStmt_CXXUnresolvedConstructExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXUnresolvedConstructExprClass");
return ErrorUnexpected;
- case clang::Stmt::CUDAKernelCallExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CUDAKernelCallExprClass");
+ case ZigClangStmt_CXXUuidofExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXUuidofExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXMemberCallExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXMemberCallExprClass");
+ case ZigClangStmt_CUDAKernelCallExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CUDAKernelCallExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXOperatorCallExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXOperatorCallExprClass");
+ case ZigClangStmt_CXXMemberCallExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXMemberCallExprClass");
return ErrorUnexpected;
- case clang::Stmt::UserDefinedLiteralClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C UserDefinedLiteralClass");
+ case ZigClangStmt_CXXOperatorCallExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXOperatorCallExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXFunctionalCastExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXFunctionalCastExprClass");
+ case ZigClangStmt_UserDefinedLiteralClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C UserDefinedLiteralClass");
return ErrorUnexpected;
- case clang::Stmt::CXXConstCastExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXConstCastExprClass");
+ case ZigClangStmt_CXXFunctionalCastExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXFunctionalCastExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXDynamicCastExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXDynamicCastExprClass");
+ case ZigClangStmt_CXXConstCastExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXConstCastExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXReinterpretCastExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXReinterpretCastExprClass");
+ case ZigClangStmt_CXXDynamicCastExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXDynamicCastExprClass");
return ErrorUnexpected;
- case clang::Stmt::CXXStaticCastExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CXXStaticCastExprClass");
+ case ZigClangStmt_CXXReinterpretCastExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXReinterpretCastExprClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCBridgedCastExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCBridgedCastExprClass");
+ case ZigClangStmt_CXXStaticCastExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CXXStaticCastExprClass");
return ErrorUnexpected;
- case clang::Stmt::CharacterLiteralClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CharacterLiteralClass");
+ case ZigClangStmt_ObjCBridgedCastExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCBridgedCastExprClass");
return ErrorUnexpected;
- case clang::Stmt::ChooseExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ChooseExprClass");
+ case ZigClangStmt_CharacterLiteralClass:
+ return wrap_stmt(out_node, out_child_scope, scope,
+ trans_character_literal(c, result_used, (const clang::CharacterLiteral *)stmt));
return ErrorUnexpected;
- case clang::Stmt::CompoundLiteralExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CompoundLiteralExprClass");
+ case ZigClangStmt_ChooseExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ChooseExprClass");
return ErrorUnexpected;
- case clang::Stmt::ConvertVectorExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ConvertVectorExprClass");
+ case ZigClangStmt_CompoundLiteralExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CompoundLiteralExprClass");
return ErrorUnexpected;
- case clang::Stmt::CoawaitExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CoawaitExprClass");
+ case ZigClangStmt_ConvertVectorExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ConvertVectorExprClass");
return ErrorUnexpected;
- case clang::Stmt::CoyieldExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C CoyieldExprClass");
+ case ZigClangStmt_CoawaitExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CoawaitExprClass");
return ErrorUnexpected;
- case clang::Stmt::DependentCoawaitExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C DependentCoawaitExprClass");
+ case ZigClangStmt_CoyieldExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C CoyieldExprClass");
return ErrorUnexpected;
- case clang::Stmt::DependentScopeDeclRefExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C DependentScopeDeclRefExprClass");
+ case ZigClangStmt_DependentCoawaitExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C DependentCoawaitExprClass");
return ErrorUnexpected;
- case clang::Stmt::DesignatedInitExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C DesignatedInitExprClass");
+ case ZigClangStmt_DependentScopeDeclRefExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C DependentScopeDeclRefExprClass");
return ErrorUnexpected;
- case clang::Stmt::DesignatedInitUpdateExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C DesignatedInitUpdateExprClass");
+ case ZigClangStmt_DesignatedInitExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C DesignatedInitExprClass");
return ErrorUnexpected;
- case clang::Stmt::ExpressionTraitExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ExpressionTraitExprClass");
+ case ZigClangStmt_DesignatedInitUpdateExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C DesignatedInitUpdateExprClass");
return ErrorUnexpected;
- case clang::Stmt::ExtVectorElementExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ExtVectorElementExprClass");
+ case ZigClangStmt_ExpressionTraitExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ExpressionTraitExprClass");
return ErrorUnexpected;
- case clang::Stmt::FixedPointLiteralClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C FixedPointLiteralClass");
+ case ZigClangStmt_ExtVectorElementExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ExtVectorElementExprClass");
return ErrorUnexpected;
- case clang::Stmt::FloatingLiteralClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C FloatingLiteralClass");
+ case ZigClangStmt_FixedPointLiteralClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C FixedPointLiteralClass");
return ErrorUnexpected;
- case clang::Stmt::ExprWithCleanupsClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ExprWithCleanupsClass");
+ case ZigClangStmt_FloatingLiteralClass:
+ return wrap_stmt(out_node, out_child_scope, scope,
+ trans_floating_literal(c, result_used, (const clang::FloatingLiteral *)stmt));
+ case ZigClangStmt_ExprWithCleanupsClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ExprWithCleanupsClass");
return ErrorUnexpected;
- case clang::Stmt::FunctionParmPackExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C FunctionParmPackExprClass");
+ case ZigClangStmt_FunctionParmPackExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C FunctionParmPackExprClass");
return ErrorUnexpected;
- case clang::Stmt::GNUNullExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C GNUNullExprClass");
+ case ZigClangStmt_GNUNullExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C GNUNullExprClass");
return ErrorUnexpected;
- case clang::Stmt::GenericSelectionExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C GenericSelectionExprClass");
+ case ZigClangStmt_GenericSelectionExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C GenericSelectionExprClass");
return ErrorUnexpected;
- case clang::Stmt::ImaginaryLiteralClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ImaginaryLiteralClass");
+ case ZigClangStmt_ImaginaryLiteralClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ImaginaryLiteralClass");
return ErrorUnexpected;
- case clang::Stmt::ImplicitValueInitExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ImplicitValueInitExprClass");
+ case ZigClangStmt_ImplicitValueInitExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ImplicitValueInitExprClass");
return ErrorUnexpected;
- case clang::Stmt::InitListExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C InitListExprClass");
+ case ZigClangStmt_InitListExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C InitListExprClass");
return ErrorUnexpected;
- case clang::Stmt::LambdaExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C LambdaExprClass");
+ case ZigClangStmt_LambdaExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C LambdaExprClass");
return ErrorUnexpected;
- case clang::Stmt::MSPropertyRefExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C MSPropertyRefExprClass");
+ case ZigClangStmt_MSPropertyRefExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C MSPropertyRefExprClass");
return ErrorUnexpected;
- case clang::Stmt::MSPropertySubscriptExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C MSPropertySubscriptExprClass");
+ case ZigClangStmt_MSPropertySubscriptExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C MSPropertySubscriptExprClass");
return ErrorUnexpected;
- case clang::Stmt::MaterializeTemporaryExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C MaterializeTemporaryExprClass");
+ case ZigClangStmt_MaterializeTemporaryExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C MaterializeTemporaryExprClass");
return ErrorUnexpected;
- case clang::Stmt::NoInitExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C NoInitExprClass");
+ case ZigClangStmt_NoInitExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C NoInitExprClass");
return ErrorUnexpected;
- case clang::Stmt::OMPArraySectionExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPArraySectionExprClass");
+ case ZigClangStmt_OMPArraySectionExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPArraySectionExprClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCArrayLiteralClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCArrayLiteralClass");
+ case ZigClangStmt_ObjCArrayLiteralClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCArrayLiteralClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCAvailabilityCheckExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCAvailabilityCheckExprClass");
+ case ZigClangStmt_ObjCAvailabilityCheckExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCAvailabilityCheckExprClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCBoolLiteralExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCBoolLiteralExprClass");
+ case ZigClangStmt_ObjCBoolLiteralExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCBoolLiteralExprClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCBoxedExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCBoxedExprClass");
+ case ZigClangStmt_ObjCBoxedExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCBoxedExprClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCDictionaryLiteralClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCDictionaryLiteralClass");
+ case ZigClangStmt_ObjCDictionaryLiteralClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCDictionaryLiteralClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCEncodeExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCEncodeExprClass");
+ case ZigClangStmt_ObjCEncodeExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCEncodeExprClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCIndirectCopyRestoreExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCIndirectCopyRestoreExprClass");
+ case ZigClangStmt_ObjCIndirectCopyRestoreExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCIndirectCopyRestoreExprClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCIsaExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCIsaExprClass");
+ case ZigClangStmt_ObjCIsaExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCIsaExprClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCIvarRefExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCIvarRefExprClass");
+ case ZigClangStmt_ObjCIvarRefExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCIvarRefExprClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCMessageExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCMessageExprClass");
+ case ZigClangStmt_ObjCMessageExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCMessageExprClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCPropertyRefExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCPropertyRefExprClass");
+ case ZigClangStmt_ObjCPropertyRefExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCPropertyRefExprClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCProtocolExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCProtocolExprClass");
+ case ZigClangStmt_ObjCProtocolExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCProtocolExprClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCSelectorExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCSelectorExprClass");
+ case ZigClangStmt_ObjCSelectorExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCSelectorExprClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCStringLiteralClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCStringLiteralClass");
+ case ZigClangStmt_ObjCStringLiteralClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCStringLiteralClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCSubscriptRefExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCSubscriptRefExprClass");
+ case ZigClangStmt_ObjCSubscriptRefExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCSubscriptRefExprClass");
return ErrorUnexpected;
- case clang::Stmt::OffsetOfExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OffsetOfExprClass");
+ case ZigClangStmt_OffsetOfExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OffsetOfExprClass");
return ErrorUnexpected;
- case clang::Stmt::OpaqueValueExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OpaqueValueExprClass");
+ case ZigClangStmt_OpaqueValueExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OpaqueValueExprClass");
return ErrorUnexpected;
- case clang::Stmt::UnresolvedLookupExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C UnresolvedLookupExprClass");
+ case ZigClangStmt_UnresolvedLookupExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C UnresolvedLookupExprClass");
return ErrorUnexpected;
- case clang::Stmt::UnresolvedMemberExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C UnresolvedMemberExprClass");
+ case ZigClangStmt_UnresolvedMemberExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C UnresolvedMemberExprClass");
return ErrorUnexpected;
- case clang::Stmt::PackExpansionExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C PackExpansionExprClass");
+ case ZigClangStmt_PackExpansionExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C PackExpansionExprClass");
return ErrorUnexpected;
- case clang::Stmt::ParenListExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ParenListExprClass");
+ case ZigClangStmt_ParenListExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ParenListExprClass");
return ErrorUnexpected;
- case clang::Stmt::PseudoObjectExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C PseudoObjectExprClass");
+ case ZigClangStmt_PseudoObjectExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C PseudoObjectExprClass");
return ErrorUnexpected;
- case clang::Stmt::ShuffleVectorExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ShuffleVectorExprClass");
+ case ZigClangStmt_ShuffleVectorExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ShuffleVectorExprClass");
return ErrorUnexpected;
- case clang::Stmt::SizeOfPackExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C SizeOfPackExprClass");
+ case ZigClangStmt_SizeOfPackExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C SizeOfPackExprClass");
return ErrorUnexpected;
- case clang::Stmt::SubstNonTypeTemplateParmExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C SubstNonTypeTemplateParmExprClass");
+ case ZigClangStmt_SubstNonTypeTemplateParmExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C SubstNonTypeTemplateParmExprClass");
return ErrorUnexpected;
- case clang::Stmt::SubstNonTypeTemplateParmPackExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C SubstNonTypeTemplateParmPackExprClass");
+ case ZigClangStmt_SubstNonTypeTemplateParmPackExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C SubstNonTypeTemplateParmPackExprClass");
return ErrorUnexpected;
- case clang::Stmt::TypeTraitExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C TypeTraitExprClass");
+ case ZigClangStmt_TypeTraitExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C TypeTraitExprClass");
return ErrorUnexpected;
- case clang::Stmt::TypoExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C TypoExprClass");
+ case ZigClangStmt_TypoExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C TypoExprClass");
return ErrorUnexpected;
- case clang::Stmt::VAArgExprClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C VAArgExprClass");
+ case ZigClangStmt_VAArgExprClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C VAArgExprClass");
return ErrorUnexpected;
- case clang::Stmt::GotoStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C GotoStmtClass");
+ case ZigClangStmt_GotoStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C GotoStmtClass");
return ErrorUnexpected;
- case clang::Stmt::IndirectGotoStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C IndirectGotoStmtClass");
+ case ZigClangStmt_IndirectGotoStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C IndirectGotoStmtClass");
return ErrorUnexpected;
- case clang::Stmt::LabelStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C LabelStmtClass");
+ case ZigClangStmt_LabelStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C LabelStmtClass");
return ErrorUnexpected;
- case clang::Stmt::MSDependentExistsStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C MSDependentExistsStmtClass");
+ case ZigClangStmt_MSDependentExistsStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C MSDependentExistsStmtClass");
return ErrorUnexpected;
- case clang::Stmt::OMPAtomicDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPAtomicDirectiveClass");
+ case ZigClangStmt_OMPAtomicDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPAtomicDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPBarrierDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPBarrierDirectiveClass");
+ case ZigClangStmt_OMPBarrierDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPBarrierDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPCancelDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPCancelDirectiveClass");
+ case ZigClangStmt_OMPCancelDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPCancelDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPCancellationPointDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPCancellationPointDirectiveClass");
+ case ZigClangStmt_OMPCancellationPointDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPCancellationPointDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPCriticalDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPCriticalDirectiveClass");
+ case ZigClangStmt_OMPCriticalDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPCriticalDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPFlushDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPFlushDirectiveClass");
+ case ZigClangStmt_OMPFlushDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPFlushDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPDistributeDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPDistributeDirectiveClass");
+ case ZigClangStmt_OMPDistributeDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPDistributeDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPDistributeParallelForDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPDistributeParallelForDirectiveClass");
+ case ZigClangStmt_OMPDistributeParallelForDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPDistributeParallelForDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPDistributeParallelForSimdDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPDistributeParallelForSimdDirectiveClass");
+ case ZigClangStmt_OMPDistributeParallelForSimdDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPDistributeParallelForSimdDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPDistributeSimdDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPDistributeSimdDirectiveClass");
+ case ZigClangStmt_OMPDistributeSimdDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPDistributeSimdDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPForDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPForDirectiveClass");
+ case ZigClangStmt_OMPForDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPForDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPForSimdDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPForSimdDirectiveClass");
+ case ZigClangStmt_OMPForSimdDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPForSimdDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPParallelForDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPParallelForDirectiveClass");
+ case ZigClangStmt_OMPParallelForDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPParallelForDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPParallelForSimdDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPParallelForSimdDirectiveClass");
+ case ZigClangStmt_OMPParallelForSimdDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPParallelForSimdDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPSimdDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPSimdDirectiveClass");
+ case ZigClangStmt_OMPSimdDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPSimdDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTargetParallelForSimdDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetParallelForSimdDirectiveClass");
+ case ZigClangStmt_OMPTargetParallelForSimdDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTargetParallelForSimdDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTargetSimdDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetSimdDirectiveClass");
+ case ZigClangStmt_OMPTargetSimdDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTargetSimdDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTargetTeamsDistributeDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetTeamsDistributeDirectiveClass");
+ case ZigClangStmt_OMPTargetTeamsDistributeDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTargetTeamsDistributeDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTargetTeamsDistributeParallelForDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetTeamsDistributeParallelForDirectiveClass");
+ case ZigClangStmt_OMPTargetTeamsDistributeParallelForDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTargetTeamsDistributeParallelForDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTargetTeamsDistributeParallelForSimdDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetTeamsDistributeParallelForSimdDirectiveClass");
+ case ZigClangStmt_OMPTargetTeamsDistributeParallelForSimdDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTargetTeamsDistributeParallelForSimdDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTargetTeamsDistributeSimdDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetTeamsDistributeSimdDirectiveClass");
+ case ZigClangStmt_OMPTargetTeamsDistributeSimdDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTargetTeamsDistributeSimdDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTaskLoopDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTaskLoopDirectiveClass");
+ case ZigClangStmt_OMPTaskLoopDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTaskLoopDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTaskLoopSimdDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTaskLoopSimdDirectiveClass");
+ case ZigClangStmt_OMPTaskLoopSimdDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTaskLoopSimdDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTeamsDistributeDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTeamsDistributeDirectiveClass");
+ case ZigClangStmt_OMPTeamsDistributeDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTeamsDistributeDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTeamsDistributeParallelForDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTeamsDistributeParallelForDirectiveClass");
+ case ZigClangStmt_OMPTeamsDistributeParallelForDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTeamsDistributeParallelForDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTeamsDistributeParallelForSimdDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTeamsDistributeParallelForSimdDirectiveClass");
+ case ZigClangStmt_OMPTeamsDistributeParallelForSimdDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTeamsDistributeParallelForSimdDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTeamsDistributeSimdDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTeamsDistributeSimdDirectiveClass");
+ case ZigClangStmt_OMPTeamsDistributeSimdDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTeamsDistributeSimdDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPMasterDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPMasterDirectiveClass");
+ case ZigClangStmt_OMPMasterDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPMasterDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPOrderedDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPOrderedDirectiveClass");
+ case ZigClangStmt_OMPOrderedDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPOrderedDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPParallelDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPParallelDirectiveClass");
+ case ZigClangStmt_OMPParallelDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPParallelDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPParallelSectionsDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPParallelSectionsDirectiveClass");
+ case ZigClangStmt_OMPParallelSectionsDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPParallelSectionsDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPSectionDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPSectionDirectiveClass");
+ case ZigClangStmt_OMPSectionDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPSectionDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPSectionsDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPSectionsDirectiveClass");
+ case ZigClangStmt_OMPSectionsDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPSectionsDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPSingleDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPSingleDirectiveClass");
+ case ZigClangStmt_OMPSingleDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPSingleDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTargetDataDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetDataDirectiveClass");
+ case ZigClangStmt_OMPTargetDataDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTargetDataDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTargetDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetDirectiveClass");
+ case ZigClangStmt_OMPTargetDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTargetDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTargetEnterDataDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetEnterDataDirectiveClass");
+ case ZigClangStmt_OMPTargetEnterDataDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTargetEnterDataDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTargetExitDataDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetExitDataDirectiveClass");
+ case ZigClangStmt_OMPTargetExitDataDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTargetExitDataDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTargetParallelDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetParallelDirectiveClass");
+ case ZigClangStmt_OMPTargetParallelDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTargetParallelDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTargetParallelForDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetParallelForDirectiveClass");
+ case ZigClangStmt_OMPTargetParallelForDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTargetParallelForDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTargetTeamsDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetTeamsDirectiveClass");
+ case ZigClangStmt_OMPTargetTeamsDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTargetTeamsDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTargetUpdateDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTargetUpdateDirectiveClass");
+ case ZigClangStmt_OMPTargetUpdateDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTargetUpdateDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTaskDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTaskDirectiveClass");
+ case ZigClangStmt_OMPTaskDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTaskDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTaskgroupDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTaskgroupDirectiveClass");
+ case ZigClangStmt_OMPTaskgroupDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTaskgroupDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTaskwaitDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTaskwaitDirectiveClass");
+ case ZigClangStmt_OMPTaskwaitDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTaskwaitDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTaskyieldDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTaskyieldDirectiveClass");
+ case ZigClangStmt_OMPTaskyieldDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTaskyieldDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::OMPTeamsDirectiveClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C OMPTeamsDirectiveClass");
+ case ZigClangStmt_OMPTeamsDirectiveClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C OMPTeamsDirectiveClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCAtCatchStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCAtCatchStmtClass");
+ case ZigClangStmt_ObjCAtCatchStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCAtCatchStmtClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCAtFinallyStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCAtFinallyStmtClass");
+ case ZigClangStmt_ObjCAtFinallyStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCAtFinallyStmtClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCAtSynchronizedStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCAtSynchronizedStmtClass");
+ case ZigClangStmt_ObjCAtSynchronizedStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCAtSynchronizedStmtClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCAtThrowStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCAtThrowStmtClass");
+ case ZigClangStmt_ObjCAtThrowStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCAtThrowStmtClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCAtTryStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCAtTryStmtClass");
+ case ZigClangStmt_ObjCAtTryStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCAtTryStmtClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCAutoreleasePoolStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCAutoreleasePoolStmtClass");
+ case ZigClangStmt_ObjCAutoreleasePoolStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCAutoreleasePoolStmtClass");
return ErrorUnexpected;
- case clang::Stmt::ObjCForCollectionStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C ObjCForCollectionStmtClass");
+ case ZigClangStmt_ObjCForCollectionStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C ObjCForCollectionStmtClass");
return ErrorUnexpected;
- case clang::Stmt::SEHExceptStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C SEHExceptStmtClass");
+ case ZigClangStmt_SEHExceptStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C SEHExceptStmtClass");
return ErrorUnexpected;
- case clang::Stmt::SEHFinallyStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C SEHFinallyStmtClass");
+ case ZigClangStmt_SEHFinallyStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C SEHFinallyStmtClass");
return ErrorUnexpected;
- case clang::Stmt::SEHLeaveStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C SEHLeaveStmtClass");
+ case ZigClangStmt_SEHLeaveStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C SEHLeaveStmtClass");
return ErrorUnexpected;
- case clang::Stmt::SEHTryStmtClass:
- emit_warning(c, stmt->getBeginLoc(), "TODO handle C SEHTryStmtClass");
+ case ZigClangStmt_SEHTryStmtClass:
+ emit_warning(c, ZigClangStmt_getBeginLoc(stmt), "TODO handle C SEHTryStmtClass");
return ErrorUnexpected;
}
zig_unreachable();
}
// Returns null if there was an error
-static AstNode *trans_expr(Context *c, ResultUsed result_used, TransScope *scope, const clang::Expr *expr,
+static AstNode *trans_expr(Context *c, ResultUsed result_used, TransScope *scope, const ZigClangExpr *expr,
TransLRValue lrval)
{
AstNode *result_node;
TransScope *result_scope;
- if (trans_stmt_extra(c, scope, expr, result_used, lrval, &result_node, &result_scope, nullptr)) {
+ if (trans_stmt_extra(c, scope, (const ZigClangStmt *)expr, result_used, lrval, &result_node, &result_scope, nullptr)) {
return nullptr;
}
return result_node;
@@ -3846,7 +4013,7 @@ static AstNode *trans_expr(Context *c, ResultUsed result_used, TransScope *scope
// Statements have no result and no concept of L or R value.
// Returns child scope, or null if there was an error
-static TransScope *trans_stmt(Context *c, TransScope *scope, const clang::Stmt *stmt, AstNode **out_node) {
+static TransScope *trans_stmt(Context *c, TransScope *scope, const ZigClangStmt *stmt, AstNode **out_node) {
TransScope *child_scope;
if (trans_stmt_extra(c, scope, stmt, ResultUsedNo, TransRValue, out_node, &child_scope, nullptr)) {
return nullptr;
@@ -3854,34 +4021,36 @@ static TransScope *trans_stmt(Context *c, TransScope *scope, const clang::Stmt *
return child_scope;
}
-static void visit_fn_decl(Context *c, const clang::FunctionDecl *fn_decl) {
- Buf *fn_name = buf_create_from_str(decl_name(fn_decl));
+static void visit_fn_decl(Context *c, const ZigClangFunctionDecl *fn_decl) {
+ Buf *fn_name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)fn_decl));
if (get_global(c, fn_name)) {
// we already saw this function
return;
}
- AstNode *proto_node = trans_qual_type(c, fn_decl->getType(), fn_decl->getLocation());
+ AstNode *proto_node = trans_qual_type(c, ZigClangFunctionDecl_getType(fn_decl),
+ ZigClangFunctionDecl_getLocation(fn_decl));
if (proto_node == nullptr) {
- emit_warning(c, fn_decl->getLocation(), "unable to resolve prototype of function '%s'", buf_ptr(fn_name));
+ emit_warning(c, ZigClangFunctionDecl_getLocation(fn_decl),
+ "unable to resolve prototype of function '%s'", buf_ptr(fn_name));
return;
}
proto_node->data.fn_proto.name = fn_name;
- proto_node->data.fn_proto.is_extern = !fn_decl->hasBody();
+ proto_node->data.fn_proto.is_extern = !ZigClangFunctionDecl_hasBody(fn_decl);
- clang::StorageClass sc = fn_decl->getStorageClass();
- if (sc == clang::SC_None) {
+ ZigClangStorageClass sc = ZigClangFunctionDecl_getStorageClass(fn_decl);
+ if (sc == ZigClangStorageClass_None) {
proto_node->data.fn_proto.visib_mod = c->visib_mod;
- proto_node->data.fn_proto.is_export = fn_decl->hasBody() ? c->want_export : false;
- } else if (sc == clang::SC_Extern || sc == clang::SC_Static) {
+ proto_node->data.fn_proto.is_export = ZigClangFunctionDecl_hasBody(fn_decl) ? c->want_export : false;
+ } else if (sc == ZigClangStorageClass_Extern || sc == ZigClangStorageClass_Static) {
proto_node->data.fn_proto.visib_mod = c->visib_mod;
- } else if (sc == clang::SC_PrivateExtern) {
- emit_warning(c, fn_decl->getLocation(), "unsupported storage class: private extern");
+ } else if (sc == ZigClangStorageClass_PrivateExtern) {
+ emit_warning(c, ZigClangFunctionDecl_getLocation(fn_decl), "unsupported storage class: private extern");
return;
} else {
- emit_warning(c, fn_decl->getLocation(), "unsupported storage class: unknown");
+ emit_warning(c, ZigClangFunctionDecl_getLocation(fn_decl), "unsupported storage class: unknown");
return;
}
@@ -3889,8 +4058,8 @@ static void visit_fn_decl(Context *c, const clang::FunctionDecl *fn_decl) {
for (size_t i = 0; i < proto_node->data.fn_proto.params.length; i += 1) {
AstNode *param_node = proto_node->data.fn_proto.params.at(i);
- const clang::ParmVarDecl *param = fn_decl->getParamDecl(i);
- const char *name = decl_name(param);
+ const ZigClangParmVarDecl *param = ZigClangFunctionDecl_getParamDecl(fn_decl, i);
+ const char *name = ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)param);
Buf *proto_param_name;
if (strlen(name) != 0) {
@@ -3908,7 +4077,7 @@ static void visit_fn_decl(Context *c, const clang::FunctionDecl *fn_decl) {
param_node->data.param_decl.name = scope_var->zig_name;
}
- if (!fn_decl->hasBody()) {
+ if (!ZigClangFunctionDecl_hasBody(fn_decl)) {
// just a prototype
add_top_level_decl(c, proto_node->data.fn_proto.name, proto_node);
return;
@@ -3916,11 +4085,11 @@ static void visit_fn_decl(Context *c, const clang::FunctionDecl *fn_decl) {
// actual function definition with body
c->ptr_params.clear();
- clang::Stmt *body = fn_decl->getBody();
+ const ZigClangStmt *body = ZigClangFunctionDecl_getBody(fn_decl);
AstNode *actual_body_node;
TransScope *result_scope = trans_stmt(c, scope, body, &actual_body_node);
if (result_scope == nullptr) {
- emit_warning(c, fn_decl->getLocation(), "unable to translate function");
+ emit_warning(c, ZigClangFunctionDecl_getLocation(fn_decl), "unable to translate function");
return;
}
assert(actual_body_node != nullptr);
@@ -3958,20 +4127,20 @@ static void visit_fn_decl(Context *c, const clang::FunctionDecl *fn_decl) {
add_top_level_decl(c, fn_def_node->data.fn_def.fn_proto->data.fn_proto.name, fn_def_node);
}
-static AstNode *resolve_typdef_as_builtin(Context *c, const clang::TypedefNameDecl *typedef_decl, const char *primitive_name) {
+static AstNode *resolve_typdef_as_builtin(Context *c, const ZigClangTypedefNameDecl *typedef_decl, const char *primitive_name) {
AstNode *node = trans_create_node_symbol_str(c, primitive_name);
c->decl_table.put(typedef_decl, node);
return node;
}
-static AstNode *resolve_typedef_decl(Context *c, const clang::TypedefNameDecl *typedef_decl) {
- auto existing_entry = c->decl_table.maybe_get((void*)typedef_decl->getCanonicalDecl());
+static AstNode *resolve_typedef_decl(Context *c, const ZigClangTypedefNameDecl *typedef_decl) {
+ auto existing_entry = c->decl_table.maybe_get((void*)ZigClangTypedefNameDecl_getCanonicalDecl(typedef_decl));
if (existing_entry) {
return existing_entry->value;
}
- clang::QualType child_qt = typedef_decl->getUnderlyingType();
- Buf *type_name = buf_create_from_str(decl_name(typedef_decl));
+ ZigClangQualType child_qt = ZigClangTypedefNameDecl_getUnderlyingType(typedef_decl);
+ Buf *type_name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)typedef_decl));
if (buf_eql_str(type_name, "uint8_t")) {
return resolve_typdef_as_builtin(c, typedef_decl, "u8");
@@ -4005,11 +4174,12 @@ static AstNode *resolve_typedef_decl(Context *c, const clang::TypedefNameDecl *t
// trans_qual_type here might cause us to look at this typedef again so we put the item in the map first
AstNode *symbol_node = trans_create_node_symbol(c, type_name);
- c->decl_table.put(typedef_decl->getCanonicalDecl(), symbol_node);
+ c->decl_table.put(ZigClangTypedefNameDecl_getCanonicalDecl(typedef_decl), symbol_node);
- AstNode *type_node = trans_qual_type(c, child_qt, typedef_decl->getLocation());
+ AstNode *type_node = trans_qual_type(c, child_qt, ZigClangTypedefNameDecl_getLocation(typedef_decl));
if (type_node == nullptr) {
- emit_warning(c, typedef_decl->getLocation(), "typedef %s - unresolved child type", buf_ptr(type_name));
+ emit_warning(c, ZigClangTypedefNameDecl_getLocation(typedef_decl),
+ "typedef %s - unresolved child type", buf_ptr(type_name));
c->decl_table.put(typedef_decl, nullptr);
// TODO add global var with type_name equal to @compileError("unable to resolve C type")
return nullptr;
@@ -4019,33 +4189,33 @@ static AstNode *resolve_typedef_decl(Context *c, const clang::TypedefNameDecl *t
return symbol_node;
}
-struct AstNode *demote_enum_to_opaque(Context *c, const clang::EnumDecl *enum_decl,
- Buf *full_type_name, Buf *bare_name)
+struct AstNode *demote_enum_to_opaque(Context *c, const ZigClangEnumDecl *enum_decl, Buf *full_type_name,
+ Buf *bare_name)
{
AstNode *opaque_node = trans_create_node_opaque(c);
if (full_type_name == nullptr) {
- c->decl_table.put(enum_decl->getCanonicalDecl(), opaque_node);
+ c->decl_table.put(ZigClangEnumDecl_getCanonicalDecl(enum_decl), opaque_node);
return opaque_node;
}
AstNode *symbol_node = trans_create_node_symbol(c, full_type_name);
add_global_weak_alias(c, bare_name, full_type_name);
add_global_var(c, full_type_name, opaque_node);
- c->decl_table.put(enum_decl->getCanonicalDecl(), symbol_node);
+ c->decl_table.put(ZigClangEnumDecl_getCanonicalDecl(enum_decl), symbol_node);
return symbol_node;
}
-static AstNode *resolve_enum_decl(Context *c, const clang::EnumDecl *enum_decl) {
- auto existing_entry = c->decl_table.maybe_get((void*)enum_decl->getCanonicalDecl());
+static AstNode *resolve_enum_decl(Context *c, const ZigClangEnumDecl *enum_decl) {
+ auto existing_entry = c->decl_table.maybe_get(ZigClangEnumDecl_getCanonicalDecl(enum_decl));
if (existing_entry) {
return existing_entry->value;
}
- const char *raw_name = decl_name(enum_decl);
+ const char *raw_name = ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)enum_decl);
bool is_anonymous = (raw_name[0] == 0);
Buf *bare_name = is_anonymous ? nullptr : buf_create_from_str(raw_name);
Buf *full_type_name = is_anonymous ? nullptr : buf_sprintf("enum_%s", buf_ptr(bare_name));
- const clang::EnumDecl *enum_def = enum_decl->getDefinition();
+ const ZigClangEnumDecl *enum_def = ZigClangEnumDecl_getDefinition(enum_decl);
if (!enum_def) {
return demote_enum_to_opaque(c, enum_decl, full_type_name, bare_name);
}
@@ -4053,8 +4223,8 @@ static AstNode *resolve_enum_decl(Context *c, const clang::EnumDecl *enum_decl)
bool pure_enum = true;
uint32_t field_count = 0;
- for (auto it = enum_def->enumerator_begin(),
- it_end = enum_def->enumerator_end();
+ for (auto it = reinterpret_cast<const clang::EnumDecl *>(enum_def)->enumerator_begin(),
+ it_end = reinterpret_cast<const clang::EnumDecl *>(enum_def)->enumerator_end();
it != it_end; ++it, field_count += 1)
{
const clang::EnumConstantDecl *enum_const = *it;
@@ -4062,7 +4232,8 @@ static AstNode *resolve_enum_decl(Context *c, const clang::EnumDecl *enum_decl)
pure_enum = false;
}
}
- AstNode *tag_int_type = trans_qual_type(c, enum_decl->getIntegerType(), enum_decl->getLocation());
+ AstNode *tag_int_type = trans_qual_type(c, ZigClangEnumDecl_getIntegerType(enum_decl),
+ ZigClangEnumDecl_getLocation(enum_decl));
assert(tag_int_type);
AstNode *enum_node = trans_create_node(c, NodeTypeContainerDecl);
@@ -4071,20 +4242,20 @@ static AstNode *resolve_enum_decl(Context *c, const clang::EnumDecl *enum_decl)
// TODO only emit this tag type if the enum tag type is not the default.
// I don't know what the default is, need to figure out how clang is deciding.
// it appears to at least be different across gcc/msvc
- if (!c_is_builtin_type(c, enum_decl->getIntegerType(), clang::BuiltinType::UInt) &&
- !c_is_builtin_type(c, enum_decl->getIntegerType(), clang::BuiltinType::Int))
+ if (!c_is_builtin_type(c, ZigClangEnumDecl_getIntegerType(enum_decl), ZigClangBuiltinTypeUInt) &&
+ !c_is_builtin_type(c, ZigClangEnumDecl_getIntegerType(enum_decl), ZigClangBuiltinTypeInt))
{
enum_node->data.container_decl.init_arg_expr = tag_int_type;
}
enum_node->data.container_decl.fields.resize(field_count);
uint32_t i = 0;
- for (auto it = enum_def->enumerator_begin(),
- it_end = enum_def->enumerator_end();
+ for (auto it = reinterpret_cast<const clang::EnumDecl *>(enum_def)->enumerator_begin(),
+ it_end = reinterpret_cast<const clang::EnumDecl *>(enum_def)->enumerator_end();
it != it_end; ++it, i += 1)
{
const clang::EnumConstantDecl *enum_const = *it;
- Buf *enum_val_name = buf_create_from_str(decl_name(enum_const));
+ Buf *enum_val_name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)enum_const));
Buf *field_name;
if (bare_name != nullptr && buf_starts_with_buf(enum_val_name, bare_name)) {
field_name = buf_slice(enum_val_name, buf_len(bare_name), buf_len(enum_val_name));
@@ -4092,7 +4263,8 @@ static AstNode *resolve_enum_decl(Context *c, const clang::EnumDecl *enum_decl)
field_name = enum_val_name;
}
- AstNode *int_node = pure_enum && !is_anonymous ? nullptr : trans_create_node_apint(c, enum_const->getInitVal());
+ AstNode *int_node = pure_enum && !is_anonymous ?
+ nullptr : trans_create_node_apint(c, bitcast(&enum_const->getInitVal()));
AstNode *field_node = trans_create_node(c, NodeTypeStructField);
field_node->data.struct_field.name = field_name;
field_node->data.struct_field.type = nullptr;
@@ -4102,7 +4274,7 @@ static AstNode *resolve_enum_decl(Context *c, const clang::EnumDecl *enum_decl)
// in C each enum value is in the global namespace. so we put them there too.
// at this point we can rely on the enum emitting successfully
if (is_anonymous) {
- Buf *enum_val_name = buf_create_from_str(decl_name(enum_const));
+ Buf *enum_val_name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)enum_const));
add_global_var(c, enum_val_name, int_node);
} else {
AstNode *field_access_node = trans_create_node_field_access(c,
@@ -4112,73 +4284,74 @@ static AstNode *resolve_enum_decl(Context *c, const clang::EnumDecl *enum_decl)
}
if (is_anonymous) {
- c->decl_table.put(enum_decl->getCanonicalDecl(), enum_node);
+ c->decl_table.put(ZigClangEnumDecl_getCanonicalDecl(enum_decl), enum_node);
return enum_node;
} else {
AstNode *symbol_node = trans_create_node_symbol(c, full_type_name);
add_global_weak_alias(c, bare_name, full_type_name);
add_global_var(c, full_type_name, enum_node);
- c->decl_table.put(enum_decl->getCanonicalDecl(), symbol_node);
+ c->decl_table.put(ZigClangEnumDecl_getCanonicalDecl(enum_decl), symbol_node);
return enum_node;
}
}
-static AstNode *demote_struct_to_opaque(Context *c, const clang::RecordDecl *record_decl,
+static AstNode *demote_struct_to_opaque(Context *c, const ZigClangRecordDecl *record_decl,
Buf *full_type_name, Buf *bare_name)
{
AstNode *opaque_node = trans_create_node_opaque(c);
if (full_type_name == nullptr) {
- c->decl_table.put(record_decl->getCanonicalDecl(), opaque_node);
+ c->decl_table.put(ZigClangRecordDecl_getCanonicalDecl(record_decl), opaque_node);
return opaque_node;
}
AstNode *symbol_node = trans_create_node_symbol(c, full_type_name);
add_global_weak_alias(c, bare_name, full_type_name);
add_global_var(c, full_type_name, opaque_node);
- c->decl_table.put(record_decl->getCanonicalDecl(), symbol_node);
+ c->decl_table.put(ZigClangRecordDecl_getCanonicalDecl(record_decl), symbol_node);
return symbol_node;
}
-static AstNode *resolve_record_decl(Context *c, const clang::RecordDecl *record_decl) {
- auto existing_entry = c->decl_table.maybe_get((void*)record_decl->getCanonicalDecl());
+static AstNode *resolve_record_decl(Context *c, const ZigClangRecordDecl *record_decl) {
+ auto existing_entry = c->decl_table.maybe_get(ZigClangRecordDecl_getCanonicalDecl(record_decl));
if (existing_entry) {
return existing_entry->value;
}
- const char *raw_name = decl_name(record_decl);
+ const char *raw_name = ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)record_decl);
const char *container_kind_name;
ContainerKind container_kind;
- if (record_decl->isUnion()) {
+ if (ZigClangRecordDecl_isUnion(record_decl)) {
container_kind_name = "union";
container_kind = ContainerKindUnion;
- } else if (record_decl->isStruct()) {
+ } else if (ZigClangRecordDecl_isStruct(record_decl)) {
container_kind_name = "struct";
container_kind = ContainerKindStruct;
} else {
- emit_warning(c, record_decl->getLocation(), "skipping record %s, not a struct or union", raw_name);
- c->decl_table.put(record_decl->getCanonicalDecl(), nullptr);
+ emit_warning(c, ZigClangRecordDecl_getLocation(record_decl),
+ "skipping record %s, not a struct or union", raw_name);
+ c->decl_table.put(ZigClangRecordDecl_getCanonicalDecl(record_decl), nullptr);
return nullptr;
}
- bool is_anonymous = record_decl->isAnonymousStructOrUnion() || raw_name[0] == 0;
+ bool is_anonymous = ZigClangRecordDecl_isAnonymousStructOrUnion(record_decl) || raw_name[0] == 0;
Buf *bare_name = is_anonymous ? nullptr : buf_create_from_str(raw_name);
Buf *full_type_name = (bare_name == nullptr) ?
nullptr : buf_sprintf("%s_%s", container_kind_name, buf_ptr(bare_name));
- clang::RecordDecl *record_def = record_decl->getDefinition();
+ const ZigClangRecordDecl *record_def = ZigClangRecordDecl_getDefinition(record_decl);
if (record_def == nullptr) {
return demote_struct_to_opaque(c, record_decl, full_type_name, bare_name);
}
// count fields and validate
uint32_t field_count = 0;
- for (auto it = record_def->field_begin(),
- it_end = record_def->field_end();
+ for (auto it = reinterpret_cast<const clang::RecordDecl *>(record_def)->field_begin(),
+ it_end = reinterpret_cast<const clang::RecordDecl *>(record_def)->field_end();
it != it_end; ++it, field_count += 1)
{
const clang::FieldDecl *field_decl = *it;
if (field_decl->isBitField()) {
- emit_warning(c, field_decl->getLocation(), "%s %s demoted to opaque type - has bitfield",
+ emit_warning(c, bitcast(field_decl->getLocation()), "%s %s demoted to opaque type - has bitfield",
container_kind_name,
is_anonymous ? "(anon)" : buf_ptr(bare_name));
return demote_struct_to_opaque(c, record_decl, full_type_name, bare_name);
@@ -4195,24 +4368,25 @@ static AstNode *resolve_record_decl(Context *c, const clang::RecordDecl *record_
// must be before fields in case a circular reference happens
if (is_anonymous) {
- c->decl_table.put(record_decl->getCanonicalDecl(), struct_node);
+ c->decl_table.put(ZigClangRecordDecl_getCanonicalDecl(record_decl), struct_node);
} else {
- c->decl_table.put(record_decl->getCanonicalDecl(), trans_create_node_symbol(c, full_type_name));
+ c->decl_table.put(ZigClangRecordDecl_getCanonicalDecl(record_decl), trans_create_node_symbol(c, full_type_name));
}
uint32_t i = 0;
- for (auto it = record_def->field_begin(),
- it_end = record_def->field_end();
+ for (auto it = reinterpret_cast<const clang::RecordDecl *>(record_def)->field_begin(),
+ it_end = reinterpret_cast<const clang::RecordDecl *>(record_def)->field_end();
it != it_end; ++it, i += 1)
{
const clang::FieldDecl *field_decl = *it;
AstNode *field_node = trans_create_node(c, NodeTypeStructField);
- field_node->data.struct_field.name = buf_create_from_str(decl_name(field_decl));
- field_node->data.struct_field.type = trans_qual_type(c, field_decl->getType(), field_decl->getLocation());
+ field_node->data.struct_field.name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)field_decl));
+ field_node->data.struct_field.type = trans_qual_type(c, bitcast(field_decl->getType()),
+ bitcast(field_decl->getLocation()));
if (field_node->data.struct_field.type == nullptr) {
- emit_warning(c, field_decl->getLocation(),
+ emit_warning(c, bitcast(field_decl->getLocation()),
"%s %s demoted to opaque type - unresolved type",
container_kind_name,
is_anonymous ? "(anon)" : buf_ptr(bare_name));
@@ -4232,17 +4406,19 @@ static AstNode *resolve_record_decl(Context *c, const clang::RecordDecl *record_
}
}
-static AstNode *trans_ap_value(Context *c, clang::APValue *ap_value, clang::QualType qt, const clang::SourceLocation &source_loc) {
- switch (ap_value->getKind()) {
- case clang::APValue::Int:
- return trans_create_node_apint(c, ap_value->getInt());
- case clang::APValue::Uninitialized:
+static AstNode *trans_ap_value(Context *c, const ZigClangAPValue *ap_value, ZigClangQualType qt,
+ ZigClangSourceLocation source_loc)
+{
+ switch (ZigClangAPValue_getKind(ap_value)) {
+ case ZigClangAPValueInt:
+ return trans_create_node_apint(c, ZigClangAPValue_getInt(ap_value));
+ case ZigClangAPValueUninitialized:
return trans_create_node(c, NodeTypeUndefinedLiteral);
- case clang::APValue::Array: {
+ case ZigClangAPValueArray: {
emit_warning(c, source_loc, "TODO add a test case for this code");
- unsigned init_count = ap_value->getArrayInitializedElts();
- unsigned all_count = ap_value->getArraySize();
+ unsigned init_count = ZigClangAPValue_getArrayInitializedElts(ap_value);
+ unsigned all_count = ZigClangAPValue_getArraySize(ap_value);
unsigned leftover_count = all_count - init_count;
AstNode *init_node = trans_create_node(c, NodeTypeContainerInitExpr);
AstNode *arr_type_node = trans_qual_type(c, qt, source_loc);
@@ -4252,11 +4428,12 @@ static AstNode *trans_ap_value(Context *c, clang::APValue *ap_value, clang::Qual
init_node->data.container_init_expr.type = arr_type_node;
init_node->data.container_init_expr.kind = ContainerInitKindArray;
- clang::QualType child_qt = qt.getTypePtr()->getAsArrayTypeUnsafe()->getElementType();
+ const clang::Type *qt_type = reinterpret_cast<const clang::Type *>(ZigClangQualType_getTypePtr(qt));
+ ZigClangQualType child_qt = bitcast(qt_type->getAsArrayTypeUnsafe()->getElementType());
for (size_t i = 0; i < init_count; i += 1) {
- clang::APValue &elem_ap_val = ap_value->getArrayInitializedElt(i);
- AstNode *elem_node = trans_ap_value(c, &elem_ap_val, child_qt, source_loc);
+ const ZigClangAPValue *elem_ap_val = ZigClangAPValue_getArrayInitializedElt(ap_value, i);
+ AstNode *elem_node = trans_ap_value(c, elem_ap_val, child_qt, source_loc);
if (elem_node == nullptr)
return nullptr;
init_node->data.container_init_expr.entries.append(elem_node);
@@ -4265,8 +4442,8 @@ static AstNode *trans_ap_value(Context *c, clang::APValue *ap_value, clang::Qual
return init_node;
}
- clang::APValue &filler_ap_val = ap_value->getArrayFiller();
- AstNode *filler_node = trans_ap_value(c, &filler_ap_val, child_qt, source_loc);
+ const ZigClangAPValue *filler_ap_val = ZigClangAPValue_getArrayFiller(ap_value);
+ AstNode *filler_node = trans_ap_value(c, filler_ap_val, child_qt, source_loc);
if (filler_node == nullptr)
return nullptr;
@@ -4293,37 +4470,37 @@ static AstNode *trans_ap_value(Context *c, clang::APValue *ap_value, clang::Qual
return trans_create_node_bin_op(c, init_node, BinOpTypeArrayCat, rhs_node);
}
- case clang::APValue::LValue: {
- const clang::APValue::LValueBase lval_base = ap_value->getLValueBase();
- if (const clang::Expr *expr = lval_base.dyn_cast<const clang::Expr *>()) {
+ case ZigClangAPValueLValue: {
+ const ZigClangAPValueLValueBase lval_base = ZigClangAPValue_getLValueBase(ap_value);
+ if (const ZigClangExpr *expr = ZigClangAPValueLValueBase_dyn_cast_Expr(lval_base)) {
return trans_expr(c, ResultUsedYes, &c->global_scope->base, expr, TransRValue);
}
//const clang::ValueDecl *value_decl = lval_base.get<const clang::ValueDecl *>();
emit_warning(c, source_loc, "TODO handle initializer LValue clang::ValueDecl");
return nullptr;
}
- case clang::APValue::Float:
+ case ZigClangAPValueFloat:
emit_warning(c, source_loc, "unsupported initializer value kind: Float");
return nullptr;
- case clang::APValue::ComplexInt:
+ case ZigClangAPValueComplexInt:
emit_warning(c, source_loc, "unsupported initializer value kind: ComplexInt");
return nullptr;
- case clang::APValue::ComplexFloat:
+ case ZigClangAPValueComplexFloat:
emit_warning(c, source_loc, "unsupported initializer value kind: ComplexFloat");
return nullptr;
- case clang::APValue::Vector:
+ case ZigClangAPValueVector:
emit_warning(c, source_loc, "unsupported initializer value kind: Vector");
return nullptr;
- case clang::APValue::Struct:
+ case ZigClangAPValueStruct:
emit_warning(c, source_loc, "unsupported initializer value kind: Struct");
return nullptr;
- case clang::APValue::Union:
+ case ZigClangAPValueUnion:
emit_warning(c, source_loc, "unsupported initializer value kind: Union");
return nullptr;
- case clang::APValue::MemberPointer:
+ case ZigClangAPValueMemberPointer:
emit_warning(c, source_loc, "unsupported initializer value kind: MemberPointer");
return nullptr;
- case clang::APValue::AddrLabelDiff:
+ case ZigClangAPValueAddrLabelDiff:
emit_warning(c, source_loc, "unsupported initializer value kind: AddrLabelDiff");
return nullptr;
}
@@ -4331,42 +4508,42 @@ static AstNode *trans_ap_value(Context *c, clang::APValue *ap_value, clang::Qual
}
static void visit_var_decl(Context *c, const clang::VarDecl *var_decl) {
- Buf *name = buf_create_from_str(decl_name(var_decl));
+ Buf *name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)var_decl));
switch (var_decl->getTLSKind()) {
case clang::VarDecl::TLS_None:
break;
case clang::VarDecl::TLS_Static:
- emit_warning(c, var_decl->getLocation(),
+ emit_warning(c, bitcast(var_decl->getLocation()),
"ignoring variable '%s' - static thread local storage", buf_ptr(name));
return;
case clang::VarDecl::TLS_Dynamic:
- emit_warning(c, var_decl->getLocation(),
+ emit_warning(c, bitcast(var_decl->getLocation()),
"ignoring variable '%s' - dynamic thread local storage", buf_ptr(name));
return;
}
- clang::QualType qt = var_decl->getType();
- AstNode *var_type = trans_qual_type(c, qt, var_decl->getLocation());
+ ZigClangQualType qt = bitcast(var_decl->getType());
+ AstNode *var_type = trans_qual_type(c, qt, bitcast(var_decl->getLocation()));
if (var_type == nullptr) {
- emit_warning(c, var_decl->getLocation(), "ignoring variable '%s' - unresolved type", buf_ptr(name));
+ emit_warning(c, bitcast(var_decl->getLocation()), "ignoring variable '%s' - unresolved type", buf_ptr(name));
return;
}
bool is_extern = var_decl->hasExternalStorage();
bool is_static = var_decl->isFileVarDecl();
- bool is_const = qt.isConstQualified();
+ bool is_const = ZigClangQualType_isConstQualified(qt);
if (is_static && !is_extern) {
AstNode *init_node;
if (var_decl->hasInit()) {
- clang::APValue *ap_value = var_decl->evaluateValue();
+ const ZigClangAPValue *ap_value = bitcast(var_decl->evaluateValue());
if (ap_value == nullptr) {
- emit_warning(c, var_decl->getLocation(),
+ emit_warning(c, bitcast(var_decl->getLocation()),
"ignoring variable '%s' - unable to evaluate initializer", buf_ptr(name));
return;
}
- init_node = trans_ap_value(c, ap_value, qt, var_decl->getLocation());
+ init_node = trans_ap_value(c, ap_value, qt, bitcast(var_decl->getLocation()));
if (init_node == nullptr)
return;
} else {
@@ -4385,33 +4562,32 @@ static void visit_var_decl(Context *c, const clang::VarDecl *var_decl) {
return;
}
- emit_warning(c, var_decl->getLocation(),
+ emit_warning(c, bitcast(var_decl->getLocation()),
"ignoring variable '%s' - non-extern, non-static variable", buf_ptr(name));
return;
}
-static bool decl_visitor(void *context, const ZigClangDecl *zdecl) {
- const clang::Decl *decl = reinterpret_cast<const clang::Decl *>(zdecl);
+static bool decl_visitor(void *context, const ZigClangDecl *decl) {
Context *c = (Context*)context;
- switch (decl->getKind()) {
- case clang::Decl::Function:
- visit_fn_decl(c, static_cast<const clang::FunctionDecl*>(decl));
+ switch (ZigClangDecl_getKind(decl)) {
+ case ZigClangDeclFunction:
+ visit_fn_decl(c, reinterpret_cast<const ZigClangFunctionDecl*>(decl));
break;
- case clang::Decl::Typedef:
- resolve_typedef_decl(c, static_cast<const clang::TypedefNameDecl *>(decl));
+ case ZigClangDeclTypedef:
+ resolve_typedef_decl(c, reinterpret_cast<const ZigClangTypedefNameDecl *>(decl));
break;
- case clang::Decl::Enum:
- resolve_enum_decl(c, static_cast<const clang::EnumDecl *>(decl));
+ case ZigClangDeclEnum:
+ resolve_enum_decl(c, reinterpret_cast<const ZigClangEnumDecl *>(decl));
break;
- case clang::Decl::Record:
- resolve_record_decl(c, static_cast<const clang::RecordDecl *>(decl));
+ case ZigClangDeclRecord:
+ resolve_record_decl(c, reinterpret_cast<const ZigClangRecordDecl *>(decl));
break;
- case clang::Decl::Var:
- visit_var_decl(c, static_cast<const clang::VarDecl *>(decl));
+ case ZigClangDeclVar:
+ visit_var_decl(c, reinterpret_cast<const clang::VarDecl *>(decl));
break;
default:
- emit_warning(c, decl->getLocation(), "ignoring %s decl", decl->getDeclKindName());
+ emit_warning(c, ZigClangDecl_getLocation(decl), "ignoring %s decl", ZigClangDecl_getDeclKindName(decl));
}
return true;
@@ -4720,6 +4896,8 @@ static AstNode *parse_ctok_primary_expr(Context *c, CTokenize *ctok, size_t *tok
case CTokIdAsterisk:
case CTokIdBang:
case CTokIdTilde:
+ case CTokIdShl:
+ case CTokIdLt:
// not able to make sense of this
return nullptr;
}
@@ -4751,6 +4929,13 @@ static AstNode *parse_ctok_suffix_op_expr(Context *c, CTokenize *ctok, size_t *t
*tok_i += 1;
node = trans_create_node_ptr_type(c, false, false, node, PtrLenC);
+ } else if (first_tok->id == CTokIdShl) {
+ *tok_i += 1;
+
+ AstNode *rhs_node = parse_ctok_expr(c, ctok, tok_i);
+ if (rhs_node == nullptr)
+ return nullptr;
+ node = trans_create_node_bin_op(c, node, BinOpTypeBitShiftLeft, rhs_node);
} else {
return node;
}
@@ -4846,10 +5031,10 @@ static void process_preprocessor_entities(Context *c, ZigClangASTUnit *zunit) {
clang::MacroDefinitionRecord *macro = static_cast<clang::MacroDefinitionRecord *>(entity);
const char *raw_name = macro->getName()->getNameStart();
clang::SourceRange range = macro->getSourceRange();
- clang::SourceLocation begin_loc = range.getBegin();
- clang::SourceLocation end_loc = range.getEnd();
+ ZigClangSourceLocation begin_loc = bitcast(range.getBegin());
+ ZigClangSourceLocation end_loc = bitcast(range.getEnd());
- if (begin_loc == end_loc) {
+ if (ZigClangSourceLocation_eq(begin_loc, end_loc)) {
// this means it is a macro without a value
// we don't care about such things
continue;
@@ -4859,21 +5044,22 @@ static void process_preprocessor_entities(Context *c, ZigClangASTUnit *zunit) {
continue;
}
- const char *begin_c = ZigClangSourceManager_getCharacterData(c->source_manager, bitcast(begin_loc));
+ const char *begin_c = ZigClangSourceManager_getCharacterData(c->source_manager, begin_loc);
process_macro(c, &ctok, name, begin_c);
}
}
}
}
-Error parse_h_file(AstNode **out_root_node, ZigList<ErrorMsg *> *errors, const char *target_file,
- CodeGen *codegen, Buf *tmp_dep_file)
+Error parse_h_file(CodeGen *codegen, AstNode **out_root_node,
+ Stage2ErrorMsg **errors_ptr, size_t *errors_len,
+ const char **args_begin, const char **args_end,
+ Stage2TranslateMode mode, const char *resources_path)
{
Context context = {0};
Context *c = &context;
c->warnings_on = codegen->verbose_cimport;
- c->errors = errors;
- if (buf_ends_with_str(buf_create_from_str(target_file), ".h")) {
+ if (mode == Stage2TranslateModeImport) {
c->visib_mod = VisibModPub;
c->want_export = false;
} else {
@@ -4887,161 +5073,10 @@ Error parse_h_file(AstNode **out_root_node, ZigList<ErrorMsg *> *errors, const c
c->codegen = codegen;
c->global_scope = trans_scope_root_create(c);
- ZigList<const char *> clang_argv = {0};
-
- clang_argv.append("-x");
- clang_argv.append("c");
-
- if (tmp_dep_file != nullptr) {
- clang_argv.append("-MD");
- clang_argv.append("-MV");
- clang_argv.append("-MF");
- clang_argv.append(buf_ptr(tmp_dep_file));
- }
-
- if (c->codegen->zig_target->is_native) {
- char *ZIG_PARSEC_CFLAGS = getenv("ZIG_NATIVE_PARSEC_CFLAGS");
- if (ZIG_PARSEC_CFLAGS) {
- Buf tmp_buf = BUF_INIT;
- char *start = ZIG_PARSEC_CFLAGS;
- char *space = strstr(start, " ");
- while (space) {
- if (space - start > 0) {
- buf_init_from_mem(&tmp_buf, start, space - start);
- clang_argv.append(buf_ptr(buf_create_from_buf(&tmp_buf)));
- }
- start = space + 1;
- space = strstr(start, " ");
- }
- buf_init_from_str(&tmp_buf, start);
- clang_argv.append(buf_ptr(buf_create_from_buf(&tmp_buf)));
- }
- }
-
- clang_argv.append("-nobuiltininc");
- clang_argv.append("-nostdinc");
- clang_argv.append("-nostdinc++");
- if (codegen->libc_link_lib == nullptr) {
- clang_argv.append("-nolibc");
- }
-
- clang_argv.append("-isystem");
- clang_argv.append(buf_ptr(codegen->zig_c_headers_dir));
-
- for (size_t i = 0; i < codegen->libc_include_dir_len; i += 1) {
- Buf *include_dir = codegen->libc_include_dir_list[i];
- clang_argv.append("-isystem");
- clang_argv.append(buf_ptr(include_dir));
- }
-
- // windows c runtime requires -D_DEBUG if using debug libraries
- if (codegen->build_mode == BuildModeDebug) {
- clang_argv.append("-D_DEBUG");
- }
-
- for (size_t i = 0; i < codegen->clang_argv_len; i += 1) {
- clang_argv.append(codegen->clang_argv[i]);
- }
-
- // we don't need spell checking and it slows things down
- clang_argv.append("-fno-spell-checking");
-
- // this gives us access to preprocessing entities, presumably at
- // the cost of performance
- clang_argv.append("-Xclang");
- clang_argv.append("-detailed-preprocessing-record");
-
- if (c->codegen->zig_target->is_native) {
- clang_argv.append("-march=native");
- } else {
- clang_argv.append("-target");
- clang_argv.append(buf_ptr(&c->codegen->triple_str));
- }
-
- clang_argv.append(target_file);
-
- if (codegen->verbose_cc) {
- fprintf(stderr, "clang");
- for (size_t i = 0; i < clang_argv.length; i += 1) {
- fprintf(stderr, " %s", clang_argv.at(i));
- }
- fprintf(stderr, "\n");
- }
-
- // to make the [start...end] argument work
- clang_argv.append(nullptr);
-
- clang::IntrusiveRefCntPtr<clang::DiagnosticsEngine> diags(clang::CompilerInstance::createDiagnostics(new clang::DiagnosticOptions));
-
- std::shared_ptr<clang::PCHContainerOperations> pch_container_ops = std::make_shared<clang::PCHContainerOperations>();
-
- bool only_local_decls = true;
- bool capture_diagnostics = true;
- bool user_files_are_volatile = true;
- bool allow_pch_with_compiler_errors = false;
- bool single_file_parse = false;
- bool for_serialization = false;
- const char *resources_path = buf_ptr(codegen->zig_c_headers_dir);
- std::unique_ptr<clang::ASTUnit> err_unit;
- ZigClangASTUnit *ast_unit = reinterpret_cast<ZigClangASTUnit *>(clang::ASTUnit::LoadFromCommandLine(
- &clang_argv.at(0), &clang_argv.last(),
- pch_container_ops, diags, resources_path,
- only_local_decls, capture_diagnostics, clang::None, true, 0, clang::TU_Complete,
- false, false, allow_pch_with_compiler_errors, clang::SkipFunctionBodiesScope::None,
- single_file_parse, user_files_are_volatile, for_serialization, clang::None, &err_unit,
- nullptr));
-
- // Early failures in LoadFromCommandLine may return with ErrUnit unset.
- if (!ast_unit && !err_unit) {
- return ErrorFileSystem;
- }
-
- if (diags->getClient()->getNumErrors() > 0) {
- if (ast_unit) {
- err_unit = std::unique_ptr<clang::ASTUnit>(reinterpret_cast<clang::ASTUnit *>(ast_unit));
- }
-
- for (clang::ASTUnit::stored_diag_iterator it = err_unit->stored_diag_begin(),
- it_end = err_unit->stored_diag_end();
- it != it_end; ++it)
- {
- switch (it->getLevel()) {
- case clang::DiagnosticsEngine::Ignored:
- case clang::DiagnosticsEngine::Note:
- case clang::DiagnosticsEngine::Remark:
- case clang::DiagnosticsEngine::Warning:
- continue;
- case clang::DiagnosticsEngine::Error:
- case clang::DiagnosticsEngine::Fatal:
- break;
- }
- llvm::StringRef msg_str_ref = it->getMessage();
- Buf *msg = string_ref_to_buf(msg_str_ref);
- clang::FullSourceLoc fsl = it->getLocation();
- if (fsl.hasManager()) {
- clang::FileID file_id = fsl.getFileID();
- clang::StringRef filename = fsl.getManager().getFilename(fsl);
- unsigned line = fsl.getSpellingLineNumber() - 1;
- unsigned column = fsl.getSpellingColumnNumber() - 1;
- unsigned offset = fsl.getManager().getFileOffset(fsl);
- const char *source = (const char *)fsl.getManager().getBufferData(file_id).bytes_begin();
- Buf *path;
- if (filename.empty()) {
- path = buf_alloc();
- } else {
- path = string_ref_to_buf(filename);
- }
-
- ErrorMsg *err_msg = err_msg_create_with_offset(path, line, column, offset, source, msg);
-
- c->errors->append(err_msg);
- } else {
- // NOTE the only known way this gets triggered right now is if you have a lot of errors
- // clang emits "too many errors emitted, stopping now"
- fprintf(stderr, "unexpected error from clang: %s\n", buf_ptr(msg));
- }
- }
-
+ ZigClangASTUnit *ast_unit = ZigClangLoadFromCommandLine(args_begin, args_end, errors_ptr, errors_len,
+ resources_path);
+ if (ast_unit == nullptr) {
+ if (*errors_len == 0) return ErrorNoMem;
return ErrorCCompileErrors;
}
@@ -5059,5 +5094,7 @@ Error parse_h_file(AstNode **out_root_node, ZigList<ErrorMsg *> *errors, const c
*out_root_node = c->root;
+ ZigClangASTUnit_delete(ast_unit);
+
return ErrorNone;
}