//===--- ParseTentative.cpp - Ambiguity Resolution Parsing ----------------===////// The LLVM Compiler Infrastructure//// This file is distributed under the University of Illinois Open Source// License. See LICENSE.TXT for details.////===----------------------------------------------------------------------===////// This file implements the tentative parsing portions of the Parser// interfaces, for ambiguity resolution.////===----------------------------------------------------------------------===//#include"clang/Parse/Parser.h"#include"clang/Parse/ParseDiagnostic.h"#include"clang/Sema/ParsedTemplate.h"usingnamespaceclang;/// isCXXDeclarationStatement - C++-specialized function that disambiguates/// between a declaration or an expression statement, when parsing function/// bodies. Returns true for declaration, false for expression.////// declaration-statement:/// block-declaration////// block-declaration:/// simple-declaration/// asm-definition/// namespace-alias-definition/// using-declaration/// using-directive/// [C++0x] static_assert-declaration////// asm-definition:/// 'asm' '(' string-literal ')' ';'////// namespace-alias-definition:/// 'namespace' identifier = qualified-namespace-specifier ';'////// using-declaration:/// 'using' typename[opt] '::'[opt] nested-name-specifier/// unqualified-id ';'/// 'using' '::' unqualified-id ;////// using-directive:/// 'using' 'namespace' '::'[opt] nested-name-specifier[opt]/// namespace-name ';'///boolParser::isCXXDeclarationStatement(){switch(Tok.getKind()){// asm-definitioncasetok::kw_asm:// namespace-alias-definitioncasetok::kw_namespace:// using-declaration// using-directivecasetok::kw_using:// static_assert-declarationcasetok::kw_static_assert:casetok::kw__Static_assert:returntrue;// simple-declarationdefault:returnisCXXSimpleDeclaration(/*AllowForRangeDecl=*/false);}}/// isCXXSimpleDeclaration - C++-specialized function that disambiguates/// between a simple-declaration or an expression-statement./// If during the disambiguation process a parsing error is encountered,/// the function returns true to let the declaration parsing code handle it./// Returns false if the statement is disambiguated as expression.////// simple-declaration:/// decl-specifier-seq init-declarator-list[opt] ';'////// (if AllowForRangeDecl specified)/// for ( for-range-declaration : for-range-initializer ) statement/// for-range-declaration: /// attribute-specifier-seqopt type-specifier-seq declaratorbo