Remove delayed typo expressions (#143423) · llvm/llvm-project@9eef4d1 (original) (raw)

`@@ -6713,10 +6713,6 @@ class Sema final : public SemaBase {

`

6713

6713

` /// this expression evaluation context.

`

6714

6714

` unsigned NumCleanupObjects;

`

6715

6715

``

6716

``

`-

/// The number of typos encountered during this expression evaluation

`

6717

``

`-

/// context (i.e. the number of TypoExprs created).

`

6718

``

`-

unsigned NumTypos;

`

6719

``

-

6720

6716

` MaybeODRUseExprSet SavedMaybeODRUseExprs;

`

6721

6717

``

6722

6718

` /// The lambdas that are present within this context, if it

`

`@@ -6813,7 +6809,7 @@ class Sema final : public SemaBase {

`

6813

6809

` Decl *ManglingContextDecl,

`

6814

6810

` ExpressionKind ExprContext)

`

6815

6811

` : Context(Context), ParentCleanup(ParentCleanup),

`

6816

``

`-

NumCleanupObjects(NumCleanupObjects), NumTypos(0),

`

``

6812

`+

NumCleanupObjects(NumCleanupObjects),

`

6817

6813

` ManglingContextDecl(ManglingContextDecl), ExprContext(ExprContext),

`

6818

6814

` InDiscardedStatement(false), InImmediateFunctionContext(false),

`

6819

6815

` InImmediateEscalatingFunctionContext(false) {}

`

`@@ -7146,8 +7142,7 @@ class Sema final : public SemaBase {

`

7146

7142

` CorrectionCandidateCallback &CCC,

`

7147

7143

` TemplateArgumentListInfo *ExplicitTemplateArgs = nullptr,

`

7148

7144

` ArrayRef<Expr *> Args = {},

`

7149

``

`-

DeclContext *LookupCtx = nullptr,

`

7150

``

`-

TypoExpr **Out = nullptr);

`

``

7145

`+

DeclContext *LookupCtx = nullptr);

`

7151

7146

``

7152

7147

` /// If \p D cannot be odr-used in the current expression evaluation context,

`

7153

7148

` /// return a reason explaining why. Otherwise, return NOUR_None.

`

`@@ -8748,40 +8743,6 @@ class Sema final : public SemaBase {

`

8748

8743

``

8749

8744

` ExprResult CheckUnevaluatedOperand(Expr *E);

`

8750

8745

``

8751

``

`-

/// Process any TypoExprs in the given Expr and its children,

`

8752

``

`-

/// generating diagnostics as appropriate and returning a new Expr if there

`

8753

``

`-

/// were typos that were all successfully corrected and ExprError if one or

`

8754

``

`-

/// more typos could not be corrected.

`

8755

``

`-

///

`

8756

``

`-

/// \param E The Expr to check for TypoExprs.

`

8757

``

`-

///

`

8758

``

`-

/// \param InitDecl A VarDecl to avoid because the Expr being corrected is its

`

8759

``

`-

/// initializer.

`

8760

``

`-

///

`

8761

``

`-

/// \param RecoverUncorrectedTypos If true, when typo correction fails, it

`

8762

``

`-

/// will rebuild the given Expr with all TypoExprs degraded to RecoveryExprs.

`

8763

``

`-

///

`

8764

``

`-

/// \param Filter A function applied to a newly rebuilt Expr to determine if

`

8765

``

`-

/// it is an acceptable/usable result from a single combination of typo

`

8766

``

`-

/// corrections. As long as the filter returns ExprError, different

`

8767

``

`-

/// combinations of corrections will be tried until all are exhausted.

`

8768

``

`-

ExprResult CorrectDelayedTyposInExpr(

`

8769

``

`-

Expr *E, VarDecl *InitDecl = nullptr,

`

8770

``

`-

bool RecoverUncorrectedTypos = false,

`

8771

``

`-

llvm::function_ref<ExprResult(Expr *)> Filter =

`

8772

``

`-

[](Expr *E) -> ExprResult { return E; });

`

8773

``

-

8774

``

`-

ExprResult CorrectDelayedTyposInExpr(

`

8775

``

`-

ExprResult ER, VarDecl *InitDecl = nullptr,

`

8776

``

`-

bool RecoverUncorrectedTypos = false,

`

8777

``

`-

llvm::function_ref<ExprResult(Expr *)> Filter =

`

8778

``

`-

[](Expr *E) -> ExprResult { return E; }) {

`

8779

``

`-

return ER.isInvalid()

`

8780

``

`-

? ER

`

8781

``

`-

: CorrectDelayedTyposInExpr(ER.get(), InitDecl,

`

8782

``

`-

RecoverUncorrectedTypos, Filter);

`

8783

``

`-

}

`

8784

``

-

8785

8746

` IfExistsResult

`

8786

8747

` CheckMicrosoftIfExistsSymbol(Scope *S, CXXScopeSpec &SS,

`

8787

8748

` const DeclarationNameInfo &TargetNameInfo);

`

`@@ -9283,12 +9244,6 @@ class Sema final : public SemaBase {

`

9283

9244

` /// for C++ records.

`

9284

9245

` llvm::FoldingSet SpecialMemberCache;

`

9285

9246

``

9286

``

`` -

/// Holds TypoExprs that are created from createDelayedTypo. This is used by

``

9287

``

`` -

/// TransformTypos in order to keep track of any TypoExprs that are created

``

9288

``

`-

/// recursively during typo correction and wipe them away if the correction

`

9289

``

`-

/// fails.

`

9290

``

`-

llvm::SmallVector<TypoExpr *, 2> TypoExprs;

`

9291

``

-

9292

9247

` enum class AcceptableKind { Visible, Reachable };

`

9293

9248

``

9294

9249

` // Members have to be NamespaceDecl* or TranslationUnitDecl*.

`

`@@ -9376,10 +9331,6 @@ class Sema final : public SemaBase {

`

9376

9331

` bool VolatileArg, bool RValueThis, bool ConstThis,

`

9377

9332

` bool VolatileThis);

`

9378

9333

``

9379

``

`-

typedef std::function<void(const TypoCorrection &)> TypoDiagnosticGenerator;

`

9380

``

`-

typedef std::function<ExprResult(Sema &, TypoExpr *, TypoCorrection)>

`

9381

``

`-

TypoRecoveryCallback;

`

9382

``

-

9383

9334

` RedeclarationKind forRedeclarationInCurContext() const;

`

9384

9335

``

9385

9336

` /// Look up a name, looking for a single declaration. Return

`

`@@ -9733,51 +9684,6 @@ class Sema final : public SemaBase {

`

9733

9684

` const ObjCObjectPointerType *OPT = nullptr,

`

9734

9685

` bool RecordFailure = true);

`

9735

9686

``

9736

``

`-

/// Try to "correct" a typo in the source code by finding

`

9737

``

`-

/// visible declarations whose names are similar to the name that was

`

9738

``

`-

/// present in the source code.

`

9739

``

`-

///

`

9740

``

`-

/// \param TypoName the \c DeclarationNameInfo structure that contains

`

9741

``

`-

/// the name that was present in the source code along with its location.

`

9742

``

`-

///

`

9743

``

`-

/// \param LookupKind the name-lookup criteria used to search for the name.

`

9744

``

`-

///

`

9745

``

`-

/// \param S the scope in which name lookup occurs.

`

9746

``

`-

///

`

9747

``

`-

/// \param SS the nested-name-specifier that precedes the name we're

`

9748

``

`-

/// looking for, if present.

`

9749

``

`-

///

`

9750

``

`-

/// \param CCC A CorrectionCandidateCallback object that provides further

`

9751

``

`-

/// validation of typo correction candidates. It also provides flags for

`

9752

``

`-

/// determining the set of keywords permitted.

`

9753

``

`-

///

`

9754

``

`-

/// \param TDG A TypoDiagnosticGenerator functor that will be used to print

`

9755

``

`-

/// diagnostics when the actual typo correction is attempted.

`

9756

``

`-

///

`

9757

``

`-

/// \param TRC A TypoRecoveryCallback functor that will be used to build an

`

9758

``

`-

/// Expr from a typo correction candidate.

`

9759

``

`-

///

`

9760

``

`-

/// \param MemberContext if non-NULL, the context in which to look for

`

9761

``

`-

/// a member access expression.

`

9762

``

`-

///

`

9763

``

`-

/// \param EnteringContext whether we're entering the context described by

`

9764

``

`-

/// the nested-name-specifier SS.

`

9765

``

`-

///

`

9766

``

`-

/// \param OPT when non-NULL, the search for visible declarations will

`

9767

``

`-

/// also walk the protocols in the qualified interfaces of \p OPT.

`

9768

``

`-

///

`

9769

``

`-

/// \returns a new \c TypoExpr that will later be replaced in the AST with an

`

9770

``

`-

/// Expr representing the result of performing typo correction, or nullptr if

`

9771

``

`-

/// typo correction is not possible. If nullptr is returned, no diagnostics

`

9772

``

`-

/// will be emitted and it is the responsibility of the caller to emit any

`

9773

``

`-

/// that are needed.

`

9774

``

`-

TypoExpr *CorrectTypoDelayed(

`

9775

``

`-

const DeclarationNameInfo &Typo, Sema::LookupNameKind LookupKind,

`

9776

``

`-

Scope *S, CXXScopeSpec *SS, CorrectionCandidateCallback &CCC,

`

9777

``

`-

TypoDiagnosticGenerator TDG, TypoRecoveryCallback TRC,

`

9778

``

`-

CorrectTypoKind Mode, DeclContext *MemberContext = nullptr,

`

9779

``

`-

bool EnteringContext = false, const ObjCObjectPointerType *OPT = nullptr);

`

9780

``

-

9781

9687

` /// Kinds of missing import. Note, the values of these enumerators correspond

`

9782

9688

` /// to %select values in diagnostics.

`

9783

9689

` enum class MissingImportKind {

`

`@@ -9796,20 +9702,6 @@ class Sema final : public SemaBase {

`

9796

9702

` SourceLocation DeclLoc, ArrayRef<Module *> Modules,

`

9797

9703

` MissingImportKind MIK, bool Recover);

`

9798

9704

``

9799

``

`-

struct TypoExprState {

`

9800

``

`-

std::unique_ptr Consumer;

`

9801

``

`-

TypoDiagnosticGenerator DiagHandler;

`

9802

``

`-

TypoRecoveryCallback RecoveryHandler;

`

9803

``

`-

TypoExprState();

`

9804

``

`-

TypoExprState(TypoExprState &&other) noexcept;

`

9805

``

`-

TypoExprState &operator=(TypoExprState &&other) noexcept;

`

9806

``

`-

};

`

9807

``

-

9808

``

`-

const TypoExprState &getTypoExprState(TypoExpr *TE) const;

`

9809

``

-

9810

``

`-

/// Clears the state of the given TypoExpr.

`

9811

``

`-

void clearDelayedTypo(TypoExpr *TE);

`

9812

``

-

9813

9705

` /// Called on #pragma clang __debug dump II

`

9814

9706

` void ActOnPragmaDump(Scope *S, SourceLocation Loc, IdentifierInfo *II);

`

9815

9707

``

`@@ -9832,23 +9724,15 @@ class Sema final : public SemaBase {

`

9832

9724

` /// Determine if we could use all the declarations in the module.

`

9833

9725

` bool isUsableModule(const Module *M);

`

9834

9726

``

9835

``

`-

/// Helper for CorrectTypo and CorrectTypoDelayed used to create and

`

9836

``

`-

/// populate a new TypoCorrectionConsumer. Returns nullptr if typo correction

`

9837

``

`-

/// should be skipped entirely.

`

``

9727

`+

/// Helper for CorrectTypo used to create and populate a new

`

``

9728

`+

/// TypoCorrectionConsumer. Returns nullptr if typo correction should be

`

``

9729

`+

/// skipped entirely.

`

9838

9730

` std::unique_ptr makeTypoCorrectionConsumer(

`

9839

9731

` const DeclarationNameInfo &Typo, Sema::LookupNameKind LookupKind,

`

9840

9732

` Scope *S, CXXScopeSpec *SS, CorrectionCandidateCallback &CCC,

`

9841

9733

` DeclContext *MemberContext, bool EnteringContext,

`

9842

9734

` const ObjCObjectPointerType *OPT, bool ErrorRecovery);

`

9843

9735

``

9844

``

`-

/// The set of unhandled TypoExprs and their associated state.

`

9845

``

`-

llvm::MapVector<TypoExpr *, TypoExprState> DelayedTypos;

`

9846

``

-

9847

``

`-

/// Creates a new TypoExpr AST node.

`

9848

``

`-

TypoExpr *createDelayedTypo(std::unique_ptr TCC,

`

9849

``

`-

TypoDiagnosticGenerator TDG,

`

9850

``

`-

TypoRecoveryCallback TRC, SourceLocation TypoLoc);

`

9851

``

-

9852

9736

` /// Cache for module units which is usable for current module.

`

9853

9737

` llvm::DenseSet<const Module *> UsableModuleUnitsCache;

`

9854

9738

``