Home | History | Annotate | Download | only in AST

Lines Matching refs:Expr

10 // This file implements Expr::classify.
14 #include "clang/AST/Expr.h"
24 typedef Expr::Classification Cl;
26 static Cl::Kinds ClassifyInternal(ASTContext &Ctx, const Expr *E);
32 const Expr *trueExpr,
33 const Expr *falseExpr);
34 static Cl::ModifiableType IsModifiable(ASTContext &Ctx, const Expr *E,
37 Cl Expr::ClassifyImpl(ASTContext &Ctx, SourceLocation *Loc) const {
89 const Expr *E,
102 static Cl::Kinds ClassifyInternal(ASTContext &Ctx, const Expr *E) {
109 #define STMT(Kind, Base) case Expr::Kind##Class:
110 #define EXPR(Kind, Base)
115 case Expr::ObjCIsaExprClass:
116 // C++ [expr.prim.general]p1: A string literal is an lvalue.
117 case Expr::StringLiteralClass:
119 case Expr::ObjCEncodeExprClass:
121 case Expr::PredefinedExprClass:
123 case Expr::ObjCSubscriptRefExprClass:
124 case Expr::ObjCPropertyRefExprClass:
125 // C++ [expr.typeid]p1: The result of a typeid expression is an lvalue of...
126 case Expr::CXXTypeidExprClass:
129 case Expr::UnresolvedLookupExprClass:
130 case Expr::UnresolvedMemberExprClass:
131 case Expr::TypoExprClass:
132 case Expr::CXXDependentScopeMemberExprClass:
133 case Expr::DependentScopeDeclRefExprClass:
136 case Expr::ObjCIvarRefExprClass:
137 case Expr::FunctionParmPackExprClass:
138 case Expr::MSPropertyRefExprClass:
139 case Expr::MSPropertySubscriptExprClass:
140 case Expr::OMPArraySectionExprClass:
145 case Expr::CompoundLiteralExprClass:
150 case Expr::CXXBoolLiteralExprClass:
151 case Expr::CXXPseudoDestructorExprClass:
152 case Expr::UnaryExprOrTypeTraitExprClass:
153 case Expr::CXXNewExprClass:
154 case Expr::CXXThisExprClass:
155 case Expr::CXXNullPtrLiteralExprClass:
156 case Expr::ImaginaryLiteralClass:
157 case Expr::GNUNullExprClass:
158 case Expr::OffsetOfExprClass:
159 case Expr::CXXThrowExprClass:
160 case Expr::ShuffleVectorExprClass:
161 case Expr::ConvertVectorExprClass:
162 case Expr::IntegerLiteralClass:
163 case Expr::CharacterLiteralClass:
164 case Expr::AddrLabelExprClass:
165 case Expr::CXXDeleteExprClass:
166 case Expr::ImplicitValueInitExprClass:
167 case Expr::BlockExprClass:
168 case Expr::FloatingLiteralClass:
169 case Expr::CXXNoexceptExprClass:
170 case Expr::CXXScalarValueInitExprClass:
171 case Expr::TypeTraitExprClass:
172 case Expr::ArrayTypeTraitExprClass:
173 case Expr::ExpressionTraitExprClass:
174 case Expr::ObjCSelectorExprClass:
175 case Expr::ObjCProtocolExprClass:
176 case Expr::ObjCStringLiteralClass:
177 case Expr::ObjCBoxedExprClass:
178 case Expr::ObjCArrayLiteralClass:
179 case Expr::ObjCDictionaryLiteralClass:
180 case Expr::ObjCBoolLiteralExprClass:
181 case Expr::ParenListExprClass:
182 case Expr::SizeOfPackExprClass:
183 case Expr::SubstNonTypeTemplateParmPackExprClass:
184 case Expr::AsTypeExprClass:
185 case Expr::ObjCIndirectCopyRestoreExprClass:
186 case Expr::AtomicExprClass:
187 case Expr::CXXFoldExprClass:
188 case Expr::NoInitExprClass:
189 case Expr::DesignatedInitUpdateExprClass:
190 case Expr::CoyieldExprClass:
194 case Expr::SubstNonTypeTemplateParmExprClass:
198 // C++ [expr.sub]p1: The result is an lvalue of type "T".
200 case Expr::ArraySubscriptExprClass:
205 // C++ [expr.prim.general]p3: The result is an lvalue if the entity is a
207 case Expr::DeclRefExprClass:
214 case Expr::MemberExprClass:
217 case Expr::UnaryOperatorClass:
219 // C++ [expr.unary.op]p1: The unary * operator performs indirection:
233 const Expr *Op = cast<UnaryOperator>(E)->getSubExpr()->IgnoreParens();
242 // C++ [expr.pre.incr]p1: The result is the updated operand; it is an
253 case Expr::OpaqueValueExprClass:
257 case Expr::PseudoObjectExprClass:
263 case Expr::ImplicitCastExprClass:
266 // C++ [expr.prim.general]p4: The presence of parentheses does not affect
268 case Expr::ParenExprClass:
274 case Expr::GenericSelectionExprClass:
279 case Expr::BinaryOperatorClass:
280 case Expr::CompoundAssignOperatorClass:
286 case Expr::CallExprClass:
287 case Expr::CXXOperatorCallExprClass:
288 case Expr::CXXMemberCallExprClass:
289 case Expr::UserDefinedLiteralClass:
290 case Expr::CUDAKernelCallExprClass:
294 case Expr::ChooseExprClass:
299 case Expr::ExtVectorElementExprClass:
307 case Expr::CXXDefaultArgExprClass:
311 case Expr::CXXDefaultInitExprClass:
315 case Expr::CXXBindTemporaryExprClass:
319 case Expr::ExprWithCleanupsClass:
323 case Expr::CStyleCastExprClass:
324 case Expr::CXXFunctionalCastExprClass:
325 case Expr::CXXStaticCastExprClass:
326 case Expr::CXXDynamicCastExprClass:
327 case Expr::CXXReinterpretCastExprClass:
328 case Expr::CXXConstCastExprClass:
329 case Expr::ObjCBridgedCastExprClass:
334 case Expr::CXXUnresolvedConstructExprClass:
338 case Expr::BinaryConditionalOperatorClass: {
344 case Expr::ConditionalOperatorClass: {
353 case Expr::ObjCMessageExprClass:
362 case Expr::CXXConstructExprClass:
363 case Expr::CXXInheritedCtorInitExprClass:
364 case Expr::CXXTemporaryObjectExprClass:
365 case Expr::LambdaExprClass:
366 case Expr::CXXStdInitializerListExprClass:
369 case Expr::VAArgExprClass:
372 case Expr::DesignatedInitExprClass:
375 case Expr::StmtExprClass: {
377 if (const Expr *LastExpr = dyn_cast_or_null<Expr>(S->body_back()))
382 case Expr::CXXUuidofExprClass:
385 case Expr::PackExpansionExprClass:
388 case Expr::MaterializeTemporaryExprClass:
393 case Expr::InitListExprClass:
404 case Expr::CoawaitExprClass:
414 // C++ [expr.prim.general]p6: The result is an lvalue if the entity is a
445 // C++ [expr.call]p10: A function call is an lvalue if the result type is an
471 Expr *Base = E->getBase()->IgnoreParens();
478 // C++ [expr.ref]p3: E1->E2 is converted to the equivalent form (*(E1)).E2.
479 // C++ [expr.ref]p4: If E2 is declared to have type "reference to T", then
497 Expr *Base = E->getBase()->IgnoreParenImpCasts();
518 // C++ [expr.ass]p1: All [...] return an lvalue referring to the left operand.
524 // C++ [expr.comma]p1: the result is of the same value category as its right
529 // C++ [expr.mptr.oper]p6: The result of a .* expression whose second operand
538 // C++ [expr.mptr.oper]p6: The result of an ->* expression is an lvalue if its
550 static Cl::Kinds ClassifyConditional(ASTContext &Ctx, const Expr *True,
551 const Expr *False) {
555 // C++ [expr.cond]p2
564 if (const Expr *NonThrow = TrueIsThrow ? (FalseIsThrow ? nullptr : False)
573 // according to [expr.cond]p3.
574 // C++ [expr.cond]p4: If the second and third operands are glvalues of the
576 // C++ [expr.cond]p5: Otherwise, the result is a prvalue.
582 static Cl::ModifiableType IsModifiable(ASTContext &Ctx, const Expr *E,
607 if (const ObjCPropertyRefExpr *Expr = dyn_cast<ObjCPropertyRefExpr>(E)) {
608 if (Expr->isImplicitProperty() &&
609 Expr->getImplicitPropertySetter() == nullptr)
635 Expr::LValueClassification Expr::ClassifyLValue(ASTContext &Ctx) const {
654 Expr::isModifiableLvalueResult
655 Expr::isModifiableLvalue(ASTContext &Ctx, SourceLocation *Loc) const {