0

言語バックエンドで関数と型を段階的にビルドする必要がありますが、(ユーザー入力の問題が原因で) 関数と型が正常にビルドされない場合にメイン モジュールとコンテキストを汚染しないようにします。

これに関して先程質問させていただきます。これについて私が見ることができる1つの戦略は、すべてを一時モジュールで構築し、LLVMContext成功した後にのみメインコンテキストに移行することですが、現在のAPIでそれが可能かどうかはわかりません. たとえば、LLVM 機能の孤立した島を表すと想定されているため、異なるコンテキスト間でそのコンテンツを移行する方法を知りませんが、すべてを .bc に保存して別の場所にロードする代替手段が常にあるのでしょうか?

これを達成するために他にどのような戦略を提案しますか?

4

1 に答える 1

2

ソースと宛先の 2 つのモジュールがあると仮定すると、関数をソースから宛先にコピーできます。例として使用できる LLVM のコードは、LLVM リンカーの本体ですlib/linker/LinkModules.cpp

特に、そのファイルのメソッドlinkFunctionProtoとメソッドを見てください。関数定義をコピーし、重い作業にはユーティリティを使用します。linkFunctionBodylinkFunctionBodyllvm::CloneFunctionInto


についてはLLVMContext、複数の LLVM インスタンスを別々のスレッドで同時に実行する必要がある場合を除き、あまり気にせずgetGlobalContext()、コンテキストが必要なすべての場所で使用してください。詳細については、このドキュメント ページを参照してください。

于 2012-02-06T08:51:02.450 に答える