- //===--- SelectorLocationsKind.h - Kind of selector locations ---*- C++ -*-===// 
- // 
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 
- // See https://llvm.org/LICENSE.txt for license information. 
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 
- // 
- //===----------------------------------------------------------------------===// 
- // 
- // Describes whether the identifier locations for a selector are "standard" 
- // or not. 
- // 
- //===----------------------------------------------------------------------===// 
-   
- #ifndef LLVM_CLANG_AST_SELECTORLOCATIONSKIND_H 
- #define LLVM_CLANG_AST_SELECTORLOCATIONSKIND_H 
-   
- #include "clang/Basic/LLVM.h" 
-   
- namespace clang { 
-   class Selector; 
-   class SourceLocation; 
-   class Expr; 
-   class ParmVarDecl; 
-   
- /// Whether all locations of the selector identifiers are in a 
- /// "standard" position. 
- enum SelectorLocationsKind { 
-   /// Non-standard. 
-   SelLoc_NonStandard = 0, 
-   
-   /// For nullary selectors, immediately before the end: 
-   ///    "[foo release]" / "-(void)release;" 
-   /// Or immediately before the arguments: 
-   ///    "[foo first:1 second:2]" / "-(id)first:(int)x second:(int)y; 
-   SelLoc_StandardNoSpace = 1, 
-   
-   /// For nullary selectors, immediately before the end: 
-   ///    "[foo release]" / "-(void)release;" 
-   /// Or with a space between the arguments: 
-   ///    "[foo first: 1 second: 2]" / "-(id)first: (int)x second: (int)y; 
-   SelLoc_StandardWithSpace = 2 
- }; 
-   
- /// Returns true if all \p SelLocs are in a "standard" location. 
- SelectorLocationsKind hasStandardSelectorLocs(Selector Sel, 
-                                               ArrayRef<SourceLocation> SelLocs, 
-                                               ArrayRef<Expr *> Args, 
-                                               SourceLocation EndLoc); 
-   
- /// Get the "standard" location of a selector identifier, e.g: 
- /// For nullary selectors, immediately before ']': "[foo release]" 
- /// 
- /// \param WithArgSpace if true the standard location is with a space apart 
- /// before arguments: "[foo first: 1 second: 2]" 
- /// If false: "[foo first:1 second:2]" 
- SourceLocation getStandardSelectorLoc(unsigned Index, 
-                                       Selector Sel, 
-                                       bool WithArgSpace, 
-                                       ArrayRef<Expr *> Args, 
-                                       SourceLocation EndLoc); 
-   
- /// Returns true if all \p SelLocs are in a "standard" location. 
- SelectorLocationsKind hasStandardSelectorLocs(Selector Sel, 
-                                               ArrayRef<SourceLocation> SelLocs, 
-                                               ArrayRef<ParmVarDecl *> Args, 
-                                               SourceLocation EndLoc); 
-   
- /// Get the "standard" location of a selector identifier, e.g: 
- /// For nullary selectors, immediately before ']': "[foo release]" 
- /// 
- /// \param WithArgSpace if true the standard location is with a space apart 
- /// before arguments: "-(id)first: (int)x second: (int)y;" 
- /// If false: "-(id)first:(int)x second:(int)y;" 
- SourceLocation getStandardSelectorLoc(unsigned Index, 
-                                       Selector Sel, 
-                                       bool WithArgSpace, 
-                                       ArrayRef<ParmVarDecl *> Args, 
-                                       SourceLocation EndLoc); 
-   
- } // end namespace clang 
-   
- #endif 
-