Как я могу сравнить два исходных местоположения в Clang?

похоже, это скорее проблема C ++, чем проблема Clang …

Я должен использовать C ++ для того, чтобы написать правило OCLint (статический анализатор кода).

Я хочу сравнить два объекта из библиотеки Clang, которые имеют тип «SourceLocation».

Этот тип предоставляет информацию о местоположении (в основном линии & столбец) объекта (оператор, объявление и т. д.) в коде.

По сути, я хотел бы знать, начинается ли утверждение A и заканчивается ли оно до или после утверждения B.

В псевдокоде это означает, что я хотел бы получить логическое значение из:

(stmt_A-> getLocBegin () < Например, stmt_B-> getLocBegin ()). Конечно, это не компилируется, потому что<msgstr «оператор не определен между двумя объектами типа» SourceLocation «.

Я нашел метод в документации 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 или просто, как получить этот логический выше.

2

Решение

Вот заключительный код, который показывает, как использовать 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);
2

Другие решения


По вопросам рекламы [email protected]