Conversation
|
Добавил инициализацию массивов |
kaniandr
left a comment
There was a problem hiding this comment.
Добавил некоторые замечания и пояснения по методам и классам.
|
Удалил .h файл, избавился от функции, получающей строку по позиции в коде (вместо неё теперь используются методы getName() и getValue()). Изменил способ получения TransformationContext. Исправил объявления функций (добавил static) и структуры (перенёс в безымянный namespace). Проход теперь не создаёт указатели, а добавляет к имени массива квадратные скобки. |
|
Добавил возможность инициализации многомерных массивов. Развернётся в Инициализировать можно другим массивом, переменной или числом (каждый элемент приравнивается переменной/числу). |
|
Размеры массива для инициализации теперь определяются автоматически, если они не заданы вручную в клаузе. Теперь можно писать так: И это развернётся в |
|
Добавил возможность инициализировать многомерные динамические массивы (размеры массива в этом случае необходимо указывать в клаузе). |
kaniandr
left a comment
There was a problem hiding this comment.
1️⃣ Много замечаний по форматированию, я не стал отмечать все явно:
- именование переменных, типов, и т.д.,
- длина строк,
- лишние пустые сроки и пробелы.
Какие-то вещи можно исправить автоматически, как в студии так и в VSCode есть возможность автоматического форматирования стиля в соответсвии с форматом LLVM, имена это не исправит, но сдвиги и длины строк поправит.
2️⃣ Кроме форматирования - не хватает диагностических сообщений, как о некоретности задания директивы, так и об отказе преобразовывать по каким-то другим причинам. Нужно исходить из того, что пользователь может написать все что угдно и прежде чем преобразовывать, должна быть проверена допустимость преобразования. Нужно добавить диагностики (см. tsar/Support/Diagnostics.td) и сделать их выдачу, используя метод toDiag(...).
3️⃣ Давайте изменим синтаксис и название директивы:
#pragma spf transform initialize(I = J)
#pragma spf transform initialize(I = J, [5][6])| ModulePass *createClangLoopReverse(); | ||
| } | ||
| #endif//TSAR_CLANG_TRANSFORM_PASSES_H | ||
| #endif//TSAR_CLANG_TRANSFORM_PASSES_H No newline at end of file |
There was a problem hiding this comment.
Нужно убрать изменения строк, которые не были затронуты (символы завершения строки).
| ast = RecursiveASTVisitor::TraverseStmt(S); | ||
| isInPragma = false; | ||
|
|
||
| std::string txtStr, beforeFor, forBody, lval, rval, indeces; |
There was a problem hiding this comment.
Эти строки скорее всего маленькие, лучше использовать llvm::SmallString<...>, чтобы избежать лишних выделений памяти в куче. Например, llvm::SmallString<64> выделт строку на стеке длиной 64 символа, если не хватит, то неявно превратится в обычный string.
…std::string to llvm::SmallString in some places
No description provided.