Home | History | Annotate | Download | only in Parse
      1 //===--- Parser.h - C Language Parser ---------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 //  This file defines the Parser interface.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #ifndef LLVM_CLANG_PARSE_PARSER_H
     15 #define LLVM_CLANG_PARSE_PARSER_H
     16 
     17 #include "clang/Basic/Specifiers.h"
     18 #include "clang/Basic/DelayedCleanupPool.h"
     19 #include "clang/Lex/Preprocessor.h"
     20 #include "clang/Lex/CodeCompletionHandler.h"
     21 #include "clang/Sema/Sema.h"
     22 #include "clang/Sema/DeclSpec.h"
     23 #include "llvm/Support/PrettyStackTrace.h"
     24 #include "llvm/ADT/OwningPtr.h"
     25 #include "llvm/ADT/SmallVector.h"
     26 #include <stack>
     27 
     28 namespace clang {
     29   class PragmaHandler;
     30   class Scope;
     31   class DeclGroupRef;
     32   class DiagnosticBuilder;
     33   class Parser;
     34   class PragmaUnusedHandler;
     35   class ColonProtectionRAIIObject;
     36   class InMessageExpressionRAIIObject;
     37   class PoisonSEHIdentifiersRAIIObject;
     38   class VersionTuple;
     39 
     40 /// PrettyStackTraceParserEntry - If a crash happens while the parser is active,
     41 /// an entry is printed for it.
     42 class PrettyStackTraceParserEntry : public llvm::PrettyStackTraceEntry {
     43   const Parser &P;
     44 public:
     45   PrettyStackTraceParserEntry(const Parser &p) : P(p) {}
     46   virtual void print(raw_ostream &OS) const;
     47 };
     48 
     49 /// PrecedenceLevels - These are precedences for the binary/ternary
     50 /// operators in the C99 grammar.  These have been named to relate
     51 /// with the C99 grammar productions.  Low precedences numbers bind
     52 /// more weakly than high numbers.
     53 namespace prec {
     54   enum Level {
     55     Unknown         = 0,    // Not binary operator.
     56     Comma           = 1,    // ,
     57     Assignment      = 2,    // =, *=, /=, %=, +=, -=, <<=, >>=, &=, ^=, |=
     58     Conditional     = 3,    // ?
     59     LogicalOr       = 4,    // ||
     60     LogicalAnd      = 5,    // &&
     61     InclusiveOr     = 6,    // |
     62     ExclusiveOr     = 7,    // ^
     63     And             = 8,    // &
     64     Equality        = 9,    // ==, !=
     65     Relational      = 10,   //  >=, <=, >, <
     66     Shift           = 11,   // <<, >>
     67     Additive        = 12,   // -, +
     68     Multiplicative  = 13,   // *, /, %
     69     PointerToMember = 14    // .*, ->*
     70   };
     71 }
     72 
     73 /// Parser - This implements a parser for the C family of languages.  After
     74 /// parsing units of the grammar, productions are invoked to handle whatever has
     75 /// been read.
     76 ///
     77 class Parser : public CodeCompletionHandler {
     78   friend class PragmaUnusedHandler;
     79   friend class ColonProtectionRAIIObject;
     80   friend class InMessageExpressionRAIIObject;
     81   friend class PoisonSEHIdentifiersRAIIObject;
     82   friend class ParenBraceBracketBalancer;
     83 
     84   Preprocessor &PP;
     85 
     86   /// Tok - The current token we are peeking ahead.  All parsing methods assume
     87   /// that this is valid.
     88   Token Tok;
     89 
     90   // PrevTokLocation - The location of the token we previously
     91   // consumed. This token is used for diagnostics where we expected to
     92   // see a token following another token (e.g., the ';' at the end of
     93   // a statement).
     94   SourceLocation PrevTokLocation;
     95 
     96   unsigned short ParenCount, BracketCount, BraceCount;
     97 
     98   /// Actions - These are the callbacks we invoke as we parse various constructs
     99   /// in the file.
    100   Sema &Actions;
    101 
    102   DiagnosticsEngine &Diags;
    103 
    104   /// ScopeCache - Cache scopes to reduce malloc traffic.
    105   enum { ScopeCacheSize = 16 };
    106   unsigned NumCachedScopes;
    107   Scope *ScopeCache[ScopeCacheSize];
    108 
    109   /// Identifiers used for SEH handling in Borland. These are only
    110   /// allowed in particular circumstances
    111   IdentifierInfo *Ident__exception_code, *Ident___exception_code, *Ident_GetExceptionCode; // __except block
    112   IdentifierInfo *Ident__exception_info, *Ident___exception_info, *Ident_GetExceptionInfo; // __except filter expression
    113   IdentifierInfo *Ident__abnormal_termination, *Ident___abnormal_termination, *Ident_AbnormalTermination; // __finally
    114 
    115   /// Ident_super - IdentifierInfo for "super", to support fast
    116   /// comparison.
    117   IdentifierInfo *Ident_super;
    118   /// Ident_vector and Ident_pixel - cached IdentifierInfo's for
    119   /// "vector" and "pixel" fast comparison.  Only present if
    120   /// AltiVec enabled.
    121   IdentifierInfo *Ident_vector;
    122   IdentifierInfo *Ident_pixel;
    123 
    124   /// Objective-C contextual keywords.
    125   mutable IdentifierInfo *Ident_instancetype;
    126 
    127   /// \brief Identifier for "introduced".
    128   IdentifierInfo *Ident_introduced;
    129 
    130   /// \brief Identifier for "deprecated".
    131   IdentifierInfo *Ident_deprecated;
    132 
    133   /// \brief Identifier for "obsoleted".
    134   IdentifierInfo *Ident_obsoleted;
    135 
    136   /// \brief Identifier for "unavailable".
    137   IdentifierInfo *Ident_unavailable;
    138 
    139   /// C++0x contextual keywords.
    140   mutable IdentifierInfo *Ident_final;
    141   mutable IdentifierInfo *Ident_override;
    142 
    143   llvm::OwningPtr<PragmaHandler> AlignHandler;
    144   llvm::OwningPtr<PragmaHandler> GCCVisibilityHandler;
    145   llvm::OwningPtr<PragmaHandler> OptionsHandler;
    146   llvm::OwningPtr<PragmaHandler> PackHandler;
    147   llvm::OwningPtr<PragmaHandler> MSStructHandler;
    148   llvm::OwningPtr<PragmaHandler> UnusedHandler;
    149   llvm::OwningPtr<PragmaHandler> WeakHandler;
    150   llvm::OwningPtr<PragmaHandler> FPContractHandler;
    151   llvm::OwningPtr<PragmaHandler> OpenCLExtensionHandler;
    152 
    153   /// Whether the '>' token acts as an operator or not. This will be
    154   /// true except when we are parsing an expression within a C++
    155   /// template argument list, where the '>' closes the template
    156   /// argument list.
    157   bool GreaterThanIsOperator;
    158 
    159   /// ColonIsSacred - When this is false, we aggressively try to recover from
    160   /// code like "foo : bar" as if it were a typo for "foo :: bar".  This is not
    161   /// safe in case statements and a few other things.  This is managed by the
    162   /// ColonProtectionRAIIObject RAII object.
    163   bool ColonIsSacred;
    164 
    165   /// \brief When true, we are directly inside an Objective-C messsage
    166   /// send expression.
    167   ///
    168   /// This is managed by the \c InMessageExpressionRAIIObject class, and
    169   /// should not be set directly.
    170   bool InMessageExpression;
    171 
    172   /// The "depth" of the template parameters currently being parsed.
    173   unsigned TemplateParameterDepth;
    174 
    175   /// Factory object for creating AttributeList objects.
    176   AttributeFactory AttrFactory;
    177 
    178   /// \brief Gathers and cleans up objects when parsing of a top-level
    179   /// declaration is finished.
    180   DelayedCleanupPool TopLevelDeclCleanupPool;
    181 
    182 public:
    183   Parser(Preprocessor &PP, Sema &Actions);
    184   ~Parser();
    185 
    186   const LangOptions &getLang() const { return PP.getLangOptions(); }
    187   const TargetInfo &getTargetInfo() const { return PP.getTargetInfo(); }
    188   Preprocessor &getPreprocessor() const { return PP; }
    189   Sema &getActions() const { return Actions; }
    190 
    191   const Token &getCurToken() const { return Tok; }
    192   Scope *getCurScope() const { return Actions.getCurScope(); }
    193 
    194   Decl  *getObjCDeclContext() const { return Actions.getObjCDeclContext(); }
    195 
    196   // Type forwarding.  All of these are statically 'void*', but they may all be
    197   // different actual classes based on the actions in place.
    198   typedef OpaquePtr<DeclGroupRef> DeclGroupPtrTy;
    199   typedef OpaquePtr<TemplateName> TemplateTy;
    200 
    201   typedef SmallVector<TemplateParameterList *, 4> TemplateParameterLists;
    202 
    203   typedef clang::ExprResult        ExprResult;
    204   typedef clang::StmtResult        StmtResult;
    205   typedef clang::BaseResult        BaseResult;
    206   typedef clang::MemInitResult     MemInitResult;
    207   typedef clang::TypeResult        TypeResult;
    208 
    209   typedef Expr *ExprArg;
    210   typedef ASTMultiPtr<Stmt*> MultiStmtArg;
    211   typedef Sema::FullExprArg FullExprArg;
    212 
    213   /// Adorns a ExprResult with Actions to make it an ExprResult
    214   ExprResult Owned(ExprResult res) {
    215     return ExprResult(res);
    216   }
    217   /// Adorns a StmtResult with Actions to make it an StmtResult
    218   StmtResult Owned(StmtResult res) {
    219     return StmtResult(res);
    220   }
    221 
    222   ExprResult ExprError() { return ExprResult(true); }
    223   StmtResult StmtError() { return StmtResult(true); }
    224 
    225   ExprResult ExprError(const DiagnosticBuilder &) { return ExprError(); }
    226   StmtResult StmtError(const DiagnosticBuilder &) { return StmtError(); }
    227 
    228   ExprResult ExprEmpty() { return ExprResult(false); }
    229 
    230   // Parsing methods.
    231 
    232   /// ParseTranslationUnit - All in one method that initializes parses, and
    233   /// shuts down the parser.
    234   void ParseTranslationUnit();
    235 
    236   /// Initialize - Warm up the parser.
    237   ///
    238   void Initialize();
    239 
    240   /// ParseTopLevelDecl - Parse one top-level declaration. Returns true if
    241   /// the EOF was encountered.
    242   bool ParseTopLevelDecl(DeclGroupPtrTy &Result);
    243 
    244   DeclGroupPtrTy FinishPendingObjCActions();
    245 
    246 private:
    247   //===--------------------------------------------------------------------===//
    248   // Low-Level token peeking and consumption methods.
    249   //
    250 
    251   /// isTokenParen - Return true if the cur token is '(' or ')'.
    252   bool isTokenParen() const {
    253     return Tok.getKind() == tok::l_paren || Tok.getKind() == tok::r_paren;
    254   }
    255   /// isTokenBracket - Return true if the cur token is '[' or ']'.
    256   bool isTokenBracket() const {
    257     return Tok.getKind() == tok::l_square || Tok.getKind() == tok::r_square;
    258   }
    259   /// isTokenBrace - Return true if the cur token is '{' or '}'.
    260   bool isTokenBrace() const {
    261     return Tok.getKind() == tok::l_brace || Tok.getKind() == tok::r_brace;
    262   }
    263 
    264   /// isTokenStringLiteral - True if this token is a string-literal.
    265   ///
    266   bool isTokenStringLiteral() const {
    267     return Tok.getKind() == tok::string_literal ||
    268            Tok.getKind() == tok::wide_string_literal ||
    269            Tok.getKind() == tok::utf8_string_literal ||
    270            Tok.getKind() == tok::utf16_string_literal ||
    271            Tok.getKind() == tok::utf32_string_literal;
    272   }
    273 
    274   /// \brief Returns true if the current token is a '=' or '==' and
    275   /// false otherwise. If it's '==', we assume that it's a typo and we emit
    276   /// DiagID and a fixit hint to turn '==' -> '='.
    277   bool isTokenEqualOrMistypedEqualEqual(unsigned DiagID);
    278 
    279   /// ConsumeToken - Consume the current 'peek token' and lex the next one.
    280   /// This does not work with all kinds of tokens: strings and specific other
    281   /// tokens must be consumed with custom methods below.  This returns the
    282   /// location of the consumed token.
    283   SourceLocation ConsumeToken() {
    284     assert(!isTokenStringLiteral() && !isTokenParen() && !isTokenBracket() &&
    285            !isTokenBrace() &&
    286            "Should consume special tokens with Consume*Token");
    287 
    288     if (Tok.is(tok::code_completion))
    289       return handleUnexpectedCodeCompletionToken();
    290 
    291     PrevTokLocation = Tok.getLocation();
    292     PP.Lex(Tok);
    293     return PrevTokLocation;
    294   }
    295 
    296   /// ConsumeAnyToken - Dispatch to the right Consume* method based on the
    297   /// current token type.  This should only be used in cases where the type of
    298   /// the token really isn't known, e.g. in error recovery.
    299   SourceLocation ConsumeAnyToken() {
    300     if (isTokenParen())
    301       return ConsumeParen();
    302     else if (isTokenBracket())
    303       return ConsumeBracket();
    304     else if (isTokenBrace())
    305       return ConsumeBrace();
    306     else if (isTokenStringLiteral())
    307       return ConsumeStringToken();
    308     else
    309       return ConsumeToken();
    310   }
    311 
    312   /// ConsumeParen - This consume method keeps the paren count up-to-date.
    313   ///
    314   SourceLocation ConsumeParen() {
    315     assert(isTokenParen() && "wrong consume method");
    316     if (Tok.getKind() == tok::l_paren)
    317       ++ParenCount;
    318     else if (ParenCount)
    319       --ParenCount;       // Don't let unbalanced )'s drive the count negative.
    320     PrevTokLocation = Tok.getLocation();
    321     PP.Lex(Tok);
    322     return PrevTokLocation;
    323   }
    324 
    325   /// ConsumeBracket - This consume method keeps the bracket count up-to-date.
    326   ///
    327   SourceLocation ConsumeBracket() {
    328     assert(isTokenBracket() && "wrong consume method");
    329     if (Tok.getKind() == tok::l_square)
    330       ++BracketCount;
    331     else if (BracketCount)
    332       --BracketCount;     // Don't let unbalanced ]'s drive the count negative.
    333 
    334     PrevTokLocation = Tok.getLocation();
    335     PP.Lex(Tok);
    336     return PrevTokLocation;
    337   }
    338 
    339   /// ConsumeBrace - This consume method keeps the brace count up-to-date.
    340   ///
    341   SourceLocation ConsumeBrace() {
    342     assert(isTokenBrace() && "wrong consume method");
    343     if (Tok.getKind() == tok::l_brace)
    344       ++BraceCount;
    345     else if (BraceCount)
    346       --BraceCount;     // Don't let unbalanced }'s drive the count negative.
    347 
    348     PrevTokLocation = Tok.getLocation();
    349     PP.Lex(Tok);
    350     return PrevTokLocation;
    351   }
    352 
    353   /// ConsumeStringToken - Consume the current 'peek token', lexing a new one
    354   /// and returning the token kind.  This method is specific to strings, as it
    355   /// handles string literal concatenation, as per C99 5.1.1.2, translation
    356   /// phase #6.
    357   SourceLocation ConsumeStringToken() {
    358     assert(isTokenStringLiteral() &&
    359            "Should only consume string literals with this method");
    360     PrevTokLocation = Tok.getLocation();
    361     PP.Lex(Tok);
    362     return PrevTokLocation;
    363   }
    364 
    365   /// \brief Consume the current code-completion token.
    366   ///
    367   /// This routine should be called to consume the code-completion token once
    368   /// a code-completion action has already been invoked.
    369   SourceLocation ConsumeCodeCompletionToken() {
    370     assert(Tok.is(tok::code_completion));
    371     PrevTokLocation = Tok.getLocation();
    372     PP.Lex(Tok);
    373     return PrevTokLocation;
    374   }
    375 
    376   ///\ brief When we are consuming a code-completion token without having
    377   /// matched specific position in the grammar, provide code-completion results
    378   /// based on context.
    379   ///
    380   /// \returns the source location of the code-completion token.
    381   SourceLocation handleUnexpectedCodeCompletionToken();
    382 
    383   /// \brief Abruptly cut off parsing; mainly used when we have reached the
    384   /// code-completion point.
    385   void cutOffParsing() {
    386     PP.setCodeCompletionReached();
    387     // Cut off parsing by acting as if we reached the end-of-file.
    388     Tok.setKind(tok::eof);
    389   }
    390 
    391   /// \brief Handle the annotation token produced for #pragma unused(...)
    392   void HandlePragmaUnused();
    393 
    394   /// GetLookAheadToken - This peeks ahead N tokens and returns that token
    395   /// without consuming any tokens.  LookAhead(0) returns 'Tok', LookAhead(1)
    396   /// returns the token after Tok, etc.
    397   ///
    398   /// Note that this differs from the Preprocessor's LookAhead method, because
    399   /// the Parser always has one token lexed that the preprocessor doesn't.
    400   ///
    401   const Token &GetLookAheadToken(unsigned N) {
    402     if (N == 0 || Tok.is(tok::eof)) return Tok;
    403     return PP.LookAhead(N-1);
    404   }
    405 
    406   /// NextToken - This peeks ahead one token and returns it without
    407   /// consuming it.
    408   const Token &NextToken() {
    409     return PP.LookAhead(0);
    410   }
    411 
    412   /// \brief Tracks information about the current nesting depth of
    413   /// opening delimiters of each kind.
    414   class DelimiterTracker {
    415   private:
    416     friend class Parser;
    417 
    418     unsigned Paren, Brace, Square, Less, LLLess;
    419     unsigned& get(tok::TokenKind t) {
    420       switch (t) {
    421       default: llvm_unreachable("Unexpected balanced token");
    422       case tok::l_brace:  return Brace;
    423       case tok::l_paren:  return Paren;
    424       case tok::l_square: return Square;
    425       case tok::less:  return Less;
    426       case tok::lesslessless:  return LLLess;
    427       }
    428     }
    429 
    430     void push(tok::TokenKind t) {
    431       get(t)++;
    432     }
    433 
    434     void pop(tok::TokenKind t) {
    435       get(t)--;
    436     }
    437 
    438     unsigned getDepth(tok::TokenKind t) {
    439       return get(t);
    440     }
    441 
    442   public:
    443     DelimiterTracker() : Paren(0), Brace(0), Square(0), Less(0), LLLess(0) { }
    444   };
    445 
    446   /// \brief RAII class that helps handle the parsing of an open/close delimiter
    447   /// pair, such as braces { ... } or parentheses ( ... ).
    448   class BalancedDelimiterTracker {
    449     tok::TokenKind Kind, Close;
    450     Parser& P;
    451     bool Cleanup;
    452     const unsigned MaxDepth;
    453     SourceLocation LOpen, LClose;
    454 
    455     void assignClosingDelimiter() {
    456       switch (Kind) {
    457       default: llvm_unreachable("Unexpected balanced token");
    458       case tok::l_brace:  Close = tok::r_brace; break;
    459       case tok::l_paren:  Close = tok::r_paren; break;
    460       case tok::l_square: Close = tok::r_square; break;
    461       case tok::less:  Close = tok::greater; break;
    462       case tok::lesslessless:  Close = tok::greatergreatergreater; break;
    463       }
    464     }
    465 
    466   public:
    467     BalancedDelimiterTracker(Parser& p, tok::TokenKind k)
    468       : Kind(k), P(p), Cleanup(false), MaxDepth(256) {
    469       assignClosingDelimiter();
    470     }
    471 
    472     ~BalancedDelimiterTracker() {
    473       if (Cleanup)
    474         P.QuantityTracker.pop(Kind);
    475     }
    476 
    477     SourceLocation getOpenLocation() const { return LOpen; }
    478     SourceLocation getCloseLocation() const { return LClose; }
    479     SourceRange getRange() const { return SourceRange(LOpen, LClose); }
    480 
    481     bool consumeOpen();
    482     bool expectAndConsume(unsigned DiagID,
    483                           const char *Msg = "",
    484                           tok::TokenKind SkipToTok = tok::unknown);
    485     bool consumeClose();
    486   };
    487 
    488   DelimiterTracker QuantityTracker;
    489 
    490   /// getTypeAnnotation - Read a parsed type out of an annotation token.
    491   static ParsedType getTypeAnnotation(Token &Tok) {
    492     return ParsedType::getFromOpaquePtr(Tok.getAnnotationValue());
    493   }
    494 
    495   static void setTypeAnnotation(Token &Tok, ParsedType T) {
    496     Tok.setAnnotationValue(T.getAsOpaquePtr());
    497   }
    498 
    499   /// \brief Read an already-translated primary expression out of an annotation
    500   /// token.
    501   static ExprResult getExprAnnotation(Token &Tok) {
    502     if (Tok.getAnnotationValue())
    503       return ExprResult((Expr *)Tok.getAnnotationValue());
    504 
    505     return ExprResult(true);
    506   }
    507 
    508   /// \brief Set the primary expression corresponding to the given annotation
    509   /// token.
    510   static void setExprAnnotation(Token &Tok, ExprResult ER) {
    511     if (ER.isInvalid())
    512       Tok.setAnnotationValue(0);
    513     else
    514       Tok.setAnnotationValue(ER.get());
    515   }
    516 
    517   // If NeedType is true, then TryAnnotateTypeOrScopeToken will try harder to
    518   // find a type name by attempting typo correction.
    519   bool TryAnnotateTypeOrScopeToken(bool EnteringContext = false,
    520                                    bool NeedType = false);
    521   bool TryAnnotateCXXScopeToken(bool EnteringContext = false);
    522 
    523   /// TryAltiVecToken - Check for context-sensitive AltiVec identifier tokens,
    524   /// replacing them with the non-context-sensitive keywords.  This returns
    525   /// true if the token was replaced.
    526   bool TryAltiVecToken(DeclSpec &DS, SourceLocation Loc,
    527                        const char *&PrevSpec, unsigned &DiagID,
    528                        bool &isInvalid) {
    529     if (!getLang().AltiVec ||
    530         (Tok.getIdentifierInfo() != Ident_vector &&
    531          Tok.getIdentifierInfo() != Ident_pixel))
    532       return false;
    533 
    534     return TryAltiVecTokenOutOfLine(DS, Loc, PrevSpec, DiagID, isInvalid);
    535   }
    536 
    537   /// TryAltiVecVectorToken - Check for context-sensitive AltiVec vector
    538   /// identifier token, replacing it with the non-context-sensitive __vector.
    539   /// This returns true if the token was replaced.
    540   bool TryAltiVecVectorToken() {
    541     if (!getLang().AltiVec ||
    542         Tok.getIdentifierInfo() != Ident_vector) return false;
    543     return TryAltiVecVectorTokenOutOfLine();
    544   }
    545 
    546   bool TryAltiVecVectorTokenOutOfLine();
    547   bool TryAltiVecTokenOutOfLine(DeclSpec &DS, SourceLocation Loc,
    548                                 const char *&PrevSpec, unsigned &DiagID,
    549                                 bool &isInvalid);
    550 
    551   /// \brief Get the TemplateIdAnnotation from the token and put it in the
    552   /// cleanup pool so that it gets destroyed when parsing the current top level
    553   /// declaration is finished.
    554   TemplateIdAnnotation *takeTemplateIdAnnotation(const Token &tok);
    555 
    556   /// TentativeParsingAction - An object that is used as a kind of "tentative
    557   /// parsing transaction". It gets instantiated to mark the token position and
    558   /// after the token consumption is done, Commit() or Revert() is called to
    559   /// either "commit the consumed tokens" or revert to the previously marked
    560   /// token position. Example:
    561   ///
    562   ///   TentativeParsingAction TPA(*this);
    563   ///   ConsumeToken();
    564   ///   ....
    565   ///   TPA.Revert();
    566   ///
    567   class TentativeParsingAction {
    568     Parser &P;
    569     Token PrevTok;
    570     bool isActive;
    571 
    572   public:
    573     explicit TentativeParsingAction(Parser& p) : P(p) {
    574       PrevTok = P.Tok;
    575       P.PP.EnableBacktrackAtThisPos();
    576       isActive = true;
    577     }
    578     void Commit() {
    579       assert(isActive && "Parsing action was finished!");
    580       P.PP.CommitBacktrackedTokens();
    581       isActive = false;
    582     }
    583     void Revert() {
    584       assert(isActive && "Parsing action was finished!");
    585       P.PP.Backtrack();
    586       P.Tok = PrevTok;
    587       isActive = false;
    588     }
    589     ~TentativeParsingAction() {
    590       assert(!isActive && "Forgot to call Commit or Revert!");
    591     }
    592   };
    593 
    594   /// ObjCDeclContextSwitch - An object used to switch context from
    595   /// an objective-c decl context to its enclosing decl context and
    596   /// back.
    597   class ObjCDeclContextSwitch {
    598     Parser &P;
    599     Decl *DC;
    600   public:
    601     explicit ObjCDeclContextSwitch(Parser &p) : P(p),
    602                DC(p.getObjCDeclContext()) {
    603       if (DC)
    604         P.Actions.ActOnObjCTemporaryExitContainerContext();
    605     }
    606     ~ObjCDeclContextSwitch() {
    607       if (DC)
    608         P.Actions.ActOnObjCReenterContainerContext();
    609     }
    610   };
    611 
    612   /// ExpectAndConsume - The parser expects that 'ExpectedTok' is next in the
    613   /// input.  If so, it is consumed and false is returned.
    614   ///
    615   /// If the input is malformed, this emits the specified diagnostic.  Next, if
    616   /// SkipToTok is specified, it calls SkipUntil(SkipToTok).  Finally, true is
    617   /// returned.
    618   bool ExpectAndConsume(tok::TokenKind ExpectedTok, unsigned Diag,
    619                         const char *DiagMsg = "",
    620                         tok::TokenKind SkipToTok = tok::unknown);
    621 
    622   /// \brief The parser expects a semicolon and, if present, will consume it.
    623   ///
    624   /// If the next token is not a semicolon, this emits the specified diagnostic,
    625   /// or, if there's just some closing-delimiter noise (e.g., ')' or ']') prior
    626   /// to the semicolon, consumes that extra token.
    627   bool ExpectAndConsumeSemi(unsigned DiagID);
    628 
    629   //===--------------------------------------------------------------------===//
    630   // Scope manipulation
    631 
    632   /// ParseScope - Introduces a new scope for parsing. The kind of
    633   /// scope is determined by ScopeFlags. Objects of this type should
    634   /// be created on the stack to coincide with the position where the
    635   /// parser enters the new scope, and this object's constructor will
    636   /// create that new scope. Similarly, once the object is destroyed
    637   /// the parser will exit the scope.
    638   class ParseScope {
    639     Parser *Self;
    640     ParseScope(const ParseScope&); // do not implement
    641     ParseScope& operator=(const ParseScope&); // do not implement
    642 
    643   public:
    644     // ParseScope - Construct a new object to manage a scope in the
    645     // parser Self where the new Scope is created with the flags
    646     // ScopeFlags, but only when ManageScope is true (the default). If
    647     // ManageScope is false, this object does nothing.
    648     ParseScope(Parser *Self, unsigned ScopeFlags, bool ManageScope = true)
    649       : Self(Self) {
    650       if (ManageScope)
    651         Self->EnterScope(ScopeFlags);
    652       else
    653         this->Self = 0;
    654     }
    655 
    656     // Exit - Exit the scope associated with this object now, rather
    657     // than waiting until the object is destroyed.
    658     void Exit() {
    659       if (Self) {
    660         Self->ExitScope();
    661         Self = 0;
    662       }
    663     }
    664 
    665     ~ParseScope() {
    666       Exit();
    667     }
    668   };
    669 
    670   /// EnterScope - Start a new scope.
    671   void EnterScope(unsigned ScopeFlags);
    672 
    673   /// ExitScope - Pop a scope off the scope stack.
    674   void ExitScope();
    675 
    676   /// \brief RAII object used to modify the scope flags for the current scope.
    677   class ParseScopeFlags {
    678     Scope *CurScope;
    679     unsigned OldFlags;
    680     ParseScopeFlags(const ParseScopeFlags &); // do not implement
    681     void operator=(const ParseScopeFlags &); // do not implement
    682 
    683   public:
    684     ParseScopeFlags(Parser *Self, unsigned ScopeFlags, bool ManageFlags = true);
    685     ~ParseScopeFlags();
    686   };
    687 
    688   //===--------------------------------------------------------------------===//
    689   // Diagnostic Emission and Error recovery.
    690 
    691 public:
    692   DiagnosticBuilder Diag(SourceLocation Loc, unsigned DiagID);
    693   DiagnosticBuilder Diag(const Token &Tok, unsigned DiagID);
    694 
    695 private:
    696   void SuggestParentheses(SourceLocation Loc, unsigned DK,
    697                           SourceRange ParenRange);
    698 
    699   /// SkipUntil - Read tokens until we get to the specified token, then consume
    700   /// it (unless DontConsume is true).  Because we cannot guarantee that the
    701   /// token will ever occur, this skips to the next token, or to some likely
    702   /// good stopping point.  If StopAtSemi is true, skipping will stop at a ';'
    703   /// character.
    704   ///
    705   /// If SkipUntil finds the specified token, it returns true, otherwise it
    706   /// returns false.
    707   bool SkipUntil(tok::TokenKind T, bool StopAtSemi = true,
    708                  bool DontConsume = false, bool StopAtCodeCompletion = false) {
    709     return SkipUntil(&T, 1, StopAtSemi, DontConsume, StopAtCodeCompletion);
    710   }
    711   bool SkipUntil(tok::TokenKind T1, tok::TokenKind T2, bool StopAtSemi = true,
    712                  bool DontConsume = false, bool StopAtCodeCompletion = false) {
    713     tok::TokenKind TokArray[] = {T1, T2};
    714     return SkipUntil(TokArray, 2, StopAtSemi, DontConsume,StopAtCodeCompletion);
    715   }
    716   bool SkipUntil(const tok::TokenKind *Toks, unsigned NumToks,
    717                  bool StopAtSemi = true, bool DontConsume = false,
    718                  bool StopAtCodeCompletion = false);
    719 
    720   //===--------------------------------------------------------------------===//
    721   // Lexing and parsing of C++ inline methods.
    722 
    723   struct ParsingClass;
    724 
    725   /// [class.mem]p1: "... the class is regarded as complete within
    726   /// - function bodies
    727   /// - default arguments
    728   /// - exception-specifications (TODO: C++0x)
    729   /// - and brace-or-equal-initializers for non-static data members
    730   /// (including such things in nested classes)."
    731   /// LateParsedDeclarations build the tree of those elements so they can
    732   /// be parsed after parsing the top-level class.
    733   class LateParsedDeclaration {
    734   public:
    735     virtual ~LateParsedDeclaration();
    736 
    737     virtual void ParseLexedMethodDeclarations();
    738     virtual void ParseLexedMemberInitializers();
    739     virtual void ParseLexedMethodDefs();
    740     virtual void ParseLexedAttributes();
    741   };
    742 
    743   /// Inner node of the LateParsedDeclaration tree that parses
    744   /// all its members recursively.
    745   class LateParsedClass : public LateParsedDeclaration {
    746   public:
    747     LateParsedClass(Parser *P, ParsingClass *C);
    748     virtual ~LateParsedClass();
    749 
    750     virtual void ParseLexedMethodDeclarations();
    751     virtual void ParseLexedMemberInitializers();
    752     virtual void ParseLexedMethodDefs();
    753     virtual void ParseLexedAttributes();
    754 
    755   private:
    756     Parser *Self;
    757     ParsingClass *Class;
    758   };
    759 
    760   /// Contains the lexed tokens of an attribute with arguments that
    761   /// may reference member variables and so need to be parsed at the
    762   /// end of the class declaration after parsing all other member
    763   /// member declarations.
    764   /// FIXME: Perhaps we should change the name of LateParsedDeclaration to
    765   /// LateParsedTokens.
    766   struct LateParsedAttribute : public LateParsedDeclaration {
    767     Parser *Self;
    768     CachedTokens Toks;
    769     IdentifierInfo &AttrName;
    770     SourceLocation AttrNameLoc;
    771     Decl *D;
    772 
    773     explicit LateParsedAttribute(Parser *P, IdentifierInfo &Name,
    774                                  SourceLocation Loc)
    775       : Self(P), AttrName(Name), AttrNameLoc(Loc), D(0)  {}
    776 
    777     virtual void ParseLexedAttributes();
    778 
    779     void setDecl(Decl *Dec) { D = Dec; }
    780   };
    781 
    782   /// A list of late parsed attributes.  Used by ParseGNUAttributes.
    783   typedef llvm::SmallVector<LateParsedAttribute*, 2> LateParsedAttrList;
    784 
    785 
    786   /// Contains the lexed tokens of a member function definition
    787   /// which needs to be parsed at the end of the class declaration
    788   /// after parsing all other member declarations.
    789   struct LexedMethod : public LateParsedDeclaration {
    790     Parser *Self;
    791     Decl *D;
    792     CachedTokens Toks;
    793 
    794     /// \brief Whether this member function had an associated template
    795     /// scope. When true, D is a template declaration.
    796     /// othewise, it is a member function declaration.
    797     bool TemplateScope;
    798 
    799     explicit LexedMethod(Parser* P, Decl *MD)
    800       : Self(P), D(MD), TemplateScope(false) {}
    801 
    802     virtual void ParseLexedMethodDefs();
    803   };
    804 
    805   /// LateParsedDefaultArgument - Keeps track of a parameter that may
    806   /// have a default argument that cannot be parsed yet because it
    807   /// occurs within a member function declaration inside the class
    808   /// (C++ [class.mem]p2).
    809   struct LateParsedDefaultArgument {
    810     explicit LateParsedDefaultArgument(Decl *P,
    811                                        CachedTokens *Toks = 0)
    812       : Param(P), Toks(Toks) { }
    813 
    814     /// Param - The parameter declaration for this parameter.
    815     Decl *Param;
    816 
    817     /// Toks - The sequence of tokens that comprises the default
    818     /// argument expression, not including the '=' or the terminating
    819     /// ')' or ','. This will be NULL for parameters that have no
    820     /// default argument.
    821     CachedTokens *Toks;
    822   };
    823 
    824   /// LateParsedMethodDeclaration - A method declaration inside a class that
    825   /// contains at least one entity whose parsing needs to be delayed
    826   /// until the class itself is completely-defined, such as a default
    827   /// argument (C++ [class.mem]p2).
    828   struct LateParsedMethodDeclaration : public LateParsedDeclaration {
    829     explicit LateParsedMethodDeclaration(Parser *P, Decl *M)
    830       : Self(P), Method(M), TemplateScope(false) { }
    831 
    832     virtual void ParseLexedMethodDeclarations();
    833 
    834     Parser* Self;
    835 
    836     /// Method - The method declaration.
    837     Decl *Method;
    838 
    839     /// \brief Whether this member function had an associated template
    840     /// scope. When true, D is a template declaration.
    841     /// othewise, it is a member function declaration.
    842     bool TemplateScope;
    843 
    844     /// DefaultArgs - Contains the parameters of the function and
    845     /// their default arguments. At least one of the parameters will
    846     /// have a default argument, but all of the parameters of the
    847     /// method will be stored so that they can be reintroduced into
    848     /// scope at the appropriate times.
    849     SmallVector<LateParsedDefaultArgument, 8> DefaultArgs;
    850   };
    851 
    852   /// LateParsedMemberInitializer - An initializer for a non-static class data
    853   /// member whose parsing must to be delayed until the class is completely
    854   /// defined (C++11 [class.mem]p2).
    855   struct LateParsedMemberInitializer : public LateParsedDeclaration {
    856     LateParsedMemberInitializer(Parser *P, Decl *FD)
    857       : Self(P), Field(FD) { }
    858 
    859     virtual void ParseLexedMemberInitializers();
    860 
    861     Parser *Self;
    862 
    863     /// Field - The field declaration.
    864     Decl *Field;
    865 
    866     /// CachedTokens - The sequence of tokens that comprises the initializer,
    867     /// including any leading '='.
    868     CachedTokens Toks;
    869   };
    870 
    871   /// LateParsedDeclarationsContainer - During parsing of a top (non-nested)
    872   /// C++ class, its method declarations that contain parts that won't be
    873   /// parsed until after the definition is completed (C++ [class.mem]p2),
    874   /// the method declarations and possibly attached inline definitions
    875   /// will be stored here with the tokens that will be parsed to create those entities.
    876   typedef SmallVector<LateParsedDeclaration*, 2> LateParsedDeclarationsContainer;
    877 
    878   /// \brief Representation of a class that has been parsed, including
    879   /// any member function declarations or definitions that need to be
    880   /// parsed after the corresponding top-level class is complete.
    881   struct ParsingClass {
    882     ParsingClass(Decl *TagOrTemplate, bool TopLevelClass)
    883       : TopLevelClass(TopLevelClass), TemplateScope(false),
    884         TagOrTemplate(TagOrTemplate) { }
    885 
    886     /// \brief Whether this is a "top-level" class, meaning that it is
    887     /// not nested within another class.
    888     bool TopLevelClass : 1;
    889 
    890     /// \brief Whether this class had an associated template
    891     /// scope. When true, TagOrTemplate is a template declaration;
    892     /// othewise, it is a tag declaration.
    893     bool TemplateScope : 1;
    894 
    895     /// \brief The class or class template whose definition we are parsing.
    896     Decl *TagOrTemplate;
    897 
    898     /// LateParsedDeclarations - Method declarations, inline definitions and
    899     /// nested classes that contain pieces whose parsing will be delayed until
    900     /// the top-level class is fully defined.
    901     LateParsedDeclarationsContainer LateParsedDeclarations;
    902   };
    903 
    904   /// \brief The stack of classes that is currently being
    905   /// parsed. Nested and local classes will be pushed onto this stack
    906   /// when they are parsed, and removed afterward.
    907   std::stack<ParsingClass *> ClassStack;
    908 
    909   ParsingClass &getCurrentClass() {
    910     assert(!ClassStack.empty() && "No lexed method stacks!");
    911     return *ClassStack.top();
    912   }
    913 
    914   /// \brief RAII object used to inform the actions that we're
    915   /// currently parsing a declaration.  This is active when parsing a
    916   /// variable's initializer, but not when parsing the body of a
    917   /// class or function definition.
    918   class ParsingDeclRAIIObject {
    919     Sema &Actions;
    920     Sema::ParsingDeclState State;
    921     bool Popped;
    922 
    923   public:
    924     ParsingDeclRAIIObject(Parser &P) : Actions(P.Actions) {
    925       push();
    926     }
    927 
    928     ParsingDeclRAIIObject(Parser &P, ParsingDeclRAIIObject *Other)
    929         : Actions(P.Actions) {
    930       if (Other) steal(*Other);
    931       else push();
    932     }
    933 
    934     /// Creates a RAII object which steals the state from a different
    935     /// object instead of pushing.
    936     ParsingDeclRAIIObject(ParsingDeclRAIIObject &Other)
    937         : Actions(Other.Actions) {
    938       steal(Other);
    939     }
    940 
    941     ~ParsingDeclRAIIObject() {
    942       abort();
    943     }
    944 
    945     /// Resets the RAII object for a new declaration.
    946     void reset() {
    947       abort();
    948       push();
    949     }
    950 
    951     /// Signals that the context was completed without an appropriate
    952     /// declaration being parsed.
    953     void abort() {
    954       pop(0);
    955     }
    956 
    957     void complete(Decl *D) {
    958       assert(!Popped && "ParsingDeclaration has already been popped!");
    959       pop(D);
    960     }
    961 
    962   private:
    963     void steal(ParsingDeclRAIIObject &Other) {
    964       State = Other.State;
    965       Popped = Other.Popped;
    966       Other.Popped = true;
    967     }
    968 
    969     void push() {
    970       State = Actions.PushParsingDeclaration();
    971       Popped = false;
    972     }
    973 
    974     void pop(Decl *D) {
    975       if (!Popped) {
    976         Actions.PopParsingDeclaration(State, D);
    977         Popped = true;
    978       }
    979     }
    980   };
    981 
    982   /// A class for parsing a DeclSpec.
    983   class ParsingDeclSpec : public DeclSpec {
    984     ParsingDeclRAIIObject ParsingRAII;
    985 
    986   public:
    987     ParsingDeclSpec(Parser &P) : DeclSpec(P.AttrFactory), ParsingRAII(P) {}
    988     ParsingDeclSpec(Parser &P, ParsingDeclRAIIObject *RAII)
    989       : DeclSpec(P.AttrFactory), ParsingRAII(P, RAII) {}
    990 
    991     void complete(Decl *D) {
    992       ParsingRAII.complete(D);
    993     }
    994 
    995     void abort() {
    996       ParsingRAII.abort();
    997     }
    998   };
    999 
   1000   /// A class for parsing a declarator.
   1001   class ParsingDeclarator : public Declarator {
   1002     ParsingDeclRAIIObject ParsingRAII;
   1003 
   1004   public:
   1005     ParsingDeclarator(Parser &P, const ParsingDeclSpec &DS, TheContext C)
   1006       : Declarator(DS, C), ParsingRAII(P) {
   1007     }
   1008 
   1009     const ParsingDeclSpec &getDeclSpec() const {
   1010       return static_cast<const ParsingDeclSpec&>(Declarator::getDeclSpec());
   1011     }
   1012 
   1013     ParsingDeclSpec &getMutableDeclSpec() const {
   1014       return const_cast<ParsingDeclSpec&>(getDeclSpec());
   1015     }
   1016 
   1017     void clear() {
   1018       Declarator::clear();
   1019       ParsingRAII.reset();
   1020     }
   1021 
   1022     void complete(Decl *D) {
   1023       ParsingRAII.complete(D);
   1024     }
   1025   };
   1026 
   1027   /// \brief RAII object used to
   1028   class ParsingClassDefinition {
   1029     Parser &P;
   1030     bool Popped;
   1031     Sema::ParsingClassState State;
   1032 
   1033   public:
   1034     ParsingClassDefinition(Parser &P, Decl *TagOrTemplate, bool TopLevelClass)
   1035       : P(P), Popped(false),
   1036         State(P.PushParsingClass(TagOrTemplate, TopLevelClass)) {
   1037     }
   1038 
   1039     /// \brief Pop this class of the stack.
   1040     void Pop() {
   1041       assert(!Popped && "Nested class has already been popped");
   1042       Popped = true;
   1043       P.PopParsingClass(State);
   1044     }
   1045 
   1046     ~ParsingClassDefinition() {
   1047       if (!Popped)
   1048         P.PopParsingClass(State);
   1049     }
   1050   };
   1051 
   1052   /// \brief Contains information about any template-specific
   1053   /// information that has been parsed prior to parsing declaration
   1054   /// specifiers.
   1055   struct ParsedTemplateInfo {
   1056     ParsedTemplateInfo()
   1057       : Kind(NonTemplate), TemplateParams(0), TemplateLoc() { }
   1058 
   1059     ParsedTemplateInfo(TemplateParameterLists *TemplateParams,
   1060                        bool isSpecialization,
   1061                        bool lastParameterListWasEmpty = false)
   1062       : Kind(isSpecialization? ExplicitSpecialization : Template),
   1063         TemplateParams(TemplateParams),
   1064         LastParameterListWasEmpty(lastParameterListWasEmpty) { }
   1065 
   1066     explicit ParsedTemplateInfo(SourceLocation ExternLoc,
   1067                                 SourceLocation TemplateLoc)
   1068       : Kind(ExplicitInstantiation), TemplateParams(0),
   1069         ExternLoc(ExternLoc), TemplateLoc(TemplateLoc),
   1070         LastParameterListWasEmpty(false){ }
   1071 
   1072     /// \brief The kind of template we are parsing.
   1073     enum {
   1074       /// \brief We are not parsing a template at all.
   1075       NonTemplate = 0,
   1076       /// \brief We are parsing a template declaration.
   1077       Template,
   1078       /// \brief We are parsing an explicit specialization.
   1079       ExplicitSpecialization,
   1080       /// \brief We are parsing an explicit instantiation.
   1081       ExplicitInstantiation
   1082     } Kind;
   1083 
   1084     /// \brief The template parameter lists, for template declarations
   1085     /// and explicit specializations.
   1086     TemplateParameterLists *TemplateParams;
   1087 
   1088     /// \brief The location of the 'extern' keyword, if any, for an explicit
   1089     /// instantiation
   1090     SourceLocation ExternLoc;
   1091 
   1092     /// \brief The location of the 'template' keyword, for an explicit
   1093     /// instantiation.
   1094     SourceLocation TemplateLoc;
   1095 
   1096     /// \brief Whether the last template parameter list was empty.
   1097     bool LastParameterListWasEmpty;
   1098 
   1099     SourceRange getSourceRange() const;
   1100   };
   1101 
   1102   /// \brief Contains a late templated function.
   1103   /// Will be parsed at the end of the translation unit.
   1104   struct LateParsedTemplatedFunction {
   1105     explicit LateParsedTemplatedFunction(Parser* P, Decl *MD)
   1106       : D(MD) {}
   1107 
   1108     CachedTokens Toks;
   1109 
   1110     /// \brief The template function declaration to be late parsed.
   1111     Decl *D;
   1112   };
   1113 
   1114   void LexTemplateFunctionForLateParsing(CachedTokens &Toks);
   1115   void ParseLateTemplatedFuncDef(LateParsedTemplatedFunction &LMT);
   1116   typedef llvm::DenseMap<const FunctionDecl*, LateParsedTemplatedFunction*>
   1117     LateParsedTemplateMapT;
   1118   LateParsedTemplateMapT LateParsedTemplateMap;
   1119 
   1120   static void LateTemplateParserCallback(void *P, const FunctionDecl *FD);
   1121   void LateTemplateParser(const FunctionDecl *FD);
   1122 
   1123   Sema::ParsingClassState
   1124   PushParsingClass(Decl *TagOrTemplate, bool TopLevelClass);
   1125   void DeallocateParsedClasses(ParsingClass *Class);
   1126   void PopParsingClass(Sema::ParsingClassState);
   1127 
   1128   Decl *ParseCXXInlineMethodDef(AccessSpecifier AS, AttributeList *AccessAttrs,
   1129                                 ParsingDeclarator &D,
   1130                                 const ParsedTemplateInfo &TemplateInfo,
   1131                                 const VirtSpecifiers& VS, ExprResult& Init);
   1132   void ParseCXXNonStaticMemberInitializer(Decl *VarD);
   1133   void ParseLexedAttributes(ParsingClass &Class);
   1134   void ParseLexedAttribute(LateParsedAttribute &LA);
   1135   void ParseLexedMethodDeclarations(ParsingClass &Class);
   1136   void ParseLexedMethodDeclaration(LateParsedMethodDeclaration &LM);
   1137   void ParseLexedMethodDefs(ParsingClass &Class);
   1138   void ParseLexedMethodDef(LexedMethod &LM);
   1139   void ParseLexedMemberInitializers(ParsingClass &Class);
   1140   void ParseLexedMemberInitializer(LateParsedMemberInitializer &MI);
   1141   Decl *ParseLexedObjCMethodDefs(LexedMethod &LM);
   1142   bool ConsumeAndStoreFunctionPrologue(CachedTokens &Toks);
   1143   bool ConsumeAndStoreUntil(tok::TokenKind T1,
   1144                             CachedTokens &Toks,
   1145                             bool StopAtSemi = true,
   1146                             bool ConsumeFinalToken = true) {
   1147     return ConsumeAndStoreUntil(T1, T1, Toks, StopAtSemi, ConsumeFinalToken);
   1148   }
   1149   bool ConsumeAndStoreUntil(tok::TokenKind T1, tok::TokenKind T2,
   1150                             CachedTokens &Toks,
   1151                             bool StopAtSemi = true,
   1152                             bool ConsumeFinalToken = true);
   1153 
   1154   //===--------------------------------------------------------------------===//
   1155   // C99 6.9: External Definitions.
   1156   struct ParsedAttributesWithRange : ParsedAttributes {
   1157     ParsedAttributesWithRange(AttributeFactory &factory)
   1158       : ParsedAttributes(factory) {}
   1159 
   1160     SourceRange Range;
   1161   };
   1162 
   1163   DeclGroupPtrTy ParseExternalDeclaration(ParsedAttributesWithRange &attrs,
   1164                                           ParsingDeclSpec *DS = 0);
   1165   bool isDeclarationAfterDeclarator();
   1166   bool isStartOfFunctionDefinition(const ParsingDeclarator &Declarator);
   1167   DeclGroupPtrTy ParseDeclarationOrFunctionDefinition(ParsedAttributes &attrs,
   1168                                                   AccessSpecifier AS = AS_none);
   1169   DeclGroupPtrTy ParseDeclarationOrFunctionDefinition(ParsingDeclSpec &DS,
   1170                                                   AccessSpecifier AS = AS_none);
   1171 
   1172   Decl *ParseFunctionDefinition(ParsingDeclarator &D,
   1173                  const ParsedTemplateInfo &TemplateInfo = ParsedTemplateInfo());
   1174   void ParseKNRParamDeclarations(Declarator &D);
   1175   // EndLoc, if non-NULL, is filled with the location of the last token of
   1176   // the simple-asm.
   1177   ExprResult ParseSimpleAsm(SourceLocation *EndLoc = 0);
   1178   ExprResult ParseAsmStringLiteral();
   1179 
   1180   // Objective-C External Declarations
   1181   Parser::DeclGroupPtrTy ParseObjCAtDirectives();
   1182   Parser::DeclGroupPtrTy ParseObjCAtClassDeclaration(SourceLocation atLoc);
   1183   Decl *ParseObjCAtInterfaceDeclaration(SourceLocation atLoc,
   1184                                         ParsedAttributes &prefixAttrs);
   1185   void ParseObjCClassInstanceVariables(Decl *interfaceDecl,
   1186                                        tok::ObjCKeywordKind visibility,
   1187                                        SourceLocation atLoc);
   1188   bool ParseObjCProtocolReferences(SmallVectorImpl<Decl *> &P,
   1189                                    SmallVectorImpl<SourceLocation> &PLocs,
   1190                                    bool WarnOnDeclarations,
   1191                                    SourceLocation &LAngleLoc,
   1192                                    SourceLocation &EndProtoLoc);
   1193   bool ParseObjCProtocolQualifiers(DeclSpec &DS);
   1194   void ParseObjCInterfaceDeclList(tok::ObjCKeywordKind contextKey,
   1195                                   Decl *CDecl);
   1196   Decl *ParseObjCAtProtocolDeclaration(SourceLocation atLoc,
   1197                                        ParsedAttributes &prefixAttrs);
   1198 
   1199   Decl *ObjCImpDecl;
   1200   SmallVector<Decl *, 4> PendingObjCImpDecl;
   1201   typedef SmallVector<LexedMethod*, 2> LateParsedObjCMethodContainer;
   1202   LateParsedObjCMethodContainer LateParsedObjCMethods;
   1203 
   1204   Decl *ParseObjCAtImplementationDeclaration(SourceLocation atLoc);
   1205   DeclGroupPtrTy ParseObjCAtEndDeclaration(SourceRange atEnd);
   1206   Decl *ParseObjCAtAliasDeclaration(SourceLocation atLoc);
   1207   Decl *ParseObjCPropertySynthesize(SourceLocation atLoc);
   1208   Decl *ParseObjCPropertyDynamic(SourceLocation atLoc);
   1209 
   1210   IdentifierInfo *ParseObjCSelectorPiece(SourceLocation &MethodLocation);
   1211   // Definitions for Objective-c context sensitive keywords recognition.
   1212   enum ObjCTypeQual {
   1213     objc_in=0, objc_out, objc_inout, objc_oneway, objc_bycopy, objc_byref,
   1214     objc_NumQuals
   1215   };
   1216   IdentifierInfo *ObjCTypeQuals[objc_NumQuals];
   1217 
   1218   bool isTokIdentifier_in() const;
   1219 
   1220   ParsedType ParseObjCTypeName(ObjCDeclSpec &DS, Declarator::TheContext Ctx,
   1221                                ParsedAttributes *ParamAttrs);
   1222   void ParseObjCMethodRequirement();
   1223   Decl *ParseObjCMethodPrototype(
   1224             tok::ObjCKeywordKind MethodImplKind = tok::objc_not_keyword,
   1225             bool MethodDefinition = true);
   1226   Decl *ParseObjCMethodDecl(SourceLocation mLoc, tok::TokenKind mType,
   1227             tok::ObjCKeywordKind MethodImplKind = tok::objc_not_keyword,
   1228             bool MethodDefinition=true);
   1229   void ParseObjCPropertyAttribute(ObjCDeclSpec &DS);
   1230 
   1231   Decl *ParseObjCMethodDefinition();
   1232 
   1233   //===--------------------------------------------------------------------===//
   1234   // C99 6.5: Expressions.
   1235 
   1236   ExprResult ParseExpression();
   1237   ExprResult ParseConstantExpression();
   1238   // Expr that doesn't include commas.
   1239   ExprResult ParseAssignmentExpression();
   1240 
   1241   ExprResult ParseExpressionWithLeadingAt(SourceLocation AtLoc);
   1242 
   1243   ExprResult ParseExpressionWithLeadingExtension(SourceLocation ExtLoc);
   1244 
   1245   ExprResult ParseRHSOfBinaryExpression(ExprResult LHS,
   1246                                         prec::Level MinPrec);
   1247   ExprResult ParseCastExpression(bool isUnaryExpression,
   1248                                  bool isAddressOfOperand,
   1249                                  bool &NotCastExpr,
   1250                                  bool isTypeCast);
   1251   ExprResult ParseCastExpression(bool isUnaryExpression,
   1252                                  bool isAddressOfOperand = false,
   1253                                  bool isTypeCast = false);
   1254 
   1255   /// Returns true if the next token would start a postfix-expression
   1256   /// suffix.
   1257   bool isPostfixExpressionSuffixStart() {
   1258     tok::TokenKind K = Tok.getKind();
   1259     return (K == tok::l_square || K == tok::l_paren ||
   1260             K == tok::period || K == tok::arrow ||
   1261             K == tok::plusplus || K == tok::minusminus);
   1262   }
   1263 
   1264   ExprResult ParsePostfixExpressionSuffix(ExprResult LHS);
   1265   ExprResult ParseUnaryExprOrTypeTraitExpression();
   1266   ExprResult ParseBuiltinPrimaryExpression();
   1267 
   1268   ExprResult ParseExprAfterUnaryExprOrTypeTrait(const Token &OpTok,
   1269                                                      bool &isCastExpr,
   1270                                                      ParsedType &CastTy,
   1271                                                      SourceRange &CastRange);
   1272 
   1273   typedef SmallVector<Expr*, 20> ExprListTy;
   1274   typedef SmallVector<SourceLocation, 20> CommaLocsTy;
   1275 
   1276   /// ParseExpressionList - Used for C/C++ (argument-)expression-list.
   1277   bool ParseExpressionList(SmallVectorImpl<Expr*> &Exprs,
   1278                            SmallVectorImpl<SourceLocation> &CommaLocs,
   1279                            void (Sema::*Completer)(Scope *S,
   1280                                                    Expr *Data,
   1281                                                    Expr **Args,
   1282                                                    unsigned NumArgs) = 0,
   1283                            Expr *Data = 0);
   1284 
   1285   /// ParenParseOption - Control what ParseParenExpression will parse.
   1286   enum ParenParseOption {
   1287     SimpleExpr,      // Only parse '(' expression ')'
   1288     CompoundStmt,    // Also allow '(' compound-statement ')'
   1289     CompoundLiteral, // Also allow '(' type-name ')' '{' ... '}'
   1290     CastExpr         // Also allow '(' type-name ')' <anything>
   1291   };
   1292   ExprResult ParseParenExpression(ParenParseOption &ExprType,
   1293                                         bool stopIfCastExpr,
   1294                                         bool isTypeCast,
   1295                                         ParsedType &CastTy,
   1296                                         SourceLocation &RParenLoc);
   1297 
   1298   ExprResult ParseCXXAmbiguousParenExpression(ParenParseOption &ExprType,
   1299                                             ParsedType &CastTy,
   1300                                             BalancedDelimiterTracker &Tracker);
   1301   ExprResult ParseCompoundLiteralExpression(ParsedType Ty,
   1302                                                   SourceLocation LParenLoc,
   1303                                                   SourceLocation RParenLoc);
   1304 
   1305   ExprResult ParseStringLiteralExpression();
   1306 
   1307   ExprResult ParseGenericSelectionExpression();
   1308 
   1309   //===--------------------------------------------------------------------===//
   1310   // C++ Expressions
   1311   ExprResult ParseCXXIdExpression(bool isAddressOfOperand = false);
   1312 
   1313   void CheckForTemplateAndDigraph(Token &Next, ParsedType ObjectTypePtr,
   1314                                   bool EnteringContext, IdentifierInfo &II,
   1315                                   CXXScopeSpec &SS);
   1316 
   1317   bool ParseOptionalCXXScopeSpecifier(CXXScopeSpec &SS,
   1318                                       ParsedType ObjectType,
   1319                                       bool EnteringContext,
   1320                                       bool *MayBePseudoDestructor = 0,
   1321                                       bool IsTypename = false);
   1322 
   1323   //===--------------------------------------------------------------------===//
   1324   // C++0x 5.1.2: Lambda expressions
   1325 
   1326   // [...] () -> type {...}
   1327   ExprResult ParseLambdaExpression();
   1328   ExprResult TryParseLambdaExpression();
   1329   llvm::Optional<unsigned> ParseLambdaIntroducer(LambdaIntroducer &Intro);
   1330   bool TryParseLambdaIntroducer(LambdaIntroducer &Intro);
   1331   ExprResult ParseLambdaExpressionAfterIntroducer(
   1332                LambdaIntroducer &Intro);
   1333 
   1334   //===--------------------------------------------------------------------===//
   1335   // C++ 5.2p1: C++ Casts
   1336   ExprResult ParseCXXCasts();
   1337 
   1338   //===--------------------------------------------------------------------===//
   1339   // C++ 5.2p1: C++ Type Identification
   1340   ExprResult ParseCXXTypeid();
   1341 
   1342   //===--------------------------------------------------------------------===//
   1343   //  C++ : Microsoft __uuidof Expression
   1344   ExprResult ParseCXXUuidof();
   1345 
   1346   //===--------------------------------------------------------------------===//
   1347   // C++ 5.2.4: C++ Pseudo-Destructor Expressions
   1348   ExprResult ParseCXXPseudoDestructor(ExprArg Base, SourceLocation OpLoc,
   1349                                             tok::TokenKind OpKind,
   1350                                             CXXScopeSpec &SS,
   1351                                             ParsedType ObjectType);
   1352 
   1353   //===--------------------------------------------------------------------===//
   1354   // C++ 9.3.2: C++ 'this' pointer
   1355   ExprResult ParseCXXThis();
   1356 
   1357   //===--------------------------------------------------------------------===//
   1358   // C++ 15: C++ Throw Expression
   1359   ExprResult ParseThrowExpression();
   1360 
   1361   ExceptionSpecificationType MaybeParseExceptionSpecification(
   1362                     SourceRange &SpecificationRange,
   1363                     SmallVectorImpl<ParsedType> &DynamicExceptions,
   1364                     SmallVectorImpl<SourceRange> &DynamicExceptionRanges,
   1365                     ExprResult &NoexceptExpr);
   1366 
   1367   // EndLoc is filled with the location of the last token of the specification.
   1368   ExceptionSpecificationType ParseDynamicExceptionSpecification(
   1369                                   SourceRange &SpecificationRange,
   1370                                   SmallVectorImpl<ParsedType> &Exceptions,
   1371                                   SmallVectorImpl<SourceRange> &Ranges);
   1372 
   1373   //===--------------------------------------------------------------------===//
   1374   // C++0x 8: Function declaration trailing-return-type
   1375   TypeResult ParseTrailingReturnType(SourceRange &Range);
   1376 
   1377   //===--------------------------------------------------------------------===//
   1378   // C++ 2.13.5: C++ Boolean Literals
   1379   ExprResult ParseCXXBoolLiteral();
   1380 
   1381   //===--------------------------------------------------------------------===//
   1382   // C++ 5.2.3: Explicit type conversion (functional notation)
   1383   ExprResult ParseCXXTypeConstructExpression(const DeclSpec &DS);
   1384 
   1385   bool isCXXSimpleTypeSpecifier() const;
   1386 
   1387   /// ParseCXXSimpleTypeSpecifier - [C++ 7.1.5.2] Simple type specifiers.
   1388   /// This should only be called when the current token is known to be part of
   1389   /// simple-type-specifier.
   1390   void ParseCXXSimpleTypeSpecifier(DeclSpec &DS);
   1391 
   1392   bool ParseCXXTypeSpecifierSeq(DeclSpec &DS);
   1393 
   1394   //===--------------------------------------------------------------------===//
   1395   // C++ 5.3.4 and 5.3.5: C++ new and delete
   1396   bool ParseExpressionListOrTypeId(SmallVectorImpl<Expr*> &Exprs,
   1397                                    Declarator &D);
   1398   void ParseDirectNewDeclarator(Declarator &D);
   1399   ExprResult ParseCXXNewExpression(bool UseGlobal, SourceLocation Start);
   1400   ExprResult ParseCXXDeleteExpression(bool UseGlobal,
   1401                                             SourceLocation Start);
   1402 
   1403   //===--------------------------------------------------------------------===//
   1404   // C++ if/switch/while condition expression.
   1405   bool ParseCXXCondition(ExprResult &ExprResult, Decl *&DeclResult,
   1406                          SourceLocation Loc, bool ConvertToBoolean);
   1407 
   1408   //===--------------------------------------------------------------------===//
   1409   // C++ types
   1410 
   1411   //===--------------------------------------------------------------------===//
   1412   // C99 6.7.8: Initialization.
   1413 
   1414   /// ParseInitializer
   1415   ///       initializer: [C99 6.7.8]
   1416   ///         assignment-expression
   1417   ///         '{' ...
   1418   ExprResult ParseInitializer() {
   1419     if (Tok.isNot(tok::l_brace))
   1420       return ParseAssignmentExpression();
   1421     return ParseBraceInitializer();
   1422   }
   1423   ExprResult ParseBraceInitializer();
   1424   ExprResult ParseInitializerWithPotentialDesignator();
   1425 
   1426   //===--------------------------------------------------------------------===//
   1427   // clang Expressions
   1428 
   1429   ExprResult ParseBlockLiteralExpression();  // ^{...}
   1430 
   1431   //===--------------------------------------------------------------------===//
   1432   // Objective-C Expressions
   1433   ExprResult ParseObjCAtExpression(SourceLocation AtLocation);
   1434   ExprResult ParseObjCStringLiteral(SourceLocation AtLoc);
   1435   ExprResult ParseObjCEncodeExpression(SourceLocation AtLoc);
   1436   ExprResult ParseObjCSelectorExpression(SourceLocation AtLoc);
   1437   ExprResult ParseObjCProtocolExpression(SourceLocation AtLoc);
   1438   bool isSimpleObjCMessageExpression();
   1439   ExprResult ParseObjCMessageExpression();
   1440   ExprResult ParseObjCMessageExpressionBody(SourceLocation LBracloc,
   1441                                                   SourceLocation SuperLoc,
   1442                                                   ParsedType ReceiverType,
   1443                                                   ExprArg ReceiverExpr);
   1444   ExprResult ParseAssignmentExprWithObjCMessageExprStart(
   1445       SourceLocation LBracloc, SourceLocation SuperLoc,
   1446       ParsedType ReceiverType, ExprArg ReceiverExpr);
   1447   bool ParseObjCXXMessageReceiver(bool &IsExpr, void *&TypeOrExpr);
   1448 
   1449   //===--------------------------------------------------------------------===//
   1450   // C99 6.8: Statements and Blocks.
   1451 
   1452   StmtResult ParseStatement() {
   1453     StmtVector Stmts(Actions);
   1454     return ParseStatementOrDeclaration(Stmts, true);
   1455   }
   1456   StmtResult ParseStatementOrDeclaration(StmtVector& Stmts,
   1457                                          bool OnlyStatement = false);
   1458   StmtResult ParseExprStatement(ParsedAttributes &Attrs);
   1459   StmtResult ParseLabeledStatement(ParsedAttributes &Attr);
   1460   StmtResult ParseCaseStatement(ParsedAttributes &Attr,
   1461                                 bool MissingCase = false,
   1462                                 ExprResult Expr = ExprResult());
   1463   StmtResult ParseDefaultStatement(ParsedAttributes &Attr);
   1464   StmtResult ParseCompoundStatement(ParsedAttributes &Attr,
   1465                                     bool isStmtExpr = false);
   1466   StmtResult ParseCompoundStatement(ParsedAttributes &Attr,
   1467                                     bool isStmtExpr,
   1468                                     unsigned ScopeFlags);
   1469   StmtResult ParseCompoundStatementBody(bool isStmtExpr = false);
   1470   bool ParseParenExprOrCondition(ExprResult &ExprResult,
   1471                                  Decl *&DeclResult,
   1472                                  SourceLocation Loc,
   1473                                  bool ConvertToBoolean);
   1474   StmtResult ParseIfStatement(ParsedAttributes &Attr);
   1475   StmtResult ParseSwitchStatement(ParsedAttributes &Attr);
   1476   StmtResult ParseWhileStatement(ParsedAttributes &Attr);
   1477   StmtResult ParseDoStatement(ParsedAttributes &Attr);
   1478   StmtResult ParseForStatement(ParsedAttributes &Attr);
   1479   StmtResult ParseGotoStatement(ParsedAttributes &Attr);
   1480   StmtResult ParseContinueStatement(ParsedAttributes &Attr);
   1481   StmtResult ParseBreakStatement(ParsedAttributes &Attr);
   1482   StmtResult ParseReturnStatement(ParsedAttributes &Attr);
   1483   StmtResult ParseAsmStatement(bool &msAsm);
   1484   StmtResult ParseMicrosoftAsmStatement(SourceLocation AsmLoc);
   1485   bool ParseMicrosoftIfExistsCondition(bool& Result);
   1486   void ParseMicrosoftIfExistsStatement(StmtVector &Stmts);
   1487   void ParseMicrosoftIfExistsExternalDeclaration();
   1488   void ParseMicrosoftIfExistsClassDeclaration(DeclSpec::TST TagType,
   1489                                               AccessSpecifier& CurAS);
   1490   bool ParseAsmOperandsOpt(SmallVectorImpl<IdentifierInfo *> &Names,
   1491                            SmallVectorImpl<Expr *> &Constraints,
   1492                            SmallVectorImpl<Expr *> &Exprs);
   1493 
   1494   //===--------------------------------------------------------------------===//
   1495   // C++ 6: Statements and Blocks
   1496 
   1497   StmtResult ParseCXXTryBlock(ParsedAttributes &Attr);
   1498   StmtResult ParseCXXTryBlockCommon(SourceLocation TryLoc);
   1499   StmtResult ParseCXXCatchBlock();
   1500 
   1501   //===--------------------------------------------------------------------===//
   1502   // MS: SEH Statements and Blocks
   1503 
   1504   StmtResult ParseSEHTryBlock(ParsedAttributes &Attr);
   1505   StmtResult ParseSEHTryBlockCommon(SourceLocation Loc);
   1506   StmtResult ParseSEHExceptBlock(SourceLocation Loc);
   1507   StmtResult ParseSEHFinallyBlock(SourceLocation Loc);
   1508 
   1509   //===--------------------------------------------------------------------===//
   1510   // Objective-C Statements
   1511 
   1512   StmtResult ParseObjCAtStatement(SourceLocation atLoc);
   1513   StmtResult ParseObjCTryStmt(SourceLocation atLoc);
   1514   StmtResult ParseObjCThrowStmt(SourceLocation atLoc);
   1515   StmtResult ParseObjCSynchronizedStmt(SourceLocation atLoc);
   1516   StmtResult ParseObjCAutoreleasePoolStmt(SourceLocation atLoc);
   1517 
   1518 
   1519   //===--------------------------------------------------------------------===//
   1520   // C99 6.7: Declarations.
   1521 
   1522   /// A context for parsing declaration specifiers.  TODO: flesh this
   1523   /// out, there are other significant restrictions on specifiers than
   1524   /// would be best implemented in the parser.
   1525   enum DeclSpecContext {
   1526     DSC_normal, // normal context
   1527     DSC_class,  // class context, enables 'friend'
   1528     DSC_top_level // top-level/namespace declaration context
   1529   };
   1530 
   1531   /// Information on a C++0x for-range-initializer found while parsing a
   1532   /// declaration which turns out to be a for-range-declaration.
   1533   struct ForRangeInit {
   1534     SourceLocation ColonLoc;
   1535     ExprResult RangeExpr;
   1536 
   1537     bool ParsedForRangeDecl() { return !ColonLoc.isInvalid(); }
   1538   };
   1539 
   1540   DeclGroupPtrTy ParseDeclaration(StmtVector &Stmts,
   1541                                   unsigned Context, SourceLocation &DeclEnd,
   1542                                   ParsedAttributesWithRange &attrs);
   1543   DeclGroupPtrTy ParseSimpleDeclaration(StmtVector &Stmts,
   1544                                         unsigned Context,
   1545                                         SourceLocation &DeclEnd,
   1546                                         ParsedAttributes &attrs,
   1547                                         bool RequireSemi,
   1548                                         ForRangeInit *FRI = 0);
   1549   DeclGroupPtrTy ParseDeclGroup(ParsingDeclSpec &DS, unsigned Context,
   1550                                 bool AllowFunctionDefinitions,
   1551                                 SourceLocation *DeclEnd = 0,
   1552                                 ForRangeInit *FRI = 0);
   1553   Decl *ParseDeclarationAfterDeclarator(Declarator &D,
   1554                const ParsedTemplateInfo &TemplateInfo = ParsedTemplateInfo());
   1555   bool ParseAttributesAfterDeclarator(Declarator &D);
   1556   Decl *ParseDeclarationAfterDeclaratorAndAttributes(Declarator &D,
   1557                const ParsedTemplateInfo &TemplateInfo = ParsedTemplateInfo());
   1558   Decl *ParseFunctionStatementBody(Decl *Decl, ParseScope &BodyScope);
   1559   Decl *ParseFunctionTryBlock(Decl *Decl, ParseScope &BodyScope);
   1560 
   1561   /// \brief When in code-completion, skip parsing of the function/method body
   1562   /// unless the body contains the code-completion point.
   1563   ///
   1564   /// \returns true if the function body was skipped.
   1565   bool trySkippingFunctionBodyForCodeCompletion();
   1566 
   1567   bool ParseImplicitInt(DeclSpec &DS, CXXScopeSpec *SS,
   1568                         const ParsedTemplateInfo &TemplateInfo,
   1569                         AccessSpecifier AS);
   1570   DeclSpecContext getDeclSpecContextFromDeclaratorContext(unsigned Context);
   1571   void ParseDeclarationSpecifiers(DeclSpec &DS,
   1572                 const ParsedTemplateInfo &TemplateInfo = ParsedTemplateInfo(),
   1573                                   AccessSpecifier AS = AS_none,
   1574                                   DeclSpecContext DSC = DSC_normal);
   1575   bool ParseOptionalTypeSpecifier(DeclSpec &DS, bool &isInvalid,
   1576                                   const char *&PrevSpec,
   1577                                   unsigned &DiagID,
   1578                const ParsedTemplateInfo &TemplateInfo = ParsedTemplateInfo(),
   1579                                   bool SuppressDeclarations = false);
   1580 
   1581   void ParseSpecifierQualifierList(DeclSpec &DS, AccessSpecifier AS = AS_none);
   1582 
   1583   void ParseObjCTypeQualifierList(ObjCDeclSpec &DS,
   1584                                   Declarator::TheContext Context);
   1585 
   1586   void ParseEnumSpecifier(SourceLocation TagLoc, DeclSpec &DS,
   1587                 const ParsedTemplateInfo &TemplateInfo = ParsedTemplateInfo(),
   1588                 AccessSpecifier AS = AS_none);
   1589   void ParseEnumBody(SourceLocation StartLoc, Decl *TagDecl);
   1590   void ParseStructUnionBody(SourceLocation StartLoc, unsigned TagType,
   1591                             Decl *TagDecl);
   1592 
   1593   struct FieldCallback {
   1594     virtual Decl *invoke(FieldDeclarator &Field) = 0;
   1595     virtual ~FieldCallback() {}
   1596 
   1597   private:
   1598     virtual void _anchor();
   1599   };
   1600   struct ObjCPropertyCallback;
   1601 
   1602   void ParseStructDeclaration(DeclSpec &DS, FieldCallback &Callback);
   1603 
   1604   bool isDeclarationSpecifier(bool DisambiguatingWithExpression = false);
   1605   bool isTypeSpecifierQualifier();
   1606   bool isTypeQualifier() const;
   1607 
   1608   /// isKnownToBeTypeSpecifier - Return true if we know that the specified token
   1609   /// is definitely a type-specifier.  Return false if it isn't part of a type
   1610   /// specifier or if we're not sure.
   1611   bool isKnownToBeTypeSpecifier(const Token &Tok) const;
   1612 
   1613   /// isDeclarationStatement - Disambiguates between a declaration or an
   1614   /// expression statement, when parsing function bodies.
   1615   /// Returns true for declaration, false for expression.
   1616   bool isDeclarationStatement() {
   1617     if (getLang().CPlusPlus)
   1618       return isCXXDeclarationStatement();
   1619     return isDeclarationSpecifier(true);
   1620   }
   1621 
   1622   /// isSimpleDeclaration - Disambiguates between a declaration or an
   1623   /// expression, mainly used for the C 'clause-1' or the C++
   1624   // 'for-init-statement' part of a 'for' statement.
   1625   /// Returns true for declaration, false for expression.
   1626   bool isSimpleDeclaration() {
   1627     if (getLang().CPlusPlus)
   1628       return isCXXSimpleDeclaration();
   1629     return isDeclarationSpecifier(true);
   1630   }
   1631 
   1632   /// \brief Determine whether we are currently at the start of an Objective-C
   1633   /// class message that appears to be missing the open bracket '['.
   1634   bool isStartOfObjCClassMessageMissingOpenBracket();
   1635 
   1636   /// \brief Starting with a scope specifier, identifier, or
   1637   /// template-id that refers to the current class, determine whether
   1638   /// this is a constructor declarator.
   1639   bool isConstructorDeclarator();
   1640 
   1641   /// \brief Specifies the context in which type-id/expression
   1642   /// disambiguation will occur.
   1643   enum TentativeCXXTypeIdContext {
   1644     TypeIdInParens,
   1645     TypeIdAsTemplateArgument
   1646   };
   1647 
   1648 
   1649   /// isTypeIdInParens - Assumes that a '(' was parsed and now we want to know
   1650   /// whether the parens contain an expression or a type-id.
   1651   /// Returns true for a type-id and false for an expression.
   1652   bool isTypeIdInParens(bool &isAmbiguous) {
   1653     if (getLang().CPlusPlus)
   1654       return isCXXTypeId(TypeIdInParens, isAmbiguous);
   1655     isAmbiguous = false;
   1656     return isTypeSpecifierQualifier();
   1657   }
   1658   bool isTypeIdInParens() {
   1659     bool isAmbiguous;
   1660     return isTypeIdInParens(isAmbiguous);
   1661   }
   1662 
   1663   /// isCXXDeclarationStatement - C++-specialized function that disambiguates
   1664   /// between a declaration or an expression statement, when parsing function
   1665   /// bodies. Returns true for declaration, false for expression.
   1666   bool isCXXDeclarationStatement();
   1667 
   1668   /// isCXXSimpleDeclaration - C++-specialized function that disambiguates
   1669   /// between a simple-declaration or an expression-statement.
   1670   /// If during the disambiguation process a parsing error is encountered,
   1671   /// the function returns true to let the declaration parsing code handle it.
   1672   /// Returns false if the statement is disambiguated as expression.
   1673   bool isCXXSimpleDeclaration();
   1674 
   1675   /// isCXXFunctionDeclarator - Disambiguates between a function declarator or
   1676   /// a constructor-style initializer, when parsing declaration statements.
   1677   /// Returns true for function declarator and false for constructor-style
   1678   /// initializer. If 'warnIfAmbiguous' is true a warning will be emitted to
   1679   /// indicate that the parens were disambiguated as function declarator.
   1680   /// If during the disambiguation process a parsing error is encountered,
   1681   /// the function returns true to let the declaration parsing code handle it.
   1682   bool isCXXFunctionDeclarator(bool warnIfAmbiguous);
   1683 
   1684   /// isCXXConditionDeclaration - Disambiguates between a declaration or an
   1685   /// expression for a condition of a if/switch/while/for statement.
   1686   /// If during the disambiguation process a parsing error is encountered,
   1687   /// the function returns true to let the declaration parsing code handle it.
   1688   bool isCXXConditionDeclaration();
   1689 
   1690   bool isCXXTypeId(TentativeCXXTypeIdContext Context, bool &isAmbiguous);
   1691   bool isCXXTypeId(TentativeCXXTypeIdContext Context) {
   1692     bool isAmbiguous;
   1693     return isCXXTypeId(Context, isAmbiguous);
   1694   }
   1695 
   1696   /// TPResult - Used as the result value for functions whose purpose is to
   1697   /// disambiguate C++ constructs by "tentatively parsing" them.
   1698   /// This is a class instead of a simple enum because the implicit enum-to-bool
   1699   /// conversions may cause subtle bugs.
   1700   class TPResult {
   1701     enum Result {
   1702       TPR_true,
   1703       TPR_false,
   1704       TPR_ambiguous,
   1705       TPR_error
   1706     };
   1707     Result Res;
   1708     TPResult(Result result) : Res(result) {}
   1709   public:
   1710     static TPResult True() { return TPR_true; }
   1711     static TPResult False() { return TPR_false; }
   1712     static TPResult Ambiguous() { return TPR_ambiguous; }
   1713     static TPResult Error() { return TPR_error; }
   1714 
   1715     bool operator==(const TPResult &RHS) const { return Res == RHS.Res; }
   1716     bool operator!=(const TPResult &RHS) const { return Res != RHS.Res; }
   1717   };
   1718 
   1719   /// \brief Based only on the given token kind, determine whether we know that
   1720   /// we're at the start of an expression or a type-specifier-seq (which may
   1721   /// be an expression, in C++).
   1722   ///
   1723   /// This routine does not attempt to resolve any of the trick cases, e.g.,
   1724   /// those involving lookup of identifiers.
   1725   ///
   1726   /// \returns \c TPR_true if this token starts an expression, \c TPR_false if
   1727   /// this token starts a type-specifier-seq, or \c TPR_ambiguous if it cannot
   1728   /// tell.
   1729   TPResult isExpressionOrTypeSpecifierSimple(tok::TokenKind Kind);
   1730 
   1731   /// isCXXDeclarationSpecifier - Returns TPResult::True() if it is a
   1732   /// declaration specifier, TPResult::False() if it is not,
   1733   /// TPResult::Ambiguous() if it could be either a decl-specifier or a
   1734   /// function-style cast, and TPResult::Error() if a parsing error was
   1735   /// encountered.
   1736   /// Doesn't consume tokens.
   1737   TPResult isCXXDeclarationSpecifier();
   1738 
   1739   // "Tentative parsing" functions, used for disambiguation. If a parsing error
   1740   // is encountered they will return TPResult::Error().
   1741   // Returning TPResult::True()/False() indicates that the ambiguity was
   1742   // resolved and tentative parsing may stop. TPResult::Ambiguous() indicates
   1743   // that more tentative parsing is necessary for disambiguation.
   1744   // They all consume tokens, so backtracking should be used after calling them.
   1745 
   1746   TPResult TryParseDeclarationSpecifier();
   1747   TPResult TryParseSimpleDeclaration();
   1748   TPResult TryParseTypeofSpecifier();
   1749   TPResult TryParseProtocolQualifiers();
   1750   TPResult TryParseInitDeclaratorList();
   1751   TPResult TryParseDeclarator(bool mayBeAbstract, bool mayHaveIdentifier=true);
   1752   TPResult TryParseParameterDeclarationClause();
   1753   TPResult TryParseFunctionDeclarator();
   1754   TPResult TryParseBracketDeclarator();
   1755 
   1756   TypeResult ParseTypeName(SourceRange *Range = 0,
   1757                            Declarator::TheContext Context
   1758                              = Declarator::TypeNameContext,
   1759                            AccessSpecifier AS = AS_none,
   1760                            Decl **OwnedType = 0);
   1761   void ParseBlockId();
   1762 
   1763   void ProhibitAttributes(ParsedAttributesWithRange &attrs) {
   1764     if (!attrs.Range.isValid()) return;
   1765     DiagnoseProhibitedAttributes(attrs);
   1766   }
   1767   void DiagnoseProhibitedAttributes(ParsedAttributesWithRange &attrs);
   1768 
   1769   void MaybeParseGNUAttributes(Declarator &D,
   1770                                LateParsedAttrList *LateAttrs = 0) {
   1771     if (Tok.is(tok::kw___attribute)) {
   1772       ParsedAttributes attrs(AttrFactory);
   1773       SourceLocation endLoc;
   1774       ParseGNUAttributes(attrs, &endLoc, LateAttrs);
   1775       D.takeAttributes(attrs, endLoc);
   1776     }
   1777   }
   1778   void MaybeParseGNUAttributes(ParsedAttributes &attrs,
   1779                                SourceLocation *endLoc = 0,
   1780                                LateParsedAttrList *LateAttrs = 0) {
   1781     if (Tok.is(tok::kw___attribute))
   1782       ParseGNUAttributes(attrs, endLoc, LateAttrs);
   1783   }
   1784   void ParseGNUAttributes(ParsedAttributes &attrs,
   1785                           SourceLocation *endLoc = 0,
   1786                           LateParsedAttrList *LateAttrs = 0);
   1787   void ParseGNUAttributeArgs(IdentifierInfo *AttrName,
   1788                              SourceLocation AttrNameLoc,
   1789                              ParsedAttributes &Attrs,
   1790                              SourceLocation *EndLoc);
   1791 
   1792   void MaybeParseCXX0XAttributes(Declarator &D) {
   1793     if (getLang().CPlusPlus0x && isCXX0XAttributeSpecifier()) {
   1794       ParsedAttributesWithRange attrs(AttrFactory);
   1795       SourceLocation endLoc;
   1796       ParseCXX0XAttributes(attrs, &endLoc);
   1797       D.takeAttributes(attrs, endLoc);
   1798     }
   1799   }
   1800   void MaybeParseCXX0XAttributes(ParsedAttributes &attrs,
   1801                                  SourceLocation *endLoc = 0) {
   1802     if (getLang().CPlusPlus0x && isCXX0XAttributeSpecifier()) {
   1803       ParsedAttributesWithRange attrsWithRange(AttrFactory);
   1804       ParseCXX0XAttributes(attrsWithRange, endLoc);
   1805       attrs.takeAllFrom(attrsWithRange);
   1806     }
   1807   }
   1808   void MaybeParseCXX0XAttributes(ParsedAttributesWithRange &attrs,
   1809                                  SourceLocation *endLoc = 0) {
   1810     if (getLang().CPlusPlus0x && isCXX0XAttributeSpecifier())
   1811       ParseCXX0XAttributes(attrs, endLoc);
   1812   }
   1813 
   1814   void ParseCXX0XAttributeSpecifier(ParsedAttributes &attrs,
   1815                                     SourceLocation *EndLoc = 0);
   1816   void ParseCXX0XAttributes(ParsedAttributesWithRange &attrs,
   1817                             SourceLocation *EndLoc = 0);
   1818 
   1819   void MaybeParseMicrosoftAttributes(ParsedAttributes &attrs,
   1820                                      SourceLocation *endLoc = 0) {
   1821     if (getLang().MicrosoftExt && Tok.is(tok::l_square))
   1822       ParseMicrosoftAttributes(attrs, endLoc);
   1823   }
   1824   void ParseMicrosoftAttributes(ParsedAttributes &attrs,
   1825                                 SourceLocation *endLoc = 0);
   1826   void ParseMicrosoftDeclSpec(ParsedAttributes &attrs);
   1827   void ParseMicrosoftTypeAttributes(ParsedAttributes &attrs);
   1828   void ParseBorlandTypeAttributes(ParsedAttributes &attrs);
   1829   void ParseOpenCLAttributes(ParsedAttributes &attrs);
   1830   void ParseOpenCLQualifiers(DeclSpec &DS);
   1831 
   1832   VersionTuple ParseVersionTuple(SourceRange &Range);
   1833   void ParseAvailabilityAttribute(IdentifierInfo &Availability,
   1834                                   SourceLocation AvailabilityLoc,
   1835                                   ParsedAttributes &attrs,
   1836                                   SourceLocation *endLoc);
   1837 
   1838   bool IsThreadSafetyAttribute(llvm::StringRef AttrName);
   1839   void ParseThreadSafetyAttribute(IdentifierInfo &AttrName,
   1840                                   SourceLocation AttrNameLoc,
   1841                                   ParsedAttributes &Attrs,
   1842                                   SourceLocation *EndLoc);
   1843 
   1844 
   1845   void ParseTypeofSpecifier(DeclSpec &DS);
   1846   void ParseDecltypeSpecifier(DeclSpec &DS);
   1847   void ParseUnderlyingTypeSpecifier(DeclSpec &DS);
   1848   void ParseAtomicSpecifier(DeclSpec &DS);
   1849 
   1850   ExprResult ParseAlignArgument(SourceLocation Start);
   1851   void ParseAlignmentSpecifier(ParsedAttributes &Attrs,
   1852                                SourceLocation *endLoc = 0);
   1853 
   1854   VirtSpecifiers::Specifier isCXX0XVirtSpecifier() const;
   1855   void ParseOptionalCXX0XVirtSpecifierSeq(VirtSpecifiers &VS);
   1856 
   1857   bool isCXX0XFinalKeyword() const;
   1858 
   1859   /// DeclaratorScopeObj - RAII object used in Parser::ParseDirectDeclarator to
   1860   /// enter a new C++ declarator scope and exit it when the function is
   1861   /// finished.
   1862   class DeclaratorScopeObj {
   1863     Parser &P;
   1864     CXXScopeSpec &SS;
   1865     bool EnteredScope;
   1866     bool CreatedScope;
   1867   public:
   1868     DeclaratorScopeObj(Parser &p, CXXScopeSpec &ss)
   1869       : P(p), SS(ss), EnteredScope(false), CreatedScope(false) {}
   1870 
   1871     void EnterDeclaratorScope() {
   1872       assert(!EnteredScope && "Already entered the scope!");
   1873       assert(SS.isSet() && "C++ scope was not set!");
   1874 
   1875       CreatedScope = true;
   1876       P.EnterScope(0); // Not a decl scope.
   1877 
   1878       if (!P.Actions.ActOnCXXEnterDeclaratorScope(P.getCurScope(), SS))
   1879         EnteredScope = true;
   1880     }
   1881 
   1882     ~DeclaratorScopeObj() {
   1883       if (EnteredScope) {
   1884         assert(SS.isSet() && "C++ scope was cleared ?");
   1885         P.Actions.ActOnCXXExitDeclaratorScope(P.getCurScope(), SS);
   1886       }
   1887       if (CreatedScope)
   1888         P.ExitScope();
   1889     }
   1890   };
   1891 
   1892   /// ParseDeclarator - Parse and verify a newly-initialized declarator.
   1893   void ParseDeclarator(Declarator &D);
   1894   /// A function that parses a variant of direct-declarator.
   1895   typedef void (Parser::*DirectDeclParseFunction)(Declarator&);
   1896   void ParseDeclaratorInternal(Declarator &D,
   1897                                DirectDeclParseFunction DirectDeclParser);
   1898 
   1899   void ParseTypeQualifierListOpt(DeclSpec &DS, bool GNUAttributesAllowed = true,
   1900                                  bool CXX0XAttributesAllowed = true);
   1901   void ParseDirectDeclarator(Declarator &D);
   1902   void ParseParenDeclarator(Declarator &D);
   1903   void ParseFunctionDeclarator(Declarator &D,
   1904                                ParsedAttributes &attrs,
   1905                                BalancedDelimiterTracker &Tracker,
   1906                                bool RequiresArg = false);
   1907   bool isFunctionDeclaratorIdentifierList();
   1908   void ParseFunctionDeclaratorIdentifierList(
   1909          Declarator &D,
   1910          SmallVector<DeclaratorChunk::ParamInfo, 16> &ParamInfo);
   1911   void ParseParameterDeclarationClause(
   1912          Declarator &D,
   1913          ParsedAttributes &attrs,
   1914          SmallVector<DeclaratorChunk::ParamInfo, 16> &ParamInfo,
   1915          SourceLocation &EllipsisLoc);
   1916   void ParseBracketDeclarator(Declarator &D);
   1917 
   1918   //===--------------------------------------------------------------------===//
   1919   // C++ 7: Declarations [dcl.dcl]
   1920 
   1921   bool isCXX0XAttributeSpecifier(bool FullLookahead = false,
   1922                                  tok::TokenKind *After = 0);
   1923 
   1924   Decl *ParseNamespace(unsigned Context, SourceLocation &DeclEnd,
   1925                        SourceLocation InlineLoc = SourceLocation());
   1926   void ParseInnerNamespace(std::vector<SourceLocation>& IdentLoc,
   1927                            std::vector<IdentifierInfo*>& Ident,
   1928                            std::vector<SourceLocation>& NamespaceLoc,
   1929                            unsigned int index, SourceLocation& InlineLoc,
   1930                            ParsedAttributes& attrs,
   1931                            BalancedDelimiterTracker &Tracker);
   1932   Decl *ParseLinkage(ParsingDeclSpec &DS, unsigned Context);
   1933   Decl *ParseUsingDirectiveOrDeclaration(unsigned Context,
   1934                                          const ParsedTemplateInfo &TemplateInfo,
   1935                                          SourceLocation &DeclEnd,
   1936                                          ParsedAttributesWithRange &attrs,
   1937                                          Decl **OwnedType = 0);
   1938   Decl *ParseUsingDirective(unsigned Context,
   1939                             SourceLocation UsingLoc,
   1940                             SourceLocation &DeclEnd,
   1941                             ParsedAttributes &attrs);
   1942   Decl *ParseUsingDeclaration(unsigned Context,
   1943                               const ParsedTemplateInfo &TemplateInfo,
   1944                               SourceLocation UsingLoc,
   1945                               SourceLocation &DeclEnd,
   1946                               AccessSpecifier AS = AS_none,
   1947                               Decl **OwnedType = 0);
   1948   Decl *ParseStaticAssertDeclaration(SourceLocation &DeclEnd);
   1949   Decl *ParseNamespaceAlias(SourceLocation NamespaceLoc,
   1950                             SourceLocation AliasLoc, IdentifierInfo *Alias,
   1951                             SourceLocation &DeclEnd);
   1952 
   1953   //===--------------------------------------------------------------------===//
   1954   // C++ 9: classes [class] and C structs/unions.
   1955   TypeResult ParseClassName(SourceLocation &EndLocation, CXXScopeSpec &SS);
   1956   void ParseClassSpecifier(tok::TokenKind TagTokKind, SourceLocation TagLoc,
   1957                            DeclSpec &DS,
   1958                 const ParsedTemplateInfo &TemplateInfo = ParsedTemplateInfo(),
   1959                            AccessSpecifier AS = AS_none,
   1960                            bool SuppressDeclarations = false);
   1961   void ParseCXXMemberSpecification(SourceLocation StartLoc, unsigned TagType,
   1962                                    Decl *TagDecl);
   1963   ExprResult ParseCXXMemberInitializer(bool IsFunction,
   1964                                        SourceLocation &EqualLoc);
   1965   void ParseCXXClassMemberDeclaration(AccessSpecifier AS, AttributeList *Attr,
   1966                 const ParsedTemplateInfo &TemplateInfo = ParsedTemplateInfo(),
   1967                                  ParsingDeclRAIIObject *DiagsFromTParams = 0);
   1968   void ParseConstructorInitializer(Decl *ConstructorDecl);
   1969   MemInitResult ParseMemInitializer(Decl *ConstructorDecl);
   1970   void HandleMemberFunctionDefaultArgs(Declarator& DeclaratorInfo,
   1971                                        Decl *ThisDecl);
   1972 
   1973   //===--------------------------------------------------------------------===//
   1974   // C++ 10: Derived classes [class.derived]
   1975   void ParseBaseClause(Decl *ClassDecl);
   1976   BaseResult ParseBaseSpecifier(Decl *ClassDecl);
   1977   AccessSpecifier getAccessSpecifierIfPresent() const;
   1978 
   1979   bool ParseUnqualifiedIdTemplateId(CXXScopeSpec &SS,
   1980                                     IdentifierInfo *Name,
   1981                                     SourceLocation NameLoc,
   1982                                     bool EnteringContext,
   1983                                     ParsedType ObjectType,
   1984                                     UnqualifiedId &Id,
   1985                                     bool AssumeTemplateId,
   1986                                     SourceLocation TemplateKWLoc);
   1987   bool ParseUnqualifiedIdOperator(CXXScopeSpec &SS, bool EnteringContext,
   1988                                   ParsedType ObjectType,
   1989                                   UnqualifiedId &Result);
   1990   bool ParseUnqualifiedId(CXXScopeSpec &SS, bool EnteringContext,
   1991                           bool AllowDestructorName,
   1992                           bool AllowConstructorName,
   1993                           ParsedType ObjectType,
   1994                           UnqualifiedId &Result);
   1995 
   1996   //===--------------------------------------------------------------------===//
   1997   // C++ 14: Templates [temp]
   1998 
   1999   // C++ 14.1: Template Parameters [temp.param]
   2000   Decl *ParseDeclarationStartingWithTemplate(unsigned Context,
   2001                                              SourceLocation &DeclEnd,
   2002                                              AccessSpecifier AS = AS_none,
   2003                                              AttributeList *AccessAttrs = 0);
   2004   Decl *ParseTemplateDeclarationOrSpecialization(unsigned Context,
   2005                                                  SourceLocation &DeclEnd,
   2006                                                  AccessSpecifier AS,
   2007                                                  AttributeList *AccessAttrs);
   2008   Decl *ParseSingleDeclarationAfterTemplate(
   2009                                        unsigned Context,
   2010                                        const ParsedTemplateInfo &TemplateInfo,
   2011                                        ParsingDeclRAIIObject &DiagsFromParams,
   2012                                        SourceLocation &DeclEnd,
   2013                                        AccessSpecifier AS=AS_none,
   2014                                        AttributeList *AccessAttrs = 0);
   2015   bool ParseTemplateParameters(unsigned Depth,
   2016                                SmallVectorImpl<Decl*> &TemplateParams,
   2017                                SourceLocation &LAngleLoc,
   2018                                SourceLocation &RAngleLoc);
   2019   bool ParseTemplateParameterList(unsigned Depth,
   2020                                   SmallVectorImpl<Decl*> &TemplateParams);
   2021   bool isStartOfTemplateTypeParameter();
   2022   Decl *ParseTemplateParameter(unsigned Depth, unsigned Position);
   2023   Decl *ParseTypeParameter(unsigned Depth, unsigned Position);
   2024   Decl *ParseTemplateTemplateParameter(unsigned Depth, unsigned Position);
   2025   Decl *ParseNonTypeTemplateParameter(unsigned Depth, unsigned Position);
   2026   // C++ 14.3: Template arguments [temp.arg]
   2027   typedef SmallVector<ParsedTemplateArgument, 16> TemplateArgList;
   2028 
   2029   bool ParseTemplateIdAfterTemplateName(TemplateTy Template,
   2030                                         SourceLocation TemplateNameLoc,
   2031                                         const CXXScopeSpec &SS,
   2032                                         bool ConsumeLastToken,
   2033                                         SourceLocation &LAngleLoc,
   2034                                         TemplateArgList &TemplateArgs,
   2035                                         SourceLocation &RAngleLoc);
   2036 
   2037   bool AnnotateTemplateIdToken(TemplateTy Template, TemplateNameKind TNK,
   2038                                CXXScopeSpec &SS,
   2039                                UnqualifiedId &TemplateName,
   2040                                SourceLocation TemplateKWLoc = SourceLocation(),
   2041                                bool AllowTypeAnnotation = true);
   2042   void AnnotateTemplateIdTokenAsType();
   2043   bool IsTemplateArgumentList(unsigned Skip = 0);
   2044   bool ParseTemplateArgumentList(TemplateArgList &TemplateArgs);
   2045   ParsedTemplateArgument ParseTemplateTemplateArgument();
   2046   ParsedTemplateArgument ParseTemplateArgument();
   2047   Decl *ParseExplicitInstantiation(SourceLocation ExternLoc,
   2048                                         SourceLocation TemplateLoc,
   2049                                         SourceLocation &DeclEnd);
   2050 
   2051   //===--------------------------------------------------------------------===//
   2052   // Modules
   2053   DeclGroupPtrTy ParseModuleImport();
   2054 
   2055   //===--------------------------------------------------------------------===//
   2056   // GNU G++: Type Traits [Type-Traits.html in the GCC manual]
   2057   ExprResult ParseUnaryTypeTrait();
   2058   ExprResult ParseBinaryTypeTrait();
   2059 
   2060   //===--------------------------------------------------------------------===//
   2061   // Embarcadero: Arary and Expression Traits
   2062   ExprResult ParseArrayTypeTrait();
   2063   ExprResult ParseExpressionTrait();
   2064 
   2065   //===--------------------------------------------------------------------===//
   2066   // Preprocessor code-completion pass-through
   2067   virtual void CodeCompleteDirective(bool InConditional);
   2068   virtual void CodeCompleteInConditionalExclusion();
   2069   virtual void CodeCompleteMacroName(bool IsDefinition);
   2070   virtual void CodeCompletePreprocessorExpression();
   2071   virtual void CodeCompleteMacroArgument(IdentifierInfo *Macro,
   2072                                          MacroInfo *MacroInfo,
   2073                                          unsigned ArgumentIndex);
   2074   virtual void CodeCompleteNaturalLanguage();
   2075 };
   2076 
   2077 }  // end namespace clang
   2078 
   2079 #endif
   2080