Lines Matching defs:Ctx
26 static Cl::Kinds ClassifyInternal(ASTContext &Ctx, const Expr *E);
27 static Cl::Kinds ClassifyDecl(ASTContext &Ctx, const Decl *D);
28 static Cl::Kinds ClassifyUnnamed(ASTContext &Ctx, QualType T);
29 static Cl::Kinds ClassifyMemberExpr(ASTContext &Ctx, const MemberExpr *E);
30 static Cl::Kinds ClassifyBinaryOp(ASTContext &Ctx, const BinaryOperator *E);
31 static Cl::Kinds ClassifyConditional(ASTContext &Ctx,
34 static Cl::ModifiableType IsModifiable(ASTContext &Ctx, const Expr *E,
37 Cl Expr::ClassifyImpl(ASTContext &Ctx, SourceLocation *Loc) const {
40 Cl::Kinds kind = ClassifyInternal(Ctx, this);
43 if (!Ctx.getLangOpts().CPlusPlus) {
45 if (TR->isFunctionType() || TR == Ctx.OverloadTy)
78 modifiable = IsModifiable(Ctx, this, kind, *Loc);
108 static Cl::Kinds ClassifyInternal(ASTContext &Ctx, const Expr *E) {
110 const LangOptions &Lang = Ctx.getLangOpts();
163 return SL ? ClassifyInternal(Ctx, SL) : Cl::CL_LValue;
232 return ClassifyInternal(Ctx, cast<ConstantExpr>(E)->getSubExpr());
236 return ClassifyInternal(Ctx,
244 return ClassifyInternal(Ctx, cast<PackIndexingExpr>(E)->getSelectedExpr());
253 return ClassifyInternal(Ctx, cast<ArraySubscriptExpr>(E)->getBase());
259 return ClassifyInternal(Ctx, Base);
265 return ClassifyInternal(Ctx, cast<MatrixSubscriptExpr>(E)->getBase());
270 if (E->getType() == Ctx.UnknownAnyTy)
273 return ClassifyDecl(Ctx, cast<DeclRefExpr>(E)->getDecl());
277 return ClassifyMemberExpr(Ctx, cast<MemberExpr>(E));
289 return ClassifyInternal(Ctx, cast<UnaryOperator>(E)->getSubExpr());
296 Cl::Kinds K = ClassifyInternal(Ctx, Op);
332 return ClassifyInternal(Ctx, cast<ParenExpr>(E)->getSubExpr());
340 return ClassifyInternal(Ctx,cast<GenericSelectionExpr>(E)->getResultExpr());
346 return ClassifyBinaryOp(Ctx, cast<BinaryOperator>(E));
354 return ClassifyUnnamed(Ctx, cast<CallExpr>(E)->getCallReturnType(Ctx));
358 Ctx, cast<CXXRewrittenBinaryOperator>(E)->getSemanticForm());
362 return ClassifyInternal(Ctx, cast<ChooseExpr>(E)->getChosenSubExpr());
371 return ClassifyInternal(Ctx, cast<ExtVectorElementExpr>(E)->getBase());
375 return ClassifyInternal(Ctx, cast<CXXDefaultArgExpr>(E)->getExpr());
379 return ClassifyInternal(Ctx, cast<CXXDefaultInitExpr>(E)->getExpr());
383 return ClassifyInternal(Ctx, cast<CXXBindTemporaryExpr>(E)->getSubExpr());
387 return ClassifyInternal(Ctx, cast<ExprWithCleanups>(E)->getSubExpr());
401 return ClassifyUnnamed(Ctx, cast<ExplicitCastExpr>(E)->getTypeAsWritten());
404 return ClassifyUnnamed(Ctx,
410 return ClassifyConditional(Ctx, co->getTrueExpr(), co->getFalseExpr());
417 return ClassifyConditional(Ctx, co->getTrueExpr(), co->getFalseExpr());
425 Cl::Kinds kind = ClassifyUnnamed(Ctx, Method->getReturnType());
439 return ClassifyUnnamed(Ctx, E->getType());
442 return ClassifyInternal(Ctx, cast<DesignatedInitExpr>(E)->getInit());
447 return ClassifyUnnamed(Ctx, LastExpr->getType());
452 return ClassifyInternal(Ctx, cast<PackExpansionExpr>(E)->getPattern());
457 Ctx, cast<ResolvedUnexpandedPackExpr>(E)->getExpansion(0));
475 return ClassifyInternal(Ctx, cast<InitListExpr>(E)->getInit(0));
479 return ClassifyInternal(Ctx, cast<CoroutineSuspendExpr>(E)->getResumeExpr());
496 static Cl::Kinds ClassifyDecl(ASTContext &Ctx, const Decl *D) {
521 (Ctx.getLangOpts().CPlusPlus &&
530 static Cl::Kinds ClassifyUnnamed(ASTContext &Ctx, QualType T) {
532 if (!Ctx.getLangOpts().CPlusPlus) return Cl::CL_PRValue;
547 static Cl::Kinds ClassifyMemberExpr(ASTContext &Ctx, const MemberExpr *E) {
548 if (E->getType() == Ctx.UnknownAnyTy)
553 if (!Ctx.getLangOpts().CPlusPlus) {
563 return ClassifyInternal(Ctx, Base);
589 return ClassifyInternal(Ctx, E->getBase());
609 static Cl::Kinds ClassifyBinaryOp(ASTContext &Ctx, const BinaryOperator *E) {
610 assert(Ctx.getLangOpts().CPlusPlus &&
621 return ClassifyInternal(Ctx, E->getRHS());
630 : ClassifyInternal(Ctx, E->getLHS());
644 static Cl::Kinds ClassifyConditional(ASTContext &Ctx, const Expr *True,
646 assert(Ctx.getLangOpts().CPlusPlus &&
660 return ClassifyInternal(Ctx, NonThrow);
671 Cl::Kinds LCl = ClassifyInternal(Ctx, True),
672 RCl = ClassifyInternal(Ctx, False);
676 static Cl::ModifiableType IsModifiable(ASTContext &Ctx, const Expr *E,
695 if (Ctx.getLangOpts().CPlusPlus && E->getType()->isFunctionType())
706 CanQualType CT = Ctx.getCanonicalType(E->getType());
710 if (Ctx.getLangOpts().OpenCL &&
716 !(Ctx.getLangOpts().HLSL && CT->isConstantArrayType()))
730 Expr::LValueClassification Expr::ClassifyLValue(ASTContext &Ctx) const {
731 Classification VC = Classify(Ctx);
750 Expr::isModifiableLvalue(ASTContext &Ctx, SourceLocation *Loc) const {
752 Classification VC = ClassifyModifiable(Ctx, Loc ? *Loc : dummy);