Lines Matching refs: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)
72 modifiable = IsModifiable(Ctx, this, kind, *Loc);
102 static Cl::Kinds ClassifyInternal(ASTContext &Ctx, const Expr *E) {
104 const LangOptions &Lang = Ctx.getLangOpts();
143 return Ctx.getLangOpts().CPlusPlus ? ClassifyTemporary(E->getType())
188 return ClassifyInternal(Ctx,
195 return ClassifyInternal(Ctx, cast<ArraySubscriptExpr>(E)->getBase());
201 if (E->getType() == Ctx.UnknownAnyTy)
204 return ClassifyDecl(Ctx, cast<DeclRefExpr>(E)->getDecl());
208 return ClassifyMemberExpr(Ctx, cast<MemberExpr>(E));
220 return ClassifyInternal(Ctx, cast<UnaryOperator>(E)->getSubExpr());
227 Cl::Kinds K = ClassifyInternal(Ctx, Op);
262 return ClassifyInternal(Ctx, cast<ParenExpr>(E)->getSubExpr());
270 return ClassifyInternal(Ctx,cast<GenericSelectionExpr>(E)->getResultExpr());
276 return ClassifyBinaryOp(Ctx, cast<BinaryOperator>(E));
284 return ClassifyUnnamed(Ctx, cast<CallExpr>(E)->getCallReturnType());
288 return ClassifyInternal(Ctx, cast<ChooseExpr>(E)->getChosenSubExpr());
297 return ClassifyInternal(Ctx, cast<ExtVectorElementExpr>(E)->getBase());
301 return ClassifyInternal(Ctx, cast<CXXDefaultArgExpr>(E)->getExpr());
305 return ClassifyInternal(Ctx, cast<CXXDefaultInitExpr>(E)->getExpr());
309 return ClassifyInternal(Ctx, cast<CXXBindTemporaryExpr>(E)->getSubExpr());
313 return ClassifyInternal(Ctx, cast<ExprWithCleanups>(E)->getSubExpr());
325 return ClassifyUnnamed(Ctx, cast<ExplicitCastExpr>(E)->getTypeAsWritten());
328 return ClassifyUnnamed(Ctx,
334 return ClassifyConditional(Ctx, co->getTrueExpr(), co->getFalseExpr());
341 return ClassifyConditional(Ctx, co->getTrueExpr(), co->getFalseExpr());
349 Cl::Kinds kind = ClassifyUnnamed(Ctx, Method->getReturnType());
362 return ClassifyUnnamed(Ctx, E->getType());
365 return ClassifyInternal(Ctx, cast<DesignatedInitExpr>(E)->getInit());
370 return ClassifyUnnamed(Ctx, LastExpr->getType());
378 return ClassifyInternal(Ctx, cast<PackExpansionExpr>(E)->getPattern());
394 return ClassifyInternal(Ctx, cast<InitListExpr>(E)->getInit(0));
402 static Cl::Kinds ClassifyDecl(ASTContext &Ctx, const Decl *D) {
420 (Ctx.getLangOpts().CPlusPlus &&
429 static Cl::Kinds ClassifyUnnamed(ASTContext &Ctx, QualType T) {
431 if (!Ctx.getLangOpts().CPlusPlus) return Cl::CL_PRValue;
446 static Cl::Kinds ClassifyMemberExpr(ASTContext &Ctx, const MemberExpr *E) {
447 if (E->getType() == Ctx.UnknownAnyTy)
452 if (!Ctx.getLangOpts().CPlusPlus) {
462 return ClassifyInternal(Ctx, Base);
488 return ClassifyInternal(Ctx, E->getBase());
503 static Cl::Kinds ClassifyBinaryOp(ASTContext &Ctx, const BinaryOperator *E) {
504 assert(Ctx.getLangOpts().CPlusPlus &&
515 return ClassifyInternal(Ctx, E->getRHS());
524 : ClassifyInternal(Ctx, E->getLHS());
538 static Cl::Kinds ClassifyConditional(ASTContext &Ctx, const Expr *True,
540 assert(Ctx.getLangOpts().CPlusPlus &&
554 return ClassifyInternal(Ctx, NonThrow);
565 Cl::Kinds LCl = ClassifyInternal(Ctx, True),
566 RCl = ClassifyInternal(Ctx, False);
570 static Cl::ModifiableType IsModifiable(ASTContext &Ctx, const Expr *E,
590 if (Ctx.getLangOpts().CPlusPlus && E->getType()->isFunctionType())
601 CanQualType CT = Ctx.getCanonicalType(E->getType());
618 !Ctx.getLangOpts().CPlusPlus) &&
628 Expr::LValueClassification Expr::ClassifyLValue(ASTContext &Ctx) const {
629 Classification VC = Classify(Ctx);
648 Expr::isModifiableLvalue(ASTContext &Ctx, SourceLocation *Loc) const {
650 Classification VC = ClassifyModifiable(Ctx, Loc ? *Loc : dummy);