Как я могу сравнить два исходных местоположения в Clang?
Похоже, это скорее проблема C++, чем проблема Clang...
Я должен использовать C++, чтобы написать правило OCLint (статический анализатор кода).
Я хочу сравнить два объекта из библиотеки Clang, которые имеют тип "SourceLocation".
Этот тип предоставляет информацию о местоположении (в основном, строки и столбца) объекта (оператор, объявление и т. Д.) В коде.
В основном, я хотел бы знать, начинается ли утверждение A и заканчивается ли оно до или после утверждения B.
В псевдокоде это означает, что я хотел бы получить логическое значение из:
(stmt_A-> getLocBegin ()
Я нашел метод в документации Clang, но, поскольку я не частый пользователь C++, я не нашел способа его использовать, вот этот метод:
http://clang.llvm.org/doxygen/classclang_1_1BeforeThanCompare_3_01SourceLocation_01_4.html
clang::BeforeThanCompare<SourceLocation>::BeforeThanCompare (SourceManager &SM)
bool clang::BeforeThanCompare< SourceLocation >::operator()(SourceLocation LHS, SourceLocation RHS) const [inline]
Я не знаю, как использовать SourceManager или просто как получить этот логический выше.
1 ответ
Вот заключительный код, который показывает, как использовать SourceManager в библиотеке Clang и как сравнить два SourceLocation:
// Declaration of a SourceManager
SourceManager & loc_SM = _carrier->getSourceManager();
// Declaration of an object BeforeThanCompare<SourceLocation>
BeforeThanCompare<SourceLocation> isBefore(loc_SM); SourceLocation stmt_A, stmt_B;
// Get whether stmt_A is before or after Stmt_B
bool A_before_B = isBefore(stmt_A,stmt_B);