Gibt es eine Möglichkeit, clang::SourceLocation
für jede #include
in Datei durch seine clang::FileID
oder clang::FileEntry
oder so etwas zu bekommen?Wie wird der Quellort von # mithilfe von clang libtooling ermittelt?
1
A
Antwort
2
Wie funktioniert die GetIncludedLoc-Funktion des Quellmanagers, die fileid als Parameter akzeptiert?
SourceManager.GetIncludedLoc (fileid)
0
@Hemant der Dank für Ihre Antwort, du hast Recht
Ich fand schon von mir, dass (in Klirren 3.8 es getIncludeLoc
genannt wird) aber vergessen haben, hier zu schreiben . Ich habe dies verwendet, um den Ort zu finden, nachdem alle #includes, wo ich meine eigenen setzen kann. Hier ist die Funktion (Sicher nicht der beste Weg) Ich habe für diese schrieb, hoffen, dass es jemand
SourceLocation getIncludeLocation(FileID fileID, SourceManager &sm, unsigned carriages) {
return SourceLocation();
set<unsigned> lines;
if (fileID.isInvalid())
for (auto it = sm.fileinfo_begin(); it != sm.fileinfo_end(); it++) {
SourceLocation includeLoc = sm.getIncludeLoc(sm.translateFile(it->first));
if (includeLoc.isValid() && sm.isInFileID(includeLoc, fileID)) {
lines.insert(sm.getSpellingLineNumber(includeLoc));
}
}
unsigned pos(0);
if (!lines.empty()) {
bool first = true;
for (unsigned line :lines) {
if (first)
first = false;
else if ((line - pos) > carriages)
break;
pos = line;
//cout << "Include line:" << pos << endl;
}
//cout << console_hline('-') << endl;
}
cout << sm.getFileEntryForID(fileID)->getName() << endl;
return sm.translateFileLineCol(sm.getFileEntryForID(fileID), ++pos, 1);
}
hilft auch über einige Informationen enthält von
Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, StringRef &Buffer)
und
Lexer::ComputePreamble(StringRef Buffer, const LangOptions &LangOpts, unsigned MaxLines = 0)
erhalten werden kann
Verwandte Themen
- 1. Verwendung der Standardbibliothek mit Clang und LibTooling
- 2. clang libtooling sicher einen neuen Header einfügen
- 3. Wie kann der Standarddrucker mithilfe von WPF ermittelt werden?
- 4. Warum endet der Quellort hier mit zwei Zeichen?
- 5. Clang mit LibTooling Rewriter, um neue Datei zu generieren?
- 6. Wie wird die Version von Gradle ermittelt?
- 7. Verwenden von Clang, um AST
- 8. Wie wird der USB-Host-Gerätetyp ermittelt?
- 9. Wie Taktfrequenz von Geräten ermittelt?
- 10. Wie wird der Standard-Ruby LOAD_PATH ermittelt?
- 11. Wie wird der Jitter in ggplot ermittelt?
- 12. Google CSE (Benutzerdefinierte Suchmaschine) - Wie kann der Suchbegriff, nach dem gesucht wird, ermittelt werden (mithilfe von jQuery)?
- 13. Wie wird der Währungswert mithilfe von JavaScript überprüft?
- 14. Ermittelt die Gesamtzahl der Drucker von printserver
- 15. Implementierung von frama-clang
- 16. Verifizieren von externen Daten mithilfe des Modells, das mit der Kreuzvalidierung ermittelt wurde
- 17. Wie wird die ständige Erreichbarkeit ermittelt?
- 18. Clang: schreibe den AST einer Funktion von der Originaldatei in eine neue Datei
- 19. Es wurde kein Quellort angegeben.
- 20. Wie wird der richtige Ort beim ersten Service ermittelt?
- 21. Wie mithilfe von Itamae
- 22. Angeben mehrerer Dateien beim Kompilieren von C++ nach LLVM IR mithilfe von clang
- 23. libtooling kann weder stddef.h noch andere Header finden
- 24. Wie funktioniert 's' uint24_t von clang? Kann ich es außerhalb von clang/LLVM verwenden?
- 25. Wie ermittelt man, welche Spalte aktualisiert wird?
- 26. Wie wird eine leere Zeile ermittelt?
- 27. Wie wird die globale Variable in der Blade-Vorlage ermittelt?
- 28. Bereitstellen von Anwendungen mithilfe von Marathon mithilfe von GIT-Repository
- 29. Wie wird der primäre Netzwerkadapter in den Ergebnissen von PdhExpandWildCardPath ermittelt?
- 30. Wie wird die Systemeigenschaft "webdriver.gecko.driver" mithilfe von Robot Framework festgelegt?
Danke, @Yuriy für zusätzliche Informationen. – Hemant