<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On May 18, 2010, at 6:09 AM, Jiandong Wang wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Hi all:<div>    now I am trying to run my own ASTConsumer against AST, but not quite sure how to do it, especially how to get an object or pointer of ASTContext. BTW, ASTContext is required by ParseAST.  </div><div>here is my code snippet:</div>

<div>_______________________________________</div><div><br></div><div><div>        MyDiagnosticClient DiagClient(llvm::errs());</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>Diagnostic Diags(&DiagClient);</div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span>LangOptions Opts;</div><div>        TargetOptions TargetOpts;<span class="Apple-tab-span" style="white-space:pre">  </span></div><div>        TargetInfo* Target = TargetInfo::CreateTargetInfo(Diags, TargetOpts);</div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span>SourceManager SM;</div><div><span class="Apple-tab-span" style="white-space:pre">    </span>FileManager FM;</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>HeaderSearch Headers(FM);</div>

<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">     </span>llvm::StringRef filename("input.c");</div><div><span class="Apple-tab-span" style="white-space:pre">       </span>const FileEntry* File = FM.getFile(filename);</div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span>if (!File) {</div><div><span class="Apple-tab-span" style="white-space:pre"> </span>  llvm::errs() << "Failed to open \'" << filename << "\'\n" ;</div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span>  return 1;</div><div><span class="Apple-tab-span" style="white-space:pre">     </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">   </span>SM.createMainFileID(File, SourceLocation());</div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span>Preprocessor PP(Diags, Opts, *Target, SM, Headers);</div><div><span class="Apple-tab-span" style="white-space:pre">  </span>ASTConsumer* AstConsumer = new MyASTConsumer;</div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span>ParseAST(PP, AstConsumer, <font class="Apple-style-span" color="#FF0000">*here need the third parameter ASTContext*</font>);     //<------------------------- see here</div>

<div><span class="Apple-tab-span" style="white-space:pre">      </span>delete Target;</div><div>______________________________________</div></div><div><br></div><div>any ideas? Thanks in advance.</div></blockquote></div><br><div>You can just create an ASTContext on the stack, passing in the various other pieces (lang options, source manager, target info, etc.) when you construct it.</div><div><br></div><div>Have you considered using CompilerInvocation/CompilerInstance rather than building all of the pieces together?</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">      </span>- Doug</div></body></html>