1207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis//===--- SelectorLocationsKind.h - Kind of selector locations ---*- C++ -*-===// 2207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis// 3207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis// The LLVM Compiler Infrastructure 4207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis// 5207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis// This file is distributed under the University of Illinois Open Source 6207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis// License. See LICENSE.TXT for details. 7207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis// 8207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 9207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis// 10207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis// Describes whether the identifier locations for a selector are "standard" 11207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis// or not. 12207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis// 13207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 14207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis 15207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis#ifndef LLVM_CLANG_AST_SELECTORLOCATIONSKIND_H 16207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis#define LLVM_CLANG_AST_SELECTORLOCATIONSKIND_H 17207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis 18207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis#include "clang/Basic/LLVM.h" 19207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis 20207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidisnamespace clang { 21207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis class Selector; 22207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis class SourceLocation; 23207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis class Expr; 24491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios Kyrtzidis class ParmVarDecl; 25207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis 26207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis/// \brief Whether all locations of the selector identifiers are in a 27207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis/// "standard" position. 28207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidisenum SelectorLocationsKind { 29207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis /// \brief Non-standard. 30207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis SelLoc_NonStandard = 0, 31207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis 32207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis /// \brief For nullary selectors, immediately before the end: 33207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis /// "[foo release]" / "-(void)release;" 34207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis /// Or immediately before the arguments: 35207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis /// "[foo first:1 second:2]" / "-(id)first:(int)x second:(int)y; 36207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis SelLoc_StandardNoSpace = 1, 37207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis 38207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis /// \brief For nullary selectors, immediately before the end: 39207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis /// "[foo release]" / "-(void)release;" 40207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis /// Or with a space between the arguments: 41207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis /// "[foo first: 1 second: 2]" / "-(id)first: (int)x second: (int)y; 42207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis SelLoc_StandardWithSpace = 2 43207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis}; 44207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis 451824d54df85a462ada812dadda18130f951d40f3Dmitri Gribenko/// \brief Returns true if all \p SelLocs are in a "standard" location. 46207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios KyrtzidisSelectorLocationsKind hasStandardSelectorLocs(Selector Sel, 47207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis ArrayRef<SourceLocation> SelLocs, 48207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis ArrayRef<Expr *> Args, 49207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis SourceLocation EndLoc); 50207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis 51207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis/// \brief Get the "standard" location of a selector identifier, e.g: 52207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis/// For nullary selectors, immediately before ']': "[foo release]" 53207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis/// 54207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis/// \param WithArgSpace if true the standard location is with a space apart 55207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis/// before arguments: "[foo first: 1 second: 2]" 56207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis/// If false: "[foo first:1 second:2]" 57207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios KyrtzidisSourceLocation getStandardSelectorLoc(unsigned Index, 58207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis Selector Sel, 59207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis bool WithArgSpace, 60207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis ArrayRef<Expr *> Args, 61207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis SourceLocation EndLoc); 62207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis 631824d54df85a462ada812dadda18130f951d40f3Dmitri Gribenko/// \brief Returns true if all \p SelLocs are in a "standard" location. 64491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios KyrtzidisSelectorLocationsKind hasStandardSelectorLocs(Selector Sel, 65491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios Kyrtzidis ArrayRef<SourceLocation> SelLocs, 66491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios Kyrtzidis ArrayRef<ParmVarDecl *> Args, 67491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios Kyrtzidis SourceLocation EndLoc); 68491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios Kyrtzidis 69491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios Kyrtzidis/// \brief Get the "standard" location of a selector identifier, e.g: 70491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios Kyrtzidis/// For nullary selectors, immediately before ']': "[foo release]" 71491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios Kyrtzidis/// 72491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios Kyrtzidis/// \param WithArgSpace if true the standard location is with a space apart 73491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios Kyrtzidis/// before arguments: "-(id)first: (int)x second: (int)y;" 74491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios Kyrtzidis/// If false: "-(id)first:(int)x second:(int)y;" 75491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios KyrtzidisSourceLocation getStandardSelectorLoc(unsigned Index, 76491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios Kyrtzidis Selector Sel, 77491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios Kyrtzidis bool WithArgSpace, 78491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios Kyrtzidis ArrayRef<ParmVarDecl *> Args, 79491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios Kyrtzidis SourceLocation EndLoc); 80491306a83c4f0f49f95a3bcbca8580cb98a91c7aArgyrios Kyrtzidis 81207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis} // end namespace clang 82207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis 83207180802c836fda8acbedb47a92f9d2bdca59c3Argyrios Kyrtzidis#endif 84