私は C API 経由で Clang を使用しようとしています。問題は、一部の型が記述どおりではなく、コンパイラ用として返されることです。たとえば、"Stream &" は "int &" になり、"byte" は "int.
いくつかのテスト ライブラリ:
// TODO make it a subclass of a generic Serial/Stream base class
class FirmataClass
{
public:
FirmataClass(Stream &s);
void setFirmwareNameAndVersion(const char *name, byte major, byte minor);
コードを使用してメソッド情報を取得しています。
void showMethodInfo(const CXIdxDeclInfo *info) {
int numArgs = clang_Cursor_getNumArguments(info->cursor);
fprintf(stderr, " %i args:\n", numArgs);
for (int i=0; i<numArgs; i++) {
CXCursor argCursor = clang_Cursor_getArgument(info->cursor, i);
CXString name = clang_getCursorDisplayName(argCursor);
CXString spelling = clang_getCursorSpelling(argCursor);
CXType type = clang_getCursorType(argCursor);
CXString typeSpelling = clang_getTypeSpelling(type);
CXCursorKind kind = clang_getCursorKind(argCursor);
fprintf(stderr, " kind=[%s (%i)], type=[%s], spelling=[%s]\n",
cursor_kinds[kind], kind, clang_getCString(typeSpelling),
clang_getCString(spelling));
clang_disposeString(name);
clang_disposeString(spelling);
clang_disposeString(typeSpelling);
}
// return type
CXType returnType = clang_getCursorResultType(info->cursor);
CXString returnTypeSpelling = clang_getTypeSpelling(returnType);
fprintf(stderr, " returns %s\n", clang_getCString(returnTypeSpelling));
clang_disposeString(returnTypeSpelling);
}
出力:
[105:10 4689] access=[CX_CXXPublic] kind=[CXIdxEntity_CXXInstanceMethod] (21) name=[setFirmwareNameAndVersion] is_container=[0] 3 つの引数:
kind=[CXCursor_ParmDecl (10)]、type=[const char *]、スペル=[name]
kind=[CXCursor_ParmDecl (10)]、type=[int]、spelling=[major]
kind=[CXCursor_ParmDecl (10)]、type=[int]、spelling=[minor] void を返す
byte
したがって、関数の引数は のように記述されていることがわかりますint
。どうすれば実際のスペルを取得できますか?