Получение типов аргументов функции - PullRequest
1 голос
/ 27 ноября 2010

Предположим, у меня есть вызов функции, которая принимает переменное число аргументов в моем исходном коде. Я хочу провести некоторый статический анализ этого исходного кода, чтобы найти тип аргументов, которые фактически передаются функции. Например, если мой вызов функции -

foo (a, b, c)

Я хочу найти тип данных a, b и c и сохранить эту информацию.

Ответы [ 2 ]

1 голос
/ 23 июня 2011

Вы довольно хорошо должны выполнить часть программы parse-and-build-a-symbol-table при компиляции программы.

Что означает запуск препроцессора и лексизм.Это плохие новости.

Хорошая новость заключается в том, что вам не нужно делать большую часть трудных вещей.Нет необходимости создавать AST, каждую часть кода, кроме typedefs;определения структур, объединений и перечислений;объявления и определения переменных или функций;и анализ аргументов вызова функции может быть невозможным.

При дальнейшем размышлении, вызванном комментариями Криса : Вы должны иметь возможность анализировать типы выражений и обрабатывать-arg promotions, также.

Это все же меньший проект, чем написание всего компилятора, но к нему следует подумать.

0 голосов
/ 27 ноября 2010

Если это в C ++, вы можете собрать некоторые RTTI, используя typeid и т. Д.

http://en.wikipedia.org/wiki/Run-time_type_information

...