How to now step into macro while using RecursiveASTVisitor?

I have a simple file

#define square(x) ((x)*(x))
int main() {
  return 0;

The ast-dump by clang is:

TranslationUnitDecl 0x3fcc0e0 <<invalid sloc>>

-TypedefDecl 0x3fcc5e0 <<invalid sloc>> __int128_t '__int128'
-TypedefDecl 0x3fcc640 <<invalid sloc>> __uint128_t 'unsigned __int128'
-TypedefDecl 0x3fcc990 <<invalid sloc>> __builtin_va_list '__va_list_tag

`-FunctionDecl 0x3fcca30 <test.c:2:1, line:5:1> main 'int ()'
  `-CompoundStmt 0x3fccbd8 <line:2:12, line:5:1>
    >-ParenExpr 0x3fccb78 <line:1:19, col:27> 'int'
    > `-BinaryOperator 0x3fccb50 <col:20, col:26> 'int' '*'
    > >-ParenExpr 0x3fccaf0 <col:20, col:22> 'int'
    > > `-IntegerLiteral 0x3fccad0 <line:3:10> 'int' 3
    > `-ParenExpr 0x3fccb30 <line:1:24, col:26> 'int'
    > `-IntegerLiteral 0x3fccb10 <line:3:10> 'int' 3
    `-ReturnStmt 0x3fccbb8 <line:4:3, col:10>
      `-IntegerLiteral 0x3fccb98 <col:10> 'int' 0

I use

bool VisitStmt(Stmt * stmt) {
   const SourceManager &SM = astContext->getSourceManager();
   SourceLocation startLoc = stmt->getLocStart();
   if (Lexer::isAtStartOfMacroExpansion(startLoc, SM,
astContext->getLangOpts())) {
      cout << "is start of macro expansion" << endl;
   return true;

and it could tell me it meets a macro when visiting ParenExpr 0x3fccb78.
I only want to know there is a macro and skip to next statement, but I can't
return boolean value of "is macro or not" for VisitStmt. Otherwise ast
visitor will stop without visiting ReturnStmt.
So how do I skip visiting children of ParenExpr and go to its sibling?

Visiting of children is performed by the Traverse* functions, which
TraverseStmt dispatches to. You could override TravserseStmt, and only call
the base class version if you want the node and its children to be visited.
You'll probably also need to add a 'shouldUseDataRecursionFor' function
that returns false -- we don't check for an override of TraverseStmt before
using data recursion (arguably that's a bug).

Thanks for your help, I could skip macros now.
Another problem I found is if I have source code like this:

     int t = square_enix(3) + func();

AST of right hand side is

   `-BinaryOperator 0x2ebf808 'int' '+'
     >-ParenExpr 0x2e78540 'int'
     > `-BinaryOperator 0x2e78518 'int' '*'
     > >-ParenExpr 0x2e784b8 'int'
     > > `-IntegerLiteral 0x2e78498 'int' 3
     > `-ParenExpr 0x2e784f8 'int'
     > `-IntegerLiteral 0x2e784d8 'int' 3
     `-CallExpr 0x2ebf7e0 'int'
       `-ImplicitCastExpr 0x2ebf7c8 'int (*)()' <FunctionToPointerDecay>
         `-DeclRefExpr 0x2e78620 'int ()' Function 0x2e78580 'func' 'int ()'

WalkUpFrom* in RecursiveASTVisitor will invoke Visit* from Base class to
Derived class. Since BinaryOperator and ParenExpr start at the same
location, my approach will skip whole BinaryOperator instead of just

Right now I visit preprocessed source code and store macro information
separately. Not sure if there is a easier way to handle this in