問題タブ [libtooling]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - clangで完全修飾Exprを出力するには?
私は、clang 8.0.1 でリフレクション ツールに取り組んでいます。そして今、すべての名前を完全修飾して Expr を出力する必要があります。
FullyQualifiedName ビットを true に設定して、組み込みの prettyPrint 関数を既に試しました。しかし、それでも間違った結果が得られます。
このコードの場合:
それは私に与えます
それ以外の
そして、
custom_attr の値として、それは私に与えます
(のみTransform::static_over
)
印刷用の私のコードは次のとおりです。
c++ - 解析関数のエラー Libtooling ASTFrontendAction を使用した規約の呼び出し
Windows SDK ヘッダーを解析するために Libtooling を使用していますが、慣例を呼び出す関数を取得する際に問題があります。libtooling は常に、Win32 API のデフォルトの呼び出し規約である呼び出し規約を__cdell
返しWINAPI
ます。__stdcall
入力例です
これは私の関数ビジター関数ですRecursiveASTVisitor
そして最後にfunc->dumpColor();
for input example の出力!
互換性の理由から、このオプションの有無にかかわらず実行しましたが、違いはまったくありません:-(
何か案が?
アップデート
#Clang のデフォルトのコンパイル設定が原因で、問題が見つかりました。これは 64 ビット (64 ビット ツールチェーン) であり__stdcall
、64 ビット モードでは動作しません 32 ビット バージョン (または -m32 オプション) を使用すると、正しく動作します
64ビットモードでなぜそれが起こるのか考えていますか?
c++ - clang Libtooling API を使用して、パラメーター (ParmVarDecl) またはフィールド (FieldDecl) の完全修飾型を出力します。
この質問に似ています:パラメーターのタイプ (ParmVarDecl) を clang APIで出力します。パラメーター/フィールドのタイプを文字列として取得したいのですが、重要なことに、タイプを完全に修飾する必要があります。
が欲しいのですがstd::vector<n::A>
、 ではありませんstd::vector<A>
。
私はこの解決策を試しました: http://clang-developers.42468.n3.nabble.com/Getting-the-fully-scoped-type-of-a-function-parameter-td4028221.html (getAsCXXRecordDecl() and getQualifiedNameAsString ())、どちらの場合もdecl.getType()->getAsCXXRecordDecl()
返さnullptr
れます。
更新: また、このソリューションは、clang で完全修飾された Expr を印刷する方法? 私が使用しているclang 7にはPrintCanonicalTypesがないため、役に立ちません。
私はclang 8にアップグレードして再試行する必要があると思います.
c++ - RTTI をオンにした Windows 用のビルド済み libTooling (LLVM/Clang ツール) ヘッダーと dll
ここでこの質問をするのは適切ではないかもしれませんが、他のどこにも答えが見つかりませんでした。
libTooling ライブラリを使用して、llvm ソース ツリーの外に static-analyzer を作成したいと考えています。公式の llvm サイトでは、clang コンパイラのビルド済みバイナリしか見つかりませんでしたが、他のツールについては何も見つかりませんでした。
RTTI=ON フラグを指定して自分自身をコンパイルできることは承知していますが、ローエンドのコンピューターでは 5 時間以上かかり、自分のコンピューターに llvm ソースのコピーを置きたくありません。
前もって感謝します。