Index.h revision 4ade6d6eae934f796ca43c81a5aa185e456dde9b
1d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek/*===-- clang-c/Index.h - Indexing Public C Interface -------------*- C -*-===*\
2d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek|*                                                                            *|
3d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek|*                     The LLVM Compiler Infrastructure                       *|
4d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek|*                                                                            *|
5d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek|* This file is distributed under the University of Illinois Open Source      *|
6d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek|* License. See LICENSE.TXT for details.                                      *|
7d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek|*                                                                            *|
8d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek|*===----------------------------------------------------------------------===*|
9d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek|*                                                                            *|
10d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek|* This header provides a public inferface to a Clang library for extracting  *|
11d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek|* high-level symbol information from source files without exposing the full  *|
12d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek|* Clang C++ API.                                                             *|
13d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek|*                                                                            *|
14d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek\*===----------------------------------------------------------------------===*/
15d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek
16d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek#ifndef CLANG_C_INDEX_H
17d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek#define CLANG_C_INDEX_H
18d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek
19d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek#ifdef __cplusplus
20d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenekextern "C" {
21d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek#endif
22d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek
23600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff/*
24600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   Clang indeX abstractions. The backing store for the following API's will be
25b7cd17cfd2970636af0fe9b491bab1acf0009c2fSteve Naroff   clangs AST file (currently based on PCH). AST files are created as follows:
26600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
27b7cd17cfd2970636af0fe9b491bab1acf0009c2fSteve Naroff   "clang -emit-ast <sourcefile.langsuffix> -o <sourcefile.ast>".
28600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
29600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   Naming Conventions: To avoid namespace pollution, data types are prefixed
30600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   with "CX" and functions are prefixed with "clang_".
31600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff*/
3250398199fb10e196a8d92fbf7a062dbe42ed88fdSteve Narofftypedef void *CXIndex;            /* An indexing instance. */
33600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
3450398199fb10e196a8d92fbf7a062dbe42ed88fdSteve Narofftypedef void *CXTranslationUnit;  /* A translation unit instance. */
35600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
3689922f86f4e7da383af2a62ef04ad8b93b941220Steve Narofftypedef void *CXDecl;    /* A specific declaration within a translation unit. */
37fb5704295c6137685a7b90b92cd6b958028740c8Steve Narofftypedef void *CXStmt;    /* A specific statement within a function/method */
38600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
39c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff/* Cursors represent declarations, definitions, and references. */
4089922f86f4e7da383af2a62ef04ad8b93b941220Steve Naroffenum CXCursorKind {
4189922f86f4e7da383af2a62ef04ad8b93b941220Steve Naroff /* Declarations */
4289922f86f4e7da383af2a62ef04ad8b93b941220Steve Naroff CXCursor_FirstDecl                     = 1,
43c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_TypedefDecl                   = 2,
44c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_StructDecl                    = 3,
45c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_UnionDecl                     = 4,
46c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_ClassDecl                     = 5,
47c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_EnumDecl                      = 6,
48c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_FieldDecl                     = 7,
49c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_EnumConstantDecl              = 8,
50c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_FunctionDecl                  = 9,
51c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_VarDecl                       = 10,
52c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_ParmDecl                      = 11,
53c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_ObjCInterfaceDecl             = 12,
54c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_ObjCCategoryDecl              = 13,
55c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_ObjCProtocolDecl              = 14,
56c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_ObjCPropertyDecl              = 15,
57c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_ObjCIvarDecl                  = 16,
58c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_ObjCInstanceMethodDecl        = 17,
59c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_ObjCClassMethodDecl           = 18,
60c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_LastDecl                      = 18,
6189922f86f4e7da383af2a62ef04ad8b93b941220Steve Naroff
62c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff /* Definitions */
63c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_FirstDefn                     = 32,
64c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_FunctionDefn                  = 32,
65c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_ObjCClassDefn                 = 33,
66c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_ObjCCategoryDefn              = 34,
67c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_ObjCInstanceMethodDefn        = 35,
68c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_ObjCClassMethodDefn           = 36,
69c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff CXCursor_LastDefn                      = 36,
70c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroff
7189922f86f4e7da383af2a62ef04ad8b93b941220Steve Naroff /* References */
72fb5704295c6137685a7b90b92cd6b958028740c8Steve Naroff CXCursor_FirstRef                      = 40, /* Decl references */
73f334b4e3eda5a39f041fe13f805dbb53535daa2fSteve Naroff CXCursor_ObjCSuperClassRef             = 40,
74f334b4e3eda5a39f041fe13f805dbb53535daa2fSteve Naroff CXCursor_ObjCProtocolRef               = 41,
75fb5704295c6137685a7b90b92cd6b958028740c8Steve Naroff CXCursor_ObjCClassRef                  = 42,
76fb5704295c6137685a7b90b92cd6b958028740c8Steve Naroff
77fb5704295c6137685a7b90b92cd6b958028740c8Steve Naroff CXCursor_ObjCSelectorRef               = 43, /* Expression references */
78fb5704295c6137685a7b90b92cd6b958028740c8Steve Naroff CXCursor_ObjCIvarRef                   = 44,
79fb5704295c6137685a7b90b92cd6b958028740c8Steve Naroff CXCursor_VarRef                        = 45,
80fb5704295c6137685a7b90b92cd6b958028740c8Steve Naroff CXCursor_FunctionRef                   = 46,
81fb5704295c6137685a7b90b92cd6b958028740c8Steve Naroff CXCursor_EnumConstantRef               = 47,
82fb5704295c6137685a7b90b92cd6b958028740c8Steve Naroff CXCursor_MemberRef                     = 48,
83fb5704295c6137685a7b90b92cd6b958028740c8Steve Naroff CXCursor_LastRef                       = 48,
8477128ddd3077fc045751a55bb3226802b15d5510Steve Naroff
8577128ddd3077fc045751a55bb3226802b15d5510Steve Naroff /* Error conditions */
8677128ddd3077fc045751a55bb3226802b15d5510Steve Naroff CXCursor_FirstInvalid                  = 70,
8777128ddd3077fc045751a55bb3226802b15d5510Steve Naroff CXCursor_InvalidFile                   = 70,
8877128ddd3077fc045751a55bb3226802b15d5510Steve Naroff CXCursor_NoDeclFound                   = 71,
8977128ddd3077fc045751a55bb3226802b15d5510Steve Naroff CXCursor_NotImplemented                = 72,
9077128ddd3077fc045751a55bb3226802b15d5510Steve Naroff CXCursor_LastInvalid                   = 72
91600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff};
92600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
9389922f86f4e7da383af2a62ef04ad8b93b941220Steve Naroff/* A cursor into the CXTranslationUnit. */
94fb5704295c6137685a7b90b92cd6b958028740c8Steve Naroff
9589922f86f4e7da383af2a62ef04ad8b93b941220Steve Narofftypedef struct {
9689922f86f4e7da383af2a62ef04ad8b93b941220Steve Naroff  enum CXCursorKind kind;
9789922f86f4e7da383af2a62ef04ad8b93b941220Steve Naroff  CXDecl decl;
98fb5704295c6137685a7b90b92cd6b958028740c8Steve Naroff  CXStmt stmt; /* expression reference */
9989922f86f4e7da383af2a62ef04ad8b93b941220Steve Naroff} CXCursor;
100600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
10150398199fb10e196a8d92fbf7a062dbe42ed88fdSteve Naroff/* A unique token for looking up "visible" CXDecls from a CXTranslationUnit. */
102600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Narofftypedef void *CXEntity;
103600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
104600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve NaroffCXIndex clang_createIndex();
105fb5704295c6137685a7b90b92cd6b958028740c8Steve Naroffvoid clang_disposeIndex(CXIndex);
106600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
107af08ddc8f1c53fed8d8d0ad82aa2a0bb7d654bd1Steve Naroffconst char *clang_getTranslationUnitSpelling(CXTranslationUnit CTUnit);
108af08ddc8f1c53fed8d8d0ad82aa2a0bb7d654bd1Steve Naroff
10950398199fb10e196a8d92fbf7a062dbe42ed88fdSteve NaroffCXTranslationUnit clang_createTranslationUnit(
110600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff  CXIndex, const char *ast_filename
111600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff);
112fb5704295c6137685a7b90b92cd6b958028740c8Steve Naroffvoid clang_disposeTranslationUnit(CXTranslationUnit);
113600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
114600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff/*
115600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   Usage: clang_loadTranslationUnit(). Will load the toplevel declarations
116600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   within a translation unit, issuing a 'callback' for each one.
117600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
118600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   void printObjCInterfaceNames(CXTranslationUnit X, CXCursor C) {
119600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff     if (clang_getCursorKind(C) == Cursor_Declaration) {
120600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff       CXDecl D = clang_getCursorDecl(C);
121600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff       if (clang_getDeclKind(D) == CXDecl_ObjC_interface)
122600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff         printf("@interface %s in file %s on line %d column %d\n",
123600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff                clang_getDeclSpelling(D), clang_getCursorSource(C),
124600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff                clang_getCursorLine(C), clang_getCursorColumn(C));
125600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff     }
126600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   }
127600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   static void usage {
128600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff     clang_loadTranslationUnit(CXTranslationUnit, printObjCInterfaceNames);
129600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   }
130600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff*/
1312b8ee6c2994f738e5162ff46b638974870f51662Steve Narofftypedef void *CXClientData;
1322b8ee6c2994f738e5162ff46b638974870f51662Steve Narofftypedef void (*CXTranslationUnitIterator)(CXTranslationUnit, CXCursor,
1332b8ee6c2994f738e5162ff46b638974870f51662Steve Naroff                                          CXClientData);
1342b8ee6c2994f738e5162ff46b638974870f51662Steve Naroffvoid clang_loadTranslationUnit(CXTranslationUnit, CXTranslationUnitIterator,
1352b8ee6c2994f738e5162ff46b638974870f51662Steve Naroff                               CXClientData);
136600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
137600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff/*
138600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   Usage: clang_loadDeclaration(). Will load the declaration, issuing a
139600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   'callback' for each declaration/reference within the respective declaration.
140600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
141600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   For interface declarations, this will index the super class, protocols,
142600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   ivars, methods, etc. For structure declarations, this will index the fields.
143600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   For functions, this will index the parameters (and body, for function
144600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   definitions), local declarations/references.
145600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
146600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   void getInterfaceDetails(CXDecl X, CXCursor C) {
147600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff     switch (clang_getCursorKind(C)) {
148600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff       case Cursor_ObjC_ClassRef:
149600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff         CXDecl SuperClass = clang_getCursorDecl(C);
150600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff       case Cursor_ObjC_ProtocolRef:
151600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff         CXDecl AdoptsProtocol = clang_getCursorDecl(C);
152600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff       case Cursor_Declaration:
153600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff         CXDecl AnIvarOrMethod = clang_getCursorDecl(C);
154600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff     }
155600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   }
156600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   static void usage() {
157600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff     if (clang_getDeclKind(D) == CXDecl_ObjC_interface) {
158600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff       clang_loadDeclaration(D, getInterfaceDetails);
159600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff     }
160600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff   }
161600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff*/
162c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Narofftypedef void (*CXDeclIterator)(CXDecl, CXCursor, CXClientData);
16389922f86f4e7da383af2a62ef04ad8b93b941220Steve Naroff
164c857ea4d22e1e6dd9ede1f0e84d48b157c6924fdSteve Naroffvoid clang_loadDeclaration(CXDecl, CXDeclIterator, CXClientData);
165600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
16650398199fb10e196a8d92fbf7a062dbe42ed88fdSteve Naroff/*
16750398199fb10e196a8d92fbf7a062dbe42ed88fdSteve Naroff * CXEntity Operations.
16850398199fb10e196a8d92fbf7a062dbe42ed88fdSteve Naroff */
169600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroffconst char *clang_getDeclarationName(CXEntity);
170600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroffconst char *clang_getURI(CXEntity);
171600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve NaroffCXEntity clang_getEntity(const char *URI);
17250398199fb10e196a8d92fbf7a062dbe42ed88fdSteve Naroff/*
17350398199fb10e196a8d92fbf7a062dbe42ed88fdSteve Naroff * CXDecl Operations.
17450398199fb10e196a8d92fbf7a062dbe42ed88fdSteve Naroff */
175600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve NaroffCXCursor clang_getCursorFromDecl(CXDecl);
176600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve NaroffCXEntity clang_getEntityFromDecl(CXDecl);
177600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroffconst char *clang_getDeclSpelling(CXDecl);
17850398199fb10e196a8d92fbf7a062dbe42ed88fdSteve Naroff/*
17950398199fb10e196a8d92fbf7a062dbe42ed88fdSteve Naroff * CXCursor Operations.
18050398199fb10e196a8d92fbf7a062dbe42ed88fdSteve Naroff */
181600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve NaroffCXCursor clang_getCursor(CXTranslationUnit, const char *source_name,
182600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff                         unsigned line, unsigned column);
183600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
18450398199fb10e196a8d92fbf7a062dbe42ed88fdSteve Naroffenum CXCursorKind clang_getCursorKind(CXCursor);
18589922f86f4e7da383af2a62ef04ad8b93b941220Steve Naroffunsigned clang_isDeclaration(enum CXCursorKind);
186f334b4e3eda5a39f041fe13f805dbb53535daa2fSteve Naroffunsigned clang_isReference(enum CXCursorKind);
187f334b4e3eda5a39f041fe13f805dbb53535daa2fSteve Naroffunsigned clang_isDefinition(enum CXCursorKind);
18877128ddd3077fc045751a55bb3226802b15d5510Steve Naroffunsigned clang_isInvalid(enum CXCursorKind);
189600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
190600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroffunsigned clang_getCursorLine(CXCursor);
191600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroffunsigned clang_getCursorColumn(CXCursor);
192600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroffconst char *clang_getCursorSource(CXCursor);
193f334b4e3eda5a39f041fe13f805dbb53535daa2fSteve Naroffconst char *clang_getCursorSpelling(CXCursor);
194f334b4e3eda5a39f041fe13f805dbb53535daa2fSteve Naroff
1954ade6d6eae934f796ca43c81a5aa185e456dde9bSteve Naroff/* for debug/testing */
1964ade6d6eae934f796ca43c81a5aa185e456dde9bSteve Naroffconst char *clang_getCursorKindSpelling(enum CXCursorKind Kind);
1974ade6d6eae934f796ca43c81a5aa185e456dde9bSteve Naroffvoid clang_getDefinitionSpellingAndExtent(CXCursor,
1984ade6d6eae934f796ca43c81a5aa185e456dde9bSteve Naroff                                          const char **startBuf,
1994ade6d6eae934f796ca43c81a5aa185e456dde9bSteve Naroff                                          const char **endBuf,
2004ade6d6eae934f796ca43c81a5aa185e456dde9bSteve Naroff                                          unsigned *startLine,
2014ade6d6eae934f796ca43c81a5aa185e456dde9bSteve Naroff                                          unsigned *startColumn,
2024ade6d6eae934f796ca43c81a5aa185e456dde9bSteve Naroff                                          unsigned *endLine,
2034ade6d6eae934f796ca43c81a5aa185e456dde9bSteve Naroff                                          unsigned *endColumn);
204600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve Naroff
20550398199fb10e196a8d92fbf7a062dbe42ed88fdSteve Naroff/*
206459789b8d2e3235e2f3342c393b7a78bd73c1347Chris Lattner * If CXCursorKind == Cursor_Reference, then this will return the referenced
207459789b8d2e3235e2f3342c393b7a78bd73c1347Chris Lattner * declaration.
20850398199fb10e196a8d92fbf7a062dbe42ed88fdSteve Naroff * If CXCursorKind == Cursor_Declaration, then this will return the declaration.
20950398199fb10e196a8d92fbf7a062dbe42ed88fdSteve Naroff */
210600866cc7d6d9ec2e27d4b6d6ec461f6463b5ab6Steve NaroffCXDecl clang_getCursorDecl(CXCursor);
211d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek
212d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek#ifdef __cplusplus
213d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek}
214d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek#endif
215d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek#endif
216d2fa56687f8bd5ac6ebf9d9468d0efd714986a54Ted Kremenek
217