13#ifndef LLVM_CLANG_AST_EXPROBJC_H
14#define LLVM_CLANG_AST_EXPROBJC_H
29#include "llvm/ADT/ArrayRef.h"
30#include "llvm/ADT/PointerIntPair.h"
31#include "llvm/ADT/PointerUnion.h"
32#include "llvm/ADT/StringRef.h"
33#include "llvm/ADT/iterator_range.h"
34#include "llvm/Support/Casting.h"
35#include "llvm/Support/Compiler.h"
36#include "llvm/Support/TrailingObjects.h"
37#include "llvm/Support/VersionTuple.h"
38#include "llvm/Support/type_traits.h"
47class CXXBaseSpecifier;
82 return T->getStmtClass() == ObjCStringLiteralClass;
98 :
Expr(ObjCBoolLiteralExprClass,
Empty) {}
119 return T->getStmtClass() == ObjCBoolLiteralExprClass;
137 BoxingMethod(method),
Range(R) {
153 return !BoxingMethod && SubExpr;
175 return reinterpret_cast<Stmt const * const*
>(&SubExpr);
179 return reinterpret_cast<Stmt const * const*
>(&SubExpr + 1);
183 return T->getStmtClass() == ObjCBoxedExprClass;
191 private llvm::TrailingObjects<ObjCArrayLiteral, Expr *> {
192 unsigned NumElements;
201 :
Expr(ObjCArrayLiteralClass,
Empty), NumElements(NumElements) {}
213 unsigned NumElements);
224 return getTrailingObjects<Expr *>();
232 assert((Index < NumElements) &&
"Arg access out of range!");
236 assert((Index < NumElements) &&
"Arg access out of range!");
241 return ArrayWithObjectsMethod;
256 return T->getStmtClass() == ObjCArrayLiteralClass;
307 private llvm::TrailingObjects<ObjCDictionaryLiteral,
308 ObjCDictionaryLiteral_KeyValuePair,
309 ObjCDictionaryLiteral_ExpansionData> {
311 unsigned NumElements : 31;
320 LLVM_PREFERRED_TYPE(
bool)
321 unsigned HasPackExpansions : 1;
330 bool HasPackExpansions,
335 bool HasPackExpansions)
336 :
Expr(ObjCDictionaryLiteralClass,
Empty), NumElements(NumElements),
337 HasPackExpansions(HasPackExpansions) {}
339 size_t numTrailingObjects(OverloadToken<KeyValuePair>)
const {
350 bool HasPackExpansions,
355 unsigned NumElements,
356 bool HasPackExpansions);
363 assert((Index < NumElements) &&
"Arg access out of range!");
364 const KeyValuePair &KV = getTrailingObjects<KeyValuePair>()[Index];
367 if (HasPackExpansions) {
369 getTrailingObjects<ExpansionData>()[Index];
378 return DictWithObjectsMethod;
390 "KeyValuePair is expected size");
392 reinterpret_cast<Stmt **
>(getTrailingObjects<KeyValuePair>()),
393 reinterpret_cast<Stmt **
>(getTrailingObjects<KeyValuePair>()) +
403 return T->getStmtClass() == ObjCDictionaryLiteralClass;
418 EncodedType(EncodedType), AtLoc(at), RParenLoc(rp) {
434 EncodedType = EncType;
450 return T->getStmtClass() == ObjCEncodeExprClass;
463 SelName(selInfo), AtLoc(at), RParenLoc(rp) {
493 return T->getStmtClass() == ObjCSelectorExprClass;
516 TheProtocol(protocol), AtLoc(at), ProtoLoc(protoLoc), RParenLoc(rp) {
544 return T->getStmtClass() == ObjCProtocolExprClass;
558 LLVM_PREFERRED_TYPE(
bool)
562 LLVM_PREFERRED_TYPE(
bool)
568 bool freeIvar =
false)
571 D(d),
Base(base),
Loc(l), OpLoc(oploc), IsArrow(arrow),
572 IsFreeIvar(freeIvar) {
611 return T->getStmtClass() == ObjCIvarRefExprClass;
623 llvm::PointerIntPair<NamedDecl *, 1, bool> PropertyOrGetter;
628 enum MethodRefFlags {
630 MethodRef_Getter = 0x1,
631 MethodRef_Setter = 0x2
635 llvm::PointerIntPair<ObjCMethodDecl *, 2, unsigned> SetterAndMethodRefFlags;
648 llvm::PointerUnion<Stmt *, const Type *, ObjCInterfaceDecl *> Receiver;
653 :
Expr(ObjCPropertyRefExprClass, t, VK, OK), PropertyOrGetter(PD,
false),
654 IdLoc(l), Receiver(base) {
662 :
Expr(ObjCPropertyRefExprClass, t, VK, OK), PropertyOrGetter(PD,
false),
663 IdLoc(l), ReceiverLoc(sl), Receiver(st.getTypePtr()) {
671 :
Expr(ObjCPropertyRefExprClass,
T, VK, OK),
672 PropertyOrGetter(Getter,
true), SetterAndMethodRefFlags(Setter, 0),
673 IdLoc(IdLoc), Receiver(
Base) {
682 :
Expr(ObjCPropertyRefExprClass,
T, VK, OK),
683 PropertyOrGetter(Getter,
true), SetterAndMethodRefFlags(Setter, 0),
684 IdLoc(IdLoc), ReceiverLoc(SuperLoc), Receiver(SuperTy.getTypePtr()) {
693 :
Expr(ObjCPropertyRefExprClass,
T, VK, OK),
694 PropertyOrGetter(Getter,
true), SetterAndMethodRefFlags(Setter, 0),
695 IdLoc(IdLoc), ReceiverLoc(ReceiverLoc), Receiver(Receiver) {
701 :
Expr(ObjCPropertyRefExprClass,
Empty) {}
708 return cast<ObjCPropertyDecl>(PropertyOrGetter.getPointer());
713 return cast_or_null<ObjCMethodDecl>(PropertyOrGetter.getPointer());
718 return SetterAndMethodRefFlags.getPointer();
737 return SetterAndMethodRefFlags.getInt() & MethodRef_Getter;
744 return SetterAndMethodRefFlags.getInt() & MethodRef_Setter;
748 setMethodRefFlag(MethodRef_Getter, val);
752 setMethodRefFlag(MethodRef_Setter, val);
756 return cast<Expr>(Receiver.get<
Stmt*>());
759 return cast<Expr>(Receiver.get<
Stmt*>());
790 if (Receiver.is<
Stmt*>()) {
791 Stmt **begin =
reinterpret_cast<Stmt**
>(&Receiver);
803 return T->getStmtClass() == ObjCPropertyRefExprClass;
811 PropertyOrGetter.setPointer(
D);
812 PropertyOrGetter.setInt(
false);
813 SetterAndMethodRefFlags.setPointer(
nullptr);
814 SetterAndMethodRefFlags.setInt(methRefFlags);
818 unsigned methRefFlags) {
819 PropertyOrGetter.setPointer(Getter);
820 PropertyOrGetter.setInt(
true);
821 SetterAndMethodRefFlags.setPointer(Setter);
822 SetterAndMethodRefFlags.setInt(methRefFlags);
826 void setSuperReceiver(QualType
T) { Receiver =
T.getTypePtr(); }
827 void setClassReceiver(ObjCInterfaceDecl *
D) { Receiver =
D; }
829 void setLocation(SourceLocation L) { IdLoc = L; }
830 void setReceiverLocation(SourceLocation
Loc) { ReceiverLoc =
Loc; }
832 void setMethodRefFlag(MethodRefFlags flag,
bool val) {
833 unsigned f = SetterAndMethodRefFlags.getInt();
838 SetterAndMethodRefFlags.setInt(f);
851 enum { BASE, KEY, END_EXPR };
852 Stmt* SubExprs[END_EXPR];
864 :
Expr(ObjCSubscriptRefExprClass,
T, VK, OK), RBracket(RB),
865 GetAtIndexMethodDecl(getMethod), SetAtIndexMethodDecl(setMethod) {
866 SubExprs[BASE] = base;
872 :
Expr(ObjCSubscriptRefExprClass,
Empty) {}
890 return GetAtIndexMethodDecl;
894 return SetAtIndexMethodDecl;
910 return T->getStmtClass() == ObjCSubscriptRefExprClass;
945 private llvm::TrailingObjects<ObjCMessageExpr, void *, SourceLocation> {
968 enum { NumArgsBitWidth = 16 };
972 unsigned NumArgs : NumArgsBitWidth;
986 LLVM_PREFERRED_TYPE(
bool)
987 unsigned HasMethod : 1;
991 LLVM_PREFERRED_TYPE(
bool)
992 unsigned IsDelegateInitCall : 1;
996 LLVM_PREFERRED_TYPE(
bool)
997 unsigned IsImplicit : 1;
1002 unsigned SelLocsKind : 2;
1006 SourceLocation SuperLoc;
1010 SourceLocation LBracLoc, RBracLoc;
1012 ObjCMessageExpr(EmptyShell
Empty,
unsigned NumArgs)
1014 IsDelegateInitCall(
false), IsImplicit(
false), SelLocsKind(0) {
1015 setNumArgs(NumArgs);
1019 SourceLocation LBracLoc,
1020 SourceLocation SuperLoc,
1021 bool IsInstanceSuper,
1024 ArrayRef<SourceLocation> SelLocs,
1026 ObjCMethodDecl *Method,
1027 ArrayRef<Expr *> Args,
1028 SourceLocation RBracLoc,
1031 SourceLocation LBracLoc,
1032 TypeSourceInfo *Receiver,
1034 ArrayRef<SourceLocation> SelLocs,
1036 ObjCMethodDecl *Method,
1037 ArrayRef<Expr *> Args,
1038 SourceLocation RBracLoc,
1041 SourceLocation LBracLoc,
1044 ArrayRef<SourceLocation> SelLocs,
1046 ObjCMethodDecl *Method,
1047 ArrayRef<Expr *> Args,
1048 SourceLocation RBracLoc,
1051 size_t numTrailingObjects(OverloadToken<void *>)
const {
return NumArgs + 1; }
1053 void setNumArgs(
unsigned Num) {
1054 assert((Num >> NumArgsBitWidth) == 0 &&
"Num of args is out of range!");
1058 void initArgsAndSelLocs(ArrayRef<Expr *> Args,
1059 ArrayRef<SourceLocation> SelLocs,
1063 void *getReceiverPointer()
const {
return *getTrailingObjects<void *>(); }
1066 void setReceiverPointer(
void *
Value) {
1067 *getTrailingObjects<void *>() =
Value;
1074 bool hasStandardSelLocs()
const {
1080 SourceLocation *getStoredSelLocs() {
1081 return getTrailingObjects<SourceLocation>();
1083 const SourceLocation *getStoredSelLocs()
const {
1084 return getTrailingObjects<SourceLocation>();
1089 unsigned getNumStoredSelLocs()
const {
1090 if (hasStandardSelLocs())
1095 static ObjCMessageExpr *alloc(
const ASTContext &
C,
1096 ArrayRef<Expr *> Args,
1097 SourceLocation RBraceLoc,
1098 ArrayRef<SourceLocation> SelLocs,
1101 static ObjCMessageExpr *alloc(
const ASTContext &
C,
1103 unsigned NumStoredSelLocs);
1139 bool IsInstanceSuper,
1225 unsigned NumStoredSelLocs);
1262 return static_cast<Expr *
>(getReceiverPointer());
1274 setReceiverPointer(rec);
1281 return TSInfo->getType();
1296 setReceiverPointer(TSInfo);
1346 setReceiverPointer(
T.getAsOpaquePtr());
1353 SelectorOrMethod =
reinterpret_cast<uintptr_t>(S.getAsOpaquePtr());
1358 return reinterpret_cast<const ObjCMethodDecl *
>(SelectorOrMethod);
1372 SelectorOrMethod =
reinterpret_cast<uintptr_t>(MD);
1387 return reinterpret_cast<Expr **
>(getTrailingObjects<void *>() + 1);
1390 return reinterpret_cast<const Expr *
const *
>(getTrailingObjects<void *>() +
1396 assert(Arg < NumArgs &&
"Arg access out of range!");
1400 assert(Arg < NumArgs &&
"Arg access out of range!");
1406 assert(Arg < NumArgs &&
"Arg access out of range!");
1427 if (hasStandardSelLocs())
1432 return getStoredSelLocs()[Index];
1466 llvm::iterator_range<const_arg_iterator>
arguments()
const {
1473 return reinterpret_cast<Stmt **
>(
getArgs() + NumArgs);
1477 return reinterpret_cast<Stmt const * const*
>(
getArgs());
1481 return reinterpret_cast<Stmt const * const*
>(
getArgs() + NumArgs);
1485 return T->getStmtClass() == ObjCMessageExprClass;
1508 IsaMemberLoc(l), OpLoc(oploc), IsArrow(isarrow) {
1549 return T->getStmtClass() == ObjCIsaExprClass;
1584 :
Expr(ObjCIndirectCopyRestoreExprClass,
Empty) {}
1613 return Operand->getBeginLoc();
1616 return Operand->getEndLoc();
1624 return s->getStmtClass() == ObjCIndirectCopyRestoreExprClass;
1636 private llvm::TrailingObjects<ObjCBridgedCastExpr, CXXBaseSpecifier *> {
1640 friend TrailingObjects;
1653 LParenLoc(LParenLoc), BridgeKeywordLoc(BridgeKeywordLoc),
Kind(
Kind) {}
1679 return T->getStmtClass() == ObjCBridgedCastExprClass;
1699 VersionTuple VersionToCheck;
1706 VersionToCheck(VersionToCheck), AtLoc(AtLoc), RParen(RParen) {
1711 :
Expr(ObjCAvailabilityCheckExprClass, Shell) {}
1730 return T->getStmtClass() == ObjCAvailabilityCheckExprClass;
enum clang::sema::@1653::IndirectLocalPathEntry::EntryKind Kind
Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
Defines the clang::SourceLocation class and associated facilities.
Defines various enumerations that describe declaration and type specifiers.
C Language Family Type Representation.
__device__ __2f16 float __ockl_bool s
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
Reads an AST files chain containing the contents of a translation unit.
CastExpr - Base class for type casts, including both implicit casts (ImplicitCastExpr) and explicit c...
ExplicitCastExpr - An explicit cast written in the source code.
This represents one expression.
SourceLocation getExprLoc() const LLVM_READONLY
getExprLoc - Return the preferred location for the arrow when diagnosing a problem with a generic exp...
void setDependence(ExprDependence Deps)
Each concrete expr subclass is expected to compute its dependence and call this in the constructor.
ObjCArrayLiteral - used for objective-c array containers; as in: @["Hello", NSApp,...
Expr * getElement(unsigned Index)
getElement - Return the Element at the specified index.
const Expr *const * getElements() const
Retrieve elements of array of literals.
static ObjCArrayLiteral * CreateEmpty(const ASTContext &C, unsigned NumElements)
const_child_range children() const
SourceLocation getBeginLoc() const LLVM_READONLY
Expr ** getElements()
Retrieve elements of array of literals.
unsigned getNumElements() const
getNumElements - Return number of elements of objective-c array literal.
const Expr * getElement(unsigned Index) const
SourceRange getSourceRange() const LLVM_READONLY
ObjCMethodDecl * getArrayWithObjectsMethod() const
SourceLocation getEndLoc() const LLVM_READONLY
static bool classof(const Stmt *T)
A runtime availability query.
bool hasVersion() const
This may be '*', in which case this should fold to true.
const_child_range children() const
static bool classof(const Stmt *T)
ObjCAvailabilityCheckExpr(EmptyShell Shell)
SourceRange getSourceRange() const
SourceLocation getBeginLoc() const
SourceLocation getEndLoc() const
VersionTuple getVersion() const
ObjCAvailabilityCheckExpr(VersionTuple VersionToCheck, SourceLocation AtLoc, SourceLocation RParen, QualType Ty)
ObjCBoolLiteralExpr - Objective-C Boolean Literal.
SourceLocation getEndLoc() const LLVM_READONLY
void setLocation(SourceLocation L)
SourceLocation getBeginLoc() const LLVM_READONLY
SourceLocation getLocation() const
const_child_range children() const
ObjCBoolLiteralExpr(bool val, QualType Ty, SourceLocation l)
static bool classof(const Stmt *T)
ObjCBoolLiteralExpr(EmptyShell Empty)
ObjCBoxedExpr - used for generalized expression boxing.
const_arg_iterator arg_begin() const
const Expr * getSubExpr() const
SourceLocation getAtLoc() const
ObjCBoxedExpr(Expr *E, QualType T, ObjCMethodDecl *method, SourceRange R)
SourceRange getSourceRange() const LLVM_READONLY
static bool classof(const Stmt *T)
ObjCBoxedExpr(EmptyShell Empty)
const_child_range children() const
ObjCMethodDecl * getBoxingMethod() const
SourceLocation getBeginLoc() const LLVM_READONLY
const_arg_iterator arg_end() const
bool isExpressibleAsConstantInitializer() const
SourceLocation getEndLoc() const LLVM_READONLY
An Objective-C "bridged" cast expression, which casts between Objective-C pointers and C pointers,...
SourceLocation getEndLoc() const LLVM_READONLY
ObjCBridgedCastExpr(EmptyShell Shell)
Construct an empty Objective-C bridged cast.
StringRef getBridgeKindName() const
Retrieve the kind of bridge being performed as a string.
SourceLocation getLParenLoc() const
static bool classof(const Stmt *T)
SourceLocation getBridgeKeywordLoc() const
The location of the bridge keyword.
ObjCBridgeCastKind getBridgeKind() const
Determine which kind of bridge is being performed via this cast.
ObjCBridgedCastExpr(SourceLocation LParenLoc, ObjCBridgeCastKind Kind, CastKind CK, SourceLocation BridgeKeywordLoc, TypeSourceInfo *TSInfo, Expr *Operand)
SourceLocation getBeginLoc() const LLVM_READONLY
ObjCDictionaryLiteral - AST node to represent objective-c dictionary literals; as in:"name" : NSUserN...
static ObjCDictionaryLiteral * CreateEmpty(const ASTContext &C, unsigned NumElements, bool HasPackExpansions)
const_child_range children() const
unsigned getNumElements() const
getNumElements - Return number of elements of objective-c dictionary literal.
ObjCMethodDecl * getDictWithObjectsMethod() const
ObjCDictionaryElement getKeyValueElement(unsigned Index) const
SourceLocation getBeginLoc() const LLVM_READONLY
SourceLocation getEndLoc() const LLVM_READONLY
SourceRange getSourceRange() const LLVM_READONLY
static bool classof(const Stmt *T)
ObjCEncodeExpr, used for @encode in Objective-C.
void setEncodedTypeSourceInfo(TypeSourceInfo *EncType)
TypeSourceInfo * getEncodedTypeSourceInfo() const
const_child_range children() const
SourceLocation getBeginLoc() const LLVM_READONLY
SourceLocation getRParenLoc() const
void setRParenLoc(SourceLocation L)
static bool classof(const Stmt *T)
QualType getEncodedType() const
SourceLocation getEndLoc() const LLVM_READONLY
void setAtLoc(SourceLocation L)
ObjCEncodeExpr(QualType T, TypeSourceInfo *EncodedType, SourceLocation at, SourceLocation rp)
SourceLocation getAtLoc() const
ObjCEncodeExpr(EmptyShell Empty)
ObjCIndirectCopyRestoreExpr - Represents the passing of a function argument by indirect copy-restore ...
const Expr * getSubExpr() const
SourceLocation getEndLoc() const LLVM_READONLY
static bool classof(const Stmt *s)
bool shouldCopy() const
shouldCopy - True if we should do the 'copy' part of the copy-restore.
SourceLocation getExprLoc() const LLVM_READONLY
ObjCIndirectCopyRestoreExpr(Expr *operand, QualType type, bool shouldCopy)
const_child_range children() const
SourceLocation getBeginLoc() const LLVM_READONLY
Represents an ObjC class declaration.
ObjCIsaExpr - Represent X->isa and X.isa when X is an ObjC 'id' type.
SourceLocation getIsaMemberLoc() const
getMemberLoc - Return the location of the "member", in X->F, it is the location of 'F'.
ObjCIsaExpr(EmptyShell Empty)
Build an empty expression.
SourceLocation getOpLoc() const
void setIsaMemberLoc(SourceLocation L)
static bool classof(const Stmt *T)
SourceLocation getBaseLocEnd() const LLVM_READONLY
void setOpLoc(SourceLocation L)
SourceLocation getExprLoc() const LLVM_READONLY
SourceLocation getEndLoc() const LLVM_READONLY
const_child_range children() const
SourceLocation getBeginLoc() const LLVM_READONLY
ObjCIsaExpr(Expr *base, bool isarrow, SourceLocation l, SourceLocation oploc, QualType ty)
ObjCIvarDecl - Represents an ObjC instance variable.
ObjCIvarRefExpr - A reference to an ObjC instance variable.
SourceLocation getBeginLoc() const LLVM_READONLY
SourceLocation getLocation() const
SourceLocation getOpLoc() const
void setDecl(ObjCIvarDecl *d)
ObjCIvarRefExpr(EmptyShell Empty)
void setIsFreeIvar(bool A)
void setOpLoc(SourceLocation L)
SourceLocation getEndLoc() const LLVM_READONLY
const_child_range children() const
const ObjCIvarDecl * getDecl() const
const Expr * getBase() const
void setLocation(SourceLocation L)
static bool classof(const Stmt *T)
ObjCIvarRefExpr(ObjCIvarDecl *d, QualType t, SourceLocation l, SourceLocation oploc, Expr *base, bool arrow=false, bool freeIvar=false)
An expression that sends a message to the given Objective-C object or class.
const Expr * getArg(unsigned Arg) const
Expr * getArg(unsigned Arg)
getArg - Return the specified argument.
void getSelectorLocs(SmallVectorImpl< SourceLocation > &SelLocs) const
bool isImplicit() const
Indicates whether the message send was implicitly generated by the implementation.
llvm::iterator_range< const_arg_iterator > arguments() const
static ObjCMessageExpr * CreateEmpty(const ASTContext &Context, unsigned NumArgs, unsigned NumStoredSelLocs)
Create an empty Objective-C message expression, to be filled in by subsequent calls.
void setMethodDecl(ObjCMethodDecl *MD)
Expr ** getArgs()
Retrieve the arguments to this message, not including the receiver.
bool isDelegateInitCall() const
isDelegateInitCall - Answers whether this message send has been tagged as a "delegate init call",...
ObjCMethodDecl * getMethodDecl()
void setClassReceiver(TypeSourceInfo *TSInfo)
void setInstanceReceiver(Expr *rec)
Turn this message send into an instance message that computes the receiver object with the given expr...
const_arg_iterator arg_end() const
SourceLocation getBeginLoc() const LLVM_READONLY
void setSuper(SourceLocation Loc, QualType T, bool IsInstanceSuper)
SourceLocation getLeftLoc() const
Expr * getInstanceReceiver()
Returns the object expression (receiver) for an instance message, or null for a message that is not a...
QualType getCallReturnType(ASTContext &Ctx) const
SourceLocation getSuperLoc() const
Retrieve the location of the 'super' keyword for a class or instance message to 'super',...
ObjCMethodFamily getMethodFamily() const
Selector getSelector() const
ReceiverKind
The kind of receiver this message is sending to.
@ SuperInstance
The receiver is the instance of the superclass object.
@ Instance
The receiver is an object instance.
@ SuperClass
The receiver is a superclass.
@ Class
The receiver is a class.
TypeSourceInfo * getClassReceiverTypeInfo() const
Returns a type-source information of a class message send, or nullptr if the message is not a class m...
QualType getClassReceiver() const
Returns the type of a class message send, or NULL if the message is not a class message.
void setDelegateInitCall(bool isDelegate)
bool isInstanceMessage() const
Determine whether this is an instance message to either a computed object or to super.
llvm::iterator_range< arg_iterator > arguments()
ObjCInterfaceDecl * getReceiverInterface() const
Retrieve the Objective-C interface to which this message is being directed, if known.
QualType getSuperType() const
Retrieve the type referred to by 'super'.
const ObjCMethodDecl * getMethodDecl() const
SourceRange getReceiverRange() const
Source range of the receiver.
bool isClassMessage() const
Determine whether this is an class message to either a specified class or to super.
const Expr * getInstanceReceiver() const
unsigned getNumSelectorLocs() const
const Expr *const * getArgs() const
ReceiverKind getReceiverKind() const
Determine the kind of receiver that this message is being sent to.
SourceLocation getEndLoc() const LLVM_READONLY
QualType getReceiverType() const
Retrieve the receiver type to which this message is being directed.
SourceLocation getSelectorLoc(unsigned Index) const
SourceLocation getSelectorStartLoc() const
static bool classof(const Stmt *T)
void setSourceRange(SourceRange R)
SourceLocation getRightLoc() const
unsigned getNumArgs() const
Return the number of actual arguments in this message, not counting the receiver.
void setSelector(Selector S)
void setArg(unsigned Arg, Expr *ArgExpr)
setArg - Set the specified argument.
const_arg_iterator arg_begin() const
ObjCMethodDecl - Represents an instance or class method declaration.
Selector getSelector() const
ObjCMethodFamily getMethodFamily() const
Determines the family of this method.
Represents one property declaration in an Objective-C interface.
Selector getSetterName() const
Selector getGetterName() const
ObjCPropertyRefExpr - A dot-syntax expression to access an ObjC property.
bool isMessagingGetter() const
True if the property reference will result in a message to the getter.
ObjCPropertyDecl * getExplicitProperty() const
Selector getSetterSelector() const
bool isMessagingSetter() const
True if the property reference will result in a message to the setter.
ObjCMethodDecl * getImplicitPropertyGetter() const
ObjCPropertyRefExpr(ObjCMethodDecl *Getter, ObjCMethodDecl *Setter, QualType T, ExprValueKind VK, ExprObjectKind OK, SourceLocation IdLoc, SourceLocation ReceiverLoc, ObjCInterfaceDecl *Receiver)
ObjCPropertyRefExpr(ObjCMethodDecl *Getter, ObjCMethodDecl *Setter, QualType T, ExprValueKind VK, ExprObjectKind OK, SourceLocation IdLoc, Expr *Base)
void setIsMessagingSetter(bool val=true)
SourceLocation getReceiverLocation() const
const Expr * getBase() const
const_child_range children() const
static bool classof(const Stmt *T)
bool isObjectReceiver() const
bool isExplicitProperty() const
SourceLocation getBeginLoc() const LLVM_READONLY
void setIsMessagingGetter(bool val=true)
QualType getSuperReceiverType() const
bool isImplicitProperty() const
SourceLocation getEndLoc() const LLVM_READONLY
ObjCMethodDecl * getImplicitPropertySetter() const
ObjCInterfaceDecl * getClassReceiver() const
SourceLocation getLocation() const
ObjCPropertyRefExpr(ObjCPropertyDecl *PD, QualType t, ExprValueKind VK, ExprObjectKind OK, SourceLocation l, Expr *base)
ObjCPropertyRefExpr(ObjCMethodDecl *Getter, ObjCMethodDecl *Setter, QualType T, ExprValueKind VK, ExprObjectKind OK, SourceLocation IdLoc, SourceLocation SuperLoc, QualType SuperTy)
Selector getGetterSelector() const
ObjCPropertyRefExpr(EmptyShell Empty)
QualType getReceiverType(const ASTContext &ctx) const
Determine the type of the base, regardless of the kind of receiver.
ObjCPropertyRefExpr(ObjCPropertyDecl *PD, QualType t, ExprValueKind VK, ExprObjectKind OK, SourceLocation l, SourceLocation sl, QualType st)
bool isClassReceiver() const
bool isSuperReceiver() const
Represents an Objective-C protocol declaration.
ObjCProtocolExpr used for protocol expression in Objective-C.
SourceLocation getBeginLoc() const LLVM_READONLY
ObjCProtocolDecl * getProtocol() const
ObjCProtocolExpr(QualType T, ObjCProtocolDecl *protocol, SourceLocation at, SourceLocation protoLoc, SourceLocation rp)
SourceLocation getProtocolIdLoc() const
const_child_range children() const
void setProtocol(ObjCProtocolDecl *P)
void setRParenLoc(SourceLocation L)
void setAtLoc(SourceLocation L)
SourceLocation getRParenLoc() const
static bool classof(const Stmt *T)
SourceLocation getAtLoc() const
ObjCProtocolExpr(EmptyShell Empty)
SourceLocation getEndLoc() const LLVM_READONLY
ObjCSelectorExpr used for @selector in Objective-C.
static bool classof(const Stmt *T)
SourceLocation getBeginLoc() const LLVM_READONLY
void setSelector(Selector S)
unsigned getNumArgs() const
getNumArgs - Return the number of actual arguments to this call.
ObjCSelectorExpr(EmptyShell Empty)
ObjCSelectorExpr(QualType T, Selector selInfo, SourceLocation at, SourceLocation rp)
void setAtLoc(SourceLocation L)
SourceLocation getRParenLoc() const
const_child_range children() const
Selector getSelector() const
SourceLocation getEndLoc() const LLVM_READONLY
void setRParenLoc(SourceLocation L)
SourceLocation getAtLoc() const
ObjCStringLiteral, used for Objective-C string literals i.e.
SourceLocation getEndLoc() const LLVM_READONLY
const StringLiteral * getString() const
SourceLocation getAtLoc() const
void setAtLoc(SourceLocation L)
void setString(StringLiteral *S)
const_child_range children() const
ObjCStringLiteral(EmptyShell Empty)
static bool classof(const Stmt *T)
StringLiteral * getString()
SourceLocation getBeginLoc() const LLVM_READONLY
ObjCStringLiteral(StringLiteral *SL, QualType T, SourceLocation L)
ObjCSubscriptRefExpr - used for array and dictionary subscripting.
SourceLocation getBeginLoc() const LLVM_READONLY
Expr * getKeyExpr() const
SourceLocation getEndLoc() const LLVM_READONLY
void setRBracket(SourceLocation RB)
bool isArraySubscriptRefExpr() const
ObjCSubscriptRefExpr(EmptyShell Empty)
ObjCSubscriptRefExpr(Expr *base, Expr *key, QualType T, ExprValueKind VK, ExprObjectKind OK, ObjCMethodDecl *getMethod, ObjCMethodDecl *setMethod, SourceLocation RB)
static bool classof(const Stmt *T)
void setBaseExpr(Stmt *S)
Expr * getBaseExpr() const
const_child_range children() const
ObjCMethodDecl * getAtIndexMethodDecl() const
SourceLocation getRBracket() const
ObjCMethodDecl * setAtIndexMethodDecl() const
A (possibly-)qualified type.
static QualType getFromOpaquePtr(const void *Ptr)
Smart pointer class that efficiently represents Objective-C method names.
ObjCMethodFamily getMethodFamily() const
Derive the conventional family of this method.
bool isUnarySelector() const
unsigned getNumArgs() const
Encodes a location in the source.
bool isValid() const
Return true if this is a valid SourceLocation object.
A trivial tuple used to represent a source range.
SourceLocation getEnd() const
SourceLocation getBegin() const
Stmt - This represents one statement.
SourceLocation getEndLoc() const LLVM_READONLY
StmtIterator child_iterator
Child Iterators: All subclasses must implement 'children' to permit easy iteration over the substatem...
ConstCastIterator< Expr > ConstExprIterator
llvm::iterator_range< child_iterator > child_range
ConstStmtIterator const_child_iterator
ObjCIndirectCopyRestoreExprBitfields ObjCIndirectCopyRestoreExprBits
SourceLocation getBeginLoc() const LLVM_READONLY
llvm::iterator_range< const_child_iterator > const_child_range
CastIterator< Expr > ExprIterator
StringLiteral - This represents a string literal expression, e.g.
A container of type source information.
QualType getType() const
Return the type wrapped by this type source info.
The base class of the type hierarchy.
bool isSpecificPlaceholderType(unsigned K) const
Test for a specific placeholder type.
bool isIntegralOrEnumerationType() const
Determine whether this type is an integral or enumeration type.
const internal::VariadicAllOfMatcher< Type > type
Matches Types in the clang AST.
The JSON file list parser is used to communicate input to InstallAPI.
@ Create
'create' clause, allowed on Compute and Combined constructs, plus 'data', 'enter data',...
SelectorLocationsKind
Whether all locations of the selector identifiers are in a "standard" position.
@ SelLoc_StandardWithSpace
For nullary selectors, immediately before the end: "[foo release]" / "-(void)release;" Or with a spac...
@ SelLoc_NonStandard
Non-standard.
ExprObjectKind
A further classification of the kind of object referenced by an l-value or x-value.
@ OK_Ordinary
An ordinary object is located at an address in memory.
@ OK_BitField
A bitfield object is a bitfield on a C or C++ record.
ExprDependence computeDependence(FullExpr *E)
ObjCMethodFamily
A family of Objective-C methods.
@ Result
The result type of a method or function.
ObjCBridgeCastKind
The kind of bridging performed by the Objective-C bridge cast.
CastKind
CastKind - The kind of operation required for a conversion.
SourceLocation getStandardSelectorLoc(unsigned Index, Selector Sel, bool WithArgSpace, ArrayRef< Expr * > Args, SourceLocation EndLoc)
Get the "standard" location of a selector identifier, e.g: For nullary selectors, immediately before ...
ExprValueKind
The categorization of expression values, currently following the C++11 scheme.
@ VK_PRValue
A pr-value expression (in the C++11 taxonomy) produces a temporary value.
@ VK_LValue
An l-value expression is a reference to an object with independent storage.
const FunctionProtoType * T
__UINTPTR_TYPE__ uintptr_t
An unsigned integer type with the property that any valid pointer to void can be converted to this ty...
An element in an Objective-C dictionary literal.
Expr * Value
The value of the dictionary element.
bool isPackExpansion() const
Determines whether this dictionary element is a pack expansion.
SourceLocation EllipsisLoc
The location of the ellipsis, if this is a pack expansion.
std::optional< unsigned > NumExpansions
The number of elements this pack expansion will expand to, if this is a pack expansion and is known.
Expr * Key
The key for the dictionary element.
Internal struct to describes an element that is a pack expansion, used if any of the elements in the ...
SourceLocation EllipsisLoc
The location of the ellipsis, if this element is a pack expansion.
unsigned NumExpansionsPlusOne
If non-zero, the number of elements that this pack expansion will expand to (+1).
Internal struct for storing Key/value pair.
Iterator for iterating over Stmt * arrays that contain only T *.
A placeholder type used to construct an empty shell of a type, that will be filled in later (e....