| ... | ... | @@ -114,7 +114,7 @@ static TransScopeBlock *trans_scope_block_find(TransScope *scope); |
| 114 | 114 | |
| 115 | 115 | static AstNode *resolve_record_decl(Context *c, const ZigClangRecordDecl *record_decl); |
| 116 | 116 | static AstNode *resolve_enum_decl(Context *c, const ZigClangEnumDecl *enum_decl); |
| 117 | | static AstNode *resolve_typedef_decl(Context *c, const clang::TypedefNameDecl *typedef_decl); |
| 117 | static AstNode *resolve_typedef_decl(Context *c, const ZigClangTypedefNameDecl *typedef_decl); |
| 118 | 118 | |
| 119 | 119 | static int trans_stmt_extra(Context *c, TransScope *scope, const clang::Stmt *stmt, |
| 120 | 120 | ResultUsed result_used, TransLRValue lrval, |
| ... | ... | @@ -592,7 +592,7 @@ static bool qual_type_is_fn_ptr(clang::QualType qt) { |
| 592 | 592 | return false; |
| 593 | 593 | } |
| 594 | 594 | |
| 595 | | static uint32_t qual_type_int_bit_width(Context *c, const clang::QualType &qt, ZigClangSourceLocation source_loc) { |
| 595 | static uint32_t qual_type_int_bit_width(Context *c, const clang::QualType qt, ZigClangSourceLocation source_loc) { |
| 596 | 596 | const clang::Type *ty = qt.getTypePtr(); |
| 597 | 597 | switch (ty->getTypeClass()) { |
| 598 | 598 | case clang::Type::Builtin: |
| ... | ... | @@ -614,8 +614,8 @@ static uint32_t qual_type_int_bit_width(Context *c, const clang::QualType &qt, Z |
| 614 | 614 | } |
| 615 | 615 | case clang::Type::Typedef: |
| 616 | 616 | { |
| 617 | | const clang::TypedefType *typedef_ty = static_cast<const clang::TypedefType*>(ty); |
| 618 | | const clang::TypedefNameDecl *typedef_decl = typedef_ty->getDecl(); |
| 617 | const ZigClangTypedefType *typedef_ty = reinterpret_cast<const ZigClangTypedefType*>(ty); |
| 618 | const ZigClangTypedefNameDecl *typedef_decl = ZigClangTypedefType_getDecl(typedef_ty); |
| 619 | 619 | const char *type_name = ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)typedef_decl); |
| 620 | 620 | if (strcmp(type_name, "uint8_t") == 0 || strcmp(type_name, "int8_t") == 0) { |
| 621 | 621 | return 8; |
| ... | ... | @@ -636,7 +636,7 @@ static uint32_t qual_type_int_bit_width(Context *c, const clang::QualType &qt, Z |
| 636 | 636 | } |
| 637 | 637 | |
| 638 | 638 | |
| 639 | | static AstNode *qual_type_to_log2_int_ref(Context *c, const clang::QualType &qt, |
| 639 | static AstNode *qual_type_to_log2_int_ref(Context *c, const clang::QualType qt, |
| 640 | 640 | ZigClangSourceLocation source_loc) |
| 641 | 641 | { |
| 642 | 642 | uint32_t int_bit_width = qual_type_int_bit_width(c, qt, source_loc); |
| ... | ... | @@ -669,7 +669,7 @@ static AstNode *qual_type_to_log2_int_ref(Context *c, const clang::QualType &qt, |
| 669 | 669 | return log2int_fn_call; |
| 670 | 670 | } |
| 671 | 671 | |
| 672 | | static bool qual_type_child_is_fn_proto(const clang::QualType &qt) { |
| 672 | static bool qual_type_child_is_fn_proto(const clang::QualType qt) { |
| 673 | 673 | if (qt.getTypePtr()->getTypeClass() == clang::Type::Paren) { |
| 674 | 674 | const clang::ParenType *paren_type = static_cast<const clang::ParenType *>(qt.getTypePtr()); |
| 675 | 675 | if (paren_type->getInnerType()->getTypeClass() == clang::Type::FunctionProto) { |
| ... | ... | @@ -797,9 +797,11 @@ static bool type_is_opaque(Context *c, const clang::Type *ty, ZigClangSourceLoca |
| 797 | 797 | return type_is_opaque(c, elaborated_ty->getNamedType().getTypePtr(), source_loc); |
| 798 | 798 | } |
| 799 | 799 | case clang::Type::Typedef: { |
| 800 | | const clang::TypedefType *typedef_ty = static_cast<const clang::TypedefType*>(ty); |
| 801 | | const clang::TypedefNameDecl *typedef_decl = typedef_ty->getDecl(); |
| 802 | | return type_is_opaque(c, typedef_decl->getUnderlyingType().getTypePtr(), source_loc); |
| 800 | const ZigClangTypedefType *typedef_ty = reinterpret_cast<const ZigClangTypedefType*>(ty); |
| 801 | const ZigClangTypedefNameDecl *typedef_decl = ZigClangTypedefType_getDecl(typedef_ty); |
| 802 | ZigClangQualType underlying_type = ZigClangTypedefNameDecl_getUnderlyingType(typedef_decl); |
| 803 | clang::QualType qt = bitcast(underlying_type); |
| 804 | return type_is_opaque(c, qt.getTypePtr(), source_loc); |
| 803 | 805 | } |
| 804 | 806 | default: |
| 805 | 807 | return false; |
| ... | ... | @@ -978,8 +980,8 @@ static AstNode *trans_type(Context *c, const clang::Type *ty, ZigClangSourceLoca |
| 978 | 980 | } |
| 979 | 981 | case clang::Type::Typedef: |
| 980 | 982 | { |
| 981 | | const clang::TypedefType *typedef_ty = static_cast<const clang::TypedefType*>(ty); |
| 982 | | const clang::TypedefNameDecl *typedef_decl = typedef_ty->getDecl(); |
| 983 | const ZigClangTypedefType *typedef_ty = reinterpret_cast<const ZigClangTypedefType*>(ty); |
| 984 | const ZigClangTypedefNameDecl *typedef_decl = ZigClangTypedefType_getDecl(typedef_ty); |
| 983 | 985 | return resolve_typedef_decl(c, typedef_decl); |
| 984 | 986 | } |
| 985 | 987 | case clang::Type::Elaborated: |
| ... | ... | @@ -2661,9 +2663,9 @@ static AstNode *trans_bool_expr(Context *c, ResultUsed result_used, TransScope * |
| 2661 | 2663 | |
| 2662 | 2664 | case clang::Type::Typedef: |
| 2663 | 2665 | { |
| 2664 | | const clang::TypedefType *typedef_ty = static_cast<const clang::TypedefType*>(ty); |
| 2665 | | const clang::TypedefNameDecl *typedef_decl = typedef_ty->getDecl(); |
| 2666 | | auto existing_entry = c->decl_table.maybe_get((void*)typedef_decl->getCanonicalDecl()); |
| 2666 | const ZigClangTypedefType *typedef_ty = reinterpret_cast<const ZigClangTypedefType*>(ty); |
| 2667 | const ZigClangTypedefNameDecl *typedef_decl = ZigClangTypedefType_getDecl(typedef_ty); |
| 2668 | auto existing_entry = c->decl_table.maybe_get((void*)ZigClangTypedefNameDecl_getCanonicalDecl(typedef_decl)); |
| 2667 | 2669 | if (existing_entry) { |
| 2668 | 2670 | return existing_entry->value; |
| 2669 | 2671 | } |
| ... | ... | @@ -3952,19 +3954,19 @@ static void visit_fn_decl(Context *c, const clang::FunctionDecl *fn_decl) { |
| 3952 | 3954 | add_top_level_decl(c, fn_def_node->data.fn_def.fn_proto->data.fn_proto.name, fn_def_node); |
| 3953 | 3955 | } |
| 3954 | 3956 | |
| 3955 | | static AstNode *resolve_typdef_as_builtin(Context *c, const clang::TypedefNameDecl *typedef_decl, const char *primitive_name) { |
| 3957 | static AstNode *resolve_typdef_as_builtin(Context *c, const ZigClangTypedefNameDecl *typedef_decl, const char *primitive_name) { |
| 3956 | 3958 | AstNode *node = trans_create_node_symbol_str(c, primitive_name); |
| 3957 | 3959 | c->decl_table.put(typedef_decl, node); |
| 3958 | 3960 | return node; |
| 3959 | 3961 | } |
| 3960 | 3962 | |
| 3961 | | static AstNode *resolve_typedef_decl(Context *c, const clang::TypedefNameDecl *typedef_decl) { |
| 3962 | | auto existing_entry = c->decl_table.maybe_get((void*)typedef_decl->getCanonicalDecl()); |
| 3963 | static AstNode *resolve_typedef_decl(Context *c, const ZigClangTypedefNameDecl *typedef_decl) { |
| 3964 | auto existing_entry = c->decl_table.maybe_get((void*)ZigClangTypedefNameDecl_getCanonicalDecl(typedef_decl)); |
| 3963 | 3965 | if (existing_entry) { |
| 3964 | 3966 | return existing_entry->value; |
| 3965 | 3967 | } |
| 3966 | 3968 | |
| 3967 | | clang::QualType child_qt = typedef_decl->getUnderlyingType(); |
| 3969 | ZigClangQualType child_qt = ZigClangTypedefNameDecl_getUnderlyingType(typedef_decl); |
| 3968 | 3970 | Buf *type_name = buf_create_from_str(ZigClangDecl_getName_bytes_begin((const ZigClangDecl *)typedef_decl)); |
| 3969 | 3971 | |
| 3970 | 3972 | if (buf_eql_str(type_name, "uint8_t")) { |
| ... | ... | @@ -3999,11 +4001,12 @@ static AstNode *resolve_typedef_decl(Context *c, const clang::TypedefNameDecl *t |
| 3999 | 4001 | |
| 4000 | 4002 | // trans_qual_type here might cause us to look at this typedef again so we put the item in the map first |
| 4001 | 4003 | AstNode *symbol_node = trans_create_node_symbol(c, type_name); |
| 4002 | | c->decl_table.put(typedef_decl->getCanonicalDecl(), symbol_node); |
| 4004 | c->decl_table.put(ZigClangTypedefNameDecl_getCanonicalDecl(typedef_decl), symbol_node); |
| 4003 | 4005 | |
| 4004 | | AstNode *type_node = trans_qual_type(c, child_qt, bitcast(typedef_decl->getLocation())); |
| 4006 | AstNode *type_node = trans_qual_type(c, bitcast(child_qt), ZigClangTypedefNameDecl_getLocation(typedef_decl)); |
| 4005 | 4007 | if (type_node == nullptr) { |
| 4006 | | emit_warning(c, bitcast(typedef_decl->getLocation()), "typedef %s - unresolved child type", buf_ptr(type_name)); |
| 4008 | emit_warning(c, ZigClangTypedefNameDecl_getLocation(typedef_decl), |
| 4009 | "typedef %s - unresolved child type", buf_ptr(type_name)); |
| 4007 | 4010 | c->decl_table.put(typedef_decl, nullptr); |
| 4008 | 4011 | // TODO add global var with type_name equal to @compileError("unable to resolve C type") |
| 4009 | 4012 | return nullptr; |
| ... | ... | @@ -4397,7 +4400,7 @@ static bool decl_visitor(void *context, const ZigClangDecl *zdecl) { |
| 4397 | 4400 | visit_fn_decl(c, static_cast<const clang::FunctionDecl*>(decl)); |
| 4398 | 4401 | break; |
| 4399 | 4402 | case clang::Decl::Typedef: |
| 4400 | | resolve_typedef_decl(c, static_cast<const clang::TypedefNameDecl *>(decl)); |
| 4403 | resolve_typedef_decl(c, reinterpret_cast<const ZigClangTypedefNameDecl *>(decl)); |
| 4401 | 4404 | break; |
| 4402 | 4405 | case clang::Decl::Enum: |
| 4403 | 4406 | resolve_enum_decl(c, reinterpret_cast<const ZigClangEnumDecl *>(decl)); |