003 File Manager
Current Path:
/usr/src/contrib/llvm-project/clang/include/clang/Edit
usr
/
src
/
contrib
/
llvm-project
/
clang
/
include
/
clang
/
Edit
/
📁
..
📄
Commit.h
(5.21 KB)
📄
EditedSource.h
(3.49 KB)
📄
EditsReceiver.h
(980 B)
📄
FileOffset.h
(1.62 KB)
📄
Rewriters.h
(1.14 KB)
Editing: EditedSource.h
//===- EditedSource.h - Collection of source edits --------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_EDIT_EDITEDSOURCE_H #define LLVM_CLANG_EDIT_EDITEDSOURCE_H #include "clang/Basic/IdentifierTable.h" #include "clang/Basic/LLVM.h" #include "clang/Basic/SourceLocation.h" #include "clang/Edit/FileOffset.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/Allocator.h" #include <map> #include <tuple> #include <utility> namespace clang { class LangOptions; class PPConditionalDirectiveRecord; class SourceManager; namespace edit { class Commit; class EditsReceiver; class EditedSource { const SourceManager &SourceMgr; const LangOptions &LangOpts; const PPConditionalDirectiveRecord *PPRec; struct FileEdit { StringRef Text; unsigned RemoveLen = 0; FileEdit() = default; }; using FileEditsTy = std::map<FileOffset, FileEdit>; FileEditsTy FileEdits; struct MacroArgUse { IdentifierInfo *Identifier; SourceLocation ImmediateExpansionLoc; // Location of argument use inside the top-level macro SourceLocation UseLoc; bool operator==(const MacroArgUse &Other) const { return std::tie(Identifier, ImmediateExpansionLoc, UseLoc) == std::tie(Other.Identifier, Other.ImmediateExpansionLoc, Other.UseLoc); } }; llvm::DenseMap<unsigned, SmallVector<MacroArgUse, 2>> ExpansionToArgMap; SmallVector<std::pair<SourceLocation, MacroArgUse>, 2> CurrCommitMacroArgExps; IdentifierTable IdentTable; llvm::BumpPtrAllocator StrAlloc; public: EditedSource(const SourceManager &SM, const LangOptions &LangOpts, const PPConditionalDirectiveRecord *PPRec = nullptr) : SourceMgr(SM), LangOpts(LangOpts), PPRec(PPRec), IdentTable(LangOpts) {} const SourceManager &getSourceManager() const { return SourceMgr; } const LangOptions &getLangOpts() const { return LangOpts; } const PPConditionalDirectiveRecord *getPPCondDirectiveRecord() const { return PPRec; } bool canInsertInOffset(SourceLocation OrigLoc, FileOffset Offs); bool commit(const Commit &commit); void applyRewrites(EditsReceiver &receiver, bool adjustRemovals = true); void clearRewrites(); StringRef copyString(StringRef str) { return str.copy(StrAlloc); } StringRef copyString(const Twine &twine); private: bool commitInsert(SourceLocation OrigLoc, FileOffset Offs, StringRef text, bool beforePreviousInsertions); bool commitInsertFromRange(SourceLocation OrigLoc, FileOffset Offs, FileOffset InsertFromRangeOffs, unsigned Len, bool beforePreviousInsertions); void commitRemove(SourceLocation OrigLoc, FileOffset BeginOffs, unsigned Len); StringRef getSourceText(FileOffset BeginOffs, FileOffset EndOffs, bool &Invalid); FileEditsTy::iterator getActionForOffset(FileOffset Offs); void deconstructMacroArgLoc(SourceLocation Loc, SourceLocation &ExpansionLoc, MacroArgUse &ArgUse); void startingCommit(); void finishedCommit(); }; } // namespace edit } // namespace clang #endif // LLVM_CLANG_EDIT_EDITEDSOURCE_H
Upload File
Create Folder