20 #include "llvm/ADT/SmallVector.h"
21 #include "llvm/Support/ErrorHandling.h"
26 using namespace clang;
31 NumElements(Elements.size()),
Range(SR), ArrayWithObjectsMethod(Method) {
32 Expr **SaveElements = getElements();
33 for (
unsigned I = 0, N = Elements.size(); I != N; ++I)
34 SaveElements[I] = Elements[I];
43 void *Mem =
C.Allocate(totalSizeToAlloc<Expr *>(Elements.size()));
48 unsigned NumElements) {
49 void *Mem =
C.Allocate(totalSizeToAlloc<Expr *>(NumElements));
58 NumElements(VK.size()), HasPackExpansions(HasPackExpansions), Range(SR),
59 DictWithObjectsMethod(method) {
60 KeyValuePair *KeyValues = getTrailingObjects<KeyValuePair>();
61 ExpansionData *Expansions =
62 HasPackExpansions ? getTrailingObjects<ExpansionData>() : nullptr;
63 for (
unsigned I = 0; I < NumElements; I++) {
64 KeyValues[I].Key = VK[I].Key;
65 KeyValues[I].Value = VK[I].Value;
67 Expansions[I].EllipsisLoc = VK[I].EllipsisLoc;
68 if (VK[I].NumExpansions)
69 Expansions[I].NumExpansionsPlusOne = *VK[I].NumExpansions + 1;
71 Expansions[I].NumExpansionsPlusOne = 0;
82 void *Mem =
C.Allocate(totalSizeToAlloc<KeyValuePair, ExpansionData>(
83 VK.size(), HasPackExpansions ? VK.size() : 0));
89 bool HasPackExpansions) {
90 void *Mem =
C.Allocate(totalSizeToAlloc<KeyValuePair, ExpansionData>(
91 NumElements, HasPackExpansions ? NumElements : 0));
116 reinterpret_cast<
uintptr_t>(Method ? Method : Sel.getAsOpaquePtr())),
117 Kind(IsInstanceSuper ? SuperInstance : SuperClass),
118 HasMethod(Method != nullptr), IsDelegateInitCall(
false),
119 IsImplicit(isImplicit), SuperLoc(SuperLoc), LBracLoc(LBracLoc),
121 initArgsAndSelLocs(Args, SelLocs, SelLocsK);
135 reinterpret_cast<
uintptr_t>(Method ? Method : Sel.getAsOpaquePtr())),
136 Kind(Class), HasMethod(Method != nullptr), IsDelegateInitCall(
false),
137 IsImplicit(isImplicit), LBracLoc(LBracLoc), RBracLoc(RBracLoc) {
138 initArgsAndSelLocs(Args, SelLocs, SelLocsK);
139 setReceiverPointer(Receiver);
151 reinterpret_cast<
uintptr_t>(Method ? Method : Sel.getAsOpaquePtr())),
152 Kind(Instance), HasMethod(Method != nullptr), IsDelegateInitCall(
false),
153 IsImplicit(isImplicit), LBracLoc(LBracLoc), RBracLoc(RBracLoc) {
154 initArgsAndSelLocs(Args, SelLocs, SelLocsK);
155 setReceiverPointer(Receiver);
162 setNumArgs(Args.size());
164 for (
unsigned I = 0; I != Args.size(); ++I)
167 SelLocsKind = SelLocsK;
170 std::copy(SelLocs.begin(), SelLocs.end(), getStoredSelLocs());
182 "No selector locs for non-implicit message");
186 Mem = alloc(Context, Args.size(), 0);
188 Mem = alloc(Context, Args, RBracLoc, SelLocs, Sel, SelLocsK);
189 return new (Mem)
ObjCMessageExpr(T, VK, LBracLoc, SuperLoc, IsInstanceSuper,
190 SuperType, Sel, SelLocs, SelLocsK, Method,
201 "No selector locs for non-implicit message");
205 Mem = alloc(Context, Args.size(), 0);
207 Mem = alloc(Context, Args, RBracLoc, SelLocs, Sel, SelLocsK);
209 ObjCMessageExpr(T, VK, LBracLoc, Receiver, Sel, SelLocs, SelLocsK, Method,
220 "No selector locs for non-implicit message");
224 Mem = alloc(Context, Args.size(), 0);
226 Mem = alloc(Context, Args, RBracLoc, SelLocs, Sel, SelLocsK);
228 ObjCMessageExpr(T, VK, LBracLoc, Receiver, Sel, SelLocs, SelLocsK, Method,
234 unsigned NumStoredSelLocs) {
246 unsigned NumStoredSelLocs =
248 return alloc(
C, Args.size(), NumStoredSelLocs);
252 unsigned NumStoredSelLocs) {
254 totalSizeToAlloc<void *, SourceLocation>(NumArgs + 1, NumStoredSelLocs),
290 llvm_unreachable(
"Invalid ReceiverKind!");
311 llvm_unreachable(
"unexpected receiver kind");
318 return Ptr->getInterfaceDecl();
321 return Ty->getInterface();
329 begin =
reinterpret_cast<Stmt **
>(getTrailingObjects<void *>());
346 return "__bridge_transfer";
348 return "__bridge_retained";
351 llvm_unreachable(
"Invalid BridgeKind!");