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