Export the ASTBuilder class from the AST module.

llvm-svn: 39095
diff --git a/clang/Sema/Sema.cpp b/clang/Sema/Sema.cpp
index 5cd84be..bbda610 100644
--- a/clang/Sema/Sema.cpp
+++ b/clang/Sema/Sema.cpp
@@ -1,4 +1,4 @@
-//===--- Builder.cpp - AST Builder Implementation -------------------------===//
+//===--- ASTBuilder.cpp - AST Builder Implementation ----------------------===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -12,6 +12,7 @@
 //
 //===----------------------------------------------------------------------===//
 
+#include "clang/AST/ASTBuilder.h"
 #include "clang/Parse/Action.h"
 #include "clang/AST/Decl.h"
 #include "clang/AST/Expr.h"
@@ -22,107 +23,6 @@
 using namespace llvm;
 using namespace clang;
 
-/// ASTBuilder
-namespace {
-class VISIBILITY_HIDDEN ASTBuilder : public Action {
-  Preprocessor &PP;
-  
-  /// FullLocInfo - If this is true, the ASTBuilder constructs AST Nodes that
-  /// capture maximal location information for each source-language construct.
-  bool FullLocInfo;
-  
-  /// LastInGroupList - This vector is populated when there are multiple
-  /// declarators in a single decl group (e.g. "int A, B, C").  In this case,
-  /// all but the last decl will be entered into this.  This is used by the
-  /// ASTStreamer.
-  std::vector<Decl*> &LastInGroupList;
-public:
-  ASTBuilder(Preprocessor &pp, bool fullLocInfo,
-             std::vector<Decl*> &prevInGroup)
-    : PP(pp), FullLocInfo(fullLocInfo), LastInGroupList(prevInGroup) {}
-  
-  //===--------------------------------------------------------------------===//
-  // Symbol table tracking callbacks.
-  //
-  virtual bool isTypeName(const IdentifierInfo &II, Scope *S) const;
-  virtual DeclTy *ParseDeclarator(Scope *S, Declarator &D, ExprTy *Init,
-                                  DeclTy *LastInGroup);
-  virtual DeclTy *ParseFunctionDefinition(Scope *S, Declarator &D,
-                                          StmtTy *Body);
-  virtual void PopScope(SourceLocation Loc, Scope *S);
-  
-  //===--------------------------------------------------------------------===//
-  // Statement Parsing Callbacks.
-
-  virtual StmtResult ParseCompoundStmt(SourceLocation L, SourceLocation R,
-                                       StmtTy **Elts, unsigned NumElts);
-  virtual StmtResult ParseExprStmt(ExprTy *Expr) {
-    // TODO: Full info should track this with a node.
-    return Expr; // Exprs are Stmts.
-  }
-  
-  virtual StmtResult ParseIfStmt(SourceLocation IfLoc, ExprTy *CondVal,
-                                 StmtTy *ThenVal, SourceLocation ElseLoc,
-                                 StmtTy *ElseVal);
-  
-  virtual StmtResult ParseReturnStmt(SourceLocation ReturnLoc,
-                                     ExprTy *RetValExp);
-  
-  //===--------------------------------------------------------------------===//
-  // Expression Parsing Callbacks.
-
-  // Primary Expressions.
-  virtual ExprResult ParseSimplePrimaryExpr(SourceLocation Loc,
-                                            tok::TokenKind Kind);
-  virtual ExprResult ParseIntegerConstant(SourceLocation Loc);
-  virtual ExprResult ParseFloatingConstant(SourceLocation Loc);
-  virtual ExprResult ParseParenExpr(SourceLocation L, SourceLocation R,
-                                    ExprTy *Val);
-  virtual ExprResult ParseStringExpr(const char *StrData, unsigned StrLen,
-                                     bool isWide,
-                                     SourceLocation *TokLocs, unsigned NumToks);
-  
-  // Binary/Unary Operators.  'Tok' is the token for the operator.
-  virtual ExprResult ParseUnaryOp(SourceLocation OpLoc, tok::TokenKind Op,
-                                  ExprTy *Input);
-  virtual ExprResult 
-    ParseSizeOfAlignOfTypeExpr(SourceLocation OpLoc, bool isSizeof, 
-                               SourceLocation LParenLoc, TypeTy *Ty,
-                               SourceLocation RParenLoc);
-  
-  virtual ExprResult ParsePostfixUnaryOp(SourceLocation OpLoc, 
-                                         tok::TokenKind Kind, ExprTy *Input);
-  
-  virtual ExprResult ParseArraySubscriptExpr(ExprTy *Base, SourceLocation LLoc,
-                                             ExprTy *Idx, SourceLocation RLoc);
-  virtual ExprResult ParseMemberReferenceExpr(ExprTy *Base,SourceLocation OpLoc,
-                                              tok::TokenKind OpKind,
-                                              SourceLocation MemberLoc,
-                                              IdentifierInfo &Member);
-  
-  /// ParseCallExpr - Handle a call to Fn with the specified array of arguments.
-  /// This provides the location of the left/right parens and a list of comma
-  /// locations.
-  virtual ExprResult ParseCallExpr(ExprTy *Fn, SourceLocation LParenLoc,
-                                   ExprTy **Args, unsigned NumArgs,
-                                   SourceLocation *CommaLocs,
-                                   SourceLocation RParenLoc);
-  
-  virtual ExprResult ParseCastExpr(SourceLocation LParenLoc, TypeTy *Ty,
-                                   SourceLocation RParenLoc, ExprTy *Op);
-  
-  virtual ExprResult ParseBinOp(SourceLocation TokLoc, tok::TokenKind Kind,
-                                ExprTy *LHS,ExprTy *RHS);
-  
-  /// ParseConditionalOp - Parse a ?: operation.  Note that 'LHS' may be null
-  /// in the case of a the GNU conditional expr extension.
-  virtual ExprResult ParseConditionalOp(SourceLocation QuestionLoc, 
-                                        SourceLocation ColonLoc,
-                                        ExprTy *Cond, ExprTy *LHS, ExprTy *RHS);
-};
-} // end anonymous namespace
-
-
 //===----------------------------------------------------------------------===//
 // Symbol table tracking callbacks.
 //===----------------------------------------------------------------------===//
@@ -432,11 +332,3 @@
                                       ColonLoc, (Expr*)RHS);
 }
 
-
-/// Interface to the Builder.cpp file.
-///
-Action *CreateASTBuilderActions(Preprocessor &PP, bool FullLocInfo,
-                                std::vector<Decl*> &LastInGroupList) {
-  return new ASTBuilder(PP, FullLocInfo, LastInGroupList);
-}
-