Я пишу инструмент для перезаписи файлов C. Некоторые из этих файлов являются очень старыми устаревшими файлами, в которых в начале каждой функции объявляются неинициализированные локальные переменные. Мне нужно разработать средство сопоставления AST и соответствующий MatchCallback, чтобы найти позицию сразу после последней неинициализированной переменной в функции, где я могу разместить специальный код.
В качестве плюса, подробнее выше на сегодняшний день код C со смесью как инициализированных, так и неинициализированных переменных в начале functionDecl, я хотел бы найти позицию сразу после открытия '{' функции.
Пока что Я определил потенциальное средство сопоставления типов clang-запроса, которое может найти неинициализированные локальные переменные, следующие за функцией decl. Это должно стать хорошей отправной точкой для поиска решения.
Вот обработчик Entry, который я использую для обработки MatchCallback. Мне нужна помощь в методе run, чтобы найти место, куда я могу добавить свой собственный код.
class EntryHandler : public MatchFinder::MatchCallback {
public:
explicit EntryHandler(Rewriter& rewriter)
: mRewriter(rewriter)
{}
//! This is where the magic happens.
void run(const MatchFinder::MatchResult &result) override {
if (const auto* FD = result.Nodes.getNodeAs("func")) {
// This will be called for each function.
const auto functionName = FD->getNameInfo().getAsString();
const auto VD = result.Nodes.getNodeAs("uninitVar");
const auto uninitializedVariableName = VD->getNameAsString();
// I NEED HELP HERE
// Retrieve all uninitialized variables in the function.
//for (const auto& next : result.Nodes.getMap()) {
// const auto key = next.first;
//}
//const auto next = result.Nodes.getNodeAs("uninitVar");
//for (const auto *VD : Vars) {
// // This will be called for each variable declaration in the function.
// std::cout
Подробнее здесь: https://stackoverflow.com/questions/783 ... n-variable
LibTooling — последняя унитаризованная функциональная переменная сопоставителя AST ⇐ C++
Программы на C++. Форум разработчиков
1713915763
Anonymous
Я пишу инструмент для перезаписи файлов C. Некоторые из этих файлов являются очень старыми устаревшими файлами, в которых в начале каждой функции объявляются неинициализированные локальные переменные. Мне нужно разработать средство сопоставления AST и соответствующий MatchCallback, чтобы найти позицию сразу после последней неинициализированной переменной в функции, где я могу разместить специальный код.
В качестве плюса, подробнее выше на сегодняшний день код C со смесью как инициализированных, так и неинициализированных переменных в начале functionDecl, я хотел бы найти позицию сразу после открытия '{' функции.
Пока что Я определил потенциальное средство сопоставления типов clang-запроса, которое может найти неинициализированные локальные переменные, следующие за функцией decl. Это должно стать хорошей отправной точкой для поиска решения.
Вот обработчик Entry, который я использую для обработки MatchCallback. Мне нужна помощь в методе run, чтобы найти место, куда я могу добавить свой собственный код.
class EntryHandler : public MatchFinder::MatchCallback {
public:
explicit EntryHandler(Rewriter& rewriter)
: mRewriter(rewriter)
{}
//! This is where the magic happens.
void run(const MatchFinder::MatchResult &result) override {
if (const auto* FD = result.Nodes.getNodeAs("func")) {
// This will be called for each function.
const auto functionName = FD->getNameInfo().getAsString();
const auto VD = result.Nodes.getNodeAs("uninitVar");
const auto uninitializedVariableName = VD->getNameAsString();
// I NEED HELP HERE
// Retrieve all uninitialized variables in the function.
//for (const auto& next : result.Nodes.getMap()) {
// const auto key = next.first;
//}
//const auto next = result.Nodes.getNodeAs("uninitVar");
//for (const auto *VD : Vars) {
// // This will be called for each variable declaration in the function.
// std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78362099/libtooling-ast-matcher-last-unitialized-function-variable[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия