authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-04-30 00:21:45-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2019-04-30 00:21:45-04:00
loga7f99c8ee9b53212b5cf4a5e76329ab53566084b
tree4162c0c7010c7448db3da3708c65de8617be45ee
parent01365be82fb413061d052c2ecdb761d24d73125d
signaturelock-open Commit is signed but in an unrecognized format.

self-hosted translate-c: iterate over top level decls

See #1964

5 files changed, 404 insertions(+), 22 deletions(-)

src-self-hosted/clang.zig+81-1
......@@ -813,7 +813,7 @@ pub extern fn ZigClangSourceManager_getCharacterData(arg0: ?*const struct_ZigCla
813813pub extern fn ZigClangASTContext_getPointerType(arg0: ?*const struct_ZigClangASTContext, T: struct_ZigClangQualType) struct_ZigClangQualType;
814814pub extern fn ZigClangASTUnit_getASTContext(arg0: ?*struct_ZigClangASTUnit) ?*struct_ZigClangASTContext;
815815pub extern fn ZigClangASTUnit_getSourceManager(arg0: ?*struct_ZigClangASTUnit) ?*struct_ZigClangSourceManager;
816pub extern fn ZigClangASTUnit_visitLocalTopLevelDecls(arg0: ?*struct_ZigClangASTUnit, context: ?*c_void, Fn: ?extern fn (?*c_void, ?*const struct_ZigClangDecl) bool) bool;
816pub extern fn ZigClangASTUnit_visitLocalTopLevelDecls(self: *struct_ZigClangASTUnit, context: ?*c_void, Fn: ?extern fn (?*c_void, *const struct_ZigClangDecl) bool) bool;
817817pub extern fn ZigClangRecordType_getDecl(record_ty: ?*const struct_ZigClangRecordType) ?*const struct_ZigClangRecordDecl;
818818pub extern fn ZigClangEnumType_getDecl(record_ty: ?*const struct_ZigClangEnumType) ?*const struct_ZigClangEnumDecl;
819819pub extern fn ZigClangRecordDecl_getCanonicalDecl(record_decl: ?*const struct_ZigClangRecordDecl) ?*const struct_ZigClangTagDecl;
......@@ -967,3 +967,83 @@ pub extern fn ZigClangLoadFromCommandLine(
967967 errors_len: *usize,
968968 resources_path: [*c]const u8,
969969) ?*ZigClangASTUnit;
970
971
972pub extern fn ZigClangDecl_getKind(decl: *const ZigClangDecl) ZigClangDeclKind;
973
974pub const ZigClangDeclKind = extern enum {
975 AccessSpec,
976 Block,
977 Captured,
978 ClassScopeFunctionSpecialization,
979 Empty,
980 Export,
981 ExternCContext,
982 FileScopeAsm,
983 Friend,
984 FriendTemplate,
985 Import,
986 LinkageSpec,
987 Label,
988 Namespace,
989 NamespaceAlias,
990 ObjCCompatibleAlias,
991 ObjCCategory,
992 ObjCCategoryImpl,
993 ObjCImplementation,
994 ObjCInterface,
995 ObjCProtocol,
996 ObjCMethod,
997 ObjCProperty,
998 BuiltinTemplate,
999 ClassTemplate,
1000 FunctionTemplate,
1001 TypeAliasTemplate,
1002 VarTemplate,
1003 TemplateTemplateParm,
1004 Enum,
1005 Record,
1006 CXXRecord,
1007 ClassTemplateSpecialization,
1008 ClassTemplatePartialSpecialization,
1009 TemplateTypeParm,
1010 ObjCTypeParam,
1011 TypeAlias,
1012 Typedef,
1013 UnresolvedUsingTypename,
1014 Using,
1015 UsingDirective,
1016 UsingPack,
1017 UsingShadow,
1018 ConstructorUsingShadow,
1019 Binding,
1020 Field,
1021 ObjCAtDefsField,
1022 ObjCIvar,
1023 Function,
1024 CXXDeductionGuide,
1025 CXXMethod,
1026 CXXConstructor,
1027 CXXConversion,
1028 CXXDestructor,
1029 MSProperty,
1030 NonTypeTemplateParm,
1031 Var,
1032 Decomposition,
1033 ImplicitParam,
1034 OMPCapturedExpr,
1035 ParmVar,
1036 VarTemplateSpecialization,
1037 VarTemplatePartialSpecialization,
1038 EnumConstant,
1039 IndirectField,
1040 OMPDeclareReduction,
1041 UnresolvedUsingValue,
1042 OMPRequires,
1043 OMPThreadPrivate,
1044 ObjCPropertyImpl,
1045 PragmaComment,
1046 PragmaDetectMismatch,
1047 StaticAssert,
1048 TranslationUnit,
1049};
src-self-hosted/translate_c.zig+60-8
......@@ -1,5 +1,5 @@
11// This is the userland implementation of translate-c which will be used by both stage1
2// and stage2. Currently it's not used by anything, as it's not feature complete.
2// and stage2. Currently the only way it is used is with `zig translate-c-2`.
33
44const std = @import("std");
55const ast = std.zig.ast;
......@@ -13,6 +13,16 @@ pub const Mode = enum {
1313
1414pub const ClangErrMsg = Stage2ErrorMsg;
1515
16pub const Error = error {
17 OutOfMemory,
18};
19
20const Context = struct {
21 tree: *ast.Tree,
22 source_buffer: *std.Buffer,
23 err: Error,
24};
25
1626pub fn translate(
1727 backing_allocator: *std.mem.Allocator,
1828 args_begin: [*]?[*]const u8,
......@@ -57,23 +67,65 @@ pub fn translate(
5767
5868 var source_buffer = try std.Buffer.initSize(arena, 0);
5969
60 try appendToken(tree, &source_buffer, "// TODO: implement more than just an empty source file", .LineComment);
70 var context = Context{
71 .tree = tree,
72 .source_buffer = &source_buffer,
73 .err = undefined,
74 };
75
76 if (!ZigClangASTUnit_visitLocalTopLevelDecls(ast_unit, &context, declVisitorC)) {
77 return context.err;
78 }
6179
62 try appendToken(tree, &source_buffer, "", .Eof);
80 try appendToken(&context, .Eof, "");
6381 tree.source = source_buffer.toOwnedSlice();
6482 return tree;
6583}
6684
67fn appendToken(tree: *ast.Tree, source_buffer: *std.Buffer, src_text: []const u8, token_id: Token.Id) !void {
68 const start_index = source_buffer.len();
69 try source_buffer.append(src_text);
70 const end_index = source_buffer.len();
71 const new_token = try tree.tokens.addOne();
85extern fn declVisitorC(context: ?*c_void, decl: *const ZigClangDecl) bool {
86 const c = @ptrCast(*Context, @alignCast(@alignOf(Context), context));
87 declVisitor(c, decl) catch |err| {
88 c.err = err;
89 return false;
90 };
91 return true;
92}
93
94fn declVisitor(c: *Context, decl: *const ZigClangDecl) Error!void {
95 switch (ZigClangDecl_getKind(decl)) {
96 .Function => {
97 try appendToken(c, .LineComment, "// TODO translate function decl");
98 },
99 .Typedef => {
100 try appendToken(c, .LineComment, "// TODO translate typedef");
101 },
102 .Enum => {
103 try appendToken(c, .LineComment, "// TODO translate enum");
104 },
105 .Record => {
106 try appendToken(c, .LineComment, "// TODO translate struct");
107 },
108 .Var => {
109 try appendToken(c, .LineComment, "// TODO translate variable");
110 },
111 else => {
112 // TODO emit_warning(c, bitcast(decl->getLocation()), "ignoring %s decl", decl->getDeclKindName());
113 try appendToken(c, .LineComment, "// TODO translate unknown decl");
114 },
115 }
116}
117
118fn appendToken(c: *Context, token_id: Token.Id, src_text: []const u8) !void {
119 const start_index = c.source_buffer.len();
120 try c.source_buffer.append(src_text);
121 const end_index = c.source_buffer.len();
122 const new_token = try c.tree.tokens.addOne();
72123 new_token.* = Token{
73124 .id = token_id,
74125 .start = start_index,
75126 .end = end_index,
76127 };
128 try c.source_buffer.appendByte('\n');
77129}
78130
79131pub fn freeErrors(errors: []ClangErrMsg) void {
src/translate_c.cpp+11-12
......@@ -4554,28 +4554,27 @@ static void visit_var_decl(Context *c, const clang::VarDecl *var_decl) {
45544554 return;
45554555}
45564556
4557static bool decl_visitor(void *context, const ZigClangDecl *zdecl) {
4558 const clang::Decl *decl = reinterpret_cast<const clang::Decl *>(zdecl);
4557static bool decl_visitor(void *context, const ZigClangDecl *decl) {
45594558 Context *c = (Context*)context;
45604559
4561 switch (decl->getKind()) {
4562 case clang::Decl::Function:
4563 visit_fn_decl(c, static_cast<const clang::FunctionDecl*>(decl));
4560 switch (ZigClangDecl_getKind(decl)) {
4561 case ZigClangDeclFunction:
4562 visit_fn_decl(c, reinterpret_cast<const clang::FunctionDecl*>(decl));
45644563 break;
4565 case clang::Decl::Typedef:
4564 case ZigClangDeclTypedef:
45664565 resolve_typedef_decl(c, reinterpret_cast<const ZigClangTypedefNameDecl *>(decl));
45674566 break;
4568 case clang::Decl::Enum:
4567 case ZigClangDeclEnum:
45694568 resolve_enum_decl(c, reinterpret_cast<const ZigClangEnumDecl *>(decl));
45704569 break;
4571 case clang::Decl::Record:
4572 resolve_record_decl(c, (const ZigClangRecordDecl *)(decl));
4570 case ZigClangDeclRecord:
4571 resolve_record_decl(c, reinterpret_cast<const ZigClangRecordDecl *>(decl));
45734572 break;
4574 case clang::Decl::Var:
4575 visit_var_decl(c, static_cast<const clang::VarDecl *>(decl));
4573 case ZigClangDeclVar:
4574 visit_var_decl(c, reinterpret_cast<const clang::VarDecl *>(decl));
45764575 break;
45774576 default:
4578 emit_warning(c, bitcast(decl->getLocation()), "ignoring %s decl", decl->getDeclKindName());
4577 emit_warning(c, ZigClangDecl_getLocation(decl), "ignoring %s decl", ZigClangDecl_getDeclKindName(decl));
45794578 }
45804579
45814580 return true;
src/zig_clang.cpp+171
......@@ -799,6 +799,162 @@ static_assert((clang::APValue::ValueKind)ZigClangAPValueMemberPointer == clang::
799799static_assert((clang::APValue::ValueKind)ZigClangAPValueAddrLabelDiff == clang::APValue::AddrLabelDiff, "");
800800
801801
802void ZigClang_detect_enum_DeclKind(clang::Decl::Kind x) {
803 switch (x) {
804 case ZigClangDeclAccessSpec:
805 case ZigClangDeclBlock:
806 case ZigClangDeclCaptured:
807 case ZigClangDeclClassScopeFunctionSpecialization:
808 case ZigClangDeclEmpty:
809 case ZigClangDeclExport:
810 case ZigClangDeclExternCContext:
811 case ZigClangDeclFileScopeAsm:
812 case ZigClangDeclFriend:
813 case ZigClangDeclFriendTemplate:
814 case ZigClangDeclImport:
815 case ZigClangDeclLinkageSpec:
816 case ZigClangDeclLabel:
817 case ZigClangDeclNamespace:
818 case ZigClangDeclNamespaceAlias:
819 case ZigClangDeclObjCCompatibleAlias:
820 case ZigClangDeclObjCCategory:
821 case ZigClangDeclObjCCategoryImpl:
822 case ZigClangDeclObjCImplementation:
823 case ZigClangDeclObjCInterface:
824 case ZigClangDeclObjCProtocol:
825 case ZigClangDeclObjCMethod:
826 case ZigClangDeclObjCProperty:
827 case ZigClangDeclBuiltinTemplate:
828 case ZigClangDeclClassTemplate:
829 case ZigClangDeclFunctionTemplate:
830 case ZigClangDeclTypeAliasTemplate:
831 case ZigClangDeclVarTemplate:
832 case ZigClangDeclTemplateTemplateParm:
833 case ZigClangDeclEnum:
834 case ZigClangDeclRecord:
835 case ZigClangDeclCXXRecord:
836 case ZigClangDeclClassTemplateSpecialization:
837 case ZigClangDeclClassTemplatePartialSpecialization:
838 case ZigClangDeclTemplateTypeParm:
839 case ZigClangDeclObjCTypeParam:
840 case ZigClangDeclTypeAlias:
841 case ZigClangDeclTypedef:
842 case ZigClangDeclUnresolvedUsingTypename:
843 case ZigClangDeclUsing:
844 case ZigClangDeclUsingDirective:
845 case ZigClangDeclUsingPack:
846 case ZigClangDeclUsingShadow:
847 case ZigClangDeclConstructorUsingShadow:
848 case ZigClangDeclBinding:
849 case ZigClangDeclField:
850 case ZigClangDeclObjCAtDefsField:
851 case ZigClangDeclObjCIvar:
852 case ZigClangDeclFunction:
853 case ZigClangDeclCXXDeductionGuide:
854 case ZigClangDeclCXXMethod:
855 case ZigClangDeclCXXConstructor:
856 case ZigClangDeclCXXConversion:
857 case ZigClangDeclCXXDestructor:
858 case ZigClangDeclMSProperty:
859 case ZigClangDeclNonTypeTemplateParm:
860 case ZigClangDeclVar:
861 case ZigClangDeclDecomposition:
862 case ZigClangDeclImplicitParam:
863 case ZigClangDeclOMPCapturedExpr:
864 case ZigClangDeclParmVar:
865 case ZigClangDeclVarTemplateSpecialization:
866 case ZigClangDeclVarTemplatePartialSpecialization:
867 case ZigClangDeclEnumConstant:
868 case ZigClangDeclIndirectField:
869 case ZigClangDeclOMPDeclareReduction:
870 case ZigClangDeclUnresolvedUsingValue:
871 case ZigClangDeclOMPRequires:
872 case ZigClangDeclOMPThreadPrivate:
873 case ZigClangDeclObjCPropertyImpl:
874 case ZigClangDeclPragmaComment:
875 case ZigClangDeclPragmaDetectMismatch:
876 case ZigClangDeclStaticAssert:
877 case ZigClangDeclTranslationUnit:
878 break;
879 }
880}
881
882static_assert((clang::Decl::Kind)ZigClangDeclAccessSpec == clang::Decl::AccessSpec, "");
883static_assert((clang::Decl::Kind)ZigClangDeclBlock == clang::Decl::Block, "");
884static_assert((clang::Decl::Kind)ZigClangDeclCaptured == clang::Decl::Captured, "");
885static_assert((clang::Decl::Kind)ZigClangDeclClassScopeFunctionSpecialization == clang::Decl::ClassScopeFunctionSpecialization, "");
886static_assert((clang::Decl::Kind)ZigClangDeclEmpty == clang::Decl::Empty, "");
887static_assert((clang::Decl::Kind)ZigClangDeclExport == clang::Decl::Export, "");
888static_assert((clang::Decl::Kind)ZigClangDeclExternCContext == clang::Decl::ExternCContext, "");
889static_assert((clang::Decl::Kind)ZigClangDeclFileScopeAsm == clang::Decl::FileScopeAsm, "");
890static_assert((clang::Decl::Kind)ZigClangDeclFriend == clang::Decl::Friend, "");
891static_assert((clang::Decl::Kind)ZigClangDeclFriendTemplate == clang::Decl::FriendTemplate, "");
892static_assert((clang::Decl::Kind)ZigClangDeclImport == clang::Decl::Import, "");
893static_assert((clang::Decl::Kind)ZigClangDeclLinkageSpec == clang::Decl::LinkageSpec, "");
894static_assert((clang::Decl::Kind)ZigClangDeclLabel == clang::Decl::Label, "");
895static_assert((clang::Decl::Kind)ZigClangDeclNamespace == clang::Decl::Namespace, "");
896static_assert((clang::Decl::Kind)ZigClangDeclNamespaceAlias == clang::Decl::NamespaceAlias, "");
897static_assert((clang::Decl::Kind)ZigClangDeclObjCCompatibleAlias == clang::Decl::ObjCCompatibleAlias, "");
898static_assert((clang::Decl::Kind)ZigClangDeclObjCCategory == clang::Decl::ObjCCategory, "");
899static_assert((clang::Decl::Kind)ZigClangDeclObjCCategoryImpl == clang::Decl::ObjCCategoryImpl, "");
900static_assert((clang::Decl::Kind)ZigClangDeclObjCImplementation == clang::Decl::ObjCImplementation, "");
901static_assert((clang::Decl::Kind)ZigClangDeclObjCInterface == clang::Decl::ObjCInterface, "");
902static_assert((clang::Decl::Kind)ZigClangDeclObjCProtocol == clang::Decl::ObjCProtocol, "");
903static_assert((clang::Decl::Kind)ZigClangDeclObjCMethod == clang::Decl::ObjCMethod, "");
904static_assert((clang::Decl::Kind)ZigClangDeclObjCProperty == clang::Decl::ObjCProperty, "");
905static_assert((clang::Decl::Kind)ZigClangDeclBuiltinTemplate == clang::Decl::BuiltinTemplate, "");
906static_assert((clang::Decl::Kind)ZigClangDeclClassTemplate == clang::Decl::ClassTemplate, "");
907static_assert((clang::Decl::Kind)ZigClangDeclFunctionTemplate == clang::Decl::FunctionTemplate, "");
908static_assert((clang::Decl::Kind)ZigClangDeclTypeAliasTemplate == clang::Decl::TypeAliasTemplate, "");
909static_assert((clang::Decl::Kind)ZigClangDeclVarTemplate == clang::Decl::VarTemplate, "");
910static_assert((clang::Decl::Kind)ZigClangDeclTemplateTemplateParm == clang::Decl::TemplateTemplateParm, "");
911static_assert((clang::Decl::Kind)ZigClangDeclEnum == clang::Decl::Enum, "");
912static_assert((clang::Decl::Kind)ZigClangDeclRecord == clang::Decl::Record, "");
913static_assert((clang::Decl::Kind)ZigClangDeclCXXRecord == clang::Decl::CXXRecord, "");
914static_assert((clang::Decl::Kind)ZigClangDeclClassTemplateSpecialization == clang::Decl::ClassTemplateSpecialization, "");
915static_assert((clang::Decl::Kind)ZigClangDeclClassTemplatePartialSpecialization == clang::Decl::ClassTemplatePartialSpecialization, "");
916static_assert((clang::Decl::Kind)ZigClangDeclTemplateTypeParm == clang::Decl::TemplateTypeParm, "");
917static_assert((clang::Decl::Kind)ZigClangDeclObjCTypeParam == clang::Decl::ObjCTypeParam, "");
918static_assert((clang::Decl::Kind)ZigClangDeclTypeAlias == clang::Decl::TypeAlias, "");
919static_assert((clang::Decl::Kind)ZigClangDeclTypedef == clang::Decl::Typedef, "");
920static_assert((clang::Decl::Kind)ZigClangDeclUnresolvedUsingTypename == clang::Decl::UnresolvedUsingTypename, "");
921static_assert((clang::Decl::Kind)ZigClangDeclUsing == clang::Decl::Using, "");
922static_assert((clang::Decl::Kind)ZigClangDeclUsingDirective == clang::Decl::UsingDirective, "");
923static_assert((clang::Decl::Kind)ZigClangDeclUsingPack == clang::Decl::UsingPack, "");
924static_assert((clang::Decl::Kind)ZigClangDeclUsingShadow == clang::Decl::UsingShadow, "");
925static_assert((clang::Decl::Kind)ZigClangDeclConstructorUsingShadow == clang::Decl::ConstructorUsingShadow, "");
926static_assert((clang::Decl::Kind)ZigClangDeclBinding == clang::Decl::Binding, "");
927static_assert((clang::Decl::Kind)ZigClangDeclField == clang::Decl::Field, "");
928static_assert((clang::Decl::Kind)ZigClangDeclObjCAtDefsField == clang::Decl::ObjCAtDefsField, "");
929static_assert((clang::Decl::Kind)ZigClangDeclObjCIvar == clang::Decl::ObjCIvar, "");
930static_assert((clang::Decl::Kind)ZigClangDeclFunction == clang::Decl::Function, "");
931static_assert((clang::Decl::Kind)ZigClangDeclCXXDeductionGuide == clang::Decl::CXXDeductionGuide, "");
932static_assert((clang::Decl::Kind)ZigClangDeclCXXMethod == clang::Decl::CXXMethod, "");
933static_assert((clang::Decl::Kind)ZigClangDeclCXXConstructor == clang::Decl::CXXConstructor, "");
934static_assert((clang::Decl::Kind)ZigClangDeclCXXConversion == clang::Decl::CXXConversion, "");
935static_assert((clang::Decl::Kind)ZigClangDeclCXXDestructor == clang::Decl::CXXDestructor, "");
936static_assert((clang::Decl::Kind)ZigClangDeclMSProperty == clang::Decl::MSProperty, "");
937static_assert((clang::Decl::Kind)ZigClangDeclNonTypeTemplateParm == clang::Decl::NonTypeTemplateParm, "");
938static_assert((clang::Decl::Kind)ZigClangDeclVar == clang::Decl::Var, "");
939static_assert((clang::Decl::Kind)ZigClangDeclDecomposition == clang::Decl::Decomposition, "");
940static_assert((clang::Decl::Kind)ZigClangDeclImplicitParam == clang::Decl::ImplicitParam, "");
941static_assert((clang::Decl::Kind)ZigClangDeclOMPCapturedExpr == clang::Decl::OMPCapturedExpr, "");
942static_assert((clang::Decl::Kind)ZigClangDeclParmVar == clang::Decl::ParmVar, "");
943static_assert((clang::Decl::Kind)ZigClangDeclVarTemplateSpecialization == clang::Decl::VarTemplateSpecialization, "");
944static_assert((clang::Decl::Kind)ZigClangDeclVarTemplatePartialSpecialization == clang::Decl::VarTemplatePartialSpecialization, "");
945static_assert((clang::Decl::Kind)ZigClangDeclEnumConstant == clang::Decl::EnumConstant, "");
946static_assert((clang::Decl::Kind)ZigClangDeclIndirectField == clang::Decl::IndirectField, "");
947static_assert((clang::Decl::Kind)ZigClangDeclOMPDeclareReduction == clang::Decl::OMPDeclareReduction, "");
948static_assert((clang::Decl::Kind)ZigClangDeclUnresolvedUsingValue == clang::Decl::UnresolvedUsingValue, "");
949static_assert((clang::Decl::Kind)ZigClangDeclOMPRequires == clang::Decl::OMPRequires, "");
950static_assert((clang::Decl::Kind)ZigClangDeclOMPThreadPrivate == clang::Decl::OMPThreadPrivate, "");
951static_assert((clang::Decl::Kind)ZigClangDeclObjCPropertyImpl == clang::Decl::ObjCPropertyImpl, "");
952static_assert((clang::Decl::Kind)ZigClangDeclPragmaComment == clang::Decl::PragmaComment, "");
953static_assert((clang::Decl::Kind)ZigClangDeclPragmaDetectMismatch == clang::Decl::PragmaDetectMismatch, "");
954static_assert((clang::Decl::Kind)ZigClangDeclStaticAssert == clang::Decl::StaticAssert, "");
955static_assert((clang::Decl::Kind)ZigClangDeclTranslationUnit == clang::Decl::TranslationUnit, "");
956
957
802958static_assert(sizeof(ZigClangSourceLocation) == sizeof(clang::SourceLocation), "");
803959static ZigClangSourceLocation bitcast(clang::SourceLocation src) {
804960 ZigClangSourceLocation dest;
......@@ -946,6 +1102,16 @@ const char *ZigClangDecl_getName_bytes_begin(const ZigClangDecl *zig_decl) {
9461102 return (const char *)named_decl->getName().bytes_begin();
9471103}
9481104
1105ZigClangDeclKind ZigClangDecl_getKind(const struct ZigClangDecl *self) {
1106 auto casted = reinterpret_cast<const clang::Decl *>(self);
1107 return (ZigClangDeclKind)casted->getKind();
1108}
1109
1110const char *ZigClangDecl_getDeclKindName(const struct ZigClangDecl *self) {
1111 auto casted = reinterpret_cast<const clang::Decl *>(self);
1112 return casted->getDeclKindName();
1113}
1114
9491115ZigClangSourceLocation ZigClangRecordDecl_getLocation(const ZigClangRecordDecl *zig_record_decl) {
9501116 const clang::RecordDecl *record_decl = reinterpret_cast<const clang::RecordDecl *>(zig_record_decl);
9511117 return bitcast(record_decl->getLocation());
......@@ -961,6 +1127,11 @@ ZigClangSourceLocation ZigClangTypedefNameDecl_getLocation(const ZigClangTypedef
9611127 return bitcast(casted->getLocation());
9621128}
9631129
1130ZigClangSourceLocation ZigClangDecl_getLocation(const ZigClangDecl *self) {
1131 auto casted = reinterpret_cast<const clang::Decl *>(self);
1132 return bitcast(casted->getLocation());
1133}
1134
9641135bool ZigClangSourceLocation_eq(ZigClangSourceLocation zig_a, ZigClangSourceLocation zig_b) {
9651136 clang::SourceLocation a = bitcast(zig_a);
9661137 clang::SourceLocation b = bitcast(zig_b);
src/zig_clang.h+81-1
......@@ -482,6 +482,83 @@ enum ZigClangAPValueKind {
482482 ZigClangAPValueAddrLabelDiff,
483483};
484484
485enum ZigClangDeclKind {
486 ZigClangDeclAccessSpec,
487 ZigClangDeclBlock,
488 ZigClangDeclCaptured,
489 ZigClangDeclClassScopeFunctionSpecialization,
490 ZigClangDeclEmpty,
491 ZigClangDeclExport,
492 ZigClangDeclExternCContext,
493 ZigClangDeclFileScopeAsm,
494 ZigClangDeclFriend,
495 ZigClangDeclFriendTemplate,
496 ZigClangDeclImport,
497 ZigClangDeclLinkageSpec,
498 ZigClangDeclLabel,
499 ZigClangDeclNamespace,
500 ZigClangDeclNamespaceAlias,
501 ZigClangDeclObjCCompatibleAlias,
502 ZigClangDeclObjCCategory,
503 ZigClangDeclObjCCategoryImpl,
504 ZigClangDeclObjCImplementation,
505 ZigClangDeclObjCInterface,
506 ZigClangDeclObjCProtocol,
507 ZigClangDeclObjCMethod,
508 ZigClangDeclObjCProperty,
509 ZigClangDeclBuiltinTemplate,
510 ZigClangDeclClassTemplate,
511 ZigClangDeclFunctionTemplate,
512 ZigClangDeclTypeAliasTemplate,
513 ZigClangDeclVarTemplate,
514 ZigClangDeclTemplateTemplateParm,
515 ZigClangDeclEnum,
516 ZigClangDeclRecord,
517 ZigClangDeclCXXRecord,
518 ZigClangDeclClassTemplateSpecialization,
519 ZigClangDeclClassTemplatePartialSpecialization,
520 ZigClangDeclTemplateTypeParm,
521 ZigClangDeclObjCTypeParam,
522 ZigClangDeclTypeAlias,
523 ZigClangDeclTypedef,
524 ZigClangDeclUnresolvedUsingTypename,
525 ZigClangDeclUsing,
526 ZigClangDeclUsingDirective,
527 ZigClangDeclUsingPack,
528 ZigClangDeclUsingShadow,
529 ZigClangDeclConstructorUsingShadow,
530 ZigClangDeclBinding,
531 ZigClangDeclField,
532 ZigClangDeclObjCAtDefsField,
533 ZigClangDeclObjCIvar,
534 ZigClangDeclFunction,
535 ZigClangDeclCXXDeductionGuide,
536 ZigClangDeclCXXMethod,
537 ZigClangDeclCXXConstructor,
538 ZigClangDeclCXXConversion,
539 ZigClangDeclCXXDestructor,
540 ZigClangDeclMSProperty,
541 ZigClangDeclNonTypeTemplateParm,
542 ZigClangDeclVar,
543 ZigClangDeclDecomposition,
544 ZigClangDeclImplicitParam,
545 ZigClangDeclOMPCapturedExpr,
546 ZigClangDeclParmVar,
547 ZigClangDeclVarTemplateSpecialization,
548 ZigClangDeclVarTemplatePartialSpecialization,
549 ZigClangDeclEnumConstant,
550 ZigClangDeclIndirectField,
551 ZigClangDeclOMPDeclareReduction,
552 ZigClangDeclUnresolvedUsingValue,
553 ZigClangDeclOMPRequires,
554 ZigClangDeclOMPThreadPrivate,
555 ZigClangDeclObjCPropertyImpl,
556 ZigClangDeclPragmaComment,
557 ZigClangDeclPragmaDetectMismatch,
558 ZigClangDeclStaticAssert,
559 ZigClangDeclTranslationUnit,
560};
561
485562ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangSourceManager_getSpellingLoc(const struct ZigClangSourceManager *,
486563 struct ZigClangSourceLocation Loc);
487564ZIG_EXTERN_C const char *ZigClangSourceManager_getFilename(const struct ZigClangSourceManager *,
......@@ -520,6 +597,7 @@ ZIG_EXTERN_C const struct ZigClangEnumDecl *ZigClangEnumDecl_getDefinition(const
520597ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangRecordDecl_getLocation(const struct ZigClangRecordDecl *);
521598ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangEnumDecl_getLocation(const struct ZigClangEnumDecl *);
522599ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangTypedefNameDecl_getLocation(const struct ZigClangTypedefNameDecl *);
600ZIG_EXTERN_C struct ZigClangSourceLocation ZigClangDecl_getLocation(const struct ZigClangDecl *);
523601
524602ZIG_EXTERN_C bool ZigClangRecordDecl_isUnion(const struct ZigClangRecordDecl *record_decl);
525603ZIG_EXTERN_C bool ZigClangRecordDecl_isStruct(const struct ZigClangRecordDecl *record_decl);
......@@ -528,6 +606,8 @@ ZIG_EXTERN_C bool ZigClangRecordDecl_isAnonymousStructOrUnion(const struct ZigCl
528606ZIG_EXTERN_C struct ZigClangQualType ZigClangEnumDecl_getIntegerType(const struct ZigClangEnumDecl *);
529607
530608ZIG_EXTERN_C const char *ZigClangDecl_getName_bytes_begin(const struct ZigClangDecl *decl);
609ZIG_EXTERN_C enum ZigClangDeclKind ZigClangDecl_getKind(const struct ZigClangDecl *decl);
610ZIG_EXTERN_C const char *ZigClangDecl_getDeclKindName(const struct ZigClangDecl *decl);
531611
532612ZIG_EXTERN_C bool ZigClangSourceLocation_eq(struct ZigClangSourceLocation a, struct ZigClangSourceLocation b);
533613
......@@ -543,7 +623,7 @@ ZIG_EXTERN_C bool ZigClangQualType_isVolatileQualified(struct ZigClangQualType);
543623ZIG_EXTERN_C bool ZigClangQualType_isRestrictQualified(struct ZigClangQualType);
544624
545625ZIG_EXTERN_C enum ZigClangTypeClass ZigClangType_getTypeClass(const struct ZigClangType *self);
546ZIG_EXTERN_C ZigClangQualType ZigClangType_getPointeeType(const ZigClangType *self);
626ZIG_EXTERN_C struct ZigClangQualType ZigClangType_getPointeeType(const struct ZigClangType *self);
547627ZIG_EXTERN_C bool ZigClangType_isVoidType(const struct ZigClangType *self);
548628ZIG_EXTERN_C const char *ZigClangType_getTypeClassName(const struct ZigClangType *self);
549629