//===--- 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 SelLocs, ArrayRef 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 Args, SourceLocation EndLoc); /// Returns true if all \p SelLocs are in a "standard" location. SelectorLocationsKind hasStandardSelectorLocs(Selector Sel, ArrayRef SelLocs, ArrayRef 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 Args, SourceLocation EndLoc); } // end namespace clang #endif