<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p><font size="+1">That's what I guessed. But my purpose is doing
        source-to-source translation. I'm not sure if I should use
        libclang and your previously suggested method to do it, or use
        libTooling to directly get AST nodes. To me, the second method
        seems easier to get the content of a node.</font></p>
    <p><font size="+1"> Any suggestions? Which way do you prefer if you
        were translating the source to another language?</font><br>
    </p>
    <pre class="moz-signature" cols="72">Love,
Lou

</pre>
    <div class="moz-cite-prefix">On 10/27/18 8:45 PM, Jacob Carlborg via
      cfe-dev wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:pr1mhh$ke0$1@blaine.gmane.org">On
      2018-10-25 14:27, Lou Wynn via cfe-dev wrote:
      <br>
      <blockquote type="cite">I've found some functions in the
        tools/libclang/CXCursor.h file, and they are:
        <br>
        <br>
        std::pair<OverloadedDeclRefStorage, SourceLocation>
        <br>
           getCursorOverloadedDeclRef(CXCursor C);
        <br>
        <br>
        const Decl *getCursorDecl(CXCursor Cursor);
        <br>
        const Expr *getCursorExpr(CXCursor Cursor);
        <br>
        const Stmt *getCursorStmt(CXCursor Cursor);
        <br>
        const Attr *getCursorAttr(CXCursor Cursor);
        <br>
        const Decl *getCursorParentDecl(CXCursor Cursor);
        <br>
        <br>
        ASTContext &getCursorContext(CXCursor Cursor);
        <br>
        ASTUnit *getCursorASTUnit(CXCursor Cursor);
        <br>
        CXTranslationUnit getCursorTU(CXCursor Cursor);
        <br>
        <br>
        void getOverriddenCursors(CXCursor cursor,
        <br>
                                   SmallVectorImpl<CXCursor>
        &overridden);
        <br>
        <br>
        <br>
        Some of them are implemented as follows:
        <br>
        <br>
        const Decl *cxcursor::getCursorDecl(CXCursor Cursor) {
        <br>
           return static_cast<const Decl *>(Cursor.data[0]);
        <br>
        }
        <br>
        <br>
        const Stmt *cxcursor::getCursorStmt(CXCursor Cursor) {
        <br>
           if (Cursor.kind == CXCursor_ObjCSuperClassRef ||
        <br>
               Cursor.kind == CXCursor_ObjCProtocolRef ||
        <br>
               Cursor.kind == CXCursor_ObjCClassRef)
        <br>
             return nullptr;
        <br>
        <br>
           return static_cast<const Stmt *>(Cursor.data[1]);
        <br>
        }
        <br>
        <br>
        const Attr *cxcursor::getCursorAttr(CXCursor Cursor) {
        <br>
           return static_cast<const Attr *>(Cursor.data[1]);
        <br>
        }
        <br>
        <br>
        const Decl *cxcursor::getCursorParentDecl(CXCursor Cursor) {
        <br>
           return static_cast<const Decl *>(Cursor.data[0]);
        <br>
        }
        <br>
        <br>
        <br>
        But they are not exported in the libClang. I'm wondering if I
        can use them in my code, and how? Can anyone give me any hints
        on when to use data[i], where i = 0, 1, 2? This would be the
        best way for me to get the contents of a node and do
        source-to-source translation, if it works.
        <br>
      </blockquote>
      <br>
      You're looking at the implementation of libclang, which is in C++.
      These functions will not be exposed. You should look at CXCursor
      mostly as an opaque data structure. It's fine to read the "kind"
      field but you should probably avoid the other two fields ("xdata"
      and "data").
      <br>
      <br>
    </blockquote>
  </body>
</html>