Уникальная идентификация узла определения функции - PullRequest
1 голос
/ 19 марта 2019

Существует ли способ уникальной идентификации узлов определения функции в CDT AST?

void g() { ... }

void f() {
    g();
}

Мне нужно сохранить узлы определения функции для f и g в некоторой структуре, а затем, когда я прихожу к узлу вызова функции для g, мне нужно проверить, соответствует ли этот узел определению функции узел для g.

Прямо сейчас я делаю это, сохраняя имя функции. Проблема в том, что я не могу правильно обработать следующий случай:

void f() {}

class F {
    void f() {}
}; 

1 Ответ

1 голос
/ 20 марта 2019

Я бы предложил следующее:

  • Разрешить имя для привязки функции через IASTName.resolveBinding()
  • Привязка будет экземпляром ICPPFunction, который расширяет ICPPBinding.(Я предполагаю, что это код C ++, поскольку вы упоминаете class.)
  • Используйте ICPPBinding.getQualifiedName() в качестве уникального идентификатора функции.В вашем примере две функции будут иметь разные квалифицированные имена, f против F::f.
...